阿里中間件Java崗4輪技術面面經

作者:碰碰豬

來源:牛客網

從7月5號第一次面試到8月6號HR面,最後8月24號收到錄用意向書,將近兩個月的時間。很高興將我的經驗分享給大家。

一面(一面問了大概50分鐘)

問天池比賽

問項目,問項目使用的技術,項目中的併發操作等

順勢順勢問我Java的鎖,我介紹了對象鎖,隊列同步器。問我線程怎麼得到鎖,我介紹了隊列同步器獲取鎖的方法,應該再說對象鎖的獲取方式,現在想來,我當時沒理解過來,忘了對象鎖頭。

問我接口和抽象類的異同,抽象類有沒有構造,我說有,但不確定。面試官還是很親和的,接着問我父類沒有默認構造器,子類構造能否不顯示調用,我說不能,因爲一定會調用默認構造,但父類沒有。這時他再問我,抽象類要是沒有構造器,行不行,我說不行,子類不能隱式構造了,面試官非常循循善誘,我很感謝他。

問我jvm內存佈局,我說的很清楚,包括1.8的方法區的改進。問我gc,回答的還行,但沒有說g1,應該加上去的。

問我spring的框架,我說了beanfactory和appcationcontext架構。問我beanfactory和factorybean,我說反了。問我spring mvc的架構。

問我還接觸過哪些開源,我說maven和netty,Hadoop,spark等。

筆試1

一面之後,面試官讓我做了一套卷子,不是統一的,應該是面試官自己出的題,好多是截圖來的哈哈。分爲選擇題和問答題。選擇題主要是JAVA基礎和JVM調優。JVM調優我不是很瞭解,JAVA基礎問的也是挺難的。問答題比較普通,我記不清了。。

二面

二面問了1個小時左右

問我天池比賽等等不表。

問設計模式,讓我說五種設計模式。然後問我單例模式的實現方式,加鎖實現的細節(DLC)。

問我分佈式下,多臺機器統一id問題。我說zookeeper實現,本地機器碼+中間件隊列實現。然後問我有沒有可以不用中間件隊列,我說可以本地機器碼+時間序列。問我同一臺機器多個進程怎麼辦,我說本地機器碼+本地同步遞增id。

問我遞增id實現。我說用信號量。問我Atomic行不行,我說可以,CAS。問我CAS詳細,問我1.8有沒有別的方法,我不清楚。問我樂觀鎖悲觀鎖區別,我解釋並說java原生鎖性能就很好,解釋了原生鎖的膨脹。問我兩者的使用場景不同,我說主要看衝突多不多。

問我開源框架學習。我說spring和netty,以及閱讀許多java源碼。

問我zookeeper主機設置技巧,問我其事務實現,我說單數主機設置,master-slaver模型,統一事務時使用Raft算法,是paxos的特殊化實現。問我paxos詳細步驟,我介紹了統一步驟。問我什麼情況下提議者可以進入第二步,我說更大的,並且說了paxos的不足,實際工程中使用的改進multi-paxos等。

問我單機兩進程,B必須在A結束後才能進行業務,怎麼同步。我說zookeeper臨時節點;我說信號量,問我實現,不清楚;我說讓A佔用某一文件句柄,B檢查該文件的使用者,問我linux是怎麼實現的,我不清楚;我說用socket模型,讓Abind在某端口,當A結束時,會釋放該端口,並且異常下,OS也會關閉該端口,缺點是有延遲。問我延遲多少,我說應該是以s爲單位,具體不清楚。問我在哪兒修改,我說不知道,我linux使用不多。

最後,介紹了這個部門主要在深圳,問我意願,我說no care。問我爲什麼選中間件,我說,因爲cool,中國頂尖。

我問面試官對我的學習建議,讓我多看開源框架,多看實際工程結構。我問面試評價,能否過,他說等通知。

三面

三面的面試官和我說,是二面的面試官請他來問下我的算法部分,因爲我的研究生的研究的主要是優化算法,所以請他來考察下。沒有自我介紹,直接是詢問我的算法。

中午喫飯前打來的電話,我第一個沒接到,第二個才接到。

從面試的聲音聽,面我的幾個面試官都挺年輕的,態度也很好,我的感覺很好。

沒有自我介紹,面試官直接說,是來考察我算法這塊的。一開始我還以爲是數據結構與算法這類,心裏還有點慌,後來發現是針對我簡歷上吹的智能優化算法來問的,就沒那麼緊張了。

問我對一個問題,如何選擇算法。我說一定要先分析問題的特點,找到問題解的特性,比如分佈特性,聚集特性等,然後,選擇適合的算法來求解。並且,有條件的情況下,多做對比實驗來驗證自己的方法優劣。

問我遺傳算法的介紹,我用比喻介紹了遺傳算法。問我遺傳算法的關鍵步驟,我說一是交叉變異的算子設計,這影響到解的完備性;二是選擇規則的確定,這也影響到進化的快慢等。

問我遺傳算法的不足,我說瞭解的局部性,和無法保證最優解。問我解決辦法,我說了幾種常用的擁擠度,分級選擇,增大隨機性等方法來保證解的多樣性。

問我有沒有使用機器學習等,我說,正在目前的遺傳算法中加入機器學習的部分,對每代進行數據分析云云。問我有沒有使用深度學習,我說目前我們這個領域還沒有相關論文,我們也是在初步的嘗試云云。

問我以後想偏向算法還是開發,我說我個人更喜歡開發,因此也參加了很多比賽。

最後說,看我的筆試,如果可以就繼續下一輪。

筆試2

三面後,面試官說我沒有筆試,我說筆試了=。= 後來面試官又說,沒有編程筆試,需要補一個。於是給我出了一個24H編程的題,不難,在此把題呈上。

題目:有10個文件,每個文件有1000萬行,文件內容的每一行爲一個整型數字;需要,寫一個程序,將所有數字排序,分爲10個文件輸出,如0號文件包含前1000萬個數字,1號文件文件包含1千萬-2千萬之間的數字,依次類推。

限制:如果使用java,-Xmx需要設置爲32MB;其它語言也需限制內存爲32MB。

要求:正確輸出 使用多線程加分

編寫時長:24 小時

我主要使用了分而治之,多線程處理的方式。注意下同步即可。

交叉面

交叉面,達摩院人工智能實驗室的。

自我介紹

問我天池比賽,問我項目,問我研究方向。

問我平時學習方式,最近學習的內 容。

問AQS,問AQS實現原理。問AQS在閉鎖,重入鎖中的應用。

問自動化爲啥這麼多人搞計算機=。=

讓我多推薦人去他們AI實驗室~

小結

阿里面試給我最大的感覺就是面的輪數多,另外基礎也問的很多。因爲面的是中間件吧,WEB方向基本沒有問,當然我也沒有學過哈哈,感覺還是很幸運的。在此獻給大家。之前也是看了很多牛客的面經,算是回饋牛客啦。

相關文章