首先不同面試官面試風(fēng)格一定不同歌溉,這里是我總結(jié)這些天面試Java開(kāi)發(fā)過(guò)程中的大多數(shù)問(wèn)題,綜合分類有Java基礎(chǔ)骑晶,框架痛垛,多線程,網(wǎng)絡(luò)通信桶蛔,數(shù)據(jù)庫(kù)以及設(shè)計(jì)模式匙头,算法等幾個(gè)模塊。
一名3年工作經(jīng)驗(yàn)的java程序員應(yīng)該具備哪些技能仔雷,這可能是Java程序員們比較關(guān)心的內(nèi)容蹂析。我這里要說(shuō)明一下,以下列舉的內(nèi)容不是都要會(huì)的東西----但是如果你掌握得越多碟婆,最終能得到的評(píng)價(jià)电抚、拿到的薪水勢(shì)必也越高。
一竖共、Java基礎(chǔ)
- String類為什么是final的喻频。
- HashMap的源碼,實(shí)現(xiàn)原理肘迎,底層結(jié)構(gòu)。
- 反射中锻煌,Class.forName和classloader的區(qū)別
- session和cookie的區(qū)別和聯(lián)系妓布,session的生命周期,多個(gè)服務(wù)部署時(shí)session管理宋梧。
- Java中的隊(duì)列都有哪些匣沼,有什么區(qū)別。
- Java的內(nèi)存模型以及GC算法
- Java數(shù)組和鏈表兩種結(jié)構(gòu)的操作效率捂龄,在哪些情況下(從開(kāi)頭開(kāi)始释涛,從結(jié)尾開(kāi)始,從中間開(kāi)始)倦沧,哪些操作(插入唇撬,查找,刪除)的效率高
- Java內(nèi)存泄露的問(wèn)題調(diào)查定位:jmap展融,jstack的使用等等
二窖认、多線程
這也是必問(wèn)的一塊了。因?yàn)槿旯ぷ鹘?jīng)驗(yàn),所以基本上不會(huì)再問(wèn)你怎么實(shí)現(xiàn)多線程了扑浸,會(huì)問(wèn)得深入一些比如說(shuō)Thread和Runnable的區(qū)別和聯(lián)系烧给、多次start一個(gè)線程會(huì)怎么樣、線程有哪些狀態(tài)喝噪。當(dāng)然這只是最基本的础嫡,出乎意料地,幾次面試幾乎都被同時(shí)問(wèn)到了一個(gè)問(wèn)題酝惧,問(wèn)法不盡相同榴鼎,總結(jié)起來(lái)是這么一個(gè)意思:
假如有Thread1、Thread2系奉、Thread3檬贰、Thread4四條線程分別統(tǒng)計(jì)C、D缺亮、E翁涤、F四個(gè)盤(pán)的大小,所有線程都統(tǒng)計(jì)完畢交給Thread5線程去做匯總萌踱,應(yīng)當(dāng)如何實(shí)現(xiàn)葵礼?
聰明的網(wǎng)友們對(duì)這個(gè)問(wèn)題是否有答案呢?不難并鸵,java.util.concurrent下就有現(xiàn)成的類可以使用鸳粉。
另外,線程池也是比較常問(wèn)的一塊园担,常用的線程池有幾種届谈?這幾種線程池之間有什么區(qū)別和聯(lián)系?線程池的實(shí)現(xiàn)原理是怎么樣的弯汰?實(shí)際一些的艰山,會(huì)給你一些具體的場(chǎng)景,讓你回答這種場(chǎng)景該使用什么樣的線程池比較合適咏闪。
最后曙搬,雖然這次面試問(wèn)得不多,但是多線程同步鸽嫂、鎖這塊也是重點(diǎn)纵装。
synchronized和ReentrantLock的區(qū)別、synchronized鎖普通方法和鎖靜態(tài)方法据某、死鎖的原理及排查方法等等橡娄,關(guān)于多線程,我在之前有些過(guò)文章總結(jié)過(guò)多線程癣籽,并發(fā)編程的面試問(wèn)題瀑踢!
java并發(fā)編程高級(jí)面試:并發(fā)隊(duì)列+可重入鎖+線程池等三扳还、IO
IO分為File IO和Socket IO,F(xiàn)ile IO基本上是不會(huì)問(wèn)的橱夭,問(wèn)也問(wèn)不出什么來(lái)氨距,平時(shí)會(huì)用就好了,另外記得File IO都是阻塞IO棘劣。
Socket IO是比較重要的一塊俏让,要搞懂的是阻塞/非阻塞的區(qū)別、同步/異步的區(qū)別茬暇,借此理解阻塞IO首昔、非阻塞IO、多路復(fù)用IO糙俗、異步IO這四種IO模型勒奇,Socket IO如何和這四種模型相關(guān)聯(lián)。
這是基本一些的巧骚,深入一些的話赊颠,就會(huì)問(wèn)NIO的原理、NIO屬于哪種IO模型劈彪、NIO的三大組成等等竣蹦,這有些難,當(dāng)時(shí)我也是研究了很久才搞懂NIO沧奴。提一句痘括,NIO并不是嚴(yán)格意義上的非阻塞IO而應(yīng)該屬于多路復(fù)用IO,面試回答的時(shí)候要注意這個(gè)細(xì)節(jié)滔吠,講到NIO會(huì)阻塞在Selector的select方法上會(huì)增加面試官對(duì)你的好感纲菌。
如果用過(guò)Netty,可能會(huì)問(wèn)一些Netty的東西疮绷,畢竟這個(gè)框架基本屬于當(dāng)前最好的NIO框架了(Mina其實(shí)也不錯(cuò)翰舌,不過(guò)總體來(lái)說(shuō)還是比不上Netty的),大多數(shù)互聯(lián)網(wǎng)公司也都在用Netty矗愧。四、JDK源碼
要想拿高工資郑原,JDK源碼不可不讀唉韭。上面的內(nèi)容可能還和具體場(chǎng)景聯(lián)系起來(lái),JDK源碼就是實(shí)打?qū)嵉乜茨闫綍r(shí)是不是愛(ài)鉆研了犯犁。過(guò)程中被問(wèn)了不少JDK源碼的問(wèn)題属愤,其中最刁鉆的一個(gè)問(wèn)了,String的hashCode()方法是怎么實(shí)現(xiàn)的酸役,幸好平時(shí)String源代碼看得多住诸,答了個(gè)大概驾胆。JDK源碼其實(shí)沒(méi)什么好總結(jié)的,純粹看個(gè)人贱呐,總結(jié)一下比較重要的源碼:
List丧诺、Map、Set實(shí)現(xiàn)類的源代碼
ReentrantLock奄薇、AQS的源代碼
AtomicInteger的實(shí)現(xiàn)原理驳阎,主要能說(shuō)清楚CAS機(jī)制并且AtomicInteger是如何利用CAS機(jī)制實(shí)現(xiàn)的
線程池的實(shí)現(xiàn)原理
Object類中的方法以及每個(gè)方法的作用
這些其實(shí)要求蠻高的,去年一整年基本把JDK中重要類的源代碼研究了個(gè)遍馁蒂,真的花費(fèi)時(shí)間呵晚、花費(fèi)精力,當(dāng)然回頭看沫屡,是值得的----不僅僅是為了應(yīng)付面試饵隙。
五、框架
- spring框架中需要引用哪些jar包沮脖,以及這些jar包的用途
- srpingMVC的原理
- springMVC注解的意思
- spring中beanFactory和ApplicationContext的聯(lián)系和區(qū)別
- spring注入的幾種方式
- spring如何實(shí)現(xiàn)事物管理的
- springIOC和AOP的原理
-
spring中循環(huán)注入的方式
六金矛、數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)十有八九也都會(huì)問(wèn)到。一些基本的像union和union all的區(qū)別倘潜、left join绷柒、幾種索引及其區(qū)別就不談了,比較重要的就是數(shù)據(jù)庫(kù)性能的優(yōu)化涮因,如果對(duì)于數(shù)據(jù)庫(kù)的性能優(yōu)化一竅不通废睦,那么有時(shí)間,還是建議你在面試前花一兩天專門(mén)把SQL基礎(chǔ)和SQL優(yōu)化的內(nèi)容準(zhǔn)備一下养泡。
不過(guò)數(shù)據(jù)庫(kù)倒是不用擔(dān)心嗜湃,一家公司往往有很多部門(mén),如果你對(duì)數(shù)據(jù)庫(kù)不熟悉而基本技術(shù)又非常好澜掩,九成都是會(huì)要你的购披,估計(jì)會(huì)先把你放到對(duì)數(shù)據(jù)庫(kù)使用不是要求非常高的部門(mén)鍛煉一下。七肩榕、數(shù)據(jù)結(jié)構(gòu)和算法分析
數(shù)據(jù)結(jié)構(gòu)和算法分析刚陡,對(duì)于一名程序員來(lái)說(shuō),會(huì)比不會(huì)好株汉,而且在工作中絕對(duì)能派上用場(chǎng)筐乳。數(shù)組、鏈表是基礎(chǔ)乔妈,棧和隊(duì)列深入一些但也不難蝙云,樹(shù)挺重要的,比較重要的樹(shù)AVL樹(shù)路召、紅黑樹(shù)勃刨,可以不了解它們的具體實(shí)現(xiàn)波材,但是要知道什么是二叉查找樹(shù)、什么是平衡樹(shù)身隐,AVL樹(shù)和紅黑樹(shù)的區(qū)別廷区。記得某次面試,某個(gè)面試官和我聊到了數(shù)據(jù)庫(kù)的索引抡医,他問(wèn)我:
你知道索引使用的是哪種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)嗎躲因?
答到用的Hash表吧,答錯(cuò)忌傻。他又問(wèn)大脉,你知道為什么要使用樹(shù)嗎?答到因?yàn)镠ash表可能會(huì)出現(xiàn)比較多的沖突水孩,在千萬(wàn)甚至是上億級(jí)別的數(shù)據(jù)面前镰矿,會(huì)大大增加查找的時(shí)間復(fù)雜度。而樹(shù)比較穩(wěn)定俘种,基本保證最多二三十次就能找到想要的數(shù)據(jù)秤标,對(duì)方說(shuō)不完全對(duì),最后我們還是交流了一下這個(gè)問(wèn)題宙刘,我也明白了為什么要使用樹(shù)苍姜。
八、JVM
出乎意料悬包,Java虛擬機(jī)應(yīng)該是很重要的一塊內(nèi)容衙猪,結(jié)果在這幾家公司中被問(wèn)到的概率幾乎為0。要知道布近,去年可是花了大量的時(shí)間去研究Java虛擬機(jī)的垫释,光周志明老師的《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》,就讀了不下五遍撑瞧。
言歸正傳棵譬,雖然Java虛擬機(jī)沒(méi)問(wèn)到,但我覺(jué)得還是有必要研究的预伺,就簡(jiǎn)單地列一個(gè)提綱吧订咸,談?wù)凧ava虛擬機(jī)中比較重要的內(nèi)容:
- Java虛擬機(jī)的內(nèi)存布局
- GC算法及幾種垃圾收集器
- 類加載機(jī)制,也就是雙親委派模型
- Java內(nèi)存模型
- happens-before規(guī)則
-
volatile關(guān)鍵字使用規(guī)則
也許面試無(wú)用酬诀,但在走向大牛的路上脏嚷,不可不會(huì),這個(gè)是面試了幾家公司最后經(jīng)過(guò)整合寫(xiě)出了這些面試題料滥,面試就決定了你的薪資然眼,一定要好好對(duì)待艾船,這些問(wèn)題可能不會(huì)問(wèn)到葵腹,但是程序員技多不壓身高每,最后收到了百度的offer,薪資還不錯(cuò)践宴,把這些面試題分享出來(lái)希望能幫助那些打算跳槽或轉(zhuǎn)行的人~~我的java編程技術(shù)交流群:1080621881 .需要的朋友可以自行來(lái)獲取學(xué)習(xí)鲸匿。