最新java後端面試吐血總結:MySQL+spring+TCP+分佈式

經過朋友們的推薦,也是抽空面試了幾家,也把面試的過程及新的總結了一下。

天潤融通科技Java社招面經

說實話,這個節點兒上,裸辭的我,在家大半年,嵌入式轉行Java,心情你懂得

一開始,兩個戴口罩的進來,一男一女。

果不其然,

女的先問:先介紹一下自己,

我:巴拉巴拉,介紹自己經歷……感覺這女的是一個項目經理

女的再問:爲什麼離職啊,看你是7月底離職的,這段時間幹啥了?

我:(心裏想,果不其然),然後就各種解釋了,處於職業規劃和公司社保問題兩個方向說了一下,空檔期就說自己一直在學Java,提升自己的技術

女的對旁邊那個技術說,我暫時沒什麼問題了,你問吧

男技術:看你簡歷有說到集合,那先談談集合吧。

我:從Collection、Map開始,然後說到List實現類ArrayList、LinkedList;Set:TreeSet、HashSet;Map:hashMap,TreeMap;主要又說了HashMap。這個很常見,就不貼答案了

男技術:嗯,你的項目業務上用的是MySQL,能說說MySQL調優嗎?

我:這個我自己總結了一下答案如下:

  1. 數據選型:首先是數據選型方面進行優化,選取最適用的字段屬性,數據的表越小,查詢越快

  2. 範式應用:合理使用範式和反範式

  3. 存儲引擎的選擇:如果該數據庫讀操作較多,存儲引擎選擇MyISAM,如果是寫操作多,選擇innodb

  4. 主鍵選擇:代理主鍵

  5. 執行計劃explain:使用explain+sql測試sql語句執行情況,然後優化sql語句

    1. 注意的關鍵字:type關鍵字,通常達到range級別,最好是ref,而ref最好是一個常數。
  6. 索引優化:

    1. 儘量在主鍵上添加使用索引

    2. 利用覆蓋索引、索引下推機制,注意組合索引的匹配原則,

    3. 儘量使用唯一索引,避免使用普通索引

  7. 查詢優化:這個應該被包含在執行計劃中,但是個人覺得還是拆出來,其實我們在寫的時候就該注意sql的效率,explain執行計劃只是驗證

    1. 優化數據訪問,避免查詢中出現篩選大量數據,可以通過limit限制;

    2. 避免select * from table這種全表掃描的語句

    3. 如果業務沒有特殊規定數據,那麼就儘量避免使用UNION,可以考慮UNION-ALL替換,因爲後者不會過濾重複數據,效率高於UNION

男技術:嗯,說得挺全,你說HashMap時,談到了紅黑樹,那說說MySQL索引爲什麼用B+樹呢,b樹,紅黑樹呢?爲什麼不用

我:談了一下B樹與B+樹的區別,從key說起,B+樹節點不存儲數據,只有葉子節點存儲數據,B樹的key既存儲數據又存儲key,導致key的減少,數據增多的時候,樹的高度增加,IO次數變多,導致查詢效率降低;紅黑本身自旋,儘管它的自旋次數少於AVL樹,但是數據增多,同樣會降低插入刪除效率,並且樹的高度同樣增加,所以不用這兩個

男技術:嗯,看你項目中有用到redis,redis支持的數據類型以及數據結構,以及你用過那個數據類型,說一下場景

我:這個可以百度到,至於場景自己想吧。然後可能問到底層的數據結構怎麼實現,答不出來也沒關係,我順便把redis的穿透講了一下,因爲之前項目中用到。

結果這時候女的插了一句嘴:redis另外兩個場景遇到過嗎?

我:(心裏……)redis擊穿、和redis雪崩,然後說了一下如何解決

男技術:你前面說到了鎖,那redis分佈式鎖實現怎麼實現?

我:思路setnx,考慮死鎖->設置鎖過期時間-,然後考慮鎖提前過期,任務未執行完畢->多線程監控

男技術:看你用過Spring MVC,說一下請求處理流程

我:

  1. 請求解析DipatcherServlet路徑:客戶端發出⼀個http請求給web服務器,web服務器對http請求進⾏解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.

  2. 匹配處理器Handler:DipatcherServlet接收到這個請求之後將根據請求的信息(包括URL、Http⽅法、請求報⽂頭和請求參數Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)。

  3. 處理器進⾏處理:DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進⾏封裝),再由具體的HandlerAdapter對Handler進⾏具體的調⽤。

  4. 處理器返回邏輯視圖ModelAndView對象給DispatcherServlet:Handler對數據處理完成以後將返回⼀個ModelAndView()對象給DispatcherServlet。

  5. Dispatcher通過ViewResolver將邏輯視圖轉化爲正式視圖view:Handler返回的ModelAndView()只是⼀個邏輯視圖並不是⼀個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉化爲真正的視圖View。

  6. Dispatcher通過model解析出ModelAndView()中的參數進⾏解析最終展現出完整的view並返回給客戶端。

男技術:什麼是Restful,能講一下嗎?(我有點兒蒙xx)

我:不瞭解,因爲我之前的項目都是基於cloud,所以沒答出來

男技術:沒關係,前端與後端通信可以調用接口,後端與後端之間rpc用過嗎,就是服務之間的調用(沒看rpc,所以pass)

我:沒答出來

男技術:沒關係,fegin瞭解嗎,手寫過源碼嗎?

我: (pass,沒寫過,說了一下fegin的作用)

男技術:最後問兩個問題:你對自己的職業規劃有什麼打算嗎?長短期都說一下

我:從近期和職和職業規劃來說。

女的開始了:如果有任務完不成了,你會怎麼處理

我:這個大家自行百度

女的:對於加班有什麼看法

我:這個也百度去吧

女的:你還有什麼想問的

我:問了一下技術框架,以及開發人員構成


順豐後端社招面經

一面:

挑一個熟悉的java容器聊一下,我選的hashmap
hashmap裏的hash函數你自己的話如何實現,如果你的hash函數總是取模後在固定的幾個位置,如何優化這種情況,各個角度都可以說,可以是算法和數據結構等
聊一下你知道的索引;有一個表存在字段id(非主鍵、遞增可重複)、name,如果有1000W條數據,查其中一條,有索引和沒索引的情況下執行時間,建索引是否有用、會走索引嗎、爲什麼
TCP的三次握手四次揮手、滑動窗口
TCP/IP四層協議、ip在哪層
TCP有無狀態
如何判斷一個鏈表是環鏈
聊項目
能接受加班嗎

二面:
聊項目
dubbo原理,dubbo往zk寫入的內容是什麼
dubbo客戶端負載均衡如何實現的,給你你如何實現,一步步提示和完善
zk除了做註冊中心還有什麼用途
zk的數據類型;zk分佈式鎖,講具體實現
聊下hashmap和concurrentHashMap
spring啓動流程
spring bean生命週期、bean實例化過程
類加載過程
二叉樹遍歷,寫了遞歸,非遞歸會嗎,忘了
多線程瞭解嗎,threadPoolExcutor構造函數的各個參數詳解

三面是HR

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章