1. 程式人生 > >總結記錄一下我的第一次社招面試經歷

總結記錄一下我的第一次社招面試經歷

已經凌晨2點多了,看來今天是失眠了,反正睡不著,寫篇日記總結一下我的第一次社招面試經歷吧。2015年12月1日辦理了離職手續,離開了萬通中心,也算是和我的第一個東家正式說了再見,其實還是很喜歡國貿的,這是個美妙的地方,容納著很多金融界人才們的夢想,每每晚上走到這裡你會感嘆帝都的夜景好美,只可惜這裡的多數人都顧不上欣賞這裡的風景,每個人都生活在壓力下,成為了金錢的奴隸,但這並不是什麼壞事,因為他們上有老下有小,身上揹負著責任,也正是他們的身體力行才造就了CBD的繁華,而我最終選擇了離開這個地方。
   我從不否認我的離開和錢有關,這確實是其中一個因素,我也像所有人一樣揹負著責任,所以我需要錢,但我更想說這次的離開是為了尋求一個對我而言更大的舞臺,讓自己更加快速的沉澱和成長。我曾經試圖向我的領導們陳述我的價值觀,我並不認為錢和理想是互斥的,難道賺的越少你的工作就越有價值麼,很明顯不是的。

   第一個投的是拉勾網,一家發展非常迅速的招聘公司,在領英這樣的以網際網路招聘為入口的公司崛起的同時國內也湧現出很多好的招聘網站,拉勾網、100offer、內推網都發展的很良性,相信未來會重新洗牌,留下的幾家會稱霸國內招聘領域。先做一份筆試題目,都是大題,程式設計題目為主,主要是考察程式設計能力、演算法和資料結構以及架構設計方面,答的很不好,好多都忘了。
  一.自己實現一個hashMap,這個難不倒我,jdk的原始碼中最熟悉的就是Collection包了,使用陣列和內部類完成雜湊表的資料結構,再通過hash演算法和連結串列操作完成雜湊表的插入查詢等操作;
  二.併發程式設計中的生產者消費者模式程式碼,沒寫出來,忘記了,真是不應該哦,最簡單的方式就是使用wait和notify去阻塞喚醒(這麼基礎的東東我都能忘),當然還有很多優雅的寫法,比如使用可重入鎖(ReentrantLock),使用鎖計數器(CountdownLatch)等,當時一種都沒想到,自責中;

  三.字串的一道演算法題,這類小case,就是點陣圖法,毫無壓力的寫出;
  四.寫一個自己熟悉的架構圖,於是我把我的老東家的系統架構搬了上去,簡單來說就是通過hessian將前臺呼叫邏輯與後臺業務邏輯解耦,實體可以通過序列化和反序列化傳遞(這是hessian最擅長乾的事情),最終提高後臺業務邏輯介面的可重用性以及系統的可維護性。
  還有兩三道題目忘記是什麼了。時間還是很緊的,只有一個小時時間。交卷之後開始面試,一面繼續聊了聊jdk的Collection包,還有就是之前在公司所做專案的部署思想。二面就是聊聊java併發鎖機制,為什麼要用讀寫鎖而不用synchronized這種同步鎖,事務隔離性的理解,為什麼會有髒讀,可重複讀,提交讀等,spring的事務管理是如何實現的,程式設計式如何實現,aop式如何實現,動態代理的原理是什麼,事務的傳播性的理解。總之都是這類比較重視原理的問題,答的還可以吧,最後就是CTO直接面試,談談為啥離職,期望薪資什麼的。問我會不會來,最後我回答我考慮一下,下週三給回覆,然後就離開了。感覺公司環境很好,飲料零食什麼的都是免費吃,不過最後沒有選擇去。

  第二個去的是360,沒有筆試,直接面試,一面主要問基礎,String內容存放在哪兒,答執行時常量池,然後我把jvm的記憶體結構講了一下,堆、棧、程式計數器、方法區等,每塊區域的作用之類的,那麼問題就來了,jvm的回收機制是什麼,感覺問的有點大,不知道從哪兒說起,只好從分代回收演算法說起了,從GC ROOTS的引用鏈機制到新生代的小空間複製演算法再到老生代的標記清除演算法,最後就是新生代和老生代之間的關係以及躍遷等,隨後面試官點了點頭說那你再講講jvm的類載入機制吧,委託雙親機制吧,正準備講,那小哥問反射機制是如何利用類載入機制的呢,只好把反射的實現原理也balalala。。。繼續發問,懂哪些設計模式,答:單例,建造者,觀察者,模板方法模式,迭代器模式balala,你在專案中用到過觀察者模式嗎,怎麼用的。答:做統一配置元件的時候使用到了zookeeper的釋出訂閱,建立了監聽連結串列,完成應用系統的註冊和同步,balalala,邊寫程式碼邊講細節,正講的起勁,被打斷,你寫個單例模式吧,把你認為效率最高的單例實現寫出來,當然是通過jvm的內部類機制實現單例了,又快又安全,看完面試官點點頭,說再寫一個雙檢查的懶漢單例模式吧,好的遵命,寫完後小哥發問,為什麼要用volatile關鍵字,答:在高併發時會出現併發模式異常,volatile可以防止指令重排,建立物件操作並不是一個原子操作,分為三個步驟,balala,講了一通,面試官被說服,隨後面試官發問,能不能講講執行緒的記憶體模型,哈哈,幸好以前研究執行緒可見性的時候研究過這個,講完面試官很滿意,感覺他已經hold不住我了(暗自自喜),談談你對cas的理解,答:是指樂觀鎖嗎,還沒等我說,面試官說好,你等一下,二面面試官走了進來,開始發問,假設有一個場景,系統需要某個特定時間內響應使用者請求,比如說100ms內完成使用者請求,但是在最高峰的時候每單位時間幾百萬的使用者請求,也就是高併發,但我必須要實現系統響應及時,而且高可用(不宕機),假如你是架構師,你該如何架構這個系統,聊聊你的方案,當時聽完腦子就蒙了,恨自己當初沒去看那本《大型分散式網站架構》書,於是就開始憑感覺說,首先肯定需要做快取叢集,防止資料庫雪崩,資料庫如果請求量很大也需要分庫分表,各種亂說,說得自己都暈乎乎的,最後面試官說有的對有的不對,而且沒說到點子上,不過可以理解,你只有一年多點的工作經驗。然後向我介紹了一下他們部門是做什麼業務的,隨後問我為什麼離職等,到飯點了,我就被拉走了。第二天hr打電話給了offer,聊了聊薪資待遇,360待遇不錯,吃飯還免費,挺好的。
  第三個是陌陌,聽說是個約炮的,哈哈哈,只是對社交軟體充滿了好奇,去看看,一面先寫程式碼,寫一個二叉樹的深度遍歷,小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在星期一打電話說讓星期四去最後一面,是技術總監的面試,星期四屁顛屁顛的去了(話說百度大廈離國貿太遠了,地鐵每次要坐一個半小時,我也是跪了),四面開始,發問非同步處理的冪等性,不是很難,唯一性索引或者開發分散式鎖唄,隨後風格立馬就轉了,不問技術了,發問你覺得你來百度能給百度帶來什麼樣的價值,你希望你加入的百度的團隊是一個什麼樣的團隊,你如何和產品經理溝通,假如你和其他研發介面制定無法統一你該如何解決等,一點準備都沒有,回答的結結巴巴很是不好,哎,聽天由命吧!
  第五個面的是樂視,百度面完等訊息,閒來無事檢視公司招聘資訊,看到樂視竟然是全員持股,既然有股票期權,那就去看看,哈哈,我就是這樣一個無節操的人,面試比較簡單,除了hr面也是兩面技術面,主要問的也是併發程式設計和spring的一些東西,不過印象最深的是面試官問起了tomcat的原理,這個還真是沒深入去學習過,只知道它主要是用到了觀察者模式。第二天給了offer,果然是全員持股,給的還挺多(具體的在網上還是不發了)。考慮中。。。
  都寫到凌晨4點半了,也算是給這兩個星期面試做一個總結,查漏補缺,祝自己好運吧,也希望正在求職或者打算跳槽的程式設計師看到這個日誌能有一點點幫助或收穫,我就心滿意足了。

ps:最終選擇了度娘。