企业级项目实战讲解!java类内部定义枚举
螞蟻一面
??就做了?道算法題,要求兩?時(shí)內(nèi)完成,給了?度為N的有重復(fù)元素的數(shù)組,要求輸出第10?的數(shù)。典型的TopK問(wèn)題,快排算法搞定。算法題要注意的是合法性校驗(yàn)、邊界條件以及異常的處理。另外,如果要寫(xiě)測(cè)試?例,?定要保證測(cè)試覆蓋場(chǎng)景盡可能全。加上平時(shí)刷刷算法題,這種考核應(yīng)該沒(méi)問(wèn)題的。
螞蟻二面
- ?我介紹下唄
- 開(kāi)源項(xiàng)?貢獻(xiàn)過(guò)代碼么?(Dubbo提過(guò)?個(gè)打印accesslog的bug算么)
- ?前在部?做什么,業(yè)務(wù)簡(jiǎn)單介紹下,內(nèi)部有哪些系統(tǒng),作?和交互過(guò)程說(shuō)下
- Dubbo踩過(guò)哪些坑,分別是怎么解決的?(說(shuō)了異常處理時(shí)業(yè)務(wù)異常捕獲的問(wèn)題,?定義了?個(gè)異常攔截器)
- 開(kāi)始進(jìn)?正題,說(shuō)下你對(duì)線程安全的理解(多線程訪問(wèn)同?個(gè)對(duì)象,如果不需要考慮額外的同步,調(diào)?對(duì)象的?為就可以獲得正確的結(jié)果就是線程安全)
- 事務(wù)有哪些特性?(ACID)
- 怎么理解原?性?(同?個(gè)事務(wù)下,多個(gè)操作要么成功要么失敗,不存在部分成功或者部分失敗的情況)
- 樂(lè)觀鎖和悲觀鎖的區(qū)別?(悲觀鎖假定會(huì)發(fā)?沖突,訪問(wèn)的時(shí)候都要先獲得鎖,保證同?個(gè)時(shí)刻只有線程獲得鎖,讀讀也會(huì)阻塞;樂(lè)觀鎖假設(shè)不會(huì)發(fā)?沖突,只有在提交操作的時(shí)候檢查是否有沖突)這兩種鎖在Java和MySQL分別是怎么實(shí)現(xiàn)的?(Java樂(lè)觀鎖通過(guò)CAS實(shí)現(xiàn),悲觀鎖通過(guò)synchronize實(shí)現(xiàn)。mysql樂(lè)觀鎖通過(guò)MVCC,也就是版本實(shí)現(xiàn),悲觀鎖可以通過(guò)select… forupdate加上排它鎖)
- HashMap為什么不是線程安全的?(多線程操作?并發(fā)控制,順便說(shuō)了在擴(kuò)容的時(shí)候多線程訪問(wèn)時(shí)會(huì)造成死鎖,會(huì)形成?個(gè)環(huán),不過(guò)擴(kuò)容時(shí)多線程操作形成環(huán)的問(wèn)題再JDK1.8已經(jīng)解決,但多線程下使?HashMap還會(huì)有?些其他問(wèn)題?如數(shù)據(jù)丟失,所以多線程下不應(yīng)該使?HashMap,?應(yīng)該使?ConcurrentHashMap)怎么讓HashMap變得線程安全?(Collections的synchronize?法包裝?個(gè)線程安全的Map,或者直接?ConcurrentHashMap)兩者的區(qū)別是什么?(前者直接在put和get?法加了synchronize同步,后者采?了分段鎖以及CAS?持更?的并發(fā))
- jdk1.8對(duì)ConcurrentHashMap做了哪些優(yōu)化?(插?的時(shí)候如果數(shù)組元素使?了紅?樹(shù),取消了分段鎖設(shè)計(jì),synchronize替代了Lock鎖)為什么這樣優(yōu)化?(避免沖突嚴(yán)重時(shí)鏈表多?,提?查詢(xún)效率,時(shí)間復(fù)雜度從O(N)提?到O(logN))
- redis主從機(jī)制了解么?怎么實(shí)現(xiàn)的?
- 有過(guò)GC調(diào)優(yōu)的經(jīng)歷么?(有點(diǎn)虛,答得不是很好)
- 有什么想問(wèn)的么?
螞蟻三面
- 簡(jiǎn)單?我介紹下
- 監(jiān)控系統(tǒng)怎么做的,分為哪些模塊,模塊之間怎么交互的??的什么數(shù)據(jù)庫(kù)?(MySQL)使?什么存儲(chǔ)引擎,為什么使?InnnoDB?(?持事務(wù)、聚簇索引、MVCC)
- 訂單表有做拆分么,怎么拆的?(垂直拆分和?平拆分)
- ?平拆分后查詢(xún)過(guò)程描述下
- 如果落到某個(gè)分?的數(shù)據(jù)很?怎么辦?(按照某種規(guī)則,?如哈希取模、range,將單張表拆分為多張表)
- 哈希取模會(huì)有什么問(wèn)題么?(有的,數(shù)據(jù)分布不均,擴(kuò)容縮容相對(duì)復(fù)雜 )
- 分庫(kù)分表后怎么解決讀寫(xiě)壓??(?主多從、多主多從)
- 拆分后主鍵怎么保證位置?(UUID、Snowflake算法)
- Snowflake?成的ID是全局遞增唯?么?(不是,只是全局唯?,單機(jī)遞增)
- 怎么實(shí)現(xiàn)全局遞增的唯?ID?(講了TDDL的?次取?批ID,然后再本地慢慢分配的做法)
- Mysql的索引結(jié)構(gòu)說(shuō)下(說(shuō)了B+樹(shù),B+樹(shù)可以對(duì)葉?結(jié)點(diǎn)順序查找,因?yàn)槿~?結(jié)點(diǎn)存放了數(shù)據(jù)結(jié)點(diǎn)且有序)
- 主鍵索引和普通索引的區(qū)別(主鍵索引的葉?結(jié)點(diǎn)存放了整?記錄,普通索引的葉?結(jié)點(diǎn)存放了主鍵ID,查詢(xún)的時(shí)候需要做?次回表查詢(xún))?定要回表查詢(xún)么?(不?定,當(dāng)查詢(xún)的字段剛好是索引的字段或者索引的?部分,就可以不?回表,這也是索引覆蓋的原理)
- 你們系統(tǒng)?前的瓶頸在哪??
- 你打算怎么優(yōu)化?簡(jiǎn)要說(shuō)下你的優(yōu)化思路
- 有什么想問(wèn)我么?
螞蟻四面
- 介紹下??
- 為什么要做逆向?
- 怎么理解微服務(wù)?
- 服務(wù)治理怎么實(shí)現(xiàn)的?(說(shuō)了限流、壓測(cè)、監(jiān)控等模塊的實(shí)現(xiàn))
- 這個(gè)不是中間件做的事么,為什么你們部?做?(當(dāng)時(shí)沒(méi)有單獨(dú)的中間件團(tuán)隊(duì),微服務(wù)剛搞不久,需要進(jìn)?監(jiān)控和性能優(yōu)化)
- 說(shuō)說(shuō)Spring的?命周期吧
- 說(shuō)說(shuō)GC的過(guò)程(說(shuō)了young gc和full gc的觸發(fā)條件和回收過(guò)程以及對(duì)象創(chuàng)建的過(guò)程)
- CMS GC有什么問(wèn)題?(并發(fā)清除算法,浮動(dòng)垃圾,短暫停頓)
- 怎么避免產(chǎn)?浮動(dòng)垃圾?(記得有個(gè)VM參數(shù)設(shè)置可以讓掃描新?代之前進(jìn)??次young gc,但是因?yàn)間c是虛擬機(jī)?動(dòng)調(diào)度的,所以不保證?定執(zhí)?。但是還有參數(shù)可以讓虛擬機(jī)強(qiáng)制執(zhí)??次young gc)
- 強(qiáng)制young gc會(huì)有什么問(wèn)題?(STW停頓時(shí)間變?)
- 知道G1么?(了解?點(diǎn) )
- 回收過(guò)程是怎么樣的?(young gc、并發(fā)階段、混合階段、full gc,說(shuō)了Remember Set)
- 你提到的Remember Set底層是怎么實(shí)現(xiàn)的?
- 有什么想問(wèn)的么?
?結(jié)
螞蟻?試?較重視基礎(chǔ),所以Java那些基本功?定要扎實(shí)。螞蟻的?作環(huán)境還是挺贊的,因?yàn)槲?的是穩(wěn)定性保障部?,還有許多單獨(dú)的?組,什么三年1班,很有?春的感覺(jué)。?試官基本?平都?較?,基本都P7以上,除了基礎(chǔ)還問(wèn)了不少架構(gòu)設(shè)計(jì)??的問(wèn)題,收獲還是挺?的。
拼多多
- ?試前
- ??
- ??
- 三?
- ?結(jié)
?試前
?完螞蟻后,早就聽(tīng)聞拼多多這個(gè)獨(dú)?獸,決定也去??把。?先我在脈脈找了?個(gè)拼多多的HR,加了微信聊了下,發(fā)了簡(jiǎn)歷便開(kāi)始我的拼多多?試之旅。這?要?常感謝拼多多HR?姐姐,從?試內(nèi)推到offer確認(rèn)?直都在幫我,?真的很nice。
拼多多一面:
- Java中的HashMap、TreeMap解釋下?(TreeMap紅?樹(shù),有序,HashMap?序,數(shù)組+鏈表)
- TreeMap查詢(xún)寫(xiě)?的時(shí)間復(fù)雜度多少?(O(logN))
- HashMap多線程有什么問(wèn)題?(線程安全,死鎖)怎么解決?( jdk1.8?了synchronize + CAS,擴(kuò)容的時(shí)候通過(guò)CAS檢查是否有修改,是則重試)重試會(huì)有什么問(wèn)題么?(CAS(Compare And Swap)是??和交換,不會(huì)導(dǎo)致線程阻塞,但是因?yàn)橹卦囀峭ㄟ^(guò)?旋實(shí)現(xiàn)的,所以仍然會(huì)占?CPU時(shí)間,還有ABA的問(wèn)題)怎么解決?(超時(shí),限定?旋的次數(shù),ABA可以通過(guò)原理變量AtomicStampedReference解決,原理利?版本號(hào)進(jìn)???)超過(guò)重試次數(shù)如果仍然失敗怎么辦?(synchronize互斥鎖)
- CAS和synchronize有什么區(qū)別?都?synchronize不?么?(CAS是樂(lè)觀鎖,不需要阻塞,硬件級(jí)別實(shí)現(xiàn)的原?性;synchronize會(huì)阻塞,JVM級(jí)別實(shí)現(xiàn)的原?性。使?場(chǎng)景不同,線程沖突嚴(yán)重時(shí)CAS會(huì)造成CPU壓?過(guò)?,導(dǎo)致吞吐量下降,synchronize的原理是先?旋然后阻塞,線程沖突嚴(yán)重仍然有向滔的吞吐量,因?yàn)榫€程都被阻塞了,不會(huì)占有CPU )
- 如果要保證線程安全怎么辦?(ConcurrentHashMap)
- ConcurrentHashMap怎么實(shí)現(xiàn)線程安全的?(分段鎖)
- get需要加鎖么,為什么?(不?,volatile關(guān)鍵字)
- volatile的作?是什么?(保證內(nèi)存可?性)
- 底層怎么實(shí)現(xiàn)的?(說(shuō)了主內(nèi)存和?作內(nèi)存,讀寫(xiě)內(nèi)存屏障,happen-before,并在紙上畫(huà)了線程交互圖)
- 在多核CPU下,可?性怎么保證?(思考了?會(huì),總線嗅探技術(shù))
- 聊想聊,系統(tǒng)之間是怎么交互的?
- 系統(tǒng)并發(fā)多少,怎么優(yōu)化?
- 給我?張紙,畫(huà)了?個(gè)九?格,都填了數(shù)字,給?個(gè)MN矩陣,從1開(kāi)始逆時(shí)針打印這MN個(gè)數(shù),要求時(shí)間復(fù)雜度盡可能低(內(nèi)?OS:之前貌似碰到過(guò)這題,最優(yōu)解是怎么實(shí)現(xiàn)來(lái)著)思考中。。。
- 可以先說(shuō)下你的思路(想起來(lái)了,說(shuō)了什么時(shí)候要變換?向的條件,向右、向下、向左、向上,依此循環(huán))
- 有什么想問(wèn)我的?
拼多多二面:
- ?我介紹下
- ?上還有其他offer么?(拿了螞蟻的offer)
- 部?組織結(jié)構(gòu)是怎樣的?(這輪不是技術(shù)?么,不過(guò)還是??實(shí)實(shí)說(shuō)了)
- 系統(tǒng)有哪些模塊,每個(gè)模塊?了哪些技術(shù),數(shù)據(jù)怎么流轉(zhuǎn)的?(?試官有點(diǎn)禿頂,?看級(jí)別就很?)給了我?張紙,我在上?簡(jiǎn)單畫(huà)了下系統(tǒng)之間的流轉(zhuǎn)情況
- 鏈路追蹤的信息是怎么傳遞的?(RpcContext的attachment,說(shuō)了Span的結(jié)構(gòu):parentSpanId +curSpanId)
- SpanId怎么保證唯?性?(UUID,說(shuō)了下內(nèi)部的定制改動(dòng))
- RpcContext是在什么維度傳遞的?(線程)
- Dubbo的遠(yuǎn)程調(diào)?怎么實(shí)現(xiàn)的?(講了讀取配置、拼裝url、創(chuàng)建Invoker、服務(wù)導(dǎo)出、服務(wù)注冊(cè)以
- 及消費(fèi)者通過(guò)動(dòng)態(tài)代理、filter、獲取Invoker列表、負(fù)載均衡等過(guò)程(嘩啦啦講了10多分鐘),我可以喝??么
- Spring的單例是怎么實(shí)現(xiàn)的?(單例注冊(cè)表)
- 為什么要單獨(dú)實(shí)現(xiàn)?個(gè)服務(wù)治理框架?(說(shuō)了下內(nèi)部剛搞微服務(wù)不久,主要對(duì)服務(wù)進(jìn)??些監(jiān)控和性能優(yōu)化)
- 誰(shuí)主導(dǎo)的?內(nèi)部還在使?么?
- 你向有想過(guò)怎么做成通航么?
- 有什么想問(wèn)的么?
拼多多三面:
?????完后就直接HR?了,主要問(wèn)了些職業(yè)發(fā)展、是否有其他offer、以及?職意向等問(wèn)題,順便說(shuō)了下公司的福利待遇等,都?較常規(guī)啦。不過(guò)要說(shuō)的是?上有其他offer或者??經(jīng)歷會(huì)有?定加分
拼多多的?試流程就簡(jiǎn)單許多,畢竟是?個(gè)成?四年多的公司。?試難度中規(guī)中矩,只要基礎(chǔ)扎實(shí)應(yīng)該不是問(wèn)題。但不得不說(shuō)?作強(qiáng)度很?,開(kāi)始?試前HR就提前和我確認(rèn)能否接受這樣強(qiáng)度的?作,想來(lái)的?鐵還是要做好準(zhǔn)備
最后
即使是面試跳槽,那也是一個(gè)學(xué)習(xí)的過(guò)程。只有全面的復(fù)習(xí),才能讓我們更好的充實(shí)自己,武裝自己,為自己的面試之路不再坎坷!今天就給大家分享一個(gè)Github上全面的Java面試題大全,就是這份面試大全助我拿下大廠Offer,月薪提至30K!
資料領(lǐng)取方式:藍(lán)色傳送門(mén)
我也是第一時(shí)間分享出來(lái)給大家,希望可以幫助大家都能去往自己心儀的大廠!為金三銀四做準(zhǔn)備!
一共有20個(gè)知識(shí)點(diǎn)專(zhuān)題,分別是:
Dubbo面試專(zhuān)題
JVM面試專(zhuān)題
Java并發(fā)面試專(zhuān)題
Kafka面試專(zhuān)題
MongDB面試專(zhuān)題
MyBatis面試專(zhuān)題
MySQL面試專(zhuān)題
Netty面試專(zhuān)題
RabbitMQ面試專(zhuān)題
Redis面試專(zhuān)題
Spring Cloud面試專(zhuān)題
SpringBoot面試專(zhuān)題
zookeeper面試專(zhuān)題
常見(jiàn)面試算法題匯總專(zhuān)題
計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)專(zhuān)題
設(shè)計(jì)模式專(zhuān)題
68)]
常見(jiàn)面試算法題匯總專(zhuān)題
[外鏈圖片轉(zhuǎn)存中…(img-tbBLpD4f-1625134919868)]
計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)專(zhuān)題
[外鏈圖片轉(zhuǎn)存中…(img-YpGYsgOZ-1625134919869)]
設(shè)計(jì)模式專(zhuān)題
[外鏈圖片轉(zhuǎn)存中…(img-Wo5uwlzU-1625134919870)]
總結(jié)
以上是生活随笔為你收集整理的企业级项目实战讲解!java类内部定义枚举的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 英雄联盟职业联赛哪些英雄被禁了?
- 下一篇: Java面试必备的集合源码详解,砥砺前行