春節將至,在這里先祝福讀者朋友們,新春快樂。不知不覺2021年已經到來,我在現在這家公司也已經呆了兩年多,工資太低,不跳槽都要被應屆生倒掛,窮病犯了,於是我開始了面試之旅。這次面試比較多,不乏一些大廠,其中進入HR的有搜狐、愛奇藝、順豐、好未來、小米、滴滴、美團和阿里。最后去了其中一家。接下來陸陸續續寫幾篇博文詳細說下面試點,本篇文章作為總結開篇。
一、Java基礎
現在出去基本不會問int占幾個字節,接口和抽象類的區別這種問題了,會問到的基礎包括,synchronized的使用、底層原理、優化和與ReentrantLock的不同,ReentrantLock的底層原理,然后就是AQS的原理,公平鎖與非公平鎖的區別和使用,再聊到自旋鎖和樂觀鎖,CAS,以及Java在JUC包下CAS的使用。
然后是hashmap,現在很少問put和get的源碼過程了,但還是需要看,博主也是遇到過的,然后問下是不是線程安全的,不安全在哪,接着就是ConcurrentHashMap,說下1.7和1.8的區別,線程安全的原理,有時候也會從這里開始聊synchronized、CAS和volatile等。
線程池,最好看下源碼,我聽說有讓手寫線程池的,雖然我沒遇到過,然后就是最基本的幾個參數和作用,線程池執行過程,面試官會具體給幾個參數,然后問你此時線程池是如何執行的,這個時候一定要把面試官說的多少核心線程數之類的寫在紙上,別太自信記憶力。有些會着重問下定時線程池的實現和阻塞隊列等。
IO相關,這個知識點一點也不基礎,可以說很多,但是很多面試官只會問問BIO/NIO/AIO區別之類的,如果深挖還是有很多的,能多看點就多看點,萬一遇到不是那么水的面試官呢。
Java基礎基本上要90%以上的正確率,基礎不是和別的候選人拉開差距的地方,所以要盡量保證正確率。
二、JVM
常問的就是JVM的內存分區、內存模型、各個分區的功能、1.7.和1.8的區別,然后就是對象創建和垃圾回收,各種垃圾回收器和算法,垃圾回收有些面試官問的很淺,但實際上可以很深。然后就是JVM調優,以及內存溢出、內存泄漏和CPU飆升的問題和解決,別想着被就完了,面試官一般會讓你結合實際問題說下,直接背答案會被面試官打斷的,這是個加分項,有則加分,沒有不扣分(我自己覺得是)。
三、mysql
博主只用過mysql,所以面試就問的它。主要有:隔離級別,贓讀幻讀不可重復讀,b+樹,索引結構,hash結構的優缺點,聚簇索引和非聚簇索引,索引下推(這個只有阿里問過)和覆蓋索引,索引優化,分庫分表及其中間件的選擇使用和原理,如果可以的話,分庫分表最好結合項目說下,然后就是分庫分表后的分頁查詢,連表查詢等問題的解決,還有就是后期擴容如何進行等。MVCC、間隙鎖等,這個地方挺難得,只背答案只能得個基礎分,有些會會給出具體的sql讓你說,一定要聽好面試官給出的隔離級別,如果沒有,就要結合隔離界級別分開說明。
四、框架
首先就是Spring,現在回答問題不帶上源碼基本上都是錯誤答案,別問為什么,太內卷了。AOP和IOC說的時候就是背誦源碼,然后就是spring事務的實現,動態代理等還會問一些spring提供的擴展點等,如果你項目有些springboot的話,自動裝配原理基本跑不了了,答案就是背誦源碼全文,別加自己的理解,背源碼就行,有些還會順便問下springboot和spring的區別,如何選擇等。如果你寫了springcloud,也會問一些相關的問題,但是這里基本還沒有涉及到源碼的地方,都是問一些區別之類的,比如,為什么dubbo基本選用netty進行TCP通信,而springcloud用http,這個問題能說很多,知道多少說多少,還有就是zk 和eureka的區別,接着就是cap理論和base理論。
然后是mybatis,這個回答下運行原理就行,稍微結合下源碼說說,大差不差,很多面試官也記不住,就是那么一問,你說點別的他還聽不懂呢。其他的我看有些面試題也會問#和$的區別啥的,雖然我沒有遇到,但是還是要看下,找個培訓機構的面試內參之類的看看就行。
五、三方中間件及其他
redis、zk、dubbo、netty、mq、分布式事務、微服務、分布式,知識點太多了,能看到的面試題都背就完了,面試碰運氣,遇到不會的也不要慌,因知識點太多了,接下來會着重展開這些中間件寫一些博文。
總結
太難、太卷、靠運氣,這是博主本次面試的感悟。問的知識點比以前多了,也比以前深,變着花樣問你,有時候還要看看你和面試官有沒有緣分,最后工資還不一定給多少呢,但是抱怨歸抱怨,畢竟是別人面試我們,平常心吧。面試完一定要總結,把不會的記下來,查一查,多次問到的,也記下來,做到脫口而出。多上網找點面試題,有些是培訓機構的軟文,但是上面的面試題卻可以參考下,最后祝大家金三銀四跳槽順利。