Java全棧,MySQL搞透,架構手到擒來,還有面試官搞不定?

自序

這次面試的公司有一點點多,主要是因為畢業後前兩份工作找的都很草率,這次換工作就想著,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 小姐姐還特貼心的帶我體驗了一把傳說中的頭條餐廳,不超過半小時

  1. 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖
  2. 講項目中的難點、挑戰,你是如何解決的
  3. redis 中有幾種類型 & 各自底層怎麼實現的 & 項目中哪個地方用了什麼類型,怎麼使用的
  4. redis如何實現分佈式鎖,zk如何實現分佈式鎖,兩者的區別。如果service還沒執行完,分佈式鎖在redis中已經過期了,怎麼解決這種問題
  5. synchronized底層實現,加在方法上和加在同步代碼塊中編譯後的區別、類鎖、對象鎖
  6. 鎖升級的過程
  7. java運行時區域 及 各個區域的作用、對GC的瞭解、java內存模型 及 為什麼要這麼設計
  8. 對索引的理解,組合索引,索引的最佳實踐
  9. countDownLatch用過沒有,在項目中如何使用的,對aqs 的瞭解
  10. 寫生產者消費者問題,考慮高併發的情況,可以使用Java 類庫,白紙寫代碼
  11. 如下圖所示

  12. 設計一個發號器,考慮集群和高併發的情況,要求發號器生成的id是遞增趨勢,通過id可以區分出來是今天生成的id還是昨天生成的id,但是生成的id中不能直接帶有日期,要具有一定的混淆功能,白紙寫代碼
  13. 一個二位數組,每個元素都可以往上下左右四個方向走,尋找最長遞增路徑。如下圖所示,最長遞增路徑即紅色字體路徑。白紙寫代碼。

美團

電話面試(40分鐘)+現場三輪技術面試(3.5小時)+hrbp面試(30分鐘)

  1. 數據庫和緩存的一致性問題。先更新數據庫,再更新緩存,若更新完數據庫了,還沒有更新緩存,此時有請求過來了,訪問到了緩存中的數據,怎麼辦?
  2. 聚簇索引/非聚簇索引,mysql索引底層實現,為什麼不用B-tree,為什麼不用hash,葉子結點存放的是數據還是指向數據的內存地址,使用索引需要注意的幾個地方
  3. mysql默認的事務隔離級別,mvcc,rr怎麼實現的,rc如何實現的
  4. mysql間隙鎖有沒有了解,死鎖有沒有了解,寫一段會造成死鎖的sql語句,死鎖發生瞭如何解決,mysql有沒有提供什麼機制去解決死鎖
  5. 談下對GC的瞭解,何為垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的區別,emm,還有一個直擊靈魂的問題,看過cms的源碼嗎,笑cry
  6. 有沒有排查過線上oom的問題,如何排查的
  7. 有沒有使用過jvm自帶的工具,如何使用的
  8. 假設有下圖所示的一個full gc 的圖,縱向是內存使用情況,橫向是時間,你如何排查這個full gc的問題,怎麼去解決你說出來的這些問題【原創公眾號:Bella的技術輪子】
  9. 說說對java中集合類的理解,項目中用過哪些,哪個地方用的,如何使用的
  10. 對CAS的理解,CAS帶來的問題,如何解決這些問題
  11. volatile底層、synchronized底層、鎖升級的過程、MESI
  12. ehcache支持哪些緩存
  13. juc有研究沒有,講一講
  14. 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖
  15. 講項目中的難點、挑戰,如何解決的,項目這一塊會問的特別細
  16. 如何保證RocketMQ 消息的順序性,如何解決重複消費問題
  17. 項目中如何保證接口的冪等操作
  18. 講一講對redis 的瞭解,項目中如何使用的,哪個地方使用的,為什麼要使用
  19. 哨兵機制、redis兩種備份方式的區別,項目中用的哪種,為什麼
  20. 講一講對分佈式鎖的瞭解
  21. 項目中系統監控怎麼做的
  22. 如何理解Spring中的AOP 和 IOC,以及DI,讀過Spring源碼沒有
  23. 讀過MyBatis源碼沒有
  24. 說一個你瞭解最多的框架,說出你的理解
  25. 如何理解分佈式事務,為什麼會出現這個問題,如何去解決,瞭解哪些分佈式事務中間件
  26. 聊一聊對分庫分表的理解
  27. hystrix功能 & 在項目中怎麼使用的 & hystrix 怎麼檢測斷路器是否要開啟/關閉 & hystrix 實現原理,除hystrix之外的其他熔斷限流中間件有了解沒有,瞭解多少說多少
  28. dubbo有了解沒有
  29. 怎麼理解java 中和 mysql 中的樂觀鎖、悲觀鎖
  30. 一致性hash

