最近幾年公司的大小招聘丁侄,社招惯雳、校招都有參與,面試過許多大牛鸿摇,也遇到過很多職場(chǎng)小白石景。有十多年工作經(jīng)驗(yàn)的,也有剛剛畢業(yè)來面外包的拙吉,其中來面試的不乏一輪游的潮孽,看著有些同學(xué)基礎(chǔ)浮夸、做著重復(fù)的項(xiàng)目也沒有任何總結(jié)沉淀筷黔,自我介紹完全不知道在說啥等等諸如此類的現(xiàn)狀往史,想想自己也是從那個(gè)層次一步步走上路的,也經(jīng)歷了許多坎坷佛舱,覺得有必要把我的面試經(jīng)驗(yàn)跟大家分享一下椎例,希望能幫助大家找到一份滿意的工作。
本篇文章请祖,你將學(xué)到以下知識(shí):
Java基礎(chǔ)知識(shí)
Java核心知識(shí)
Java必問專題多線程鎖設(shè)計(jì)模式
Java框架SpringSpring Boot/Spring CloudMyBatis
分布式系統(tǒng)基礎(chǔ)中間件ZookeeperRedisActiveMQ
MySQL
JVM
如何準(zhǔn)備技術(shù)面試
由于篇幅有限订歪,這里只跟大家分享如何準(zhǔn)備技術(shù)面試,其余的知識(shí)點(diǎn)我已經(jīng)整理成文檔肆捕,有需要的朋友可以加q群:1103806531? 備注:簡(jiǎn)書? ?免費(fèi)領(lǐng)取~
如何準(zhǔn)備Java初級(jí)和高級(jí)的技術(shù)面試
一. 換位思考下刷晋,如果你是面試官,你會(huì)怎么做
1. 只能通過簡(jiǎn)歷和面試來衡量,別無他法眼虱。如果某位大牛確認(rèn)能力很行或舞,但面試時(shí)無法充分地自證能力,那對(duì)不起了蒙幻,過不了映凳,現(xiàn)實(shí)就這樣。
2. 如果面試官由于能力不行邮破,招進(jìn)來一個(gè)大忽悠诈豌,那估計(jì)會(huì)被領(lǐng)導(dǎo)罵。而且再也不會(huì)被讓面試了抒和,給領(lǐng)導(dǎo)的印象就不好了矫渔。所以不能評(píng)主觀印象,而是會(huì)有些客觀標(biāo)準(zhǔn)摧莽,具體而言庙洼,就是從多個(gè)方面問些題目,答好答壞就看候選人的镊辕。
其實(shí)一些題目都差不多油够,但不同能力的面試官問問題的切入點(diǎn)和漸進(jìn)程度會(huì)不同,而且有經(jīng)驗(yàn)的面試官會(huì)挖掘候選人的優(yōu)勢(shì)征懈,并能從候選人的說辭中判斷候選人是真懂還是忽悠石咬。
二. 架構(gòu)方面需要準(zhǔn)備的點(diǎn)
初級(jí)開發(fā)而言,需要讓面試官感覺出如下的要點(diǎn)卖哎。
1. 熟悉SSM架構(gòu)鬼悠,至少在項(xiàng)目里做過。
這個(gè)的說法是亏娜,介紹項(xiàng)目時(shí)焕窝,用一個(gè)業(yè)務(wù)流程來說spring mvc如何做的。
2. 知道Spring MVC中的細(xì)節(jié)维贺,比如@Autowired的用法它掂,如何把url映射到Controller上,ModelAndView對(duì)象返回的方式等幸缕。
3. 最好結(jié)合項(xiàng)目的用法群发,說下你是怎么用AOP,攔截器的发乔,比如說可以通過攔截器攔截非法請(qǐng)求,怎么用 AOP輸出日志等雪猪。
4. 關(guān)于ORM方面栏尚,不限用過哪種,但得知道一對(duì)一只恨,一多多译仗,多對(duì)多等的用法抬虽,以及cascade和inverse的用法。
5. 最好知道聲明式事務(wù)的做法纵菌。
如果你要應(yīng)聘高級(jí)開發(fā)阐污,那在上述基礎(chǔ)上,最好了解如下的知識(shí)點(diǎn):
Spring Bean的周期
最好能通過閱讀源代碼咱圆,說下IOC,AOP以及Spring MVC的工作流程
最好能結(jié)合反射笛辟,說下IOC等的實(shí)現(xiàn)原理
Spring Boot和Spring Cloud的一些知識(shí)點(diǎn)
三. 數(shù)據(jù)庫(kù)方面需要準(zhǔn)備的點(diǎn)
不少候選人會(huì)看很多SQL的技巧,比如select該怎么寫序苏,insert又該怎么寫手幢,但僅限于此,不會(huì)再準(zhǔn)備其它的忱详。
這樣就很吃虧围来,因?yàn)槊嬖嚬贂?huì)認(rèn)為,哪怕是初級(jí)開發(fā)匈睁,SQL語句也該會(huì)寫监透,所以這塊不會(huì)多問,而會(huì)問如下方面的問題航唆。
1. 索引怎么建的才漆,怎么用的?比如我建好了一個(gè)索引佛点,在where 語句里寫 name like '123%'會(huì)不會(huì)走索引醇滥,怎么情況下不該建索引,哪些語句不會(huì)走索引超营。
2. 除了索引之外鸳玩,你有過哪些SQL優(yōu)化方面的經(jīng)驗(yàn),比如分庫(kù)分表演闭,或通過執(zhí)行計(jì)劃查看SQL的優(yōu)化點(diǎn)不跟。這最好是能結(jié)合你做的項(xiàng)目實(shí)際來講。
這里米碰,我面試下來窝革,大概有70%的候選人只知道基本SQL的寫法,所以哪怕你是只有理論經(jīng)驗(yàn)吕座,會(huì)說一些優(yōu)化點(diǎn)虐译,也是非常有利的。
這塊對(duì)于高級(jí)開發(fā)而言吴趴,更得了解優(yōu)化方面的技能漆诽。
四. Java Core方面需要準(zhǔn)備的點(diǎn)
這塊是基礎(chǔ),其實(shí)很多問的問題,候選人一定會(huì)在項(xiàng)目里用到厢拭,但很少能說好說全兰英。
這塊主要會(huì)從集合,多線程供鸠,異常處理流程以及JVM虛擬機(jī)這些方面來問畦贸。
集合方面:
1. hashcode有沒有重寫過?在什么場(chǎng)景下需要重寫楞捂。如果可以薄坏,結(jié)合hash表的算法,說下hashmap的實(shí)現(xiàn)原理泡一。
對(duì)于高級(jí)開發(fā)而言颤殴,最好通過ConcurrentHashMap來說明下并發(fā)方面的底層實(shí)現(xiàn)代碼。
2. ArrayList鼻忠,LinkedList的差別涵但,比如一個(gè)基于數(shù)組,一個(gè)基于鏈表帖蔓,它們均是線程不安全的矮瘟,ArrayList的擴(kuò)容做法等。
對(duì)于高級(jí)而言塑娇,最好看下底層的代碼澈侠。
3. Set如何實(shí)現(xiàn)防重的,比如TreeSet和HashSet等埋酬。
4. Collection的一些方法哨啃,比如比較方法,包裝成線程安全的方法等写妥。
5. 可能有些面試官會(huì)問拳球,如何通過ArrayList實(shí)現(xiàn)隊(duì)列或堆棧,這個(gè)可以準(zhǔn)備下珍特。
多線程方面祝峻,其實(shí)在項(xiàng)目里不怎么會(huì)用到,但會(huì)問如下的問題:
1. synchronized和可重入鎖的差別扎筒,然后可能會(huì)順便問下信號(hào)量等防并發(fā)的機(jī)制莱找。
2. 在線程里該如何返回值,其實(shí)就是callable runnable 區(qū)別嗜桌。
3. 一定得通過ThreadLocal或volatile關(guān)鍵字奥溺,來說明線程的內(nèi)存模型。
4. 線程池方面症脂,會(huì)用谚赎,了解些常用參數(shù)
線程方面淫僻,可能問得比較多的就是并發(fā)機(jī)制诱篷,如果是高級(jí)開發(fā)壶唤,可能會(huì)問得深些。
虛擬機(jī)方面
1. 結(jié)構(gòu)圖和流程可以大致說下棕所。
2. 一定得了解針對(duì)堆的垃圾回收機(jī)制闸盔,具體而言,可以畫個(gè)圖琳省,說下年輕代年老代等迎吵。
3. 說下垃圾回收的流程,然后針對(duì)性地說下如何在代碼中優(yōu)化內(nèi)存性能针贬。
4. 最好說下如果出現(xiàn)了OOM異常击费,該怎么排查?如何看Dump文件桦他。
5. GC的一些概念蔫巩,比如強(qiáng)弱軟引用,finalize方法等快压,這些可以準(zhǔn)備下圆仔。
五. 我面試的感受&聽到哪類回答就能證明候選人比較資深
1. 大多數(shù)的候選人(大概7成)直接就來了,不做任何準(zhǔn)備蔫劣。要知道坪郭,面試和項(xiàng)目其實(shí)有些脫節(jié),哪怕項(xiàng)目做得再好脉幢,不做準(zhǔn)備照樣通不過歪沃,只要我確認(rèn)過這類人確實(shí)無法達(dá)標(biāo),我拒掉他們沒任何心理負(fù)擔(dān)嫌松,誰讓他們不準(zhǔn)備沪曙?
2. 還有些候選人態(tài)度很好,明顯準(zhǔn)備過豆瘫,但沒準(zhǔn)備到位珊蟀,比如像剛才所說,只準(zhǔn)備了算法外驱,或者在Java Core方面育灸,只看了集合方面的面試題。對(duì)于這些同學(xué)昵宇,哪怕是過了磅崭,我也會(huì)感到惋惜,畢竟如果面試好些的話瓦哎,工資也能更高些砸喻,至于哪些過不了的柔逼,我敢說,如果他們準(zhǔn)備過割岛,估計(jì)就不是這個(gè)結(jié)果了愉适。
其實(shí)我也知道,人無完人癣漆,哪怕我自己去面試维咸,也不可能面面俱到,所以惠爽,我不會(huì)要求候選人什么問題都能回答出癌蓖,甚至大多答錯(cuò)也沒關(guān)系,只要能證明自己的能力即可通過面試婚肆。
我也和不少面試官交流過租副,根據(jù)我們的經(jīng)驗(yàn),如果候選人能說出如下的知識(shí)點(diǎn)较性,即能證明他在這個(gè)領(lǐng)域比較資深了用僧,在這塊,我可能就不會(huì)過多地問問題了两残。
架構(gòu)方面
1. 能證明自己可以干活(這不難)永毅,同時(shí)能結(jié)合底層代碼說出IOC,AOP或Spring MVC的流程人弓,只要能說出一個(gè)即可沼死。或者能說出攔截器崔赌,Controller等的高級(jí)用法意蛀。
2. 能證明自己有Spring Boot或Spring Cloud的經(jīng)驗(yàn),比如能說出些Spring Cloud組件的用法健芭。
3. 如果能證明自己有分布式開發(fā)的經(jīng)驗(yàn)县钥,那最好了,其實(shí)這不難證明慈迈,比如能說出服務(wù)的包是放在多臺(tái)機(jī)器上(大多數(shù)公司其實(shí)都這樣)若贮,而且能說出如何部署,如何通過nginx等做到負(fù)載均衡痒留。
數(shù)據(jù)庫(kù)方面谴麦,其實(shí)講清楚一個(gè)問題即可:如何進(jìn)行SQL調(diào)優(yōu),比如通過索引伸头,看執(zhí)行計(jì)劃即可匾效,如果有其它的優(yōu)化點(diǎn),說清楚即可恤磷。
Java Core方面面哼,這里給出些訣竅:
1. 能結(jié)合ConcurrentHashMap的源代碼野宜,說出final,volatile,transient的用法,以及在其中如何用Lock對(duì)象防止寫并發(fā)魔策。
2. 結(jié)合一個(gè)項(xiàng)目實(shí)際匈子,說下設(shè)計(jì)模式的實(shí)踐。
3. 多線程方面代乃,能說出Lock或volatile等高級(jí)知識(shí)點(diǎn)的用法旬牲。
4. 這塊最取巧:說下GC的流程仿粹,以及如何通過日志和Dump文件排查OOM異常搁吓,如果再高級(jí)些的話,說下如何在代碼中優(yōu)化內(nèi)存代碼吭历。
訣竅點(diǎn)歸結(jié)成一個(gè):能結(jié)合源代碼或項(xiàng)目實(shí)際堕仔,說出些比較資深的問題。
最后
希望這篇文章對(duì)大家有幫助晌区!
我這邊也整理了一份 架構(gòu)師全套視頻教程 和關(guān)于java的系統(tǒng)化資料摩骨,包括java核心知識(shí)點(diǎn)、面試專題和20年最新的互聯(lián)網(wǎng)真題朗若、電子書等都有恼五。
有需要的朋友可以加q群:1103806531? 備注:簡(jiǎn)書? ?免費(fèi)領(lǐng)取~