最新java后端面試吐血總結(jié):MySQL+spring+TCP+分布式

經(jīng)過朋友們的推薦,也是抽空面試了幾家,也把面試的過程及新的總結(jié)了一下。

天潤融通科技Java社招面經(jīng)

說實(shí)話,這個(gè)節(jié)點(diǎn)兒上,裸辭的我,在家大半年,嵌入式轉(zhuǎn)行Java,心情你懂得

一開始,兩個(gè)戴口罩的進(jìn)來,一男一女。

果不其然,

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

我:巴拉巴拉,介紹自己經(jīng)歷……感覺這女的是一個(gè)項(xiàng)目經(jīng)理

女的再問:為什么離職啊,看你是7月底離職的,這段時(shí)間干啥了?

我:(心里想,果不其然),然后就各種解釋了,處于職業(yè)規(guī)劃和公司社保問題兩個(gè)方向說了一下,空檔期就說自己一直在學(xué)Java,提升自己的技術(shù)

女的對旁邊那個(gè)技術(shù)說,我暫時(shí)沒什么問題了,你問吧

男技術(shù):看你簡歷有說到集合,那先談?wù)劶习伞?/p>

我:從Collection、Map開始,然后說到List實(shí)現(xiàn)類ArrayList、LinkedList;Set:TreeSet、HashSet;Map:hashMap,TreeMap;主要又說了HashMap。這個(gè)很常見,就不貼答案了

男技術(shù):嗯,你的項(xiàng)目業(yè)務(wù)上用的是MySQL,能說說MySQL調(diào)優(yōu)嗎?

我:這個(gè)我自己總結(jié)了一下答案如下:

  1. 數(shù)據(jù)選型:首先是數(shù)據(jù)選型方面進(jìn)行優(yōu)化,選取最適用的字段屬性,數(shù)據(jù)的表越小,查詢越快

  2. 范式應(yīng)用:合理使用范式和反范式

  3. 存儲(chǔ)引擎的選擇:如果該數(shù)據(jù)庫讀操作較多,存儲(chǔ)引擎選擇MyISAM,如果是寫操作多,選擇innodb

  4. 主鍵選擇:代理主鍵

  5. 執(zhí)行計(jì)劃explain:使用explain+sql測試sql語句執(zhí)行情況,然后優(yōu)化sql語句

    1. 注意的關(guān)鍵字:type關(guān)鍵字,通常達(dá)到range級(jí)別,最好是ref,而ref最好是一個(gè)常數(shù)。
  6. 索引優(yōu)化:

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

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

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

  7. 查詢優(yōu)化:這個(gè)應(yīng)該被包含在執(zhí)行計(jì)劃中,但是個(gè)人覺得還是拆出來,其實(shí)我們在寫的時(shí)候就該注意sql的效率,explain執(zhí)行計(jì)劃只是驗(yàn)證

    1. 優(yōu)化數(shù)據(jù)訪問,避免查詢中出現(xiàn)篩選大量數(shù)據(jù),可以通過limit限制;

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

    3. 如果業(yè)務(wù)沒有特殊規(guī)定數(shù)據(jù),那么就盡量避免使用UNION,可以考慮UNION-ALL替換,因?yàn)楹笳卟粫?huì)過濾重復(fù)數(shù)據(jù),效率高于UNION

男技術(shù):嗯,說得挺全,你說HashMap時(shí),談到了紅黑樹,那說說MySQL索引為什么用B+樹呢,b樹,紅黑樹呢?為什么不用

我:談了一下B樹與B+樹的區(qū)別,從key說起,B+樹節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),只有葉子節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù),B樹的key既存儲(chǔ)數(shù)據(jù)又存儲(chǔ)key,導(dǎo)致key的減少,數(shù)據(jù)增多的時(shí)候,樹的高度增加,IO次數(shù)變多,導(dǎo)致查詢效率降低;紅黑本身自旋,盡管它的自旋次數(shù)少于AVL樹,但是數(shù)據(jù)增多,同樣會(huì)降低插入刪除效率,并且樹的高度同樣增加,所以不用這兩個(gè)

男技術(shù):嗯,看你項(xiàng)目中有用到redis,redis支持的數(shù)據(jù)類型以及數(shù)據(jù)結(jié)構(gòu),以及你用過那個(gè)數(shù)據(jù)類型,說一下場景

我:這個(gè)可以百度到,至于場景自己想吧。然后可能問到底層的數(shù)據(jù)結(jié)構(gòu)怎么實(shí)現(xiàn),答不出來也沒關(guān)系,我順便把redis的穿透講了一下,因?yàn)橹绊?xiàng)目中用到。

