自序
這次面試的公司有一點點多,主要是因為畢業後前兩份工作找的都很草率,這次換工作就想著,emm,畢業三年了,該找個工作好好沉澱幾年了。
先說下這次面試的結果吧:
到 hr 面的:
阿里、美團、滴滴、金山雲、每日一淘、火幣、宜信、旺店通、黃包車、linkedMe
其他:
小米(四輪技術面,大概4個小時的樣子,大數據部門,不知道是不是四面的負責人嫌棄我木有大數據的經驗,不過我確實木有哈)
京東(電話面試一輪+現場兩輪,面試完快中午一點了,說是讓我先回家,後面讓hr 電話聯繫我
一週後一面的面試官問我還考慮京東不,如果考慮的話,就進行後續。當時已經有了更好的offer,就說不考慮了,希望以後有機會再合作,所以沒有後續了)
頭條(二面完gg,我的算法確實菜哈,然後leetcode又只刷過10道題,去面頭條,確實有些作死的節奏,實在是對不起幫我內推的石衝大佬)
愛奇藝(電話面試一輪+現場兩輪,到技術終面了,這個怪我,面試官也一直很忙,然後我倆就互相一直改面試時間,最後定的那個面試時間我還遲到了一個小時,還是時間到了才給hr 打電話說一個小時後才能到
雖然我知道這樣做非常不好,但是當時情況比較複雜,自己根本忙不過來,一直在面試,也沒有辦法中途給hr 打電話說一下。一天面兩家,兩家離的還比較遠的小夥伴吸取一下教訓。
我本來是想約第二天下午的,hr 就想當天,結果就晚上7:40開始二面了,面到9點,然後木有然後了)
有贊(電話面試一輪+現場兩輪,到技術終面了,面試官“base考慮杭州嗎”,我“啊,你們北京不是也需要人嗎,最好北京哈,杭州暫時不考慮”,然後木有然後了,哈哈。
後面面阿里的時候我就自己打臉了,面試官“base杭州考慮嗎”,我“面過阿里我就去杭州,面不過我就在北京”。愛,就要大膽的說出來。)
這次面試基本都是三~四輪技術面,很多都是每一輪都有至少一道算法題,所以準備換工作的小夥伴,算法可以搞起來了哈,leetcode easy和medium 難度的就ok了,當然如果你也要刷hard 難度的題,是更好的哈。
我作為一名只刷過10道leetcode的渣渣,表示以後要好好刷leetcode了,拯救一下自己的智商。準備面頭條的小夥伴,那就medium 和 hard難度的搞起來吧。你們加油,我就不想了。
群裡有很多小夥伴懷疑我是985、211或者研究生畢業,都不是的哈,渣本(但是我還是很愛我的母校的),16年畢業,我一個妹子都可以做到的,你們更可以做到,所以相信自己,去努力就好了。
這篇文章主要是記錄一下自己的面試經歷,分享一些群裡小夥伴們都很關注的面試題,然後文章末尾我會推薦一些書,完全免費推薦的哈,我個人感覺不錯的,可以提升技術的,當然面試中也會對你有特別大的幫助。
阿里的面試題不會分享哈,這次主要分享tmdj、以及其他公司的一些面試題,把我分享的這些面試題都掌握了,對想去面阿里的小夥伴的幫助也是非常非常大的。
當然,面試題只是起一個查漏補缺的作用,並不是讓你直接去整理答案,去背答案的哈。一個合格的面試官,是會針對你的簡歷去問的,即每個人的面試題都是不一樣的。
頭條
二輪技術面,17:00~20:25,晚飯時間hr 小姐姐還特貼心的帶我體驗了一把傳說中的頭條餐廳,不超過半小時
- 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖
- 講項目中的難點、挑戰,你是如何解決的
- redis 中有幾種類型 & 各自底層怎麼實現的 & 項目中哪個地方用了什麼類型,怎麼使用的
- redis如何實現分佈式鎖,zk如何實現分佈式鎖,兩者的區別。如果service還沒執行完,分佈式鎖在redis中已經過期了,怎麼解決這種問題
- synchronized底層實現,加在方法上和加在同步代碼塊中編譯後的區別、類鎖、對象鎖
- 鎖升級的過程
- java運行時區域 及 各個區域的作用、對GC的瞭解、java內存模型 及 為什麼要這麼設計
- 對索引的理解,組合索引,索引的最佳實踐
- countDownLatch用過沒有,在項目中如何使用的,對aqs 的瞭解
- 寫生產者消費者問題,考慮高併發的情況,可以使用Java 類庫,白紙寫代碼
- 如下圖所示
- 設計一個發號器,考慮集群和高併發的情況,要求發號器生成的id是遞增趨勢,通過id可以區分出來是今天生成的id還是昨天生成的id,但是生成的id中不能直接帶有日期,要具有一定的混淆功能,白紙寫代碼
- 一個二位數組,每個元素都可以往上下左右四個方向走,尋找最長遞增路徑。如下圖所示,最長遞增路徑即紅色字體路徑。白紙寫代碼。
美團
電話面試(40分鐘)+現場三輪技術面試(3.5小時)+hrbp面試(30分鐘)
- 數據庫和緩存的一致性問題。先更新數據庫,再更新緩存,若更新完數據庫了,還沒有更新緩存,此時有請求過來了,訪問到了緩存中的數據,怎麼辦?
- 聚簇索引/非聚簇索引,mysql索引底層實現,為什麼不用B-tree,為什麼不用hash,葉子結點存放的是數據還是指向數據的內存地址,使用索引需要注意的幾個地方
- mysql默認的事務隔離級別,mvcc,rr怎麼實現的,rc如何實現的
- mysql間隙鎖有沒有了解,死鎖有沒有了解,寫一段會造成死鎖的sql語句,死鎖發生瞭如何解決,mysql有沒有提供什麼機制去解決死鎖
- 談下對GC的瞭解,何為垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的區別,emm,還有一個直擊靈魂的問題,看過cms的源碼嗎,笑cry
- 有沒有排查過線上oom的問題,如何排查的
- 有沒有使用過jvm自帶的工具,如何使用的
- 假設有下圖所示的一個full gc 的圖,縱向是內存使用情況,橫向是時間,你如何排查這個full gc的問題,怎麼去解決你說出來的這些問題【原創公眾號:Bella的技術輪子】
- 說說對java中集合類的理解,項目中用過哪些,哪個地方用的,如何使用的
- 對CAS的理解,CAS帶來的問題,如何解決這些問題
- volatile底層、synchronized底層、鎖升級的過程、MESI
- ehcache支持哪些緩存
- juc有研究沒有,講一講
- 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖
- 講項目中的難點、挑戰,如何解決的,項目這一塊會問的特別細
- 如何保證RocketMQ 消息的順序性,如何解決重複消費問題
- 項目中如何保證接口的冪等操作
- 講一講對redis 的瞭解,項目中如何使用的,哪個地方使用的,為什麼要使用
- 哨兵機制、redis兩種備份方式的區別,項目中用的哪種,為什麼
- 講一講對分佈式鎖的瞭解
- 項目中系統監控怎麼做的
- 如何理解Spring中的AOP 和 IOC,以及DI,讀過Spring源碼沒有
- 讀過MyBatis源碼沒有
- 說一個你瞭解最多的框架,說出你的理解
- 如何理解分佈式事務,為什麼會出現這個問題,如何去解決,瞭解哪些分佈式事務中間件
- 聊一聊對分庫分表的理解
- hystrix功能 & 在項目中怎麼使用的 & hystrix 怎麼檢測斷路器是否要開啟/關閉 & hystrix 實現原理,除hystrix之外的其他熔斷限流中間件有了解沒有,瞭解多少說多少
- dubbo有了解沒有
- 怎麼理解java 中和 mysql 中的樂觀鎖、悲觀鎖
- 一致性hash
滴滴
現場三輪技術面試 + 一輪hrbp面(4小時5分鐘)
- 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖,講數據庫設計
- 處理過線上oom問題沒有,如何處理的
- 遇到過線上服務器cpu飆高的情況沒有,如何處理的
- 線上有沒有遇到其他問題,如何處理的
- 對線程池的理解,項目中哪個地方使用了,如何使用的,用的Excutor框架中的哪個實現類,為什麼用這個
- 對CAS的理解,CAS帶來的問題,如何解決這些問題
- volatile底層、synchronized底層、鎖升級的過程、MESI
- 對mysql索引的理解、對組合索引的理解、索引的最佳實踐
- 分佈式鎖的實現、對比redis分佈式鎖 & zk分佈式鎖
- 唯一id如何實現的,snowflake實現原理,snowflake有哪些問題,如何避免根據訂單號可以推算出今天的訂單量
- 如果線上一個功能是用棧結構實現的,使用過程中要注意哪些問題,為什麼
- 怎麼理解線程安全
- 怎麼理解接口冪等,項目中如何保證的接口冪等
- 怎麼理解微服務,服務如何劃分,可以從哪幾個方面去劃分,為什麼這樣劃分,微服務帶來了哪些好處,哪些壞處,如何看待這個問題
- 如何理解網關,網關帶來的好處和壞處,如何解決
- hystrix功能 & 在項目中怎麼使用的 & hystrix 怎麼檢測斷路器是否要開啟/關閉 & hystrix 實現原理
- 怎麼理解命令模式和觀察者模式,手寫一個觀察者模式或者命令模式的代碼,策略模式也行
- 掌握哪些設計模式,常用哪些,項目中如何使用的,為什麼用這個,不用那個,手寫一個線程安全的單例模式
- 如何設計一個秒殺系統
- 如果我現在就是要實現每秒10w請求,不能熔斷限流,如何去設計
- 假設現在雙十一零點,大量下單請求,如何對這些訂單進行分庫分表,為什麼
- 服務A調用服務B中一個接口,服務B調用服務C中一個接口,如何實現若服務B響應服務A成功,則服務C一定響應服務B成功,需要考慮系統性能問題
- 遞歸使用中有什麼需要注意的地方,遞歸寫法一般可以用什麼去替換
- 有兩個表,table a,table b,寫sql查詢出僅在table a中的數據、僅在table b中的數據、既在table a 又在table b 中的數據
- spring 源碼有了解沒有
- myBatis源碼有了解沒有
- mysql事務隔離級別、mvcc
我:既然現在很多業務線都是Go了,有沒有考慮把剩餘的業務線也轉成Go呀?
面試官:我認為,語言只是工具,語言不應該是影響開發的一個因素吧。
面試官說的很有道理。
京東
電話面試(30分鐘)+現場兩輪技術面試(1小時40分鐘),面完12:50,說讓我先回來,後續hr 電話和我聯繫
一週後一面的面試官問我還考慮京東嗎?,回覆不考慮了,希望以後有機會再合作
- 一個final修飾的屬性,定義的時候沒有初始化,在無參構造函數中初始化,可以嗎,為什麼
- 說說對java中集合類的理解,項目中用過哪些,哪個地方用的,如何使用的,為什麼不用其他的集合類
- hashMap,concurrentHashMap底層實現,
- list刪除是怎麼實現的,遍歷的時候可以刪除嗎,為什麼
- redis中有哪些數據結構,瞭解過其底層怎麼實現的嗎,和java中相似的數據結構的對比
- redis是單線程的還是多線程的,為什麼這麼快
- redis hash中某個key過大,變為String類型的大key,怎麼處理,使用中如何避免出現這種問題
- 設計模式在項目中哪個地方用到了,怎麼使用的,能不能畫一個你熟悉的設計模式的UML圖,手寫單例模式,手寫靜態內部類實現的單例模式
- 講一講mysql索引,實際工作中,哪些場景用了b+tree索引,哪些場景用了hash索引
- explain 可以看到哪些信息,什麼信息說明什麼,explain的結果列講一下
- Spring源碼看過沒有,會多少講多少
- MyBatis源碼看過沒有,會多少講多少
- cas,cas的缺點,如何解決
- aqs,countDownLatch如何實現
- 線程池如何實現,核心線程數和最大線程數設置成多少,為什麼這麼設置,項目中哪個地方使用了線程池,使用時需要注意什麼
- mysql事務隔離級別,幻讀,髒讀,項目中用什麼事務隔離級別,為什麼
- volatile底層原理、synchronized實現機制,
- 對XA、TCC的理解,瞭解哪些分佈式事務框架,有什麼缺點
- feign 和 dubbo,瞭解多少說多少
- eureka 和 zookeeper,瞭解多少說多少
- hystrix 和 sentinel,瞭解多少說多少
- Spring cloud alibaba,瞭解多少說多少
- 對分庫分表、讀寫分離的瞭解,瞭解多少說多少
- 畫一下java 線程幾個狀態 及 狀態之間互相轉換的圖
- 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖,講數據庫設計 具體到部分表中有哪些字段【原創公眾號:Bella的技術輪子】
- emm 我們部門體量比較大,可能需要加班,到凌晨兩三點的那種,也可能通宵,通宵是大促期間,你能接受嗎
- emm 也會加班到十點,這個不是大促期間,但也不是每天,非常態情況,你能接受嗎,你在哪裡住,過來要多久,有男朋友嗎?一起去吃午飯吧,我們這邊有員工餐廳,不了不了,我回家吃飯吧
下面是面試tmdj 之外的公司中遇到的一些問題哈,tmdj 中已經被問到的就不再重複寫了,只寫一下個別公司中我還記得的面試題
others
火幣:
四輪技術面試+一輪hr 面試(4小時),後來hr 小姐姐和我說,她們正常是兩輪技術面試,因為技術面試完面試官一直沒有找到她,然後,emm,就又來了一輪技術面試,又來了一輪技術面試,笑cry
- kafka 如何保證消息順序消費、在consumer group 中新增一個consumer 會提高消費消息的速度嗎、那如果我想提高消息消費的速度,我要怎麼辦
- redis幾種數據結構 及 底層,項目中如何使用的redis
- 哨兵機制、選舉算法
- 一致性hash
- redis是單線程的還是多線程的,為什麼速度這麼快
- 多路複用的幾種方式以及區別
- 對線程池的理解,在項目中如何使用的,多個線程之間如何共享數據,多個進程之間如何共享數據
- hashMap、concurrentHashMap的區別 及 底層實現、hashMap和hashTable 的區別
- 什麼是紅黑樹,什麼是b-tree,為什麼hashMap中用紅黑樹不用其他樹
- 對mysql 索引的理解,為什麼mysql索引中用b+tree,不用b-tree 或者其他樹,為什麼不用hash 索引
- 數據庫和緩存的雙寫一致性問題
每日一淘:
三輪技術面試+一輪hrbp 面
- 用過哪些Object類的方法,如何使用的
- java如何實現序列化的,Serialization底層如何實現的
- countDownLatch如何實現的
- 項目中監控報警機制如何做的,說說你的瞭解
- 線上服務器cpu飆高,如何處理這個問題
- 服務A調用服務B,用戶請求服務A,發現返回較慢,如何定位這個問題
- TIME_WAIT是什麼狀態還記得嗎,什麼情況下網絡會出現這個狀態
linkedMe:
二輪技術面試+一輪hr面試
1.內核態 和 用戶態、cas 和 sout 哪個用到了內核態和用戶態的切換
2.哪些典型的應用用的是udp
3.線程池有了解嗎,項目中如何使用的
4.計算密集型/IO密集型 任務 分別如何設置線程池的核心線程數和最大線程數,為什麼這麼設置
5.假如我下午5點要和5個人一起開會,但是這5個人現在都出去了,不在公司,但是今天會回來,問,我如何開這場會,用java 併發方面的知識回答
旺店通:
5小時+,中午我還木有吃飯,下午面試時候真是餓的要死,而且下午腦細胞死了好多好多
- 先機試(50分鐘時間,三選二,不聯網,明確告知機試不通過沒有後續)
- 一面給面試官講一下自己機試題的思路,面試官運行看結果,然後問了幾個問題(什麼是B-tree,什麼是B+tree之類的)
- 筆試(10道選擇題+2道數據庫+2道算法題,30分鐘)
- 二面給面試官講自己的機試題的思路,面試官運行看結果,然後給面試官講筆試題,一道一道講為什麼這麼寫,過程中面試官可能會改題,然後問你怎麼解決修改後的題,然後又問了幾個題
- 三面開始正常面試,但不是看簡歷問,一部分是簡歷上的,一部分是看面試官心情
- hr面
當場給了offer,但是啊,從他家出來的時候的想法就是,早知道下午這個樣子,不如中午吃個午飯,回家好好睡一覺
想去他家的小夥伴就好好寫代碼吧,多看java 中一些方法的實現,因為機試的題目都要求不能用java 中提供的方法,要自己寫,然後還要好好準備算法
算法題
- [1,1,2,2,3,4,4,5,5,5] 找出不重複的元素(黃包車)
- 反轉鏈表,要求時間複雜度O(N),空間複雜度O(1) (火幣)
- 非遞歸實現斐波那契數列 (愛奇藝)
- 這一週股市價格為[2,6,1,4,8],求哪一天買入哪一天賣出,可獲得最大收益,最大收益為多少 (愛奇藝)
- 按照箭頭方向查找二叉樹 (金山雲)
- 表a b c之間用id關聯,求陰影部分的數據 (金山雲)【原創公眾號:Bella的技術輪子】
- 一個整形無序數組,裡面三個數只和等於一個目標值,求這三個數 (小米)
- 鏈表問題 (小米)
- 撲克牌問題 (小米)
有十張撲克牌,從上面開始抽,抽出一張放桌子上,然後再抽出一張放撲克牌的最下面,這樣循環往復的操作,直到手裡的牌都沒有了。這時,桌子上牌的順序正好是1 2 3 4 5 6 7 8 9 10。要求寫代碼求出原順序 - 手寫大頂堆 (linkedMe)
- 手寫LRU 算法 (火幣)
- 字符串相加 (滴滴)
兩個數字類型的字符串,直接轉int或者double肯定都放不下,然後求這兩個數的和,返回值還是字符串,15分鐘時間,要求無bug - 尋找目標值位置 (滴滴)
有一個二維數組,數組橫向有序,縱向有序,求目標值的位置,10分鐘時間 - 求字符串“efabcbaefehiabcba”中最長的迴文數,不去重(美團)
- 反轉int類型的值x,不要借用String,只用int 即可。&& 針對該程序,寫出其應有的測試用例 (美團)
- top K 問題(每日一淘)
HR面
真誠待人,以真心換真心,不要弄虛作假,HR 問什麼問題,如實回答即可。在回拒offer 時候,也請好好說話。
tips
其實面試過程中,你是可以感受到哪些面試官是真的很欣賞你,哪些只是想找一個可以幹活的人的,最後一定要去一個欣賞你的面試官那裡,因為待遇真的會不一樣
(假裝我體驗過只是想找我幹活的leader哈,很感激以前遇到的每一位leader 都很欣賞我,給我我想要的空間去做自己想做的事情,真的非常感謝你們)
嗯,免費安利環節到了,學不了吃虧學不了上當哈
- 《深入理解Java虛擬機》
- 《Java併發編程的藝術》
- 《Java併發編程實戰》
- 《MySQL技術內幕 InnoDB存儲引擎》
- 《Redis設計與實現》
- 《JVM G1源碼分析和調優》
- 《重新定義Spring Cloud實戰》
- 《Redis深度歷險:核心原理與應用實踐》
- 《Spring技術內幕》《myBatis技術內幕》
- 《深入拆解Java虛擬機》
等等等等
個人感覺極客時間和掘金小冊還是有很多非常不錯的專欄的,emm,不裝了,上面這些書/專欄,有些我自己都木有看完呢,溜了溜了
由於篇幅限制,小編這裡只將此實戰文檔的所含內容全部展現出來了,需要獲取完整文檔用於學習的朋友們可以關注一下小編,後臺私信“java”或者【資料】獲取免費領取方式!
閱讀更多 路人甲java 的文章