?2021 阿里淘系 Java 面經(jīng),二面卒!
今天下午把 JavaGuide[1]上 MySQL 以及書單部分的內(nèi)容完善了一下。

晚上出去吃了飯,本來(lái)是想著寫寫水文,聊聊近期的生活。不過,看著很多小伙伴被各種面試毒打,我很難受啊,還是做點(diǎn)什么吧!

給小伙伴們分享兩個(gè)近期的面經(jīng),問的問題挺有代表性的,你們可以拿來(lái)自測(cè)一下!
參考答案我這里也沒有,也沒時(shí)間一個(gè)一個(gè)幫你們回答。你們可以到 JavaGuide 上找,JavaGuide 上面找不到的,自己搜一下、看看書。
阿里淘系 Java(大三實(shí)習(xí))
一面
首先還是沒有自我介紹,直接是項(xiàng)目介紹,項(xiàng)目使用的什么技術(shù)棧,里面的一些難點(diǎn)。 項(xiàng)目中的大致流程,怎么去運(yùn)行的。 項(xiàng)目中的容器使用到 MySQL,ES,MongoDB,Redis,這些都是干嘛?為什么要用他們(他們有什么好處?解決什么額問題?),項(xiàng)目中怎么使用的? 那么你們肯定使用到了索引對(duì)吧,詳細(xì)說(shuō)說(shuō) mysql 索引吧? 你們建立索引有什么規(guī)則?怎么建立的?哪些地方使用到了索引?有什么好處?結(jié)合具體場(chǎng)景回答回答。 索引是 B+樹是吧?這個(gè)有什么優(yōu)點(diǎn)呢,為什么 MySQL 要使用 B+樹,不用別的呢?(這里我想問下大佬們,除了減少 io 次數(shù),局部性原理,穩(wěn)定,有序還有什么優(yōu)點(diǎn)呢?) 存儲(chǔ)引擎了解過嗎? 你使用過 MVC 是吧,具體說(shuō)說(shuō)是什么,為什么選擇這個(gè),怎么封裝的,如何方便? MVC 是什么?三層架構(gòu)指什么?為什么使用三層架構(gòu),具體說(shuō)說(shuō)怎么松耦合的,舉例子? MVC 請(qǐng)求執(zhí)行流程 你說(shuō)說(shuō)為什么松耦合,你代碼中怎么實(shí)現(xiàn)松耦合?這樣為什么就能體現(xiàn)松耦合,是什么和什么之間的耦合? Spring 是什么?有什么優(yōu)點(diǎn)?IOC 具體講講,為什么交給 Spring 容器管理就會(huì)松耦合,你來(lái)具體說(shuō)一說(shuō)? HashMap 底層了解過吧?說(shuō)說(shuō)底層吧,數(shù)據(jù)結(jié)構(gòu)。 HashMap 查詢,刪除的時(shí)間復(fù)雜度。 保證線程安全,為什么推薦使用 ConcurrentHashMap,有什么特點(diǎn)。就只是使用數(shù)據(jù)結(jié)構(gòu) cas volatile 嗎?除了這些沒別的優(yōu)點(diǎn)了嗎? cas 為什么就比 synchronized 輕量,什么原因,synchronized 怎么調(diào)用到操作系統(tǒng)的?具體說(shuō)說(shuō),操作系統(tǒng)消耗什么資源呢? Java 內(nèi)存模型,那怎么保證可見性?加鎖為什么就可以保證內(nèi)存屏障? 內(nèi)存屏障是什么?具體說(shuō)說(shuō)吧??jī)?nèi)存屏障為什么保障可見性?指令重排序?happen-before 原則了解么? 線程這邊在操作系統(tǒng)怎么體現(xiàn)的,解決什么問題?在單核 cpu 中線程起什么作用?為什么輕量? 單核 CPU 線程解決問題,多核 CPU 中解決什么問題? 怎么設(shè)置 CPU 最佳線程數(shù)? 操作系統(tǒng)內(nèi)存管理?分頁(yè)?置換算法?有去深入了解嗎? 線程池聊聊?怎么設(shè)置線程數(shù),什么時(shí)候最優(yōu),為什么這么設(shè)置? 好的我這邊已經(jīng)大致了解了,你還有什么想問的嗎?(我反問:部門干什么的,我表現(xiàn)怎么樣?)
二面
自我介紹 項(xiàng)目介紹,技術(shù)難點(diǎn) 看你項(xiàng)目使用到反射,談?wù)勀銓?duì)于反射的理解,你在 項(xiàng)目中怎么使用的反射,有什么好處? 說(shuō)說(shuō) jvm 吧?jvm 怎么樣你所了解的?(內(nèi)存結(jié)構(gòu),堆,垃圾收集 算法。垃圾收集器,各個(gè)特點(diǎn)) 類加載?雙親委派?你怎么能實(shí)現(xiàn)類加載機(jī)制?有什么需要考慮的嗎? 使用類加載機(jī)制能實(shí)現(xiàn)嗎?考慮什么問題? 說(shuō)說(shuō) fullgc 你說(shuō)說(shuō)你的了解?jvm 觸發(fā) fullGC 老年代沒有減少可能是什么原因? 說(shuō)說(shuō)你使用的集合?底層了解多少? 說(shuō)說(shuō) ArrayList 和 LinkedList 底層有什么區(qū)別?說(shuō)說(shuō)怎么刪除固定的位置的元素?有什么線程安全問題嗎?為什么會(huì)產(chǎn)生? 說(shuō)說(shuō) HashMap 的底層原理?數(shù)據(jù)結(jié)構(gòu)?擴(kuò)容? 說(shuō)說(shuō) ConcurrentHashMap? 說(shuō)說(shuō)你的 MySQL 理解?有沒有寫過什么復(fù)雜的 SQL?使用什么優(yōu)化了嗎?你平時(shí)是如何優(yōu)化 SQL 的?如何查看 SQL 語(yǔ)句的執(zhí)行速度? 索引說(shuō)一說(shuō)?分庫(kù)分表? 說(shuō)說(shuō) synchronized 和 volatile? 說(shuō)說(shuō) url 從輸入到回車經(jīng)歷的過程?http tcp(三次握手,對(duì)應(yīng)的狀態(tài)) 說(shuō)說(shuō) ARP 協(xié)議? 說(shuō)說(shuō)磁盤調(diào)度 算法?說(shuō)說(shuō)電梯 算法?說(shuō)說(shuō)掃描 算法? 說(shuō)說(shuō) Java 的線程和操作系統(tǒng)的線程是不是一樣的?有什么區(qū)別? 說(shuō)說(shuō)你理解的線程?說(shuō)說(shuō)線程池?幾種方式?阿里巴巴開發(fā)手冊(cè)為什么推薦使用自定義線程池? 說(shuō)說(shuō)你的實(shí)習(xí)? 說(shuō)說(shuō)怎么創(chuàng)建線程?有幾種方式,為什么?有什么區(qū)別? 移位操作為什么快?從底層是二進(jìn)制,補(bǔ)碼原碼真值回答底層的原理。反問:部門干什么的?我表現(xiàn)怎么樣?
二面之后,就沒有下文了。這次面試確實(shí)有點(diǎn)受到了打擊,業(yè)務(wù)場(chǎng)景確實(shí)我菜了。
攜程春招 Java 后端
一面
介紹下項(xiàng)目,熱點(diǎn)數(shù)據(jù)用 Redis 的什么數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)? zset。你這個(gè)負(fù)載均衡算法中的加權(quán)輪訓(xùn)算法怎么實(shí)現(xiàn)的?Rpc 項(xiàng)目中客戶端調(diào)用服務(wù)的整個(gè)過程?怎么使用 Netty 進(jìn)行通訊的?SpringBoot 常用注解? SpringBootApllication由哪些注解組成?由三個(gè)注解組成,其中有一個(gè)開啟自動(dòng)配置的注解。說(shuō)一下 volatile?volatile有內(nèi)存可見性和有序性,底層通過 lock 前綴的一個(gè)空指令實(shí)現(xiàn)。sleep和wait的區(qū)別?一個(gè)釋放鎖,一個(gè)不會(huì),wait 可以無(wú)限阻塞,sleep 不能。了解哪些設(shè)計(jì)模式?寫一個(gè)雙重檢測(cè)的單例模式,為什么要加 synchronized?因?yàn)橐紤]線程安全,加在類方法和普通方法有什么區(qū)別? 了解注解嗎?自己的項(xiàng)目使用到了自定義注解。注解怎么實(shí)現(xiàn)的?通過反射實(shí)現(xiàn)。反射中獲取 class 對(duì)象的三種方式?通過 object 類的 getClass 方法,類的 class 屬性,class 類的 forName 方法。 了解哪些排序算法,寫一個(gè)快排吧。
二面
詳細(xì)講解你的項(xiàng)目,細(xì)節(jié)與難點(diǎn)。項(xiàng)目中使用的序列器,protobuf 為什么快? Java 的 io 模型?bio,nio,aio。其中 nio 使用操作系統(tǒng)的 io 多路復(fù)用。io 多路復(fù)用的實(shí)現(xiàn)有哪些?select,poll,epoll。 寫一個(gè)多線程的題,線程 1 打印 a,線程 2 打印 b,線程 3 打印 c,要求順序打印出 abcabcabc。
反問,對(duì)自己有什么建議,按校招已經(jīng)到達(dá)標(biāo)準(zhǔn),由于時(shí)間問題沒法再深入了解項(xiàng)目,所以也沒有什么建議。
整體難度不是很大,不像大廠那樣死扣細(xì)節(jié)。最后求個(gè) hr 面,不然真的要失業(yè)了。
HR 面
自我介紹 為什么不讀研究生了 工作地點(diǎn)有要求嗎 薪資要求 有過實(shí)習(xí)嗎 你這個(gè)項(xiàng)目的難點(diǎn)是什么 比較看中公司的哪些方面 有其他 offer 嗎,哪些公司還在流程中 過四六級(jí)嗎?多少分?等下發(fā)個(gè)英語(yǔ)測(cè)評(píng)有時(shí)間去做下,會(huì)根據(jù)測(cè)評(píng)結(jié)果安排后續(xù)的進(jìn)程
反問,公司對(duì)應(yīng)屆生的培訓(xùn)機(jī)制,多長(zhǎng)時(shí)間出結(jié)果。
參考資料
JavaGuide: https://github.com/Snailclimb/JavaGuide
歡迎加入我的星球,一個(gè)純 Java 面試交流圈子 !Ready!。目前星球已經(jīng)更新 3 個(gè)原創(chuàng)小冊(cè):《Java面試進(jìn)階指北》、《從零開始寫一個(gè) RPC 框架》 、《程序員副業(yè)賺錢之路》。累計(jì)幫助 520+ 位球友提供了免費(fèi)的簡(jiǎn)歷修改服務(wù),回答了 500+ 個(gè)問題,產(chǎn)出了 1300+ 個(gè)主題。
推薦?? :1049天,100K!簡(jiǎn)單復(fù)盤!
推薦?? :匯報(bào)一下2020的工作
推薦?? :Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅
