每日最新頭條.有趣資訊

一次奇葩面試:喊價25K,HR卻給了30K

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

圖片來自 Pexels

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 面

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

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

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

玩吧

這家公司的職位是去做 App 後台的,用戶量也不錯,面試一共兩輪技術面,最後是 HR 面。

第一輪

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

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

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

第二輪

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

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

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

說說自己的缺點

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

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

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

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

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

對 Shell 熟不熟悉,寫個 Word-Count 用到哪些命令

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

HR 面

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

友信金服-人人貸

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

第一輪

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

第二輪

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

問 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 住,我覺得,對於這種基礎好,而且有自己長處的面試者,面試官沒有理由不喜歡。

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

作者:minus

編輯:陶家龍、孫淑娟

獲得更多的PTT最新消息
按讚加入粉絲團