滴滴

現場三輪技術面試 + 一輪hrbp面(4小時5分鐘)

  1. 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖,講數據庫設計
  2. 處理過線上oom問題沒有,如何處理的
  3. 遇到過線上服務器cpu飆高的情況沒有,如何處理的
  4. 線上有沒有遇到其他問題,如何處理的
  5. 對線程池的理解,項目中哪個地方使用了,如何使用的,用的Excutor框架中的哪個實現類,為什麼用這個
  6. 對CAS的理解,CAS帶來的問題,如何解決這些問題
  7. volatile底層、synchronized底層、鎖升級的過程、MESI
  8. 對mysql索引的理解、對組合索引的理解、索引的最佳實踐
  9. 分佈式鎖的實現、對比redis分佈式鎖 & zk分佈式鎖
  10. 唯一id如何實現的,snowflake實現原理,snowflake有哪些問題,如何避免根據訂單號可以推算出今天的訂單量
  11. 如果線上一個功能是用棧結構實現的,使用過程中要注意哪些問題,為什麼
  12. 怎麼理解線程安全
  13. 怎麼理解接口冪等,項目中如何保證的接口冪等
  14. 怎麼理解微服務,服務如何劃分,可以從哪幾個方面去劃分,為什麼這樣劃分,微服務帶來了哪些好處,哪些壞處,如何看待這個問題
  15. 如何理解網關,網關帶來的好處和壞處,如何解決
  16. hystrix功能 & 在項目中怎麼使用的 & hystrix 怎麼檢測斷路器是否要開啟/關閉 & hystrix 實現原理
  17. 怎麼理解命令模式和觀察者模式,手寫一個觀察者模式或者命令模式的代碼,策略模式也行
  18. 掌握哪些設計模式,常用哪些,項目中如何使用的,為什麼用這個,不用那個,手寫一個線程安全的單例模式
  19. 如何設計一個秒殺系統
  20. 如果我現在就是要實現每秒10w請求,不能熔斷限流,如何去設計
  21. 假設現在雙十一零點,大量下單請求,如何對這些訂單進行分庫分表,為什麼
  22. 服務A調用服務B中一個接口,服務B調用服務C中一個接口,如何實現若服務B響應服務A成功,則服務C一定響應服務B成功,需要考慮系統性能問題
  23. 遞歸使用中有什麼需要注意的地方,遞歸寫法一般可以用什麼去替換
  24. 有兩個表,table a,table b,寫sql查詢出僅在table a中的數據、僅在table b中的數據、既在table a 又在table b 中的數據
  25. spring 源碼有了解沒有
  26. myBatis源碼有了解沒有
  27. mysql事務隔離級別、mvcc

我:既然現在很多業務線都是Go了,有沒有考慮把剩餘的業務線也轉成Go呀?
面試官:我認為,語言只是工具,語言不應該是影響開發的一個因素吧。
面試官說的很有道理。

京東

電話面試(30分鐘)+現場兩輪技術面試(1小時40分鐘),面完12:50,說讓我先回來,後續hr 電話和我聯繫

