轉(zhuǎn)自:http://www.cnblogs.com/binyue/p/4015884.html
這個(gè)跳槽季大概面試了近十家公司诈豌,也拿到了幾個(gè)Offer庶灿,現(xiàn)在面試告一段落萨螺,簡單總結(jié)下面經(jīng)窄做,我現(xiàn)在主要的方向是Java服務(wù)端開發(fā),把遇到的問題和大家分享一下慰技,也談?wù)勱P(guān)于技術(shù)人員如何有方向的提高自己椭盏,做到有的放矢。
一吻商、面試遇到的問題
1.百度
百度最近真是炙手可熱掏颊,貼吧事件剛結(jié)束,醫(yī)療競價(jià)排名又鬧得沸沸揚(yáng)揚(yáng)艾帐,一些論壇上連帶程序員都開始招黑了乌叶,友誼的小船可是說翻就翻。
說回面試柒爸,百度面了兩次准浴,分別是百度糯米和金融事業(yè)部,百度目前只有這兩個(gè)部門的招聘崗位和我比較匹配捎稚。
面試都在西二旗的百度新總部乐横,園區(qū)還在施工,離地鐵也比較遠(yuǎn)今野,需要打車過去葡公。
面試官自帶電腦,整個(gè)面試過程都在記錄条霜,首先詳細(xì)詢問了最近一份工作項(xiàng)目的架構(gòu)和工作內(nèi)容催什,
面試主要圍繞工作中用到的組件和中間件技術(shù)來擴(kuò)展,考察掌握程度宰睡。
MySQL InnoDB存儲(chǔ)的文件結(jié)構(gòu)
索引樹是如何維護(hù)的蒲凶?
數(shù)據(jù)庫自增主鍵可能的問題
Redis的并發(fā)競爭問題如何解決
了解Redis事務(wù)的CAS操作嗎
分析線程池的實(shí)現(xiàn)原理和線程的調(diào)度過程
動(dòng)態(tài)代理的幾種方式
Spring AOP與IOC的實(shí)現(xiàn)
為什么CGlib方式可以對(duì)接口實(shí)現(xiàn)代理气筋?
RMI與代理模式
Dubbo的底層實(shí)現(xiàn)原理和機(jī)制,
描述一個(gè)服務(wù)從發(fā)布到被消費(fèi)的詳細(xì)過程
算法方面考察了一個(gè)簡單的數(shù)組就地去重問題豹爹,用丟棄數(shù)組尾部元素的方式實(shí)現(xiàn)了裆悄。
百度金融的面試安排在了周六,最近應(yīng)該在各種擴(kuò)張臂聋,各個(gè)招聘網(wǎng)站隨處可見招聘啟事。
面試官很贊或南,態(tài)度認(rèn)真孩等,有些問題沒有思路會(huì)給你提示,交流的不錯(cuò)采够。
面試中的問題:
- 分布式系統(tǒng)怎么做服務(wù)治理
- 接口的冪等性的概念
- Maven出現(xiàn)版本沖突如何解決
- JVM垃圾回收機(jī)制肄方,何時(shí)觸發(fā)MinorGC等操作
- 新生代和老生代的內(nèi)存回收策略
- Eden和Survivor的比例分配等
- Synchronized和Lock的區(qū)別
兩次面試,感覺百度的流程比較嚴(yán)格蹬癌,面試官挺不錯(cuò)的权她,簡單可信賴,雖然工作中一般都用谷歌逝薪,
想起一個(gè)段子隅要,哈哈。
有次面百度董济,我提到了一個(gè)比賽步清,面試官很感興趣,想搜一下虏肾,
于是先用百度搜了一下關(guān)鍵字廓啊,首屏沒有找到,面試官面不改色封豪,熟練的打開了谷歌輸入關(guān)鍵字谴轮,發(fā)現(xiàn)第一個(gè)就是官方網(wǎng)站。
2.阿里巴巴
內(nèi)推收到了阿里菜鳥和阿里云安全部門的面試吹埠,后來參加了阿里云的面試第步。阿里的面試安排的很快,幾輪面試都是電面藻雌。聽朋友說阿里五輪面試雌续,四輪技術(shù)一輪HR,技術(shù)面試是部門的幾個(gè)同事交叉面試胯杭,也有了了解驯杜。
一面總體上還是圍繞項(xiàng)目架構(gòu)、Java基礎(chǔ)做个、JVM鸽心、并發(fā)編程滚局、數(shù)據(jù)庫操作、中間件技術(shù)和Dubbo服務(wù)治理框架等展開顽频,可能因?yàn)槭窃瓢踩块T藤肢,有一半時(shí)間在考察JVM,還提問了一些編譯優(yōu)化的知識(shí)糯景,
一面結(jié)束后很快安排了二面嘁圈,相對(duì)一面,二面的問題更深入蟀淮,問題比較刨根問底最住,更加注重對(duì)一些技術(shù)細(xì)節(jié)的理解和把握。
比如數(shù)據(jù)庫操作怠惶,面試官會(huì)詳細(xì)的問你數(shù)據(jù)庫插入和刪除一條數(shù)據(jù)的過程在底層是如何執(zhí)行的涨缚,項(xiàng)目里配置了讀寫分離,也會(huì)比較深入的就實(shí)現(xiàn)方法和底層邏輯展開討論策治。
一些值得記錄的問題:
JVM內(nèi)存分代脓魏,
Java 8的內(nèi)存分代改進(jìn)
深入分析了Classloader,雙親委派機(jī)制
JVM的編譯優(yōu)化
對(duì)Java內(nèi)存模型的理解通惫,以及其在并發(fā)中的應(yīng)用
指令重排序茂翔,內(nèi)存柵欄等
HashMap的并發(fā)問題
了解LinkedHashMap的應(yīng)用嗎
在工作中遇到過哪些設(shè)計(jì)模式,是如何應(yīng)用的
兩次面試讽膏,阿里給我留下的印象很好檩电,面試官都是大牛,阿里的崗位大都在杭州府树,面試結(jié)束特意關(guān)注了一下那邊的生活成本俐末,
如果拿到阿里和網(wǎng)易等幾家互聯(lián)網(wǎng)公司的高薪,買房和生活的確比北京要輕松很多 奄侠。
3.優(yōu)酷土豆
優(yōu)酷的面試都是二對(duì)一卓箫,每輪面試兩個(gè)面試官,一面比較順利垄潮,主要是Java基礎(chǔ)烹卒,Spring原理,Java NIO弯洗,并發(fā)和集合框架等旅急,可能是因?yàn)橐曨l網(wǎng)站,優(yōu)酷考察網(wǎng)絡(luò)原理的知識(shí)多牡整,比如TCP/IP協(xié)議藐吮、長連接與短連接等。
一面提到了自己可能會(huì)在下半年學(xué)習(xí)大數(shù)據(jù)與機(jī)器學(xué)習(xí)相關(guān)的知識(shí),二面就問了很多海量數(shù)據(jù)的問題谣辞。
- TCP/IP協(xié)議
- 長連接與短連接
- mapreduce過程
- 多路歸并的時(shí)間復(fù)雜度
- 海量url去重類問題
- Java NIO使用
- 倒排索引的原理
- 對(duì)分詞技術(shù)的了解
面試中給了一個(gè)具體場景迫摔,考察對(duì)MapReduce過程的理解,比如Map階段和Reduce階段是如何進(jìn)行的等泥从,
Reduce階段面試官希望分析給出一個(gè)多路歸并的時(shí)間復(fù)雜度句占,用外排序的知識(shí)簡單分析了一下,回答的不太好躯嫉。
回來以后搜索了勝者樹和敗者樹的優(yōu)化纱烘,發(fā)現(xiàn)這里面的內(nèi)容還挺多,深刻體會(huì)到有些知識(shí)點(diǎn)如果平時(shí)掌握的不夠全面深刻和敬,很難信手拈來凹炸。
4.搜狐新聞
搜狐最近應(yīng)該是沒有招聘計(jì)劃,面試等待時(shí)間比較長昼弟。
做了筆試題,一面是個(gè)和我年紀(jì)相仿的面試官奕筐,針對(duì)筆試和簡歷提問了一些基礎(chǔ)問題舱痘,聊得挺投機(jī),二面技術(shù)經(jīng)理就比較偏架構(gòu)和中間件的應(yīng)用离赫,提問了項(xiàng)目芭逝,主要考察了服務(wù)治理和消息隊(duì)列等中間件使用的問題,
- 消息中間件如何解決消息丟失問題
- Dubbo的服務(wù)請(qǐng)求失敗怎么處理
- 重連機(jī)制會(huì)不會(huì)造成錯(cuò)誤
- 對(duì)分布式事務(wù)的理解
- 深入分析幾個(gè)設(shè)計(jì)模式
面試最后提問了一個(gè)不定長字符串轉(zhuǎn)為定長字符串的問題渊胸,剛剛面過優(yōu)酷旬盯,這個(gè)簡單的問題被我想復(fù)雜了,沒有Get到面試官的點(diǎn)翎猛,考慮了唯一性胖翰,性能等,扯了一大堆切厘。
也提醒一下大家萨咳,面試過程中要保持清醒,不要有思維定式疫稿,除非是底層研發(fā)崗位培他,社招對(duì)算法的考察不會(huì)特別難,用正常的思路去解決就可以遗座。
5.58趕集
58總部在798附近舀凛,全天有班車可以過去⊥窘總體上猛遍,感覺面試官的問題非常接地氣,
三輪技術(shù)面,大部分是實(shí)際場景的算法和系統(tǒng)設(shè)計(jì)類問題螃壤。
HTTP請(qǐng)求的報(bào)文格式
Spring的事務(wù)實(shí)現(xiàn)原理
實(shí)際場景問題抗果,大量用戶數(shù)據(jù)如何在內(nèi)存中排序和去重
緩存機(jī)器增刪如何對(duì)系統(tǒng)影響最小,一致性哈希的實(shí)現(xiàn)
Redis持久化的幾種方式
Redis的緩存失效策略
實(shí)際場景問題解決奸晴,典型的TOP K問題
實(shí)際場景問題冤馏,海量登錄日志如何排序和處理
SQL操作,主要是索引和聚合函數(shù)的應(yīng)用
三面面試官提問了一些優(yōu)點(diǎn)和缺點(diǎn)的自我評(píng)價(jià)類問題寄啼,簡單交流以后對(duì)我給出了一些中肯的建議逮光,非常感謝。
6.國美在線
國美在線面試最開始是部門經(jīng)理溝通墩划,后來做了一份筆試題涕刚,題目質(zhì)量不錯(cuò),主要考察Java基礎(chǔ)乙帮,數(shù)據(jù)庫杜漠,設(shè)計(jì)模式以及數(shù)據(jù)結(jié)構(gòu),要求寫出B-Tree的節(jié)點(diǎn)結(jié)構(gòu)察净,
算法題目是一道等概率抽獎(jiǎng)的題目驾茴,用蓄水池抽樣算法解決了。
- SQL語句編寫
- MySQL的幾種優(yōu)化
- Spring行級(jí)鎖
- Spring衍生的相關(guān)其他組件整理
- RMI的幾種協(xié)議和實(shí)現(xiàn)框架
- BTree相關(guān)的操作
- 數(shù)據(jù)庫鎖表的相關(guān)處理
- 考察跳臺(tái)階問題
和面試官的交流比較輕松氢卡,面試官提示我要加強(qiáng)數(shù)據(jù)庫操作的掌握锈至,另外面試過程中詢問了一些工作中用到框架和組件的版本等細(xì)節(jié)問題,平時(shí)沒太關(guān)注译秦,
后來思考了一下峡捡,對(duì)開源組件的應(yīng)用,版本的管理很重要筑悴,不注意可能會(huì)發(fā)生一些詭異的問題们拙。
7.去哪兒網(wǎng),口袋購物等公司
除了上面的公司雷猪,還參加過去哪兒網(wǎng)睛竣,口袋購物,鏈家等幾家公司的面試求摇。
去哪兒網(wǎng)中規(guī)中矩射沟,口袋購物的工作環(huán)境非常不錯(cuò)。鏈家網(wǎng)最近有新浪的鳥哥加入任技術(shù)總監(jiān)与境,在IT圈子里挺火验夯,面試了鏈家旗下的兩個(gè)租房部門,技術(shù)氛圍不錯(cuò)摔刁,前景看好挥转,很值得去的一家公司。
幾家公司的模式和問題都類似,注重對(duì)基礎(chǔ)和編程能力的考察绑谣,以及對(duì)分布式系統(tǒng)設(shè)計(jì)和架構(gòu)的理解党窜。
值得一提的是一家創(chuàng)業(yè)公司的面試,過程十分簡單粗暴借宵。沒有自我介紹幌衣,面試官看完簡歷就在白板上提了一個(gè)多線程調(diào)度問題,遞過來MAC就開始敲代碼+_+寫完以后我表示這題目意義不大壤玫,問了Redis豁护,要求十五分鐘實(shí)現(xiàn)一個(gè)LRUCache,再次現(xiàn)場寫代碼欲间。寫到一半面試官看沒問題就打斷了楚里,問對(duì)公司有什么想了解的,等了一會(huì)讓我回去了猎贴,就這么被Pass班缎,創(chuàng)業(yè)公司效率果然高(此處/dog臉)。
面試中要保持清醒她渴,比如被問到十萬個(gè)ip段查找這個(gè)問題吝梅,首先是一個(gè)典型的查找問題,明確了這個(gè)惹骂,就可以針對(duì)性的選擇相關(guān)的算法實(shí)現(xiàn),如二分查找做瞪、二叉查找樹等对粪。
推薦畫圖表達(dá)的方式。做過的項(xiàng)目架構(gòu)装蓬,各種框架和中間件的設(shè)計(jì)實(shí)現(xiàn)著拭,通過畫圖的方式都可以很好的闡述,可以隨身帶著紙和筆牍帚,面試本來就是一次很好的學(xué)習(xí)過程儡遮,一些問題也可以記錄下來。
一般來說暗赶,面試過程類似一個(gè)尋路算法鄙币,交流過程中如果提到了面試官感興趣的某一點(diǎn),就會(huì)就這個(gè)點(diǎn)展開蹂随,然后一直提出問題到你不能回答為止十嘿,或者你特別牛在這個(gè)領(lǐng)域直接秒殺面試官,這樣一條路線走通岳锁,再換下一條路線绩衷。
二、程序員如何用正確的姿勢提高技術(shù)水平
相比程序員,我更喜歡攻城獅這個(gè)名字咳燕,程序員在不了解這個(gè)行業(yè)的人眼里已經(jīng)被貼上了各種標(biāo)簽勿决,諸如各種宅,不修邊幅招盲,
其實(shí)作為聽了喬丹話的孩子低缩,寫代碼真的是高端大氣上檔次好嗎?
還是聊工(cheng)程(xu)獅(yuan)如何有針對(duì)性的提高技術(shù)水平宪肖,進(jìn)入目標(biāo)公司表制。
一般來說,主流互聯(lián)網(wǎng)公司都在用的就是業(yè)內(nèi)比較成熟和流行的技術(shù)控乾,最簡單的方式就是看招聘要求么介,
雖然大部分公司的Job Description都有抄襲的嫌疑,但是多比較幾個(gè)招聘蜕衡,還是可以了解主流互聯(lián)網(wǎng)公司的技術(shù)方向壤短。
還是拿熟悉的Java服務(wù)端業(yè)務(wù)開發(fā)來說明,博客園.NET方向的同學(xué)比較多慨仿,不過技術(shù)學(xué)習(xí)的過程都是相通的吧久脯,
從拉勾上找?guī)讉€(gè)招聘,
百度核心業(yè)務(wù)部門:
阿里巴巴:
美團(tuán)酒店事業(yè)部:
既然是社招镰吆,一定的工作經(jīng)驗(yàn)是必須的帘撰,三年以上最好,上面的幾個(gè)JD里也體現(xiàn)了万皿。
然后是技術(shù)方面摧找,結(jié)合自己的體會(huì),總結(jié)下面幾點(diǎn):
1.基礎(chǔ)知識(shí)必須要扎實(shí)牢硅,包括語言基礎(chǔ)蹬耘,計(jì)算機(jī)基礎(chǔ),算法和基本的Linux運(yùn)維等
針對(duì)Java語言减余,需要對(duì)集合類综苔,并發(fā)包,IO/NIO位岔,JVM如筛,內(nèi)存模型,泛型赃承,異常妙黍,反射等都有比較深入的了解,最好是學(xué)習(xí)過部分源碼瞧剖。
這些知識(shí)點(diǎn)都是相通的拭嫁,在面試中也可以體現(xiàn)可免,比如集合類的HashMap,從源碼的角度做粤,可以深入到哈希表的實(shí)現(xiàn)浇借,拉鏈法以外的哈希碰撞解決方法,如何平衡內(nèi)部數(shù)組保證哈希表的性能不會(huì)下降等怕品;從線程安全的角度可以擴(kuò)展到HashTable妇垢、ConcurrentHashMap等其他的數(shù)據(jù)結(jié)構(gòu),可以比較兩種不同的加鎖方式肉康,RetreenLock的實(shí)現(xiàn)和應(yīng)用闯估,繼續(xù)深入可以考察Java內(nèi)存模型,Volitale原語吼和,內(nèi)存柵欄等涨薪;橫向擴(kuò)展可以考察有序的Map結(jié)構(gòu)如TreeMap、LinkedHashMap炫乓,繼而考察紅黑樹刚夺,LRU緩存,HashMap的排序等知識(shí)末捣。
Java方向的中高級(jí)職位侠姑,會(huì)比較重視對(duì)虛擬機(jī)的掌握,諸如類加載機(jī)制箩做,內(nèi)存模型等莽红,這些在程序的優(yōu)化和并發(fā)編程中都非常重要。
算法方面邦邦,基本的排序和查找算法船老,對(duì)遞歸,分治等思想的掌握圃酵。如果算法基礎(chǔ)不太好,推薦《編程珠璣》等馍管,每一章都很經(jīng)典郭赐。
另外計(jì)算機(jī)基礎(chǔ),比如TCP/IP協(xié)議和操作系統(tǒng)的知識(shí)也是必備的确沸,這些都是大學(xué)計(jì)算機(jī)專業(yè)的基礎(chǔ)課捌锭,也是做開發(fā)基本的素養(yǎng)。
2.設(shè)計(jì)模式罗捎,造輪子的能力观谦,各種緩存和數(shù)據(jù)庫應(yīng)用,緩存桨菜,中間件技術(shù)豁状,高并發(fā)和高可用的分布式系統(tǒng)設(shè)計(jì)
大型互聯(lián)網(wǎng)公司每天要面對(duì)海量的請(qǐng)求捉偏,都會(huì)考察分布式系統(tǒng)的架構(gòu)和設(shè)計(jì),如何構(gòu)建高并發(fā)高可用的系統(tǒng)
另外因?yàn)橛脩艋鶖?shù)比較大泻红,一個(gè)細(xì)微的優(yōu)化可能會(huì)給帶來很大的收益夭禽,所以對(duì)一些技術(shù)棧的掌握要求都比較深入。
比如對(duì)MySQL數(shù)據(jù)庫谊路,需要知道相關(guān)的配置和優(yōu)化讹躯,業(yè)務(wù)上來以后如何分庫分表,如何合理的配置緩存缠劝,一個(gè)經(jīng)驗(yàn)豐富的服務(wù)端開發(fā)人員潮梯,也應(yīng)該是一個(gè)稱職的DBA。
對(duì)常用的開發(fā)組件惨恭,比如中間件秉馏,RPC框架等都要有一定的了解,雖然工作中可能用不到我們自己造輪子喉恋,但是掌握原理才會(huì)得心應(yīng)手沃饶。
這部分知識(shí)主要靠工作積累,推薦《大型網(wǎng)站技術(shù)架構(gòu)與Java中間件實(shí)踐》轻黑,還有曾賢杰的《大型網(wǎng)站系統(tǒng)架構(gòu)與實(shí)踐》糊肤,里面對(duì)大型網(wǎng)站的演變,服務(wù)治理和中間件的使用做了很詳細(xì)的闡述氓鄙。
作為業(yè)務(wù)開發(fā)人員馆揉,有必要了解壓力測試相關(guān)的指標(biāo),比如QPS抖拦,用戶平均等待時(shí)間等升酣,可以幫助你更好的了解自己的系統(tǒng)。
3.軟性指標(biāo)态罪,包括快速學(xué)習(xí)噩茄,良好的溝通能力,以及對(duì)相關(guān)行業(yè)的了解
公司招聘會(huì)比較看重一個(gè)人的學(xué)習(xí)能力复颈,是不是值得培養(yǎng)绩聘,很多公司校招的畢業(yè)生薪資會(huì)倒掛工作多年的老員工,也是這樣耗啦。
像溝通習(xí)慣凿菩,邏輯分析能力,這些都屬于軟實(shí)力帜讲,短時(shí)間內(nèi)很難提高衅谷,需要長期的養(yǎng)成和持續(xù)不斷的投入。
好多公司還會(huì)看重所在行業(yè)似将,雖然是做業(yè)務(wù)获黔,但是對(duì)產(chǎn)品和行業(yè)的了解也很重要蚀苛。
比如互聯(lián)網(wǎng)金融類公司的崗位,如果有過支付和銀行相關(guān)的系統(tǒng)開發(fā)經(jīng)驗(yàn)肯定會(huì)有加分肢执,這點(diǎn)和每個(gè)人的長期規(guī)劃有關(guān)枉阵。
有了方向,接下來就是如何提高预茄,說一些自己的感想兴溜。
很多時(shí)候,除非你的工作內(nèi)容就是要應(yīng)對(duì)高并發(fā)耻陕,海量用戶等場景拙徽,否則通過加班或者說重復(fù)性的工作,其實(shí)很難有提高诗宣。
技術(shù)人員最直接的提高方式膘怕,還是需要跳出來,在工作以外審視自己召庞,比如廣泛的閱讀技術(shù)書籍岛心,多去論壇和各路牛人交流, 了解主流互聯(lián)網(wǎng)公司的技術(shù)棧篮灼,有針對(duì)性的去學(xué)習(xí)和了解忘古。
同時(shí)也可以適當(dāng)?shù)牧私庖恍┊a(chǎn)品或者設(shè)計(jì)的知識(shí),以點(diǎn)帶面诅诱,復(fù)合人才肯定更受歡迎髓堪,
對(duì)待面試,要像和妹子約會(huì)一樣娘荡,表現(xiàn)自己平常的一面就可以了干旁。
代碼改變世界,要早日成為明日大牛炮沐,程序員肩上的擔(dān)子可是很重啊争群,共勉。