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