工做4年從美團、360、陌陌、百度、阿里、京東面試回來感想

後續:Java工做4年在北京對京東、攜程、國美、阿里、美團等大廠的Offer的選擇
已經凌晨2點多了,看來今天是失眠了,反正睡不着,寫篇日記總結一下我最近面試經歷吧。
2019年5月1日辦理了離職手續,離開了萬通中心,也算是和個人第二個東家正式說了再見,其實仍是很喜歡國貿的,
這是個美妙的地方,容納着不少金融界人才們的夢想,往往晚上走到這裏你會感嘆帝都的夜景好美,只惋惜這裏的多數人都顧不上欣賞這裏的風景,
每一個人都生活在壓力下,成爲了金錢的奴隸,但這並非什麼壞事,由於他們上有老下有小,身上揹負着責任,也正是他們的身體力行才造就了CBD的繁華,
而我最終選擇了離開這個地方。java

我從不否定個人離開和錢有關,這確實是其中一個因素,我也像全部人同樣揹負着責任,因此我須要錢,但我更想說此次的離開是爲了尋求一個對我而言更大的舞臺,

讓本身更加快速的沉澱和成長。我曾經試圖向個人領導們陳述個人價值觀,我並不認爲錢和理想是互斥的,難道賺的越少你的工做就越有價值麼,很明顯不是的。程序員

美團網

在這裏插入圖片描述

第一個投的是美團網,去年剛上市的,發展比較迅速、美團的技術在國內也是首屈一指的。
先填了一份資料,而後是就是面談了
算法和數據結構以及架構設計方面,答的很很差,好多都忘了。
一.本身實現一個hashMap,這個難不倒我,jdk的源碼中最熟悉的就是Collection包了,使用數組和內部類完成哈希表的數據結構,
再經過hash算法和鏈表操做完成哈希表的插入查詢等操做;
二.併發編程中的生產者消費者模式代碼,沒寫出來,忘記了,真是不該該哦,最簡單的方式就是使用wait和notify去阻塞喚醒(這麼基礎的東東我都能忘),
固然還有不少優雅的寫法,好比使用可重入鎖(ReentrantLock),使用鎖計數器(CountdownLatch)等,當時一種都沒想到,自責中;
三.字符串的一道算法題,這類小case,就是位圖法,毫無壓力的寫出;
四.寫一個本身熟悉的架構圖,因而我把個人老東家的系統架構搬了上去,簡單來講就是經過hessian將前臺調用邏輯與後臺業務邏輯解耦,
實體能夠經過序列化和反序列化傳遞(這是hessian最擅長乾的事情),最終提升後臺業務邏輯接口的可重用性以及系統的可維護性。
還有兩三道題目忘記是什麼了。時間仍是很緊的,只有一個小時時間。交卷以後開始面試,一面繼續聊了聊jdk的Collection包,
還有就是以前在公司所作項目的部署思想。二面就是聊聊java併發鎖機制,爲何要用讀寫鎖而不用synchronized這種同步鎖,事務隔離性的理解,
爲何會有髒讀,可重複讀,提交讀等,spring的事務管理是如何實現的,編程式如何實現,aop式如何實現,動態代理的原理是什麼,
事務的傳播性的理解。總之都是這類比較重視原理的問題,答的還能夠吧,最後就是部門負責人來直接面試,談談爲啥離職,指望薪資什麼的,也聊了下技術。
問我會不會來,最後我回答我考慮一下,下週三給回覆,而後就離開了。感受公司環境很好,飲料零食什麼的都是免費吃。面試

360

第二個去的是360,沒有筆試,直接面試,一面主要問基礎,String內容存放在哪兒,答運行時常量池,而後我把jvm的內存結構講了一下,
堆、棧、程序計數器、方法區等,每塊區域的做用之類的,那麼問題就來了,jvm的回收機制是什麼,感受問的有點大,不知道從哪兒提及,
只好從分代回收算法提及了,從GC ROOTS的引用鏈機制到新生代的小空間複製算法再到老生代的標記清除算法,最後就是新生代和老生代
之間的關係以及躍遷等,隨後面試官點了點頭說那你再講講jvm的類加載機制吧,委託雙親機制吧,正準備講,那小哥問反射機制是如何
利用類加載機制的呢,只好把反射的實現原理也balalala。。。繼續發問,懂哪些設計模式,答:單例,建造者,觀察者,模板方法模式,
迭代器模式balala,你在項目中用到過觀察者模式嗎,怎麼用的。答:作統一配置組件的時候使用到了zookeeper的發佈訂閱,建立了監聽鏈表,
完成應用系統的註冊和同步,balalala,邊寫代碼邊講細節,正講的起勁,被打斷,你寫個單例模式吧,把你認爲效率最高的單例實現寫出來,
固然是經過jvm的內部類機制實現單例了,又快又安全,看完面試官點點頭,說再寫一個雙檢查的懶漢單例模式吧,好的遵命,寫完後小哥發問,
爲何要用volatile關鍵字,答:在高併發時會出現併發模式異常,volatile能夠防止指令重排,建立對象操做並非一個原子操做,
分爲三個步驟,balala,講了一通,面試官被說服,隨後面試官發問,能不能講講線程的內存模型,哈哈,幸虧之前研究線程可見性的時候研究過這個,
講完面試官很滿意,感受他已經hold不住我了(暗自自喜),談談你對cas的理解,答:是指樂觀鎖嗎,還沒等我說,面試官說好,你等一下,
二面面試官走了進來,開始發問,假設有一個場景,系統須要某個特定時間內響應用戶請求,好比說100ms內完成用戶請求,
可是在最高峯的時候每單位時間幾百萬的用戶請求,也就是高併發,但我必需要實現系統響應及時,並且高可用(不宕機),假如你是架構師,
你該如何架構這個系統,聊聊你的方案,當時聽完腦子就蒙了,恨本身當初沒去看那本《大型分佈式網站架構》書,因而就開始憑感受說,
首先確定須要作緩存集羣,防止數據庫雪崩,數據庫若是請求量很大也須要分庫分表,各類亂說,說得本身都暈乎乎的,最後面試官說有的對有的不對,
並且沒說到點子上,不過能夠理解,你工做經驗才4年。而後向我介紹了一下他們部門是作什麼業務的,隨後問我爲何離職等,到飯點了,
我就被拉走了。次日hr打電話給了offer,聊了聊薪資待遇,360待遇不錯,吃飯還免費,挺好的。redis

陌陌

在這裏插入圖片描述
第三個是陌陌,據說是個約炮的,哈哈哈,只是對社交軟件充滿了好奇,去看看,一面先寫代碼,寫一個二叉樹的深度遍歷,小case,遞歸搞定,
隨後發問memcache的內存管理機制,答:slab分塊管理,最終以chunk分配,維護了一個LRU的雙向列表,balabala。。。而後又問了問zookeeper的一些東東;
二面問的比較雜,大部分不記得了,居然還問vi命令,我也是跪了。算法

百度

