目錄
前言:
2019年對於我而言是個非常有意義的一年,首先在今年的4月份,毅然離開了待了四年的公司。離開的原因也是有很多,更多的還是個人未來的發展問題。離職后,給自己安排了一個計划,在圖書館泡了一個月。一呢是為了對下份工作的一個面試准備,二呢也是借此機會把一些之前不懂的或者不深入的好好的學習了一遍。
給大家特別推薦一個學習圖譜,里面從java基礎到深入都總結歸納的很好,也是一個學習很不錯的學習路線。
https://github.com/xingshaocheng/architect-awesome
2019年絕對是一個大環境非常不好一年,很多公司都進行了大規模的裁員或者小公司的一個倒閉。因此求職者是非常多的。
所以誒,如果你現在在找工作可不要太樂觀!除非你的背景特別好~
聽hr講的是 一個求職崗位不需要一天就收到了幾百封簡歷,因此如果你現在正准備跳槽,需要最好心理准備,或者考慮再等等
同時給大家推薦【脈脈】俗稱程序員社區,里面的匿名區值得大家一起溝通交流。
正題:
從五月份開始面試,斷斷續續面試了有將近二十家(並不是沒有面試機會,是因為很多自己的事情需要處理哈),首先我目前做java做了六年,總結出這么多家問的問題都大同小異,也是看面試官的水平。有些面試官技術確實是很厲害的,就問你簡歷上的東西,從淺至深。也有些非常水的面試官,從他問的第一個問題,你就能看出這個面試官一個真實的水平。所以如果遇到了很水的面試官,就大膽說就行了。有可能面試官自己都不知道答案是什么。
最近都面試的公司具體都有哪些我就不說了,他們都有個共同點,就是java基礎和並發這塊都非常重視。
以下我是根據功能模塊進行划分的,但是面試官肯定不是這樣問的,大多數還是一問到底,會設計到多個模塊
下面的面試題會持續更新,因為時間都比較久了,很多問題一時半會想不起了,等想到的時候再進行補充~
一:jvm內存模型以及調優篇
-
jvm內存模型這塊有了解嗎?講講你的理解
-
堆外內存是存放在哪的,受不受jvm堆內存大小的限制
- cms和g1的區別
- gc的觸發機制是什么
- 新生代使用什么收集器
- 直接內存主要是存放什么的
- 各個收集算法的優缺點
- jvm是怎么確定一個對象是否可達
- java對象有哪幾種引用?每種引用的生命周期是什么樣的
- 如果線上出現了oom,你是怎么進行排查的(主要考察jps、jstack、jstat、jmap)
- 棧溢出(StackOverflowError)在什么情況下會出現,如果解決
- 使用什么命令調整棧內存的大小
二:java基礎篇
- HashMap的底層原理(1.8與1.7的區別必須要說出來)
- HashMap是線程不安全的,並發場景下會出現什么問題
- 遍歷HashMap的幾種方式,那種更快
- HashMap的擴容是如何實現的
- CounrrentHashmap的底層實現原理,是如果實現安全的
- 計算CounrrentHashmap的size底層是什么樣的
- HashTable與CounrrentHashmap的區別
- HashSet與Treeset的區別
- List如果實現排序
- String為什么是final的
- String在內存中是如何存放的
- 設計模式相關(重要,單例就算了...爛大街了)
- 靜態變量、靜態代碼塊、代碼塊、構造函數。在類加載時,他們的執行順序
- volatile 變量是什么?volatile 變量和 atomic 變量有什么不同
- switch能作用在string和long上嗎
- hashmap、treemap的區別
- set的元素是不能重復的,那么是怎么判斷一個元素是否重復呢?
- io與nio的區別是什么
- 簡述hash的一致性
三:多線程並發篇
- java中都有什么鎖
- synchronize與Lock的區別
- synchronize與Lock誰更快?
- 講講ReentrantLock這塊你的理解
- 什么是可重入鎖?有什么前提條件
- Lock的鎖是怎么實現的
- Lock的公平和非公平
- 多線程有幾種創建方式
- java的線程池有幾種
- 線程池的execute和submit的區別
- 線程池有哪幾個參數,每個參數代表什么意思
- 線程池的拒絕策略有哪些,分別是什么
- 線程池可以設置哪幾個阻塞隊列
- 線程池底層是如何實現的,線程執行完畢是如何喚醒等待線程的
- AQS是如何保證線程安全的
- 談談你對Threadlocal的理解
- Threadlocal使用完之后需要清理嗎?為什么
- 多線程之間如果保證數據的共享以及一致性
- CAS是什么、會出現ABA的問題,如何解決
- shutdown和shutdown的區別
- 多線程中,run和start的區別
- Semaphore信號量的原理
- countlatchdown使用過沒,在什么情況下使用
四:mysql以及nosql相關
- mysql中都有什么鎖
- 什么時候會使用到行鎖、什么時候使用到表鎖
- mysql索引的數據結構是什么樣的?
- 如果讓你設計一個表,你會怎么設計?注重哪幾個點
- myisam和innodb的區別
- 聚合索引與非聚合索引的區別
- 都做過什么sql優化
- mysql可以不設置索引嗎?為什么
- mysql的特性都有哪些
- mysql的隔離級別都有哪些、默認是哪個
- ACID是什么
- 可重復讀會導致幻讀嗎
- redis都支持什么數據類型
- redis有哪幾種持久化方式,都有什么優缺點
- redis的哨兵與集群模式你來講講
- 用過分布式鎖嗎?他是怎么實現的
- 什么是緩存穿透、緩存雪崩、如何避免
- redis有哪幾種淘汰策略
- reids過期數據,是如何刪除的
- redis是單線程的,為什么還那么快
- redis是如何存儲數據的、說說你對哈希槽的理解
- redis和mongodb的區別
- mongodb也有索引,他的底層數據結構是什么樣的
- mongodb為何那么快
- mongo的分片是如何實現的
五:消息隊列篇
- rabbitmq如果保證了消息的可靠性
- 如何保證生產者把消息發送到rabbitmq
- 如果保證消費者消費了消息
- 如何避免消息重新投遞或重復消費
- 使用mq的好處
- rabbitmq消息是如何進行分發的
- rabbitmq如果做失敗重試的
- rabbitmq死信的理解
- 探探你對kafka的理解
- kafka如果保證了消息的可靠性
- kafka數據傳輸的事物定義有哪幾種
- kafka的消息是有序的嗎
- kafka是如何消費消息的
- 如果kafka中一個broker崩掉了,內部都做了什么是事
- kafka如何保證了消息的不丟失
六:場景篇
- 有一個高並發搶購活動,你如何對這個進行系統設計
- 有個100G的ip登陸信息,現在只有十台台服務器4G的,需找出ip訪問最多前十名的ip
- 現在生產出現了oom,你是如果進行排查的
- 經分析,線上有線程出現了死鎖,請問你如何進行排查
- 現mysql經常報錯死鎖超時異常,問你如何進行解決
- 現有一條sql,每次執行耗時500ms,我需要將這個耗時保證在100ms以下,你會從哪幾個緯度去分析