我的奇葩面試經歷分享:喊價25K,HR 卻給了30K。。。

石杉的架構筆記發表於2019-06-12
個人公眾號:石杉的架構筆記(ID:shishan100)


本文是minus同學投稿的面試經驗分享

在此感謝minus同學分享自己的面經供廣大同學參考


寫在前面

本文是樓主前兩個月 N 家公司的面試經歷,總結覆盤了面試現場,個人認為乾貨還是不少,在此和大家分享。

ps:至於標題所說的薪資,是面試過程中一個有意思的小插曲,但是確有其事,不是標題黨。。。這裡先賣個關子,請各位看官往後看!^_^

自報家門

先做個自我介紹,樓主座標帝都,5年經驗,跳槽之前在一家傳統小公司,年薪21萬。

這次面試前前後後大概兩個月的時間,面試了大概 6 家公司,命中 4 家,最終去了一家估值 70 億美金的生鮮電商獨角獸,年薪42萬,剛好翻倍。

面試過程

話不多說,直接進入面試現場!

好未來

開始面試第一天上午投遞好未來,下午3點面試,一共面試了3輪,問的問題比較多。

第一輪

面試官看了我的簡歷,首先讓我畫出eureka的執行流程,這塊在之前的準備過程中有深入看過,因此比較流暢的畫出來並配合解釋說明

之後問到專案中使用分散式鎖解決快取重建併發的問題,並要求畫出實際的執行流程,資料庫也問的比較多,像事務的隔離級別,MySQL實現可重複讀的原理,索引等

面試官給出了一個場景,在資料庫主從同步的情況下,如果從庫同步主庫的資料延遲比較高,怎麼才能在寫到主庫後立刻能夠讀取到資料。

我解釋了主從同步的原理,並以此說明主庫到從庫的複製一定是有延遲的,因此要保證當寫到主庫的時候立刻能讀到資料,要麼就直接配置那個介面讀資料的話直接走主庫,因為這種寫完主庫立刻要讀取資料的場景比較少,可以做些特殊配置。

另一種方案就是在往主庫寫資料的時候,可以直接往記憶體快取中寫一份,設定一個較短的過期時間,後面可以直接從快取中讀到資料。我說完之後,面試官也沒給出評價,就這麼過去了

此外,還問到一些基礎性的問題,比較印象深刻的是:在加鎖的時候,用什麼鎖物件是記憶體佔用最小的,我說是Object物件,面試官說不對,我一時沒想出來,面試結束後和朋友探討,覺得應該是長度為 0 的 byte 陣列

其他還問到了Collections.sort()使用的排序演算法,aqs,執行緒池,ThreadLocal等等問題,主要都是一些考察基本功的問題,一輪面試就這麼過去了!

第二輪

面試官更關注對一些技術的理解,問到了ElasticSearch的一些基礎以及它和mysql的區別在哪裡;eureka 和 zookeeper 做服務發現的區別在哪裡;

還問了分散式限流有哪些方案,以及用執行緒池進行限流的缺陷是什麼,專案中系統日誌的處理;還有 JVM 模型,JMM 模型,垃圾回收機制,垃圾收集器等問題。

之後聊了一些設計模式的使用,在專案中使用了哪些設計模式,對設計模式的幾個原則的理解。

第二輪結束後,由於第三輪的面試官在開會,所以等了一段時間,等面試官來了之後,只聊了很短時間,面試官就說還有別的事,今天先到這裡了。

主要問到了上家公司的加班情況,對加班的認識,職業規劃,也問了幾個技術問題,像tomcat的優化這塊,自我感覺答的不是很好。

整個面試從3點到7點,有點虎頭蛇尾的感覺,結束後也沒有訊息了


58 到家

面試一共三輪,上午10點過去,兩輪技術面,下午兩點過去,等了一會,然後跟hr聊了有半個多小時,HR說明在一週之內會有結果

第一輪

第一輪面試官的問題主要集中在基礎上,我大概羅列了問到的一些問題,不同的簡歷不同人肯定問的也不太一樣,有興趣的同學可以參考看看。

主要是 jvm 模型,鎖的原理,synchronized 和 reentrantlock的區別,偏向鎖/輕量級鎖/重量級鎖的原理,能否從偏向鎖直接升級成重量級鎖。

java併發包裡有哪些類,如何使用,執行緒池原理和引數配置,jvm調優,堆大小的設定,多執行緒的執行緒數的設定,volatile原理,threadlocal原理和使用。

redis和zookeeper如何實現分散式鎖,redis的資料型別,一些具體命令,比如要獲取一個有序列表的前10個元素應該用什麼命令。

資料庫索引的使用,聚簇索引和非聚簇索引,沒有主鍵的話資料如何組織。

B+ 樹的原理,Innodb 引擎和 myisam 引擎的區別和使用場景,資料庫隔離級別和原理,MySQL的分庫分表,mq的可靠性和順序性,es插入資料的原理等。

第二輪

第二輪是部門leader來面試,這輪面試主要集中在框架原始碼上,我畫出了原始碼的執行流程,之後面試官在一些點深問,因為這塊我看的比較全面,問的問題基本都答出來了

然後這裡面試官還問了在原始碼中我有學到什麼東西,我講了使用配置類代替 properties 檔案,volatile 在單例模式中的使用,記憶體的多級快取機制,執行緒池的各種不同應用場景,MeasureRate統計一分鐘內心跳次數,批處理機制等。

這裡我的回答主要集中在程式碼編寫層面,也可以從架構層面說下學到了哪些,我覺得後者更有高度。

最後我向面試官諮詢了這個崗位具體做的事情,部門是基礎服務部,面試官畫圖給我說明了部門內部一些專案劃分,技術棧的使用,後續的規劃等內容,並約我下午繼續跟hr聊

hr面

下午跟hr的面試,hr順著簡歷上的公司一個個聊,問了離職原因,公司情況,如何向上司提出離職的,團隊規模,是否帶團隊。

還問了上午面試的崗位知不知道具體要做什麼,之後hr說了下公司的一些情況,上班時間,福利,加班情況,問了我現在的薪資情況,期望薪資,我問了下出結果的時間,hr說一週之內。

第二週的週五下午六七點的時候,這家公司hr給我打電話,告訴我面試通過了,之後提到了給我的薪資,算下來竟然只給了我一個5%的漲幅。

hr給出的解釋是,因為我前家公司上一年只發了12薪,而他們有12薪和兩個多月的績效,用14個月的薪水除以12,算下來平均到每個月也能達到我期望薪資的水平。

這個計算方法實在是膈應人,雖然hr後來表示可以跟CEO申請提高每月的base(大概提高到10%的水平吧),不過當時我已經有較為滿意的offer了,還是決定不去這家了


某生鮮電商獨角獸

由於前面說了薪資,就不說具體公司名字了。這家公司我面試了兩天,一共三面,第一天筆試加初面,然後第二天有兩輪複試。

第一輪

一面主要還是基礎,集中在IO / 併發 / 快取 / redis / zookeeper / 分散式 / JVM / 資料庫等。

其中問到 redis 的單執行緒模型的時候,我這塊瞭解的不是很清楚,只是知道使用NIO的方式,然後以自己的理解去說了,面試官表示這可能是我看過別的框架的模式,跟redis搞混了,不過也算是答上來一些了。

之後聊了一些專案的情況,比如每日的訪問量有多少,qps多少,訂單量多少等資料,據此得出資料庫的訪問壓力如何。另外也深入問了使用分散式事務的一些問題,還有分散式事務在時間上的效能。

所以這裡給各位兄弟強調一下,對自己的專案一定要非常熟悉,各個點都要考慮到。

一面跟面試官聊的還挺好,面試官也表示我的基礎還不錯,問我是不是平時都有學習,之後就是約二面了,由於當時已經下午1點了,後面的面試官也在中午休息,而我下午也還有別的面試,因此hr跟我約第二天來複試

第二輪

二面的面試官也聊了基礎和一些設計上的問題,比如同時訪問三個有相同功能的api,要求將執行最快的結果返回,有哪些方式,這塊主要還是考察對併發程式設計,併發控制的理解和掌握,有一些併發控制的類能夠做到;

其他的還問到了,要開發一個新的api,需要考慮哪些方面,把所有要考慮的地方都說出來,大家可以說下邊界處理,高可用,併發問題,可擴充套件性,冪等性,重試機制等等,可以說的非常多

總體問了有6塊內容吧,面試官一邊問也一邊在記錄,一些基礎的問題這裡就不再多說了

第三輪

三面的面試官問的要更底層一些,Java執行緒與核心執行緒的關係,與程式的關係;關於併發我所瞭解的方方面面。

對於這個,我從為什麼有併發,併發問題產生的根源,解決併發問題的一些理論,Java中解決併發問題的方式,不同方式的適用場景和對比等方面進行了回答

另外還問到redis的幾種資料型別,以及每種資料型別的底層實現,跳錶這種資料結構如何插入資料, hash如何擴容。

這塊我跟面試官說具體擴容規則不太瞭解,然後向面試官說了我瞭解的Java中的HashMap 的擴容規則和具體實現。

tips:面試時如果遇到自己不太熟悉的部分,可以稍作變通,把自己熟悉的內容和麵試官的問題結合起來。

之後又問了一些小的知識點,有的也沒答好,像 copyOnWrite 就不知道用來做什麼,然後就是一些為什麼離職之類的問題,對未來職業發展的考慮等。

之後面試官問我有什麼想了解的,也問了我的期望薪資,我說了具體的數,也表示沒想要太多,更看重平臺的發展,最後面試官說明天hr會打電話給我

HR面

最後就是跟hr的溝通了,第二天hr打來電話告知面試通過,然後問了我期望薪資,溝通入職時間,之後加微信,按照hr的要求提供了一些材料,第二天就收到offer了

ps:最終樓主選擇了這家公司,除了很有競爭力的薪資之外,我還很看重這家公司的發展平臺,因為他們有非常大的使用者量,會遇到各種技術挑戰,是很好的提升鍛鍊的機會。

然後這裡有一個開篇提到的小插曲:當時HR電話問我期望薪資的時候,我說25K。

結果後續加微信聊天時,HR告訴我技術面試的反饋很好,決定給我28K,一個月還有2500的補助,算下來一個月有30K,發14個月。這種HR主動加薪的事情我還是第一次見,意外之喜,哈哈!


玩吧

這家公司的職位是去做app後臺的,使用者量也不錯,面試一共兩輪技術面,最後是hr面。

第一輪

一面的時候,網路這塊問的比較多,三次握手,四次揮手什麼的,還有整個網路請求的執行流程,資料包的大小,對長連線的理解等。

然後資料庫這塊也問了一些,提供了一個場景,假如要實現一個最簡單的朋友圈,使用者可以看到朋友的朋友圈動態,朋友也可以看到使用者發的動態,然後問表的設計。

我說了自己的實現,像使用者表,好友表。面試官問有沒有更好的方式,我沒答上來,面試官表示這個輕易可能想不到,就問別的問題了,別的也沒什麼特殊的問題,都是一些基礎的東西,大概聊了一個小時吧,就到了第二面了

第二輪

二面是技術總監面的,整體沒怎麼聊技術,就是一些個人素質上的考察。比如:

  • 為什麼會選擇做開發,沒做別的

  • 用三個短語來描述自己的優點

  • 說說自己的缺點

  • 現在公司有系統穩定執行著,如果你發現了有新的技術能夠改善現有系統,你會不會引進,會考慮哪些方面

  • 日常學習的方式,看過哪些書

  • 有沒有帶團隊,描述下團隊成員的優缺點,有沒有改善

  • 有沒有面試過別人,會從哪些方面考察

  • 職業規劃是怎樣的,想做技術管理還是技術專家

  • 對shell熟不熟悉,寫個word-count用到哪些命令

最後還聊了下公司的氛圍,專案的情況等。然後也沒啥特殊的,就過了。

HR面

最後跟hr聊,主要還是說了下公司的福利待遇,公司的氛圍,也問了我現在有沒有offer,對他們的感覺怎麼樣。

然後問了之前公司的薪資和現在的期望薪資,最後加了微信,告訴我兩天內給結果。最後也是成功通過了面試並拿到了offer


友信金服-人人貸

這家公司面試有三輪,大同小異,這裡簡短的說一下

第一輪

一面仍然是基礎的考察,像CAS的理解,和它存在的問題,ConcurrentHashMap的鎖機制,ElasticSearch倒排索引,eureka的底層原始碼,還有服務訪問的重試機制等等

第二輪

二面上來問了垃圾回收的問題,類似下面的程式碼:

我的奇葩面試經歷分享:喊價25K,HR 卻給了30K。。。

問a和b能否被垃圾回收?

這裡主要考察jvm如何判斷一個物件是否可以被回收,是通過引用計數還是可達性分析,引用計數的方式會產生像上面程式碼一樣的迴圈引用的問題,所以jvm沒有采用這種方式。

第二個問題是,如果有個跟java中原生的String一摸一樣的類,包括包名,類名都是一樣的,方法也是一樣的,唯獨比原生的String的方法多個列印輸出語句。

然後把它放進專案的依賴中,在寫程式的時候,匯入String類,問到底執行的是Java原生的String的方法還是自己寫的String方法。

對於這個問題,可以考慮下Java中類載入的雙親委派模型。

然後就聊了專案的一些架構,問的比較細,要求我對每塊都詳細畫圖解釋。

最後就是讓畫一個spring cloud技術棧所有框架的整體執行流程圖,並對hystrix的限流熔斷機制做了解釋說明,別的好像也沒什麼了

這之後二面算是結束了,面試官和我說了下自己團隊的情況,人員情況,要做的專案的情況等。

第三輪

最後一面是業務總監面的,面試官讓我說了下自己在公司做了哪些事情,我挑其中一個專案做了仔細說明,然後說了下職業規劃,對行業的看法等等

最後hr和我加了微信,同樣說是兩天內給結果,不過第二天他們就給出通過的結果了,然後發了offer


某實時資料分析服務公司

這是一家做體育賽事的實時資料分析展示的公司,公司不大,去年拿了A輪融資,看網上整體評價還不錯,就去試了試。

面試總共有技術兩輪,hr一輪。去的時候首先是寫筆試題。做完之後進入面試。

第一輪面試官沒有聊太久,問的問題也比較偏基礎,就是一些面試常問的問題,然後說了eureka的執行原理,說完之後,面試官就去叫技術總監了

第二輪面試是技術總監面的,技術點沒問太多,主要集中在之前的筆試題上,筆試題包括sql的考察,還有幾道演算法題:找出有序陣列中指定元素出現的次數;二叉查詢樹從小到大排序。因為時間的問題,我主要寫了實現思路;

還有一題是,有16瓶水,其中一瓶有毒,小白鼠喝一滴有毒的水一小時後會死,要在一小時找出來哪瓶水有毒最少需要幾隻小白鼠

在sql的考察這塊,面試官看完我的答案後,又改了其中的需求,要求給出sql的實現,另外也問到了sql的執行效率。

這裡給大家強調一下,我面的基本上每家公司面試都會問到資料庫,所以這塊還是挺重要的,需要重點去看

然後關於找出有序陣列中指定元素出現次數的問題,原來要求的時間複雜度是O(lgn),後來面試官說不要求任何時間空間複雜度,如何簡單的實現,我給出的方案是用HashMap,相同的key每出現一次,value加1

然後是小白鼠問題,說了解題思路,主要就是用位的思想,對16瓶水編碼,實際只需要4個位就可以

之後面試官還現場出了別的演算法題,我基本都給出了結果,總體而言面試還比較順暢,之後聊了下職業規劃,技術發展,學習新技術的方法,面試官也聊了之後他們準備做的事情,並給我現場演示了他們的專案

最後到了hr面,主要聊了下上家公司離職的原因,公司福利,上下班時間,我的期望薪水,還問到之前有沒有帶團隊的經歷等

最終他們在第二週的週四才給出面試通過的結果並表示正在走offer流程,由於CEO不在,在薪資上還沒最終確定,我因為有了更滿意的offer,因此婉拒了


總結

總結一下,這兩個月的面試,我覺得最重要的就是基礎和專案這兩塊,基礎一定要紮實,否則第一輪面試可能都過不了。

jvm,併發是非常高頻被問到的地方,在開始面試之前一定要好好準備,另外也需要有自己非常熟悉的領域,在這個領域裡面試官的一切問題你都可以hold住,我覺得,對於這種基礎好,而且有自己長處的面試者,面試官沒有理由不喜歡。

還有專案這塊,對專案的細節一定要清楚,各種方案的設計思路,實現細節等等都要了如指掌,這樣在面試官對各種細節的追問下不至於手忙腳亂。

END


個人公眾號:石杉的架構筆記(ID:shishan100)

歡迎長按下圖關注公眾號:石杉的架構筆記!

公眾號後臺回覆資料,獲取作者獨家祕製學習資料

石杉的架構筆記,BAT架構經驗傾囊相授

我的奇葩面試經歷分享:喊價25K,HR 卻給了30K。。。





相關文章