天天看點

RPC的通信Netty的底層是Nio,帶你碾壓面試官!

前言

最近有很多朋友去目前主流的大型網際網路公司面試(阿裡巴巴、京東、位元組跳動、螞蟻金服、滴滴),面試回來之後會發給我一些面試題。有些朋友輕松過關,拿到offer,但是有一些是來詢問我答案的。

我特意整理了一下,有很多問題不是靠幾句話能講清楚,是以整理了一些資料來解答這些面試題。很多問題其實答案很簡單,但是背後的思考和邏輯不簡單,要做到知其然還要知其是以然。

頭條二面

二輪技術面,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. 如下圖所示
RPC的通信Netty的底層是Nio,帶你碾壓面試官!
  1. 設計一個發号器,考慮叢集和高并發的情況,要求發号器生成的id是遞增趨勢,通過id可以區分出來是今天生成的id還是昨天生成的id,但是生成的id中不能直接帶有日期,要具有一定的混淆功能,白紙寫代碼
  2. 一個二位數組,每個元素都可以往上下左右四個方向走,尋找最長遞增路徑。如下圖所示,最長遞增路徑即紅色字型路徑。白紙寫代碼。
RPC的通信Netty的底層是Nio,帶你碾壓面試官!
RPC的通信Netty的底層是Nio,帶你碾壓面試官!

美團四面

電話面試(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的問題,怎麼去解決你說出來的這些問題。
RPC的通信Netty的底層是Nio,帶你碾壓面試官!
  1. 說說對java中集合類的了解,項目中用過哪些,哪個地方用的,如何使用的
  2. 對CAS的了解,CAS帶來的問題,如何解決這些問題
  3. volatile底層、synchronized底層、鎖更新的過程、MESI
  4. ehcache支援哪些緩存
  5. juc有研究沒有,講一講
  6. 聊項目,畫項目架構圖,畫一個使用者從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖
  7. 講項目中的難點、挑戰,如何解決的,項目這一塊會問的特别細
  8. 如何保證RocketMQ 消息的順序性,如何解決重複消費問題
  9. 項目中如何保證接口的幂等操作
  10. 講一講對redis 的了解,項目中如何使用的,哪個地方使用的,為什麼要使用
  11. 哨兵機制、redis兩種備份方式的差別,項目中用的哪種,為什麼
  12. 講一講對分布式鎖的了解
  13. 項目中系統監控怎麼做的
  14. 如何了解Spring中的AOP 和 IOC,以及DI,讀過Spring源碼沒有
  15. 讀過MyBatis源碼沒有
  16. 說一個你了解最多的架構,說出你的了解
  17. 如何了解分布式事務,為什麼會出現這個問題,如何去解決,了解哪些分布式事務中間件
  18. 聊一聊對分庫分表的了解
  19. hystrix功能 & 在項目中怎麼使用的 & hystrix 怎麼檢測斷路器是否要開啟/關閉 & hystrix 實作原理,除hystrix之外的其他熔斷限流中間件有了解沒有,了解多少說多少
  20. dubbo有了解沒有
  21. 怎麼了解java 中和 mysql 中的樂觀鎖、悲觀鎖
  22. 一緻性hash
RPC的通信Netty的底層是Nio,帶你碾壓面試官!

京東

電話面試(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. 聊項目,畫項目架構圖,畫一個使用者從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖,講資料庫設計 具體到部分表中有哪些字段
  26. emm 我們部門體量比較大,可能需要加班,到淩晨兩三點的那種,也可能通宵,通宵是大促期間,你能接受嗎
  27. emm 也會加班到十點,這個不是大促期間,但也不是每天,非常态情況,你能接受嗎,你在哪裡住,過來要多久,有男朋友嗎
  28. 一起去吃午飯吧,我們這邊有員工餐廳,不了不了,我回家吃飯吧
RPC的通信Netty的底層是Nio,帶你碾壓面試官!

下面是面試tmj 之外的公司中遇到的一些問題哈,tmj 中已經被問到的就不再重複寫了,隻寫一下個别公司中我還記得的面試題(重點總結寫算法)

算法題

  1. [1,1,2,2,3,4,4,5,5,5] 找出不重複的元素(黃包車)
  2. 反轉連結清單,要求時間複雜度O(N),空間複雜度O(1) (火币)
  3. 非遞歸實作斐波那契數列 (愛奇藝)
  4. 這一周股市價格為[2,6,1,4,8],求哪一天買入哪一天賣出,可獲得最大收益,最大收益為多少 (愛奇藝)
  5. 按照箭頭方向查找二叉樹 (金山雲)
RPC的通信Netty的底層是Nio,帶你碾壓面試官!

表a b c之間用id關聯,求陰影部分的資料 (金山雲)

RPC的通信Netty的底層是Nio,帶你碾壓面試官!
  1. 一個整形無序數組,裡面三個數隻和等于一個目标值,求這三個數 (小米)
  2. 連結清單問題 (小米)
RPC的通信Netty的底層是Nio,帶你碾壓面試官!
  1. 撲克牌問題 (小米)
  2. 有十張撲克牌,從上面開始抽,抽出一張放桌子上,然後再抽出一張放撲克牌的最下面,這樣循環往複的操作,直到手裡的牌都沒有了。這時,桌子上牌的順序正好是1 2 3 4 5 6 7 8 9 10。要求寫代碼求出原順序
  3. 手寫大頂堆 (linkedMe)
  4. 手寫LRU 算法 (火币)
  5. 字元串相加 (滴滴)
  6. 兩個數字類型的字元串,直接轉int或者double肯定都放不下,然後求這兩個數的和,傳回值還是字元串,15分鐘時間,要求無bug
  7. 尋找目标值位置 (滴滴)
  8. 有一個二維數組,數組橫向有序,縱向有序,求目标值的位置,10分鐘時間
  9. 求字元串“efabcbaefehiabcba”中最長的回文數,不去重(美團)
  10. 反轉int類型的值x,不要借用String,隻用int 即可。&& 針對該程式,寫出其應有的測試用例 (美團)
  11. top K 問題(每日一淘)

總結

面試難免讓人焦慮不安。經曆過的人都懂的。但是如果你提前預測面試官要問你的問題并想出得體的回答方式,就會容易很多。

此外,都說“面試造火箭,工作擰螺絲”,那對于準備面試的朋友,你隻需懂一個字:刷!

給我刷刷刷刷,使勁兒刷刷刷刷刷!今天既是來談面試的,那就必須得來整點面試真題,這不花了我整28天,做了份“Java一線大廠高崗面試題解析合集:JAVA基礎-中級-進階面試+SSM架構+分布式+性能調優+微服務+并發程式設計+網絡+設計模式+資料結構與算法等”

RPC的通信Netty的底層是Nio,帶你碾壓面試官!
資料領取方式:點選這裡免費下載下傳

且除了單純的刷題,也得需準備一本【JAVA進階核心知識手冊】:JVM、JAVA集合、JAVA多線程并發、JAVA基礎、Spring 原理、微服務、Netty與RPC、網絡、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、設計模式、負載均衡、資料庫、一緻性算法、JAVA算法、資料結構、加密算法、分布式緩存、Hadoop、Spark、Storm、YARN、機器學習、雲計算,用來查漏補缺最好不過。

微服務、Netty與RPC、網絡、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、設計模式、負載均衡、資料庫、一緻性算法、JAVA算法、資料結構、加密算法、分布式緩存、Hadoop、Spark、Storm、YARN、機器學習、雲計算,用來查漏補缺最好不過。

RPC的通信Netty的底層是Nio,帶你碾壓面試官!