兩次面試的經歷

lightTrace發表於2018-09-26

由於想換一個新環境,也想能找到能覆蓋我新學技術的真正的業務場景,畢竟虛擬機器和雲伺服器的叢集玩起來還是不過癮,我在一個月前提了離職,然後分別於9月11號和9月14號參加兩次面試。

9月11號直接去的第一家公司,有筆試題都很基礎,但是sql有關索引的部分可能不是最優的解決辦法,但是我在紙上寫了可能的幾種更好的解決辦法,但是不確定,因為一直在刷k8s和docker,反而像這種基本的資料庫層面的東西沒有太注意。然後第一面應該是個比我大不了幾歲的哥們,問了些Java多執行緒、資料庫髒讀髒寫以及JVM調優、如何最快定位線上的bug的問題,這部分回答的也還可以,但由於筆試索引答的不是很好,也問的比較多,有點招架不住,我甚至猜著去回答一個問題,後來想想不會其實直接說不會也沒什麼的,因為你一猜猜錯了自然印象不好,猜對了面試官可能去引申問題導致你陷入更尷尬的境地!然後問我所學的新技術能解決哪些問題?我覺得這裡我回答的還可以,我說是建立我日常的開發和了解公司也無需求以及結合開發的痛點引進的,比如之前我們負載均衡大多用nginx去掛上幾個tomcat,實際上更新的時候並不方便,我用了17版本後的docker swarm可以做到一行命令實時滾動更新,如果能使用k8s還可以做health check,保證服務更有效的更新以及上線,還有一些devops和CI/CD的東西,這些我都在叢集上自己跑過,回答的不是很完美但覺得也還不錯。然後來了第二個面試官,這裡提一點,因為很久沒面過試了,讓我做簡單的自我介紹我還有點懵居然,語言組織的不是很好,連續性不強,當然基本情況還是表達清楚了,這個面試官沒有問太多,就問我最近一個專案為什麼要用ConcurrentHashMap+redis來做快取,我當時以為 他會問我快取命中、快取穿透及雪崩的問題,但他說其實你們這裡用快取是浪費資源的,因為資料量並不大,完全可以用job或者定時程式去跑把結果落地到單表,做好索引的建立速度絕對夠用,仔細一想確實是這樣,技術沒有最好的只有最合適的,然後聊了一會其它的,然後下午hr面試就談了下期望薪資,公司文化和業務以及規則,然後夜晚直接發了offer,其實我還挺意外的,感覺表現的並不是很好,但是我想這次面試其實無論通沒通過我都學到了很多東西,跑這一趟完全是值得的。

第二家公司面試是我離職當天也就是9月14號下午三點,這家公司9月13號有個電話面試,接近一個小時,問的問題都非常深和底層,比如ConcurrentHashMap如何擴容,synchronized關鍵字和lock的區別,說了區別還問底層如何實現的,os如何處理執行緒的切換,springboot的start的實現機理,如果讓我設計一個資料庫引擎,會從哪方面考慮?訊息中介軟體的引用場景以及它的缺點,訊息中介軟體如果出現消費者太快或者生產者太快會有什麼情況?netty的模型以及它為什麼適合高併發?redis為什麼快以及幾種技術方案的優缺點,如果讓我重構一個專案為微服務我會怎麼做?如何保證分散式資料的最終一致性?…等等一些列問題,我覺得問題難度很大,作為一個兩年工作經驗的我,即使空閒時間都用來鑽研技術也覺得汗流浹背,但是會的我基本上都儘量說清楚,稍微知道一點的我會說不知道細節但可以試著回答一下,難度很大的我會直接說不知道,總體來說感覺還可以,雖然回答的很爛,但是感覺自己能回答很多問題並且和麵試官能討論,還是增強了自己的信心。後來9月14號下午去公司面試,昨天電話面試那個人不在這個區域,只是代電話面試,所以第一面的面試官是go和c語言的開發者,主要問了go的一些基本問題,Java和go的區別以及不同的使用場景,比如執行緒和協程的不同,go的網路模組好在哪?還有在使用docker的過程中出現了哪些問題,最後是雲相關的東西,都是些大方向的問題,細節問的很少,這個面試官很和善,大部分時間都在討論,也學到很多東西,最後應該來了個領導,應該是前面的技術面試都還可以他就問的比較少,看我穿的少在空調底下還很有人文關懷的讓我和他換個位置,最後9月17號發了offer。

然後比較想去的是第二家公司,無論是業務場景、還是技術棧都感覺特別喜歡,當然第一個公司也很好,然後特別不好意思的拒絕了第一個公司的offer,感覺有點內疚,因為別人確實也花了時間和精力。

然後我總結一下,大概就是:

  1. 面試的時候自我介紹還是要提前演練的,畢竟每個面試官可能都讓你說一次,說的簡短、邏輯清晰且突出重點並不是容易的事;
  2. 其次平時看些和工作無關的知識有時候確實有用,比如問我如何保證分散式叢集資料的最終一致性?其實我有點懵,我知道可以用redis鎖來防止資料髒讀髒寫,但沒在資料的最終一致性想過,因為很多框架已經幫我做了,然後我突然想到我當時學區塊鏈的raft演算法的二次提交來保證資料的最終一致性,然後照著這個思路說的,下來仔細查查原理還真的差不是很多;
  3. 第三我是偏軟體方面的,我在介紹自己專案的時候,會從自己負責的模組的結構和為什麼這麼做講!不是單純的start法則,還要有自己的理解,而且你做的專案隨著時間的遞進你的角色也是越來越重要,面試官更希望聽到一個緩緩向上進步的專案經歷,如果能結合自己以往開發的痛點在新的專案中我又是怎麼解決的應該不錯;第四不會的一定不能去猜,理由前面說過了;
  4. 第四面試考的大多數是原理性的東西,看似在平常工作用的不多,實際上潛移默化能影響很多東西,所以這也是面試官愛問的原因,當然我們去學習底層原理的東西並不是完全為了去面試,而是這些東西對自己的職業生涯確實是有幫助的,可能不能肉眼所見;如果不去猜答案,那麼你回答的都是自己會的就自信起來,當然也要注意和麵試官的良性互動,他在說自己的見解或者分析我們的問題的時候要仔細聽,配以眼神和少許的語言附和即可,等他講完,再談自己的東西,總之就是面試節奏也是很重要的東西。

雜亂的說了很多,當是一次自己面試的記錄,也希望對面試的小夥伴有所啟發。

相關文章