結(jié)果這時(shí)候女的插了一句嘴:redis另外兩個(gè)場景遇到過嗎?

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

男技術(shù):你前面說到了鎖,那redis分布式鎖實(shí)現(xiàn)怎么實(shí)現(xiàn)?

我:思路setnx,考慮死鎖->設(shè)置鎖過期時(shí)間-,然后考慮鎖提前過期,任務(wù)未執(zhí)行完畢->多線程監(jiān)控

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

我:

  1. 請求解析DipatcherServlet路徑:客戶端發(fā)出?個(gè)http請求給web服務(wù)器,web服務(wù)器對http請求進(jìn)?解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉(zhuǎn)交給DispatcherServlet.

  2. 匹配處理器Handler:DipatcherServlet接收到這個(gè)請求之后將根據(jù)請求的信息(包括URL、Http?法、請求報(bào)?頭和請求參數(shù)Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)。

  3. 處理器進(jìn)?處理:DispatcherServlet根據(jù)HandlerMapping找到對應(yīng)的Handler,將處理權(quán)交給Handler(Handler將具體的處理進(jìn)?封裝),再由具體的HandlerAdapter對Handler進(jìn)?具體的調(diào)?。

  4. 處理器返回邏輯視圖ModelAndView對象給DispatcherServlet:Handler對數(shù)據(jù)處理完成以后將返回?個(gè)ModelAndView()對象給DispatcherServlet。

  5. Dispatcher通過ViewResolver將邏輯視圖轉(zhuǎn)化為正式視圖view:Handler返回的ModelAndView()只是?個(gè)邏輯視圖并不是?個(gè)正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉(zhuǎn)化為真正的視圖View。

  6. Dispatcher通過model解析出ModelAndView()中的參數(shù)進(jìn)?解析最終展現(xiàn)出完整的view并返回給客戶端。

男技術(shù):什么是Restful,能講一下嗎?(我有點(diǎn)兒蒙xx)

我:不了解,因?yàn)槲抑暗捻?xiàng)目都是基于cloud,所以沒答出來

男技術(shù):沒關(guān)系,前端與后端通信可以調(diào)用接口,后端與后端之間rpc用過嗎,就是服務(wù)之間的調(diào)用(沒看rpc,所以pass)

我:沒答出來

男技術(shù):沒關(guān)系,fegin了解嗎,手寫過源碼嗎?

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

男技術(shù):最后問兩個(gè)問題:你對自己的職業(yè)規(guī)劃有什么打算嗎?長短期都說一下

我:從近期和職和職業(yè)規(guī)劃來說。

女的開始了:如果有任務(wù)完不成了,你會(huì)怎么處理

我:這個(gè)大家自行百度

女的:對于加班有什么看法

我:這個(gè)也百度去吧

女的:你還有什么想問的

我:問了一下技術(shù)框架,以及開發(fā)人員構(gòu)成


順豐后端社招面經(jīng)

一面:

挑一個(gè)熟悉的java容器聊一下,我選的hashmap
hashmap里的hash函數(shù)你自己的話如何實(shí)現(xiàn),如果你的hash函數(shù)總是取模后在固定的幾個(gè)位置,如何優(yōu)化這種情況,各個(gè)角度都可以說,可以是算法和數(shù)據(jù)結(jié)構(gòu)等
聊一下你知道的索引;有一個(gè)表存在字段id(非主鍵、遞增可重復(fù))、name,如果有1000W條數(shù)據(jù),查其中一條,有索引和沒索引的情況下執(zhí)行時(shí)間,建索引是否有用、會(huì)走索引嗎、為什么
TCP的三次握手四次揮手、滑動(dòng)窗口
TCP/IP四層協(xié)議、ip在哪層
TCP有無狀態(tài)
如何判斷一個(gè)鏈表是環(huán)鏈
聊項(xiàng)目
能接受加班嗎

二面:
聊項(xiàng)目
dubbo原理,dubbo往zk寫入的內(nèi)容是什么
dubbo客戶端負(fù)載均衡如何實(shí)現(xiàn)的,給你你如何實(shí)現(xiàn),一步步提示和完善
zk除了做注冊中心還有什么用途
zk的數(shù)據(jù)類型;zk分布式鎖,講具體實(shí)現(xiàn)
聊下hashmap和concurrentHashMap
spring啟動(dòng)流程
spring bean生命周期、bean實(shí)例化過程
類加載過程
二叉樹遍歷,寫了遞歸,非遞歸會(huì)嗎,忘了
多線程了解嗎,threadPoolExcutor構(gòu)造函數(shù)的各個(gè)參數(shù)詳解

三面是HR

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容