一週後一面的面試官問我還考慮京東嗎?,回覆不考慮了,希望以後有機會再合作

  1. 一個final修飾的屬性,定義的時候沒有初始化,在無參構造函數中初始化,可以嗎,為什麼
  2. 說說對java中集合類的理解,項目中用過哪些,哪個地方用的,如何使用的,為什麼不用其他的集合類
  3. hashMap,concurrentHashMap底層實現,
  4. list刪除是怎麼實現的,遍歷的時候可以刪除嗎,為什麼
  5. redis中有哪些數據結構,瞭解過其底層怎麼實現的嗎,和java中相似的數據結構的對比
  6. redis是單線程的還是多線程的,為什麼這麼快
  7. redis hash中某個key過大,變為String類型的大key,怎麼處理,使用中如何避免出現這種問題
  8. 設計模式在項目中哪個地方用到了,怎麼使用的,能不能畫一個你熟悉的設計模式的UML圖,手寫單例模式,手寫靜態內部類實現的單例模式
  9. 講一講mysql索引,實際工作中,哪些場景用了b+tree索引,哪些場景用了hash索引
  10. explain 可以看到哪些信息,什麼信息說明什麼,explain的結果列講一下
  11. Spring源碼看過沒有,會多少講多少
  12. MyBatis源碼看過沒有,會多少講多少
  13. cas,cas的缺點,如何解決
  14. aqs,countDownLatch如何實現
  15. 線程池如何實現,核心線程數和最大線程數設置成多少,為什麼這麼設置,項目中哪個地方使用了線程池,使用時需要注意什麼
  16. mysql事務隔離級別,幻讀,髒讀,項目中用什麼事務隔離級別,為什麼
  17. volatile底層原理、synchronized實現機制,
  18. 對XA、TCC的理解,瞭解哪些分佈式事務框架,有什麼缺點
  19. feign 和 dubbo,瞭解多少說多少
  20. eureka 和 zookeeper,瞭解多少說多少
  21. hystrix 和 sentinel,瞭解多少說多少
  22. Spring cloud alibaba,瞭解多少說多少
  23. 對分庫分表、讀寫分離的瞭解,瞭解多少說多少
  24. 畫一下java 線程幾個狀態 及 狀態之間互相轉換的圖
  25. 聊項目,畫項目架構圖,畫一個用戶從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖,講數據庫設計 具體到部分表中有哪些字段【原創公眾號:Bella的技術輪子】
  26. emm 我們部門體量比較大,可能需要加班,到凌晨兩三點的那種,也可能通宵,通宵是大促期間,你能接受嗎
  27. emm 也會加班到十點,這個不是大促期間,但也不是每天,非常態情況,你能接受嗎,你在哪裡住,過來要多久,有男朋友嗎?一起去吃午飯吧,我們這邊有員工餐廳,不了不了,我回家吃飯吧

下面是面試tmdj 之外的公司中遇到的一些問題哈,tmdj 中已經被問到的就不再重複寫了,只寫一下個別公司中我還記得的面試題

others

火幣
四輪技術面試+一輪hr 面試(4小時),後來hr 小姐姐和我說,她們正常是兩輪技術面試,因為技術面試完面試官一直沒有找到她,然後,emm,就又來了一輪技術面試,又來了一輪技術面試,笑cry

  1. kafka 如何保證消息順序消費、在consumer group 中新增一個consumer 會提高消費消息的速度嗎、那如果我想提高消息消費的速度,我要怎麼辦
  2. redis幾種數據結構 及 底層,項目中如何使用的redis
  3. 哨兵機制、選舉算法
  4. 一致性hash
  5. redis是單線程的還是多線程的,為什麼速度這麼快
  6. 多路複用的幾種方式以及區別
  7. 對線程池的理解,在項目中如何使用的,多個線程之間如何共享數據,多個進程之間如何共享數據
  8. hashMap、concurrentHashMap的區別 及 底層實現、hashMap和hashTable 的區別
  9. 什麼是紅黑樹,什麼是b-tree,為什麼hashMap中用紅黑樹不用其他樹
  10. 對mysql 索引的理解,為什麼mysql索引中用b+tree,不用b-tree 或者其他樹,為什麼不用hash 索引
  11. 數據庫和緩存的雙寫一致性問題