在這裏插入圖片描述
第四個百度,百度今年是中止社招的,大部分部門都不社招只有校招,但也有少數部門有特批名額,因而就去試了一把,一面剛來就是寫代碼,
一個單鏈表的算法題目,寫完,面試官很滿意點點頭,隨後面試官發問在你的項目中spring是如何管理zookeeper的,答:balabala,
瞭解zookeeper的leader選取算法嗎,講一下他的流程,知道zab算法嗎,講一下他的流程,汗,問的問題都太變態,沒想到會問的這麼深,
zab算法太複雜了,zab是基於paxos的,而paxos但是得到圖靈獎的算法,勉強說了一下,說的很心虛,有好多盲點本身也沒搞清楚,
不過好在面試官也不往下問了,其實我估計他也不見得會(竊喜),隨後讓我稍等一下;一下子事後二面面試官過來了,是個成熟的大叔,
二面只問了兩個東西,一個jvm,一個併發編程,jvm主要是性能調優,jstack的使用,full GC和minor GC的分析等,併發編程問的很細,
發問多個線程達到同一個狀態而後再一塊兒執行,達到某一個狀態以後再繼續併發執行,這種怎麼實現,答:jdk5以後有一個CyclicBarrir,
經過這個來實現,它能夠重用等balabala說了一些,再發問讀寫鎖中加讀鎖後如何避免寫線程餓死,答:加策略balabala,發問如何實
現控制線程在某段時間內完成,不完成就撤銷,答:實現Callable接口,返回FutureTask類或者Future接口,而後去觸發撤銷操做。
開始問項目,描述一下對帳系統,balabala...數據量大嗎,併發量高嗎,數據庫怎麼設計的等,隨後讓我等一會,又過來一個面試官,
問我業務,你在第三方支付公司,能不能講一下支付的技術流程,balabala...把本身理解的支付流程講了一下,最後補了一句,
支付的細節業務很複雜,我也沒徹底明白呢,汗,讓我等了一會,隨後面試官說你回去等消息吧,我想完蛋了吧,難道由於業務不熟被刷,
真不甘心;心涼了一個星期,結果hr在星期一打電話說讓星期四去最後一面,是技術總監的面試,星期四屁顛屁顛的去了
(話說百度大廈離國貿太遠了,地鐵每次要坐一個半小時,我也是跪了),四面開始,發問異步處理的冪等性,不是很難,
惟一性索引或者開發分佈式鎖唄,隨後風格立馬就轉了,不問技術了,發問你以爲你來百度能給百度帶來什麼樣的價值,
你但願你加入的百度的團隊是一個什麼樣的團隊,你如何和產品經理溝通,假如你和其餘研發接口制定沒法統一你該如何解決等,
一點準備都沒有,回答的結結巴巴非常很差,哎,聽天由命吧!spring

阿里

在這裏插入圖片描述
第五個面的是阿里,百度面完等消息,閒來無事查看公司招聘信息,看到阿里招聘薪資很誘人。
哈哈,我就是這樣一個無節操的人,開始是電話面試,而後是面試,二面和三面,主要面試技術點有
JVM相關:
jvm中一次完整的GC流程(從ygc到fgc)是怎樣的,重點講講對象如何晉升到老年代,幾種主要的jvm參數等
你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms
當出現了內存溢出,你怎麼排錯
JVM內存模型的相關知識瞭解多少
簡單說說你瞭解的類加載器
JAVA的反射機制數據庫

網絡:
http1.0和http1.1有什麼區別
TCP三次握手和四次揮手的流程,爲何斷開鏈接要4次,若是握手只有兩次,會出現什麼
TIME_WAIT和CLOSE_WAIT的區別
說說你知道的幾種HTTP響應碼編程

架構設計與分佈式:
tomcat如何調優,各類參數的意義
常見的緩存策略有哪些,大家項目中用到了什麼緩存系統,如何設計的,Redis的使用要注意什麼,持久化方式,內存設置,集羣,淘汰策略等
如何防止緩存雪崩
分佈式集羣下如何作到惟一序列號
設計一個秒殺系統,30分鐘沒付款就自動關閉交易
如何作一個分佈式鎖
用過哪些MQ,怎麼用的,和其餘mq比較有什麼優缺點,MQ的鏈接是線程安全的嗎
MQ系統的數據如何保證不丟失
分佈式事務的原理,如何使用分佈式事務
什麼是一致性hash
說說你知道的幾種HASH算法,簡單的也能夠
什麼是paxos算法
redis和memcached 的內存管理的區別等等
後面給了我offer。可是最近996不知道如何選擇。設計模式

總結

就寫到這了,寫的有點多了,也算是給這兩個星期面試作一個總結,查漏補缺,祝本身好運吧,也但願正在求職或者打算跳槽的 程序員看到這個文章能有一點點幫助或收穫,我就心滿意足了。數組

最新進展

能夠看我寫的這篇文章:https://blog.csdn.net/SpringB...

相關文章
相關標籤/搜索