更新時間:2020-02-18 10:49:06 來源:動力節(jié)點(diǎn) 瀏覽4062次
有哪些集合實現(xiàn),對應(yīng)的線程安全集合?
主要考察集合框架的兩大類:集合(collection)和圖(map),集合下面主要了解list和set,如ArrayList、LinkedList、HashSet、TreeSet;map下主要了解HashMap、TreeMap。
劃重點(diǎn)(加分項):
①線程安全集合選兩個代表性的:ConcurrentHashMap和CopyOnWriteArrayList,了解它們是如何做到線程安全的。
hashmap底層結(jié)構(gòu),為什么使用鏈表?(hashmap是面試必考題)
HashMap的底層結(jié)構(gòu)(數(shù)組)實現(xiàn),一定要了解透徹,如put()、get()兩塊源碼花點(diǎn)心思;
hash碰撞后產(chǎn)生的鏈表、紅黑樹順帶了解,有能力的最好看下源碼實現(xiàn)(加分項)。
線程池常用參數(shù)、如何設(shè)置?
核心線程數(shù)、最大線程數(shù)、阻塞隊列容量、線程空閑時間及單位、拒絕策略,每個的具體含義一定要了解。
劃重點(diǎn):
當(dāng)線程數(shù)小于核心線程數(shù)時,創(chuàng)建線程。
當(dāng)線程數(shù)大于等于核心線程數(shù),且任務(wù)隊列未滿時,將任務(wù)放入任務(wù)隊列。
當(dāng)線程數(shù)大于等于核心線程數(shù),且任務(wù)隊列已滿:
若線程數(shù)小于最大線程數(shù),創(chuàng)建線程若線程數(shù)等于最大線程數(shù),看拒絕策略
如何設(shè)置具體參數(shù)值(個人經(jīng)驗及看法,供參考):
核心線程數(shù)=每秒需要處理的最大任務(wù)數(shù)量*處理一個任務(wù)需要的時間,業(yè)界有常用的8020原則、6040原則,實際還是要根據(jù)自己應(yīng)用的承載能力來看,假設(shè)系統(tǒng)每秒任務(wù)數(shù)為10~100,每個任務(wù)耗時0.1秒,則需要10*0.1~100*0.1,即1~10個線程。那么corePoolSize應(yīng)該設(shè)置為大于1,若根據(jù)8020原則,即80%情況下系統(tǒng)每秒任務(wù)數(shù)不超過20,則corePoolSize=0.1*20=2。
阻塞隊列容量=核心線程數(shù)/處理一個任務(wù)需要的時間*系統(tǒng)允許任務(wù)最大的響應(yīng)時間
最大線程數(shù)=(每秒需要處理的最大任務(wù)數(shù)量-隊列容量)*每秒的線程處理任務(wù)能力,假設(shè)每秒200個任務(wù)需要20個線程,那么當(dāng)每秒達(dá)到1000個任務(wù)時,則需要(1000-隊列容量)*(20/200),即60個線程。
阻塞隊列的實現(xiàn)原理?
lock鎖的多條件(condition)阻塞控制,基礎(chǔ)薄弱的需要提前了解一下同步鎖synchronized、lock及Condition類,這一塊考驗高級和中級研發(fā)人員的界限,需要挖一下源碼,多用心。
加分項:另外輻射出來可能會順帶直接問你AQS,建議仔細(xì)了解其實現(xiàn)原理,如其內(nèi)部如何利用雙向鏈表的,重點(diǎn)看acquire()方法實現(xiàn)。
內(nèi)存模型(必考題)
無論你關(guān)注jdk1.8之前還是之后,不重要,關(guān)鍵是能正常理解每一塊的作用、是否線程共享/私有。
堆、虛擬機(jī)棧、本地方法棧、程序計數(shù)器、方法區(qū),需要了解每一部分的作用。
劃重點(diǎn):
虛擬機(jī)棧包含哪些部分、程序計數(shù)器的作用這兩塊著重了解。
GC發(fā)生在哪一塊,GC算法?
發(fā)生在堆內(nèi)存,GC算法主要了解:標(biāo)記清除、復(fù)制、標(biāo)記整理,需要知道其執(zhí)行步驟及各自的區(qū)別。
劃重點(diǎn):
年輕代劃分成哪幾部分(E、S0、S1),使用哪種算法(復(fù)制),老年代使用哪種算法(標(biāo)記清除),為什么?這里需要耐心理解透徹,很容易輻射到此類問題。
事務(wù)隔離級別,默認(rèn)哪一個,解釋幻讀、不可重復(fù)讀及二者區(qū)別?
隔離級別:讀未提交、讀提交、不可重復(fù)讀、串行化,默認(rèn)是不可重復(fù)讀,具體幻讀問題,請參考筆者此前文章幻讀、不可重復(fù)讀,其中進(jìn)行了詳細(xì)說明。
索引失效場景、索引數(shù)據(jù)結(jié)構(gòu)?
主要分為非組合索引和組合索引:
1、非組合索引主要注意or、like(若like非左模糊情形,如xxx%,則可以使用索引),索引列存在表達(dá)式、聚合函數(shù)等等;
2、組合索引主要注意是否遵循最左原則。
還有些其它小點(diǎn)靠大家自己去積累,筆者這會是蒙圈狀態(tài),沒反應(yīng)過來。
索引數(shù)據(jù)結(jié)構(gòu):主要關(guān)注B+樹,花心思了解透,且需要了解聚簇索引和非聚簇索引。
加分項:InnoDB與MyisAM索引方面的區(qū)別。
數(shù)據(jù)庫引擎
主要可以說說InnoDB、MyISAM這兩個常用的即可,需要了解二者的區(qū)別,InnoDB支持事務(wù),二者使用場景,二者之間如何轉(zhuǎn)變。
mysql分表中間件、如何監(jiān)聽binlog
中間件:tddl,MyCat(其實考驗?zāi)愕闹R儲備廣度,一般不要求細(xì)說中間件的實現(xiàn))。
監(jiān)聽時可以使用duckula中間件或者binlog監(jiān)聽獨(dú)立jar包(common-binlog-alone)。
筆者認(rèn)為高級或資深人員必須要了解的知識儲備:InnoDB的MVCC機(jī)制
mysql自身的并發(fā)控制如何實現(xiàn)的,原理主要從其新增、更新、刪除三方面去了解其內(nèi)部的操作過程,其版本號如何控制等等。
以上就是動力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“資深Java面試題目及答案”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)推薦
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743