每日一淘
三輪技術面試+一輪hrbp 面

  1. 用過哪些Object類的方法,如何使用的
  2. java如何實現序列化的,Serialization底層如何實現的
  3. countDownLatch如何實現的
  4. 項目中監控報警機制如何做的,說說你的瞭解
  5. 線上服務器cpu飆高,如何處理這個問題
  6. 服務A調用服務B,用戶請求服務A,發現返回較慢,如何定位這個問題
  7. 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,1,2,2,3,4,4,5,5,5] 找出不重複的元素(黃包車)
  2. 反轉鏈表,要求時間複雜度O(N),空間複雜度O(1) (火幣)
  3. 非遞歸實現斐波那契數列 (愛奇藝)
  4. 這一週股市價格為[2,6,1,4,8],求哪一天買入哪一天賣出,可獲得最大收益,最大收益為多少 (愛奇藝)
  5. 按照箭頭方向查找二叉樹 (金山雲)
  6. 表a b c之間用id關聯,求陰影部分的數據 (金山雲)【原創公眾號:Bella的技術輪子】
  7. 一個整形無序數組,裡面三個數只和等於一個目標值,求這三個數 (小米)
  8. 鏈表問題 (小米)
  9. 撲克牌問題 (小米)
    有十張撲克牌,從上面開始抽,抽出一張放桌子上,然後再抽出一張放撲克牌的最下面,這樣循環往復的操作,直到手裡的牌都沒有了。這時,桌子上牌的順序正好是1 2 3 4 5 6 7 8 9 10。要求寫代碼求出原順序
  10. 手寫大頂堆 (linkedMe)
  11. 手寫LRU 算法 (火幣)
  12. 字符串相加 (滴滴)
    兩個數字類型的字符串,直接轉int或者double肯定都放不下,然後求這兩個數的和,返回值還是字符串,15分鐘時間,要求無bug
  13. 尋找目標值位置 (滴滴)
    有一個二維數組,數組橫向有序,縱向有序,求目標值的位置,10分鐘時間
  14. 求字符串“efabcbaefehiabcba”中最長的迴文數,不去重(美團)
  15. 反轉int類型的值x,不要借用String,只用int 即可。&& 針對該程序,寫出其應有的測試用例 (美團)
  16. top K 問題(每日一淘)

HR面

真誠待人,以真心換真心,不要弄虛作假,HR 問什麼問題,如實回答即可。在回拒offer 時候,也請好好說話。

tips

其實面試過程中,你是可以感受到哪些面試官是真的很欣賞你,哪些只是想找一個可以幹活的人的,最後一定要去一個欣賞你的面試官那裡,因為待遇真的會不一樣

(假裝我體驗過只是想找我幹活的leader哈,很感激以前遇到的每一位leader 都很欣賞我,給我我想要的空間去做自己想做的事情,真的非常感謝你們)

嗯,免費安利環節到了,學不了吃虧學不了上當哈

  • 《深入理解Java虛擬機》
  • 《Java併發編程的藝術》
  • 《Java併發編程實戰》
  • 《MySQL技術內幕 InnoDB存儲引擎》
  • 《Redis設計與實現》
  • 《JVM G1源碼分析和調優》
  • 《重新定義Spring Cloud實戰》
  • 《Redis深度歷險:核心原理與應用實踐》
  • 《Spring技術內幕》《myBatis技術內幕》
  • 《深入拆解Java虛擬機》

等等等等

個人感覺極客時間和掘金小冊還是有很多非常不錯的專欄的,emm,不裝了,上面這些書/專欄,有些我自己都木有看完呢,溜了溜了

由於篇幅限制,小編這裡只將此實戰文檔的所含內容全部展現出來了,需要獲取完整文檔用於學習的朋友們可以關注一下小編,後臺私信“java”或者【資料】獲取免費領取方式!


分享到:


相關文章: