阿里、百度面試回來的Java程序員,這些面試題你們會嗎?

算算自己大概面試了近十家公司,也拿到了幾個Offer,現在面試告一段落,簡單總結下面試經驗。

我現在主要的方向是Java服務端開發,把遇到的問題和大家分享一下,也談談關於技術人員如何有方向的提高自己,做到有的放矢。

阿里、百度面試回來的Java程序員,這些面試題你們會嗎?

面試官自帶電腦,整個面試過程都在記錄,首先詳細詢問了最近一份工作項目的架構和工作內容,面試主要圍繞工作中用到的組件和中間件技術來擴展,考察掌握程度。

MySQL InnoDB存儲的文件結構

索引樹是如何維護的?

數據庫自增主鍵可能的問題

Redis的併發競爭問題如何解決

瞭解Redis事務的CAS操作嗎

分析線程池的實現原理和線程的調度過程

動態代理的幾種方式

Spring AOP與IOC的實現

為什麼CGlib方式可以對接口實現代理?RMI與代理模式

Dubbo的底層實現原理和機制

描述一個服務從發佈到被消費的詳細過程

算法方面考察了一個簡單的數組就地去重問題,用丟棄數組尾部元素的方式實現了。

二面被告知缺少金融支付背景,不過作為一名工作不到兩年的新人,我覺得被Pass主要原因應該是工作經驗比較少,教育背景也不太亮眼。

面試中的問題:

分佈式系統怎麼做服務治理

接口的冪等性的概念

Maven出現版本衝突如何解決

JVM垃圾回收機制,何時觸發MinorGC等操作

新生代和老生代的內存回收策略

Eden和Survivor的比例分配等

Synchronized和Lock的區別

阿里巴巴

阿里、百度面試回來的Java程序員,這些面試題你們會嗎?

阿里巴巴

阿里的面試安排的很快,這次止步二面,兩輪面試都是電面。聽朋友說阿里五輪面試,四輪技術一輪HR,技術面試是部門的幾個同事交叉面試,也有了瞭解。

一面總體上還是圍繞項目架構、Java基礎、JVM、併發編程、數據庫操作、中間件技術和Dubbo服務治理框架等展開,可能因為是雲安全部門,有一半時間在考察JVM,還提問了一些編譯優化的知識,一面結束後很快安排了二面,相對一面,二面的問題更深入,問題比較刨根問底,更加註重對一些技術細節的理解和把握。

比如數據庫操作,面試官會詳細的問你數據庫插入和刪除一條數據的過程在底層是如何執行的,項目裡配置了讀寫分離,也會比較深入的就實現方法和底層邏輯展開討論。

一些值得記錄的問題:

JVM內存分代,

Java 8的內存分代改進

深入分析了Classloader,雙親委派機制

JVM的編譯優化

對Java內存模型的理解,以及其在併發中的應用

指令重排序,內存柵欄等

HashMap的併發問題

瞭解LinkedHashMap的應用嗎

在工作中遇到過哪些設計模式,是如何應用的

由於阿里杭州目前社招都是P6起,自我感覺和崗位要求有差距,二面在電話裡和麵試官交流了,沒有再參加後面的面試。

阿里的崗位大都在杭州,面試結束特意關注了一下那邊的生活成本,目前杭州房子均價不到兩萬,相比浙江一些縣市的房價都破兩萬,杭州的房價應該比較正常。

如果拿到阿里和網易等幾家互聯網公司的高薪,買房和生活的確比北京要輕鬆很多,果斷決定再沉澱一段時間,兩年後P7再戰。

優酷土豆

阿里、百度面試回來的Java程序員,這些面試題你們會嗎?

優酷網

優酷的面試都是二對一,每輪面試兩個面試官,一面比較順利,主要是Java基礎,Spring原理,JavaNIO,併發和集合框架等,可能是因為視頻網站,優酷考察網絡原理的知識多,比如TCP/IP協議、長連接與短連接等。

一面提到了自己可能會在下半年學習大數據與機器學習相關的知識,二面就在這上面栽了跟頭,問了很多海量數據的問題。

TCP/IP協議

長連接與短連接

mapreduce過程

多路歸併的時間複雜度

海量url去重類問題

Java NIO使用

倒排索引的原理

對分詞技術的瞭解

面試中給了一個具體場景,考察對MapReduce過程的理解,比如Map階段和Reduce階段是如何進行的等,Reduce階段面試官希望分析給出一個多路歸併的時間複雜度,用外排序的知識簡單分析了一下,回答的不太好。

回來以後搜索了勝者樹和敗者樹的優化,發現這裡面的內容還挺多,深刻體會到有些知識點如果平時掌握的不夠全面深刻,很難信手拈來。

總結:

既然是社招,一定的工作經驗是必須的,三年以上最好,上面的幾個面試裡也體現了。所以如果想去大公司個人建議,在小公司積累2-3年經驗然後開始跳槽。

1.基礎方面我們就不講了,主要是針對Java語言,需要對集合類,併發包,IO/NIO,JVM,內存模型,泛型,異常,反射等都有比較深入的瞭解,最好是學習過部分源碼。

這些知識點都是相通的,在面試中也可以體現,比如集合類的HashMap,從源碼的角度,可以深入到哈希表的實現,拉鍊法以外的哈希碰撞解決方法,如何平衡內部數組保證哈希表的性能不會下降等;

從線程安全的角度可以擴展到HashTable、ConcurrentHashMap等其他的數據結構,可以比較兩種不同的加鎖方式,RetreenLock的實現和應用,繼續深入可以考察Java內存模型,Volitale原語,內存柵欄等;

橫向擴展可以考察有序的Map結構如TreeMap、LinkedHashMap,繼而考察紅黑樹,LRU緩存,HashMap的排序等知識。

Java方向的中高級職位,會比較重視對虛擬機的掌握,諸如類加載機制,內存模型等,這些在程序的優化和併發編程中都非常重要。

算法方面,基本的排序和查找算法,對遞歸,分治等思想的掌握。如果算法基礎不太好,推薦《編程珠璣》等,每一章都很經典。

另外計算機基礎,比如TCP/IP協議和操作系統的知識也是必備的,這些都是大學計算機專業的基礎課,也是做開發基本的素養。

2. 設計模式,造輪子的能力,各種緩存和數據庫應用,緩存,中間件技術,高併發和高可用的分佈式系統設計

大型互聯網公司每天要面對海量的請求,都會考察分佈式系統的架構和設計,如何構建高併發高可用的系統,另外因為用戶基數比較大,一個細微的優化可能會給帶來很大的收益,所以對一些技術棧的掌握要求都比較深入。

比如對MySQL數據庫,需要知道相關的配置和優化,業務上來以後如何分庫分表,如何合理的配置緩存,一個經驗豐富的服務端開發人員,也應該是一個稱職的DBA。

對常用的開發組件,比如中間件,RPC框架等都要有一定的瞭解,雖然工作中可能用不到我們自己造輪子,但是掌握原理才會得心應手。

這部分知識主要靠工作積累,推薦《大型網站技術架構與Java中間件實踐》,還有曾賢傑的《大型網站系統架構與實踐》,裡面對大型網站的演變,服務治理和中間件的使用做了很詳細的闡述。

作為業務開發人員,有必要了解壓力測試相關的指標,比如QPS,用戶平均等待時間等,可以幫助你更好的瞭解自己的系統。

3. 軟性指標,包括快速學習,良好的溝通能力,以及對相關行業的瞭解

公司招聘會比較看重一個人的學習能力,是不是值得培養,很多公司校招的畢業生薪資會倒掛工作多年的老員工,也是這樣。

像溝通習慣,邏輯分析能力,這些都屬於軟實力,短時間內很難提高,需要長期的養成和持續不斷的投入。

好多公司還會看重所在行業,雖然是做業務,但是對產品和行業的瞭解也很重要。

比如互聯網金融類公司的崗位,如果有過支付和銀行相關的系統開發經驗肯定會有加分,這點和每個人的長期規劃有關。

有了方向,接下來就是如何提高,說一些自己的感想。

很多時候,除非你的工作內容就是要應對高併發,海量用戶等場景,否則通過加班或者說重複性的工作,其實很難有提高。

技術人員最直接的提高方式,還是需要跳出來,在工作以外審視自己,比如廣泛的閱讀技術書籍,多去論壇和各路牛人交流,瞭解主流互聯網公司的技術棧,有針對性的去學習和了解。

同時也可以適當的瞭解一些產品或者設計的知識,以點帶面,複合人才肯定更受歡迎,對待面試,要像和妹子約會一樣,表現自己平常的一面就可以了。

代碼改變世界,要早日成為明日大牛,程序員肩上的擔子可是很重啊,共勉。

最後:

給大家免費分享資深架構師錄製的視頻:(Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構)等這些成為架構師必備的內容!

阿里、百度面試回來的Java程序員,這些面試題你們會嗎?

後臺私信回覆“架構” 就可以馬上免費獲得這些視頻資料!最後,做一個愛思考,懂思考,會思考的程序員!


分享到:


相關文章: