本文是minus同窗投稿的面試經驗分享
java
在此感謝minus同窗分享本身的面經供廣大同窗參考mysql
本文是樓主前兩個月 N 家公司的面試經歷,總結覆盤了面試現場,我的認爲乾貨仍是很多,在此和你們分享。面試
ps:至於標題所說的薪資,是面試過程當中一個有意思的小插曲,可是確有其事,不是標題黨。。。這裏先賣個關子,請各位看官日後看!^_^redis
先作個自我介紹,樓主座標帝都,5年經驗,跳槽以前在一家傳統小公司,年薪21萬。算法
此次面試前先後後大概兩個月的時間,面試了大概 6 家公司,命中 4 家,最終去了一家估值 70 億美金的生鮮電商獨角獸,年薪42萬,恰好翻倍。spring
話很少說,直接進入面試現場!sql
好將來shell
開始面試第一天上午投遞好將來,下午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 的擴容規則和具體實現。
以後又問了一些小的知識點,有的也沒答好,像 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的底層源碼,還有服務訪問的重試機制等等
第二輪
二面上來問了垃圾回收的問題,相似下面的代碼:
問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架構經驗傾囊相授