今天分享的是一位5年工作經(jīng)驗(yàn)的Java工程師在帝都的面試經(jīng)驗(yàn)總結(jié),看看這些互聯(lián)網(wǎng)公司都愛問些什么題,希望對(duì)大家的面試有指導(dǎo)意義。
從事Java開發(fā)也有5年經(jīng)驗(yàn)了,4月初自己的開啟面試經(jīng)歷之旅,前后20天左右,主面互聯(lián)網(wǎng)公司,一二線大公司或者是融資中的創(chuàng)業(yè)公司都面試過,拿了一些offer,其中包括奇虎360等
首先不同面試官面試風(fēng)格一定不同,這里是我總結(jié)這些天面試Java開發(fā)過程中的大多數(shù)問題,綜合分類有Java基礎(chǔ),框架,多線程等幾個(gè)模塊。
一名3年工作經(jīng)驗(yàn)的Java程序員應(yīng)該具備的技能,這可能是Java程序員們比較關(guān)心的內(nèi)容。我這里要說明一下,以下列舉的內(nèi)容不是都要會(huì)的東西----但是如果你掌握得越多,最終能得到的評(píng)價(jià)、拿到的薪水勢(shì)必也越高。
一、Java基礎(chǔ)
1.??? String類為什么是final的。
2.??? HashMap的源碼,實(shí)現(xiàn)原理,底層結(jié)構(gòu)。
3.??? 反射中,Class.forName和classloader的區(qū)別
4.??? session和cookie的區(qū)別和聯(lián)系,session的生命周期,多個(gè)服務(wù)部署時(shí)session管理。
5.??? Java中的隊(duì)列都有哪些,有什么區(qū)別。
6.??? Java的內(nèi)存模型以及GC算法
7.??? Java數(shù)組和鏈表兩種結(jié)構(gòu)的操作效率,在哪些情況下(從開頭開始,從結(jié)尾開始,從中間開始),哪些操作(插入,查找,刪除)的效率高
8.??? Java內(nèi)存泄露的問題調(diào)查定位:jmap,jstack的使用等等
二、多線程
多線程是Java中普遍認(rèn)為比較難的一塊。
多線程用好了可以有效提高cpu使用率, 提升整體系統(tǒng)效率, 特別是在有大量IO操作阻塞的情況下;這里整理的Java多線程面試題及答案你必須都要清楚。
但是它也是一柄雙刃劍, 如果用不好,系統(tǒng)非但提升不大,或者沒有提升,而且還會(huì)帶來多線程之間的調(diào)試時(shí)等問題。
在多線程中內(nèi)容有很多,只是簡(jiǎn)單說明一下Java中初步使用多線程需要掌握的知識(shí)點(diǎn),以后有機(jī)會(huì)單獨(dú)再詳細(xì)介紹一些高級(jí)特性的使用場(chǎng)景。在Java技術(shù)棧公眾號(hào)回復(fù)"多線程"可獲取多線程系列教程。
多線程的實(shí)現(xiàn)和啟動(dòng)
callable 與 runable 區(qū)別
syncrhoized ,reentrantLock 各自特點(diǎn)和比對(duì)
? 線程池
future 異步方式獲取執(zhí)行結(jié)果
? 內(nèi)存模型
? lock
三、JDK源碼
要想拿高工資,JDK源碼不可不讀。上面的內(nèi)容可能還和具體場(chǎng)景聯(lián)系起來,JDK源碼就是實(shí)打?qū)嵉乜茨闫綍r(shí)是不是愛鉆研了。過程中被問了不少JDK源碼的問題,其中最刁鉆的一個(gè)問了,String的hashCode()方法是怎么實(shí)現(xiàn)的,幸好平時(shí)String源代碼看得多,答了個(gè)大概。JDK源碼其實(shí)沒什么好總結(jié)的,純粹看個(gè)人,總結(jié)一下比較重要的源碼:
1.??? List、Map、Set實(shí)現(xiàn)類的源代碼
2.??? ReentrantLock、AQS的源代碼
3.??? AtomicInteger的實(shí)現(xiàn)原理,主要能說清楚CAS機(jī)制并且AtomicInteger是如何利用CAS機(jī)制實(shí)現(xiàn)的
4.??? 線程池的實(shí)現(xiàn)原理
5.??? Object類中的方法以及每個(gè)方法的作用
這些其實(shí)要求蠻高的,去年一整年基本把JDK中重要類的源代碼研究了個(gè)遍,真的花費(fèi)時(shí)間、花費(fèi)精力,當(dāng)然回頭看,是值得的----不僅僅是為了應(yīng)付面試。
四、框架
1.??? spring框架中需要引用哪些jar包,以及這些jar包的用途
2.??? srpingMVC的原理
3.??? springMVC注解的意思
4.??? spring中beanFactory和ApplicationContext的聯(lián)系和區(qū)別
5.??? spring注入的幾種方式
6.??? spring如何實(shí)現(xiàn)事物管理的
7.??? springIOC和AOP的原理
8.??? spring中循環(huán)注入的方式
五.JVM
出乎意料,Java虛擬機(jī)應(yīng)該是很重要的一塊內(nèi)容,結(jié)果在這幾家公司中被問到的概率幾乎為0。要知道,去年可是花了大量的時(shí)間去研究Java虛擬機(jī)的,光周志明老師的《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》,就讀了不下五遍。
言歸正傳,雖然Java虛擬機(jī)沒問到,但我覺得還是有必要研究的,就簡(jiǎn)單地列一個(gè)提綱吧,談?wù)凧ava虛擬機(jī)中比較重要的內(nèi)容:
1.??? Java虛擬機(jī)的內(nèi)存布局
2.??? GC算法及幾種垃圾收集器
3.??? 類加載機(jī)制,也就是雙親委派模型
4.??? Java內(nèi)存模型
5.??? happens-before規(guī)則
6.??? volatile關(guān)鍵字使用規(guī)則
也許面試無用,但在走向大牛的路上,不可不會(huì),這個(gè)是面試了幾家公司最后經(jīng)過整合寫出了這些面試題,面試就決定了你的薪資,一定要好好對(duì)待,這些問題可能不會(huì)問到,但是程序員技多不壓身,最后收到了百度的offer,薪資還不錯(cuò),把這些面試題分享出來希望能幫助那些打算跳槽的人~~
上面都是自己整理好的!我就把資料貢獻(xiàn)出來給有需要的人!順便求一波關(guān)注,哈哈~各位小伙伴關(guān)注我后私信【Java】就可以免費(fèi)領(lǐng)取噠