首頁>Club>
3
回覆列表
  • 1 # 薄荷味的糰子

    馬老師說過,員工的離職原因很多,只有兩點最真實:

    錢,沒給到位。

    心,受委屈了。

    當然,我是想換個平臺,換個方向,想清楚為什麼要跳槽,如果真的要跳槽,想要拿到一個理想的offer,除了運氣,基本功也要足夠的紮實,希望下面的面試經驗能給你們能夠提供一些幫助。

    項 目 經 驗

    面試官在一開始會讓你進行自我介紹,主要是想讓你介紹一下自己做過的一些專案,看看你對這些專案的瞭解程度,因為很多人簡歷上寫的專案並非都是從頭到尾都參與的,有些只是參與並實現了其中的一些模組而已,或是接手維護別人的專案,所以在你簡歷上所寫的和麵試過程中所說的專案經驗,你自己必須能夠了解來龍去脈,因為面試官肯定會根據你的專案描述,對專案中的實現原理,或為什麼要這樣實現進行提問,這時不至於木訥住而不知如何作答,如此局面只會大大降低面試分。

    場景對話:

    面試官:(拿著簡歷)講講你最近做的這個專案。

    我:&……%¥#*&¥@%¥!,說了一大通。(不知道面試官聽進去多少,面試官會挑他會的進行提問)

    面試官:你說這個專案中用到了netty,能大概講講netty的執行緒模型麼?

    我:(幸好我看過netty的原始碼)netty透過Reactor模型基於多路複用器接收並處理使用者請求(能講就多講一點),內部實現了兩個執行緒池,boss執行緒池和work執行緒池,其中boss執行緒池的執行緒負責處理請求的accept事件,當接收到accept事件的請求時,把對應的socket封裝到一個NioSocketChannel中,並交給work執行緒池,其中work執行緒池負責請求的read和write事件。(透過口述加畫圖的方式,把請求的執行過程大概描述了一遍,時間有限,也不可能把所有的細節都說完,挑重點講,挑記憶深刻的講)

    面試官:嗯,理解的還挺深入的...那你在做這個專案時有沒有遇到什麼困難,或者是覺得有挑戰的地方?

    我:(這時面試官想讓你自己出題自己回答了,所以一定要回答,不回答就突顯不出你這個專案了,要是這個問題沒有準備過,只能臨時發揮了,當然我就是屬於臨時發揮的)稍微想一下,因為之前確實碰到了這個問題,當時做這個專案時,對netty不熟悉,把請求的業務邏輯放在work執行緒池的執行緒中進行處理,進行壓測的時候,發現qps總是上不去,後來看了原始碼之後才發現,由於業務邏輯的處理比較耗時,完全佔用了work執行緒池的資源,導致新的請求一直處於等待狀態。

    面試官:那最後是如何解決的?

    我:最後把處理業務的邏輯封裝成一個task提交給一個新建的業務執行緒池中執行,執行完之後由work執行緒池執行請求的write事件。

    面試官:好的,你知道nio中selector可能觸發bug麼?

    我:嗯,對的,selector的select方法,因為底層的epoll函式可能會發生空轉,從而導致cpu100%。

    面試官:那如何解決該問題?

    我:這個問題在netty已經解決了,透過&^%&$^。(把netty的解決方案說一遍)

    面試官:嗯,對了,你們這個專案有給自己定指標麼?

    我:有的,&&…………¥¥##@,把自己專案的指標說了一通,如何進行AB實驗,如何迭代最佳化指標。

    面試官:嗯,好的 ,專案的問題先到這裡,我們來考察一下java的基本點吧。

    如上只是本人所做的一個專案,當然了,具體專案具體分析,也不是每個面試官問的點都一樣,如果面試官不懂netty,自然會挑別的問題進行提問,不過你也可以嘗試著把問題往自己熟悉的方向去靠。

    面 試 知 識 點

    1.執行緒池

    執行緒池的實現原理,這個知識點真的很重要,幾乎每次面試都會被問到,一般的提問方式有如下幾種: 1、“講講執行緒池的實現原理” 2、“執行緒池中的coreNum和maxNum有什麼不同” 3、“在不同的業務場景中,執行緒池引數如何設定”

    場景對話: 面試官:平時執行緒池用的多麼?

    我:嗯,我的*專案中就用到了。

    面試官:那好,你講講執行緒池的實現原理。

    我:(還好我之前看過原始碼,但是時間久遠有點模糊了),能給我筆和紙麼,我畫圖分析給你看看,&&¥&假設初始化一個執行緒池,核心執行緒數是5,最大執行緒數是10@@@。

    面試官:嗯,好的,你繼續...

    我:在紙上畫了正方形,這個代表一個執行緒池,初始化的時候,裡面是沒有執行緒的。

    面試官:嗯,好的,你繼續...

    我:又畫了一個細長的長方形,這個代表阻塞佇列,一開始裡面也是沒有任務的。

    面試官:嗯,好的,你繼續...

    我:當來了一個任務時,在正方形中畫了一個小圓圈,代表初始化了一個執行緒,如果再來一個任務,就再畫一個圓圈,表示再初始化了一個執行緒,連續畫了5個圓圈之後,如果第6個任務過來了...

    面試官:嗯,好的,你繼續...

    我:這時會把第6個任務放到阻塞佇列中.…

    面試官:嗯,然後呢?

    我:現線上程池中不是有5個執行緒了麼,如果其中一個執行緒空閒了,就會從阻塞佇列中獲取第6個任務,進行執行…

    面試官:嗯,對的,那如果任務產生的速度比消費的速度快呢?

    我:如果執行緒池的5個執行緒都在running狀態,那麼任務就先儲存在阻塞佇列中…

    面試官:如果佇列滿了,怎麼辦?

    我:如果佇列滿了,我們不是設定了最大執行緒數是10麼,而執行緒池中只有5個執行緒,這時會新建一個執行緒去執行不能儲存到阻塞佇列的任務,然後我又在正方形中畫了5個圓圈。

    面試官:那如果執行緒池中的執行緒數達到10個了,阻塞佇列也滿了,怎麼辦?

    我:這種情況透過自定義reject函式去處理這裡任務了,舒了一口去,以為問完了...

    面試官:好的,那如果執行一段時間之後,阻塞佇列中的任務也執行完了,執行緒池中的執行緒會怎麼樣?

    我:...這個好像超過核心執行緒數的執行緒會在空閒一段時間內自動回收...因為有點不記得這個邏輯了,回答的有點虛...

    面試官:好的,那這種情況在什麼場景下會發生?

    我:(有時候真是笨啊,很多東西都知道,但是在面試的時候一緊張,全忘記)這個...那個...我好像沒有遇到過這樣的情況。

    面試官:嗯,好的,你回去之後再好好想想

    我:........(被秒殺)

    2.鎖的實現

    在關於鎖的面試過程中,一般主要問Synchronized和ReentrantLock的實現原理,更有甚者會問讀寫鎖。

    場景對話: 面試官:都瞭解Java中的什麼鎖?

    我:比如Synchronized和ReentrantLock...讀寫鎖用的不多,就沒研究了。(我就怕被問讀寫鎖,因為一直沒去看)

    面試官:那好,你先說說Synchronized的實現原理吧。

    我:嗯,Synchronized是JVM實現的一種鎖,其中鎖的獲取和釋放分別是monitorenter和monitorexit指令,該鎖在實現上分為了偏向鎖、輕量級鎖和重量級鎖,其中偏向鎖在1.6是預設開啟的,輕量級鎖在多執行緒競爭的情況下會膨脹成重量級鎖,有關鎖的資料都儲存在物件頭中...&&@@#。(嗯,說了一大堆,面試官也沒打斷我)

    面試官:哦,嗯,理解的還挺透徹,那你說說ReentrantLock的實現吧...

    我:ReentrantLock是基於AQS實現的。

    面試官:什麼是AQS?

    我:在AQS內部會儲存一個狀態變數state,透過CAS修改該變數的值,修改成功的執行緒表示獲取到該鎖,沒有修改成功,或者發現狀態state已經是加鎖狀態,則透過一個Waiter物件封裝執行緒,新增到等待佇列中,並掛起等待被喚醒&&&$$。(又說了一堆)

    面試官:能說說CAS的實現原理麼?

    我:CAS是透過unsafe類的compareAndSwap方法實現的(心裡得意的一笑)

    面試官:哦,好的,那你知道這個方法的引數的含義的麼?

    我:(這是在逼我啊...努力的回想,因為我真的看過啊)我想想啊,這個方法看的時間有點久遠了,第一個引數是要修改的物件,第二個引數是物件中要修改變數的偏移量,第三個引數是修改之前的值,第四個引數是預想修改後的值....(說出來之後都有點佩服自己,這個都記得,不過面試官好像還是不肯放過我...)

    面試官:嗯,對的,那你知道作業系統級別是如何實現的麼?

    我:(我去你大爺...)我只記得X86中有一個cmp開頭的指令,具體的我忘記了...

    面試官:嗯,好,你知道CAS指令有什麼缺點麼?

    我:哦,CAS的缺點是存在ABA問題。

    面試官:怎麼講?

    我:就是一個變數V,如果變數V初次讀取的時候是A,並且在準備賦值的時候檢查到它仍然是A,那能說明它的值沒有被其他執行緒修改過了嗎?如果在這段期間它的值曾經被改成了B,然後又改回A,那CAS操作就會誤認為它從來沒有被修改過。

    面試官:那怎麼解決?

    我:(有完沒完了啊...我的心裡是崩潰的)針對這種情況,java併發包中提供了一個帶有標記的原子引用類"AtomicStampedReference",它可以透過控制變數值的版本來保證CAS的正確性。

    面試官:嗯,好的,這個問題到此為止,我們再看看別的。

    我:....我能喝口水麼。

    3.ConcurrentHashMap

    當考察資料結構時,面試官一開始會問HashMap的實現原理,當你說出HashMap並非執行緒安全之後,會讓你自己引出ConcurrentHashMap,接著就可能開始如下的對話。

    場景對話: 面試官:談談ConcurrentHashMap實現原理。

    我:@#¥@@基於分段鎖的%%¥#@#¥,但是1.8之後改變實現方式了。

    面試官:1.8啥方式?

    我:把1.8的實現原理說了一通,其中提到了紅黑樹...

    面試官:能講下紅黑樹的概念嗎?

    我:紅黑樹是一種二叉樹,並且是平衡……%……¥……,

    面試官:能講下紅黑樹的。。。。。

    我:打住,別問了,紅黑樹我只知道他是二叉樹,比其他樹多一個屬性,其他的我都不知道

    面試官:好的,那換個,你知道它的size方法是如何實現的麼?

    我:size方法?是想要得到Map中的元素個數麼?

    面試官:對的....

    我:我記得好像size方法返回是不準確的,平時也不會用到這個方法...

    面試官:如果你覺得size方法返回值不準確,那如果讓你自己實現,你覺得應該怎麼實現呢?

    我:...@#¥@@...兩眼一黑

    面試官:哦,是麼,那如果我覺得這個AtomicInteger這個變數效能不好,還能再最佳化麼?

    我:懵逼臉...(當時居然把volitile變數給忘記了)...好像沒有了,我想不出來了...

    面試官:哦,那回頭你再看看原始碼吧,jdk中已經實現了...

    我:哦,是麼....

    面試官:那今天的面試到此結束,我們後面會通知你。

    我:..................

    虛 擬 機 JVM 相 關

    這塊內容並非每個面試官都會問,但是如果是應聘高階職位的話,這一環節是不可缺少的,面試的難易程度也不一樣,有些面試官或許讓你講講虛擬機器的記憶體模型即可,有些也會讓你解釋垃圾回收的實現,當然也會有虛擬機器調優的實戰經驗,線上問題排查等等。

    場景對話: 面試官:Java虛擬機器有了解麼?

    我:恩,略有接觸過...(水哥說過,話不能說太滿,容易打臉)

    面試官:那你先講講它的記憶體模型吧

    我:Java堆,Java棧,程式計數器,方法區,1.7的永久代,1.8的metaspace....(噼裡啪啦概念講一通,簡短描述下每個記憶體區的用途,能想到的都講出來,不要保留,不要等面試官問 “還有嗎?”)

    面試官:好,一般Java堆是如何實現的?

    我:在HotSpot虛擬機器實現中,Java堆分成了新生代和老年代,我當時看的是1.7的實現,所有還有永久代,新生代中又分為了eden區和survivor區,survivor區又分成了S0和S1,或則是from和to,(這個時候,我要求紙和筆,因為我覺得這個話題可以聊蠻長時間,又是我比較熟悉的...一邊畫圖,一邊描述),其中eden,from和to的記憶體大小預設是8:1:1(各種細節都要說出來...),此時,我已經在紙上畫出了新生代和老年代代表的區域。

    面試官:恩,給我講講物件在記憶體中的初始化過程?

    我:(千萬不要只說,新物件在Java堆進行記憶體分配並初始化,或是在eden區進行記憶體分配並初始化)要初始化一個物件,首先要載入該物件所對應的class檔案,該檔案的資料會被載入到永久代,並建立一個底層的instanceKlass物件代表該class,再為將要初始化的物件分配記憶體空間,優先線上程私有記憶體空間中分配大小,如果空間不足,再到eden中進行記憶體分配...^&&*%

    面試官:恩,好,說下YGC的大概過程...

    我:先找出根物件,如Java棧中引用的物件、靜態變數引用的物件和系統詞典中引用的物件等待,把這些物件標記成活躍物件,並複製到to區,接著遍歷這些活躍物件中引用的物件並標記,找出老年代物件在eden區有引用關係的物件並標記,最後把這些標記的物件複製到to,在複製過程還要判斷活躍物件的gc年齡是否已經達到閾值,如果已經達到閾值,就直接晉升到老年代,YGC結束之後把from和to的引用互換(能多說點就多說點,省的面試官再提問,我把老年代的cms回收也大致說了一遍,以為面試官會跳過這個話題了,還是太年輕了)。

    面試官:你剛剛說到在YGC的時候,有些物件可能會發生晉升,如果晉升失敗怎麼處理?

    我:....(斷片了幾秒鐘,我記得我分析過這段程式碼的,但是印象不深刻了)我記得在標記階段時,會把物件和對應的物件頭資料儲存在兩個棧中,如果晉升失敗的話,就把該物件的物件頭復原...

    面試官:那你在實際專案中有碰到這種情況麼,會導致什麼問題?

    我:...(這我真沒有遇到過)對,有遇到過一次,在分析gc日誌的時候,發現YGC發生之後,日誌顯示gc後的記憶體變大了,後來查出來是因為物件的晉升失敗造成的。(我隱約記得看過笨神的一篇文章,回答的心裡很虛)

    面試官:(沒有反駁,繼續問)有過虛擬機器效能調優的經驗麼?

    我:(說實話,調優經驗真的不多)恩,有一點吧,不是很足,就是我們XX專案上線的時候,發現YGC特別的頻繁^^&^8&,透過調整新生代的大小(線上環境的虛擬機器引數是預設的),同時檢查業務邏輯程式碼&*&$$~~!

    面試官:恩?還有麼?

    我:(面試這麼久,好怕面試官的下一句是 “恩?還有麼?”,顯然面試官還不滿足我的回答,但是我也只能答到這個地步了...)恩,經驗確實有限,目前就根據這個專案做過一些相關的最佳化。

    面試官: 。。。。。。

    我:。。。。。。

    面試官: 那我們看看別的吧。

    細 節 問 題

    細節決定成敗,在面試過程中,雖然也有運氣的成分存在,但是對於細節的掌握程度,可以很好的衡量應試者的技術水平。

    1.volatile

    場景對話: 面試官:說說volatile關鍵字的實現原理?

    我:volatile關鍵字提供了記憶體可見性和禁止記憶體重排序。

    面試官:分別解釋一下。

    我:因為在虛擬機器記憶體中有主記憶體和工作記憶體的概念,每個cpu都有自己的工作記憶體,當讀取一個普通變數時,優先讀取工作記憶體的變數,如果工作記憶體中沒有對應的變數,則從主記憶體中載入到工作記憶體,對工作記憶體的普通變數進行修改,不會立馬同步到主記憶體,記憶體可見性保證了在多執行緒的場景下,保證了執行緒A對變數的修改,其它執行緒可以讀到最新值&&%%……

    面試官:如何保證的?

    我:當對volatile修飾的變數進行寫操作時,直接把最新值寫到主記憶體中,並清空其它cpu工作記憶體中該變數所在的記憶體行資料,當對volatile修飾的變數進行讀操作時,會讀取主記憶體的資料&&&%%¥@

    面試官:你知道系統級別是如何實現的麼?

    我:(what,what are u 說啥呢)我記得操作volatile變數的彙編程式碼前面會有lock字首指令

    面試官:你這說的還是程式碼層面,我說的是系統級別

    我:(懵逼臉...)這個再底層下去我真的沒研究過了...

    2.Object.finalize

    場景對話: 面試官:和我講講Object類的finalize方法的實現原理

    我:(完全沒想到面試官會問這個)新建一個物件時,在JVM中會判斷該物件對應的類是否重寫了finalize方法,且finalize方法體不為空,則把該物件封裝成Finalizer物件,並新增到Finalizer連結串列。

    面試官:恩,然後呢?

    我:Finalizer類中會初始化一個FinalizerThread型別的執行緒,負責從一個引用佇列中獲取Finalizer物件,並執行該Finalizer物件的runFinalizer方法,最終會執行原始物件的finalize方法,&&%%##(這塊邏輯有點繞,當時答的也有點虛)

    面試官:Finalizer物件什麼時候會在引用佇列中?

    我:(努力回想中)在發生GC的時候,具體在什麼時間點或如何被插入到引用佇列中,這塊實現我已經忘記了...(我真的忘記了,只記得這塊邏輯太複雜了)

    面試官:恩,你驗證過finalize方法是否會執行麼?

    我:恩,自己寫過例子證明過,也看過原始碼的實現。

    面試官:怎麼證明的?

    我:初始化一個大陣列,可以明顯看出gc之後是否被回收,然後執行System.gc(),在finalize方法中輸出資訊 &&%%@@,(把之前做過的驗證說一遍)

    面試官:恩,可以...

    大 問 題

    什麼是大問題,就是問題很大,讓你自己去理解,把你的畢生所學都拿出來。

    場景對話: 面試官:如果給你一個系統,如何去最佳化?

    我:(最佳化什麼?效能,穩定性,還是其它方面,只能硬著頭皮上了,結合自己做的一個專案)。

    1、分析系統,定義指標 2、透過系統埋點,收集指標的度量值,對指標進行迭代最佳化&&^%&$#

    面試官:就這些?沒了麼?

    我:(因為是電話面試,感覺當時腦袋是空白的,估計和麵試官的級別也有關係)如果指標是介面效能的話,可以看下系統記憶體是不是可以使用快取進行效能上的最佳化,比如redis,如果是訪問很頻繁又不會經常變動的資料,如熱點資料,可以直接使用本地快取進行最佳化,畢竟一次網路請求也需要1~2毫秒。

    面試官:沒了麼?

    我:(因為自己系統最佳化的經驗確實不豐富,讓面試官覺得怎麼就只能想到如此少的最佳化點呢)資料庫的讀寫分離,資料庫的分庫分表,如果經常條件查詢資料庫的話,可以引入搜尋服務es或則lucene進行最佳化。

    文章內面試知識點較具體,但HR的提問流程與邏輯同樣適用於其他問題。

    最 後

    面試之前一定要做充分的準備。比如提前半個月或者一個月,就要開始看一些基礎內容,對當前的工作做一個總結,找出自己的亮點。亮點很重要,一般面試的時候,有了亮點,面試的過程你就能掌握一定的主動權。

  • 2 # 首席分享官100

    你好,關於Java面試,面試題、面試經驗,可以給你分享我的經歷。

    首先,java開發職位,在一般公司中分為java初級開發、java中級開發、java高階開發,當然,還有架構師以及CTO等等比較厲害的職稱,但是我們一般面試的都是在初級、中級和高階這幾個職位中進行崗位抉擇。

    但是,總的來說,各個階段的java面試,面試題目還是比較廣的,初級java開發面試也可能會問一些比較深一點的java知識,高階java開發面試同樣也會問到比較基礎的知識,但是可能會問到底層和jvm實現這個地步。所以,只要是準備java面試,個人建議,還是要系統和全面的複習java面試相關的知識。

    那麼,基於此,java面試一般會有哪些面試題呢,我給大家系統分一下類。

    1、java基礎知識

    比如面向物件的特徵、多型、訪問修飾符範圍、static和final關鍵字、抽象類與介面、深複製與淺複製、序列化與反序列化、幾種資料結構、拆箱與裝箱

    2、java集合相關

    比如集合框架理解、list、set、hashmap底層實現以及區別?hashmap底層原理,put和get方法怎麼實現的?hashmap與hashTable區別?concurrentHashMap底層實現?

    3、java異常處理

    比如異常分類?編譯時異常與執行時異常區別?舉例子有哪些執行時異常?

    4、jvm記憶體模型。以及GC垃圾回收機智和演算法。

    5、spring相關。解釋IOC和AOP,以及他們的原理。bean生命週期

    6、mysql。索引是什麼?索引分類?索引最佳化?

    7、mybaits相關。動態標籤,字串替換,防注入。

    8、dubbo。dubbo服務註冊與發現。服務負載均衡演算法,dubbo配置與使用。

    9、多執行緒。synchronized用法與底層原理,與lock的區別?執行緒池有哪些?執行緒池有哪些引數?執行緒池最佳化?

    10、redis。redis資料型別有哪些,每個型別的使用場景?redis為什麼這麼快?redis怎麼保證高可用?redis怎麼保證與資料庫資料一致?

    11、訊息佇列。activeMQ、rabbitMQ、rocketMQ、kafka,都可以瞭解下,以及怎麼保證高可用和處理高併發。

    12、排序演算法與資料結構。氣泡排序、快速排序、選擇排序、插入排序等等

    大概就有這麼個方面的,好好準備還是有很多機會的。

  • 3 # Java從演算法到架構

    此問題比較籠統,Java面試其實包含不同階段的面試。

    1. 如果是應屆生,那麼你需要有紮實的core java基本功,對多執行緒有個基礎的瞭解。如果想進阿里這樣的公司,需要了解常用的資料結構和演算法。另外,資料庫方面,需要掌握基本sql語句,內外連線等基本操作。有jsp的基礎知識,瞭解mvc框架,有過demo專案開發會更好。

    2.如果有三年到五年到經驗,那就是高階程式設計師級別的了。必需掌握多執行緒技術,熟練應用spring全家桶技術,還有hibernate或mybaties等or mapping框架。瞭解mq及webservice的使用,快取框架的使用。

    3.如果到了5年以上,就要嘗試面試架構師,此時需非常全面的技術,才能讓你在面試中游刃有餘。需要特別掌握springcloud、dubbo等微服務框架,有架構經驗,能很好的描述自己在專案中碰到的問題及解決方案。能描述自己專案的微服務架構的演進。

  • 4 # Java勸退師

    現在主流的Java面試主要包含十九了模組:Java 基礎、容器、多執行緒、反射、物件複製、Java Web 模組、異常、網路、設計模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下圖所示:

    可能對於初學者不需要看後面的框架和 JVM 模組的知識,讀者朋友們可根據自己的情況,選擇對應的模組進行閱讀。

    適宜閱讀人群

    需要面試的初/中/高階 java 程式設計師

    想要查漏補缺的人

    想要不斷完善和擴充自己 java 技術棧的人

    java 面試官

    具體面試題

    下面一起來看 208 道面試題,具體的內容。

    一、Java 基礎

    1.JDK 和 JRE 有什麼區別?

    2.== 和 equals 的區別是什麼?

    3.兩個物件的 hashCode()相同,則 equals()也一定為 true,對嗎?

    4.final 在 java 中有什麼作用?

    5.java 中的 Math.round(-1.5) 等於多少?

    6.String 屬於基礎的資料型別嗎?

    7.java 中操作字串都有哪些類?它們之間有什麼區別?

    8.String str="i"與 String str=new String("i")一樣嗎?

    9.如何將字串反轉?

    10.String 類的常用方法都有那些?

    11.抽象類必須要有抽象方法嗎?

    12.普通類和抽象類有哪些區別?

    13.抽象類能使用 final 修飾嗎?

    14.介面和抽象類有什麼區別?

    15.java 中 IO 流分為幾種?

    16.BIO、NIO、AIO 有什麼區別?

    17.Files的常用方法都有哪些?

    二、容器

    18.java 容器都有哪些?

    19.Collection 和 Collections 有什麼區別?

    20.List、Set、Map 之間的區別是什麼?

    21.HashMap 和 Hashtable 有什麼區別?

    22.如何決定使用 HashMap 還是 TreeMap?

    23.說一下 HashMap 的實現原理?

    24.說一下 HashSet 的實現原理?

    25.ArrayList 和 LinkedList 的區別是什麼?

    26.如何實現陣列和 List 之間的轉換?

    27.ArrayList 和 Vector 的區別是什麼?

    28.Array 和 ArrayList 有何區別?

    29.在 Queue 中 poll()和 remove()有什麼區別?

    30.哪些集合類是執行緒安全的?

    31.迭代器 Iterator 是什麼?

    32.Iterator 怎麼使用?有什麼特點?

    33.Iterator 和 ListIterator 有什麼區別?

    34.怎麼確保一個集合不能被修改?

    三、多執行緒

    35.並行和併發有什麼區別?

    36.執行緒和程序的區別?

    37.守護執行緒是什麼?

    38.建立執行緒有哪幾種方式?

    39.說一下 runnable 和 callable 有什麼區別?

    40.執行緒有哪些狀態?

    41.sleep() 和 wait() 有什麼區別?

    42.notify()和 notifyAll()有什麼區別?

    43.執行緒的 run()和 start()有什麼區別?

    44.建立執行緒池有哪幾種方式?

    45.執行緒池都有哪些狀態?

    46.執行緒池中 submit()和 execute()方法有什麼區別?

    47.在 java 程式中怎麼保證多執行緒的執行安全?

    48.多執行緒鎖的升級原理是什麼?

    49.什麼是死鎖?

    50.怎麼防止死鎖?

    51.ThreadLocal 是什麼?有哪些使用場景?

    52.說一下 synchronized 底層實現原理?

    53.synchronized 和 volatile 的區別是什麼?

    54.synchronized 和 Lock 有什麼區別?

    55.synchronized 和 ReentrantLock 區別是什麼?

    56.說一下 atomic 的原理?

    四、反射

    57.什麼是反射?

    58.什麼是 java 序列化?什麼情況下需要序列化?

    59.動態代理是什麼?有哪些應用?

    60.怎麼實現動態代理?

    五、物件複製

    61.為什麼要使用克隆?

    62.如何實現物件克隆?

    63.深複製和淺複製區別是什麼?

    六、Java Web

    64.jsp 和 servlet 有什麼區別?

    65.jsp 有哪些內建物件?作用分別是什麼?

    66.說一下 jsp 的 4 種作用域?

    67.session 和 cookie 有什麼區別?

    68.說一下 session 的工作原理?

    69.如果客戶端禁止 cookie 能實現 session 還能用嗎?

    70.spring mvc 和 struts 的區別是什麼?

    71.如何避免 sql 注入?

    72.什麼是 XSS 攻擊,如何避免?

    73.什麼是 CSRF 攻擊,如何避免?

    七、異常

    74.throw 和 throws 的區別?

    75.final、finally、finalize 有什麼區別?

    76.try-catch-finally 中哪個部分可以省略?

    77.try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?

    78.常見的異常類有哪些?

    八、網路

    79.http 響應碼 301 和 302 代表的是什麼?有什麼區別?

    80.forward 和 redirect 的區別?

    81.簡述 tcp 和 udp的區別?

    82.tcp 為什麼要三次握手,兩次不行嗎?為什麼?

    83.說一下 tcp 粘包是怎麼產生的?

    84.OSI 的七層模型都有哪些?

    85.get 和 post 請求有哪些區別?

    86.如何實現跨域?

    87.說一下 JSONP 實現原理?

    九、設計模式

    88.說一下你熟悉的設計模式?

    89.簡單工廠和抽象工廠有什麼區別?

    十、Spring/Spring MVC

    90.為什麼要使用 spring?

    91.解釋一下什麼是 aop?

    92.解釋一下什麼是 ioc?

    93.spring 有哪些主要模組?

    94.spring 常用的注入方式有哪些?

    95.spring 中的 bean 是執行緒安全的嗎?

    96.spring 支援幾種 bean 的作用域?

    97.spring 自動裝配 bean 有哪些方式?

    98.spring 事務實現方式有哪些?

    99.說一下 spring 的事務隔離?

    100.說一下 spring mvc 執行流程?

    101.spring mvc 有哪些元件?

    102.@RequestMapping 的作用是什麼?

    103.@Autowired 的作用是什麼?

    十一、Spring Boot/Spring Cloud

    104.什麼是 spring boot?

    105.為什麼要用 spring boot?

    106.spring boot 核心配置檔案是什麼?

    107.spring boot 配置檔案有哪幾種類型?它們有什麼區別?

    108.spring boot 有哪些方式可以實現熱部署?

    109.jpa 和 hibernate 有什麼區別?

    110.什麼是 spring cloud?

    111.spring cloud 斷路器的作用是什麼?

    112.spring cloud 的核心元件有哪些?

    十二、Hibernate

    113.為什麼要使用 hibernate?

    114.什麼是 ORM 框架?

    115.hibernate 中如何在控制檯檢視列印的 sql 語句?

    116.hibernate 有幾種查詢方式?

    117.hibernate 實體類可以被定義為 final 嗎?

    118.在 hibernate 中使用 Integer 和 int 做對映有什麼區別?

    119.hibernate 是如何工作的?

    120.get()和 load()的區別?

    121.說一下 hibernate 的快取機制?

    122.hibernate 物件有哪些狀態?

    123.在 hibernate 中 getCurrentSession 和 openSession 的區別是什麼?

    124.hibernate 實體類必須要有無參建構函式嗎?為什麼?

    十三、Mybatis

    125.mybatis 中 #{}和 ${}的區別是什麼?

    126.mybatis 有幾種分頁方式?

    127.RowBounds 是一次性查詢全部結果嗎?為什麼?

    128.mybatis 邏輯分頁和物理分頁的區別是什麼?

    129.mybatis 是否支援延遲載入?延遲載入的原理是什麼?

    130.說一下 mybatis 的一級快取和二級快取?

    131.mybatis 和 hibernate 的區別有哪些?

    132.mybatis 有哪些執行器(Executor)?

    133.mybatis 分頁外掛的實現原理是什麼?

    134.mybatis 如何編寫一個自定義外掛?

    十四、RabbitMQ

    135.rabbitmq 的使用場景有哪些?

    136.rabbitmq 有哪些重要的角色?

    137.rabbitmq 有哪些重要的元件?

    138.rabbitmq 中 vhost 的作用是什麼?

    139.rabbitmq 的訊息是怎麼傳送的?

    140.rabbitmq 怎麼保證訊息的穩定性?

    141.rabbitmq 怎麼避免訊息丟失?

    142.要保證訊息持久化成功的條件有哪些?

    143.rabbitmq 持久化有什麼缺點?

    144.rabbitmq 有幾種廣播型別?

    145.rabbitmq 怎麼實現延遲訊息佇列?

    146.rabbitmq 叢集有什麼用?

    147.rabbitmq 節點的型別有哪些?

    148.rabbitmq 叢集搭建需要注意哪些問題?

    149.rabbitmq 每個節點是其他節點的完整複製嗎?為什麼?

    150.rabbitmq 叢集中唯一一個磁碟節點崩潰了會發生什麼情況?

    151.rabbitmq 對叢集節點停止順序有要求嗎?

    十五、Kafka

    152.kafka 可以脫離 zookeeper 單獨使用嗎?為什麼?

    153.kafka 有幾種資料保留的策略?

    154.kafka 同時設定了 7 天和 10G 清除資料,到第五天的時候訊息達到了 10G,這個時候 kafka 將如何處理?

    155.什麼情況會導致 kafka 執行變慢?

    156.使用 kafka 叢集需要注意什麼?

    十六、Zookeeper

    157.zookeeper 是什麼?

    158.zookeeper 都有哪些功能?

    159.zookeeper 有幾種部署模式?

    160.zookeeper 怎麼保證主從節點的狀態同步?

    161.叢集中為什麼要有主節點?

    162.叢集中有 3 臺伺服器,其中一個節點宕機,這個時候 zookeeper 還可以使用嗎?

    163.說一下 zookeeper 的通知機制?

    十七、MySql

    164.資料庫的三正規化是什麼?

    166.如何獲取當前資料庫版本?

    167.說一下 ACID 是什麼?

    168.char 和 varchar 的區別是什麼?

    169.float 和 double 的區別是什麼?

    170.mysql 的內連線、左連線、右連線有什麼區別?

    171.mysql 索引是怎麼實現的?

    172.怎麼驗證 mysql 的索引是否滿足需求?

    173.說一下資料庫的事務隔離?

    174.說一下 mysql 常用的引擎?

    175.說一下 mysql 的行鎖和表鎖?

    176.說一下樂觀鎖和悲觀鎖?

    177.mysql 問題排查都有哪些手段?

    178.如何做 mysql 的效能最佳化?

    十八、Redis

    179.redis 是什麼?都有哪些使用場景?

    180.redis 有哪些功能?

    181.redis 和 memecache 有什麼區別?

    182.redis 為什麼是單執行緒的?

    183.什麼是快取穿透?怎麼解決?

    184.redis 支援的資料型別有哪些?

    185.redis 支援的 java 客戶端都有哪些?

    186.jedis 和 redisson 有哪些區別?

    187.怎麼保證快取和資料庫資料的一致性?

    188.redis 持久化有幾種方式?

    189.redis 怎麼實現分散式鎖?

    190.redis 分散式鎖有什麼缺陷?

    191.redis 如何做記憶體最佳化?

    192.redis 淘汰策略有哪些?

    193.redis 常見的效能問題有哪些?該如何解決?

    十九、JVM

    194.說一下 jvm 的主要組成部分?及其作用?

    195.說一下 jvm 執行時資料區?

    196.說一下堆疊的區別?

    197.佇列和棧是什麼?有什麼區別?

    198.什麼是雙親委派模型?

    199.說一下類載入的執行過程?

    200.怎麼判斷物件是否可以被回收?

    201.java 中都有哪些引用型別?

    202.說一下 jvm 有哪些垃圾回收演算法?

    203.說一下 jvm 有哪些垃圾回收器?

    204.詳細介紹一下 CMS 垃圾回收器?

    205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什麼區別?

    206.簡述分代垃圾回收器是怎麼工作的?

    207.說一下 jvm 調優的工具?

    208.常用的 jvm 調優的引數都有哪些?

    新增Java高階架構交流群 378461078

    回覆“答案”即可獲得整理的答案解析

  • 中秋節和大豐收的關聯?
  • 清蒸餐條的做法?