年初得螞蟻垂青(本人非985/211,螞蟻真的不是很在乎學歷!!!),有了一次社招機會,前後經歷三關,受益匪淺,在此與各位朋友分享經歷與心得。
第一關:在線筆試
筆試題內容如下:
說明:
構建一個本地緩存,緩存的對象是用戶ID以及部分用戶的信息。
當從緩存中獲取某個用戶數據時,如果發現該用戶數據上次更新時間超過30分鐘,則需要更新一次該緩存。
1.需考慮多線程訪問的情況。
2.請不要使用第三方類庫實現。
3.可以添加適當日誌。
4.可以有適當的僞代碼。
補充:UserInfo結構
public class UserInfo {
private String userId;
private String userName;
private String cardNo;
//省略其它信息和getter 和setter
}
完成下面的代碼
//: TODO 可自行定義需要的變量
/**
* 初始化用戶信息緩存
*/
public void initUserInfoCache() {
//: TODO 完成此處的代碼
}
/**
* 根據id從緩存中獲取用戶信息
*/
public UserInfo getUserInfoFromCacheById(String id) {
//: TODO 完成此處的代碼
}
/**
* 根據id更新緩存用戶信息
*/
public void updateUserInfoCache(String id) {
//: TODO 完成此處的代碼
}
題目是讓在 考慮多線程的情況下實現一個緩存,題目相對簡單(經歷過2016的阿里校招在線筆試,簡答題難度至今 記(還)憶(是)猶(不)新(會)!!!),時間上要求寬鬆,24小時內答完即可。
第二關:一輪電話面試
筆試題提交完畢後,大約2天后,收到一個來自於杭州螞蟻金服IP的固定電話,不巧當時正在另外一家單位面試,恰逢一面結束,等待二面的空隙裏,沒辦法,接了電話果然是邀請馬上進行一輪電面。內心是崩潰的...。和面試官說了暫時不方便,約了半小時後再開始,面試官很爽快的同意了。
一開始依舊是自我介紹,一面提問的問題很多,很雜,涉及面很廣,着重於基礎,共面了55分鐘左右。事後回憶問題如下:
1.jvm內存管理和分配
2.Redis
3.數據庫樂觀鎖
3.currenthashmap的缺點
4.數據庫併發
5.dubbo的調用模式,序列化
6.事務的最大級別,跨庫?跨表?
7.dubbo上游100萬,下游10萬,如何處理
8.用戶一次請求訪問web的詳細過程(從瀏覽器到web服務器經歷詳細過程)
9.spring的bean的週期
10.詳細說下參與的項目的架構
11.hashmap 觸發紅黑樹
12.MySQL支持的跨庫事務
...
第三關:二輪電話面試
距離一面過了約一週,二面姍姍來遲。與一面的Java基礎相比,二面更偏重於提問 經歷的項目的架構,以及使用的框架的底層原理。(突破了會用的範圍,理解框架的底層實現原理很重要,但這個很容易忽略!)。內心忐忑的聊了45分鐘左右,結束了二面。
事後回憶二面問題如下:
1.說一說你最近參與的印象最深的項目,項目的架構,用到哪些技術
2.說一說spring容器的實現方式
3.說一說redis緩存應用場景
4.說一說eletasic-job與其他job定時任務的區別,以及它的優點是什麼
...
附框架學習圖:
總結:螞蟻還是很看重基礎和對框架的原理的理解程度的,說白了,對使用的技術,要知其然也知其所以然。無論是框架還是JavaAPI,底層的研究理解永遠不能停。 大道至簡,知易行難。
歡迎做Java的工程師朋友們加入Java架構解析:923116658
羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!