1. 程式人生 > >2016年阿里巴巴集團螞蟻金服面經

2016年阿里巴巴集團螞蟻金服面經

今年三月參加了阿里巴巴集團螞蟻金服的實習生校園招聘,有幸通過了三輪技術面試,不幸的因為畢業時間和實習時間的原因在HR面的時候給卡死了。

下面放上我的面試經驗,個人覺得還算精彩,一面42分鐘,二面54分鐘,三面52分鐘,感覺也相當充實。希望對想去阿里巴巴集團的同學能有所幫助

一面

1 自我介紹

2 介紹一下學習之路,學習程式設計多久了

3 說說我自己寫的MVC框架,分析優缺點(這個佔了面試大部分篇幅)

4 servlet單例還是多例(肯定是單例,這麼簡單的問題我當初居然猶豫了一下,真是該打啊)

5 servlet當中的變數的執行緒安全(這問題我沒聽明白啊,所以當時算作沒答上)

6 瞭解併發程式設計的future框架麼(當時回答的比較淺所以感覺不太好,我說的是future是一個非同步的攜帶執行緒執行結果的一個機制,還順便提了一下callable,可惜的是我讀錯了讀成callaback。。。)

7 說說我寫的JDBC外掛

8 說說我的MVC框架和springMVC有什麼不同以及優缺點(這個答的比較好,springMVC與spring天然整合,springMVC的IOC容器直接是將springIOC作為父容器繼承的,springMVC的高效能以及基於方法級別的控制器會比struts2更好等等等。
但是也有缺陷,就是框架本身還是很笨重,需要維護的配置檔案太多,不適合開發中小型專案)

9 為什麼要寫這樣的框架,是為了鍛鍊自己還是為了開發使用(both)

10 評價一下自己

11 問他問題(我怎麼樣,我技術怎麼樣,面試什麼時候能有回覆)

二面

1 自我介紹

2 說一下自學之路,看了什麼書,通過怎樣的方式學習,看過哪些部落格(畢玄,君山,華黎的書,還有計文柯不知道是不是阿里的人。部落格有很多了,像什麼csdn,部落格園,iTeye,紅黑聯盟,開源中國社群,IBM developworkers,推酷,360doc等等好多列舉不全)

3 hashmap和concurrenthashmap區別(執行緒安全,允許null的鍵,我順便把hashtable的區別也說了一下)

4 concurrenthashmap的缺陷(尼瑪,這個我真不知道,我沒實際操作過啊。。。我當時自己分析的是因為一加鎖就會掉效能,而且鎖多了容易出現死鎖)

5 問我的MVC框架,說了一大堆,基本是我在說。(談到Java反射效能問題的時候他告訴了我效能不單單是指單執行緒情況下系統自身的效能還要考慮併發的情況。嗯,這個我還真沒考慮到,不愧是扛億級高併發資料的部門)

6 問我的JDBC外掛,中間交談商討了一下這個外掛的設計初衷

7 聊了一下資料庫的東西,怎樣設計資料庫比較好,資料庫索引,hash索引和B-tree兩種,他們的異同和優劣,順便說了一下聚簇和非聚簇

8 GC機制,說了一下GC演算法,還有CMS收集器

9 TCP三次握手和四次揮手

10 以後想從事什麼樣的工作,是底層原理還是業務這些(能學到東西怎麼都行)

11 問他問題(我技術如何,支付寶主要做啥,後面有幾輪面試,還有我過了沒)他回答我的是,除了併發那部分的理解要加強以外其他都還不錯的(其實當時我只是沒解釋好。。。我那樣說是有原因的,如果當時結合作業系統中死鎖的形成原因一起說面試官可能就明白我的意思了,不過後來我知道concurrenthashmap的缺陷了,三面中也有提到)支付寶的情況說了一大堆,後面還有一輪技術面一輪交叉面一輪HR面(坑爹呢不是我之前那一面算啥)然後在他那裡是過了

就記得這些了,畢竟五十分鐘。。。不可能都記得的。。很多情況下都是我在說

三面

1 如何學習,學習途徑是什麼,學習了多久

2 對你影響最深的兩本書是哪本(《spring技術內幕》這本書可沒讓我少吃苦頭,剩下的都差不多)

3 給你一個map,如何實現它的併發,你會怎麼做。考驗Java集合包和併發庫的內容(說了一下在資料方面hashtable的強一致性和concurrenthashmap的弱一致性,但是如果主要以讀為主的話用後者的併發效能非常好,前者是整體上鎖)

4 說一下對設計模式的理解,設計模式的用處.以及你對哪些設計模式比較熟悉(為了開發程式的效率,安全性以及可維護才會存在設計模式,然後扯了一下面向物件程式設計六大原則,畢竟Java中設計模式很多是要符合這些原則的。熟悉的設計模式有觀察者、責任鏈、單例、代理、工廠等等等,常用的大部分我都熟)

5 資料庫方面懂哪些知識(我說了MySQL,然後MySQL的一些儲存引擎,索引型別等等之類的相關知識,沒有深挖只是提了一下看我知道哪些方面而已)

6 又開始聊我的MVC框架了。。煩不煩,三輪面都聊這個。。還基本都是篇幅最多的。
你的框架和其他主流MVC框架有什麼不同(一大堆,在這個問題上感覺沒有前面兩面說的好也可能確實是水平問題,以至於後面面試官說其實除了這些形式以外沒有更深層次的區別)
你的框架頁面渲染如何實現的,會用velocity嗎(檢視解析器這裡說了一下怎麼實現,策略模式支援多種前端模板的擴充套件,並用工廠模式進行維護;velocity我不會)
你的框架如何實現防止HTTP攻擊和SQL注入的(說實話我當時沒考慮到安全的問題)
你對哪些框架的原始碼熟悉(spring,springMVC)
你的框架是基於配置檔案還是基於註解的(這裡當時我猶豫了一下,因為真的有些地方我給忘了,後來才想起來其實都有)
哪些程式碼是需要配置的,以什麼方式配置(掃描包含controller類的包檔案以及攔截器鏈用的是XML配置,控制器是用註解方式配置的)
這個框架執行過嗎(沒有 (逃 )

7 這個框架是你的一個完備的MVC架構體系還是一個你鍛鍊用的demo(當時心虛了,好吧我哪有那麼牛逼啊。。那麼死抓不放,感覺這個面試官牛逼,終面既然沒有交叉面試,那應該是總監面了吧)

8 當初為什麼要設計這樣一個框架來(為了競爭啊,不然我拿什麼跟那些寫了一大堆牛逼專案的科班出身的人幹仗啊)

9 然後開始跟我聊他自己了,他也不是科班出身,本科是學建築的,快畢業那會兒也跟一些創業公司的工程師一起寫過一個MVC框架等等一堆(艾瑪感覺我們怎麼那麼像)還說沒關係的,沒必要拿自己的作品跟springMVC那麼強大團隊完成的作品比較。
只要想辦法跟一些志同道合的人一起幹就好了要有一顆對技術的熱心就行(反正感覺他在開始介紹他自己私人的情況拉家常了,說好的技術面呢,怎麼變成談人生了)

10 想做底層的技術還是幹業務相關的,因為他們集團自己也不用開源的技術都是自己研發自己用然後開源給別人用(我說能學得到東西幹啥都行啊)

11 問他問題(基本就是前面面試那些問題,我水平如何?給我點建議。面試官說我水平挺好的,跟我聊的感覺不錯。還有關於後面的面試啊之類的等等等)

基本就是這樣,這輪面試又是五十多分鐘。。。要死要活的。。。大概就這麼些問題吧,再有也記不太清楚了。很高興最後面試官跟我拉家常聊人生,感覺三輪面試的面試官都很nice啊

總結就是,基礎很重要!!

當然能有做過專案經驗更好!!能做到質量高的專案更好!!

還有,

不管是做專案還是看書還是像我這樣自己鼓搗作品的時候一定要有自己的思考!

一定要有自己的思考!

一定要有自己的思考!

這一點比前面兩點更重要

面試到最後的時候,一定要讓面試官給你反饋,讓他給予你點評,不管過沒過,一定要對自己有清晰的認知,這點非常重要!!

HR面我就不放了,太坑,因為我休學了一年,所以要延遲一年畢業,到2018年才能畢業,然後HR跟我說不行他們只能收2017年畢業的,問我能不能跟學校那邊交涉一下讓我恢復學籍明年畢業,然後跟我說兩週內會繼續打電話過來問我處理的狀況的。結果就是,根本就沒有什麼電話來,第三週直接給我一條簡訊把我給拒了,我不爽,找到二面的面試官詢問情況,他原先答應幫我跟HR那邊說說的,後來跟我說實在是因為畢業時間的原因有死規定,讓我明年阿里同期招人的時候直接去打電話找他就好了,說實話真的狠感謝二面面試官,但是最終還是無緣阿里。沒辦法