面試:總結一下今年大廠java喜歡問的問題

小弟不才,3年java,今年面試面了一些大小廠,手裏offer也有一些,惋惜有一些大廠掛在了終面。html

下面先來講說大概你們都喜歡問些什麼:java

一面

一、老生常談的HashMap、ConcurrentHashMap及源碼

會問你hashMap中get、set方法是怎麼作的,紅黑樹瞭解嗎(結構,旋轉),併發狀況下會有什麼問題,若是想線程安全,用什麼,concurrentHashMap是怎麼作的,1.8和1.8以前有什麼區別。
mysql

推薦:閱讀hashMap和concurrentHashMap源碼面試

二、線程池

問你平時用過線程池嗎,若是是Executors知道其底層嗎,線程池的7個變量都是什麼意思和意義,阻塞隊列有幾種,分別有什麼用,拒絕策略有幾種。
redis

推薦:閱讀ThreadPoolExecutor源碼及瞭解隊列算法

三、類加載機制

編譯,裝載,連接,初始化 的過程,什麼是雙親委派模型,爲什麼要使用雙親委派模型,Tomcat使用的類加載機制是什麼spring

推薦:sql

四、阻塞IO/非阻塞IO

什麼是阻塞IO和非阻塞IO,瞭解NIO嗎,他是如何作到高效的,瞭解netty嗎數據庫

推薦:JDK10都發布了,nio你瞭解多少?編程

五、鎖

synchronize瞭解嗎,鎖的升級、使用瞭解嗎,底層是怎麼實現的(總線鎖),伴隨着鎖的確定還有volatile和lock、瞭解死鎖、活鎖、飢餓以及優先級嗎

推薦《java併發編程實戰》

六、volatile

volatile瞭解嗎,他和synchronize的區別,他是如何保證可見性的(內存屏障),爲何有了synchronize還要用volatile

六、CAS

CAS瞭解嗎,他的三個參數是什麼,他底層是怎麼作的(unsafe包下調用CPU指令cmpxchg)

七、AQS

知道讀寫鎖/可重入鎖/公平鎖嗎,是怎麼實現的,以及會手寫一些有關代碼or問你如何保證線程池中線程,一塊兒運行到某點,等待,再繼續一塊兒執行。

推薦《java併發編程實戰》、AbstractQueuedSynchronizer源碼

八、網絡TCP/IP

如何保證TCP可靠性:三次握手、斷線重發。說一下滑動窗口、如何防止DDOS攻擊。四次揮手爲何後面有個2*時間參數的等待時間。畫圖講解一些三次握手四次揮手,OSI七層模型與TCP/IP五層模型說一下

推薦:《圖解HTTP》《HTTP權威指南》

九、JVM

Jvm 內存模型(畫圖)(堆,方法區等,描述各個區域的做用),有遇到過OOM麼,什麼狀況,怎麼發現的,怎麼查緣由的? 如何定位一個CPU Load太高的Java線程?描述垃圾回收算法的主要流程(主要是CMS和G1)

推薦:內存分配策略:www.cnblogs.com/liangzh/arc… 、《深刻理解JVM》

十、MYSQL

mysql的引擎瞭解嗎,innodb myisam 區別是什麼,Mysql索引:B+tree、hash,有什麼區別,優勢與好處,B+tree聚簇索引和非聚簇索引的區別,ACID是什麼,事務隔離級別知道嗎,MVCC是怎麼保證的。如何實現主從分離(方法層面/sql語句層面)

十一、Spring

spring其實沒什麼太多問題,IOC、AOP的原理,filter和interceptor 區別

十二、寫代碼

①寫一個交替打印(wait/notify)
②寫一個線程安全的單例
③寫線程池及使用

1三、算法

總結一下幾道見到的題,都能在leetcode中找到,我也基本都作過:
leetcode283移動零
leetcode344翻轉字符串
leetcode746最小花費爬樓梯
leetcode485最大連續1的個數
leetcode448找到全部數組中消失的數字
leetcode191位1的個數
leetcode21合併兩個有序鏈表
leetcode172階乘後的零
leetcode62不一樣路徑
二叉樹的前中後序遍歷(遞歸/非遞歸)、層次遍歷、變異的層次遍歷這裏就不在裏面尋找了。
另外有些題,也是上面題的變種,相似N個有序鏈表合併、N個無序鏈表合併等等

PS:本人沒去過頭條,所以面試的都是一些簡單題,至於mid和hard的題,沒法提供太多,不過基本思路就是數組、字符串、樹、DP。至於深度廣度和圖,沒有遇到

二面

一、項目

重點、重點、重點。對於你項目中的介紹,能夠逐一發問,相似redis、MQ、方案、設計等待,都是能問到很深的點,因此你對於本身的項目須要瞭解的很深。

二、中間件

中間件分爲不少了,消息隊列應該算是一個重頭,kafka、rabbitMQ、rocketMQ、其中熟練掌握其中之一就行,其餘NoSQL數據庫,相似ES,MONGO,熟悉其原理,如ES的正排倒排索引結構,mapping設定等等

三、分佈式

分佈式的問題也比較麻煩,尤爲配合場景來問,如何保證最終一致性、如何保證分佈式事務(TCC)、分佈式鎖(redis、zk、數據庫)、冪等性、高可用

四、DDD

領域驅動設計,DDD+SOA的事件驅動,看看你有沒有什麼經驗or見解。

三面

一、場景

場景就看面試官是怎麼去問了
好比:
①設計一個RPC框架
②設計一個2W員工帶上下級關係,能查詢下屬有多少(MYSQL)
③設計一個很大的文件裏充滿IP,找出前5個出現頻率最高的IP(變異TOPK)
④若是你的項目再從新作一遍,你會怎麼幹

二、操做系統/發散思惟

我被問過:
①360開機時間是怎麼作出來的
②當按下開機鍵,發生了什麼
③想算出北京市有多少井蓋,怎麼思考
④一二三級緩存位置
⑤CAS、synchronize操做系統是怎麼作的


------------------------------------------ 持續更新ing----------------------------------------

另祝你們能找到心儀的工做~

歡迎你們補充說明,尤爲是場景和發散思惟、操做系統的問題和討論

相關文章
相關標籤/搜索