一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

關于 Java 面試,你應該準備這些知識點

 lguo001 2017-03-18


來源:占小狼,

www.jianshu.com/p/1b2f63a45476

如有好文章投稿,請點擊 → 這里了解詳情


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


  • 錢,沒給到位

  • 心,受委屈了


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


項目經驗


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


場景對話:


面試官:(拿著簡歷)講講你最近做的這個項目


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


面試官:你說這個項目中用到了netty,能大概講講netty的線程模型么?


:(幸好我看過netty的源碼)netty通過Reactor模型基于多路復用器接收并處理用戶請求(能講就多講一點),內部實現(xiàn)了兩個線程池,boss線程池和work線程池,其中boss線程池的線程負責處理請求的accept事件,當接收到accept事件的請求時,把對應的socket封裝到一個NioSocketChannel中,并交給work線程池,其中work線程池負責請求的read和write事件(通過口述加畫圖的方式,把請求的執(zhí)行過程大概描述了一遍,時間有限,也不可能把所有的細節(jié)都說完,挑重點講,挑記憶深刻的講)


面試官:嗯,理解的還挺深入的…那你在做這個項目時有沒有遇到什么困難,或者是覺得有挑戰(zhàn)的地方?


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


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


:最后把處理業(yè)務的邏輯封裝成一個task提交給一個新建的業(yè)務線程池中執(zhí)行,執(zhí)行完之后由work線程池執(zhí)行請求的write事件。


面試官:好的,你知道nio中selector可能觸發(fā)bug么?


:嗯,對的,selector的select方法,因為底層的epoll函數(shù)可能會發(fā)生空轉,從而導致cpu100%。


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


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


面試官:嗯,對了,你們這個項目有給自己定指標么?


:有的,&&…………¥¥##@,把自己項目的指標說了一通,如何進行AB實驗,如何迭代優(yōu)化指標


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


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


面試知識點


1、線程池


線程池的實現(xiàn)原理,這個知識點真的很重要,幾乎每次面試都會被問到,一般的提問方式有如下幾種:


  • “講講線程池的實現(xiàn)原理”

  • “線程池中的coreNum和maxNum有什么不同”

  • “在不同的業(yè)務場景中,線程池參數(shù)如何設置”


場景對話:


面試官:平時線程池用的多么?


:嗯,我的*項目中就用到了


面試官:那好,你講講線程池的實現(xiàn)原理


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


面試官:嗯,好的,你繼續(xù)…


:在紙上畫了正方形,這個代表一個線程池,初始化的時候,里面是沒有線程的


面試官:嗯,好的,你繼續(xù)…


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


面試官:嗯,好的,你繼續(xù)…


:當來了一個任務時,在正方形中畫了一個小圓圈,代表初始化了一個線程,如果再來一個任務,就再畫一個圓圈,表示再初始化了一個線程,連續(xù)畫了5個圓圈之后,如果第6個任務過來了…


面試官:嗯,好的,你繼續(xù)…


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


面試官:嗯,然后呢?


:現(xiàn)在線程池中不是有5個線程了么,如果其中一個線程空閑了,就會從阻塞隊列中獲取第6個任務,進行執(zhí)行..


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


:如果線程池的5個線程都在running狀態(tài),那么任務就先保存在阻塞隊列中


面試官:如果隊列滿了,怎么辦?


:如果隊列滿了,我們不是設置了最大線程數(shù)是10么,而線程池中只有5個線程,這時會新建一個線程去執(zhí)行不能保存到阻塞隊列的任務,然后我又在正方形中畫了5個圓圈。


面試官:那如果線程池中的線程數(shù)達到10個了,阻塞隊列也滿了,怎么辦?


:這種情況通過自定義reject函數(shù)去處理這里任務了,舒了一口去,以為問完了…


面試官:好的,那如果運行一段時間之后,阻塞隊列中的任務也執(zhí)行完了,線程池中的線程會怎么樣?


:…這個好像超過核心線程數(shù)的線程會在空閑一段時間內自動回收…因為有點不記得這個邏輯了,回答的有點虛…


面試官:好的,那這種情況在什么場景下會發(fā)生?


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


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


:……..


我居然忘記了秒殺這個場景


線程池分析的文章:深入分析java線程池的實現(xiàn)原理(http://www.jianshu.com/p/87bff5cc8d8c)


2、鎖的實現(xiàn)


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


場景對話:


面試官:都了解Java中的什么鎖?


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


面試官:那好,你先說說Synchronized的實現(xiàn)原理吧


:嗯,Synchronized是JVM實現(xiàn)的一種鎖,其中鎖的獲取和釋放分別是monitorenter和monitorexit指令,該鎖在實現(xiàn)上分為了偏向鎖、輕量級鎖和重量級鎖,其中偏向鎖在1.6是默認開啟的,輕量級鎖在多線程競爭的情況下會膨脹成重量級鎖,有關鎖的數(shù)據都保存在對象頭中…&&@@#,(嗯,說了一大堆,面試官也沒打斷我)


面試官:哦,嗯,理解的還挺透徹,那你說說ReentrantLock的實現(xiàn)吧…


:ReentrantLock是基于AQS實現(xiàn)的


面試官:什么是AQS?


:在AQS內部會保存一個狀態(tài)變量state,通過CAS修改該變量的值,修改成功的線程表示獲取到該鎖,沒有修改成功,或者發(fā)現(xiàn)狀態(tài)state已經是加鎖狀態(tài),則通過一個Waiter對象封裝線程,添加到等待隊列中,并掛起等待被喚醒&&&$$(又說了一堆)


面試官:能說說CAS的實現(xiàn)原理么?


:CAS是通過unsafe類的compareAndSwap方法實現(xiàn)的(心里得意的一笑)


面試官:哦,好的,那你知道這個方法的參數(shù)的含義的么?


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


面試官:嗯,對的,那你知道操作系統(tǒng)級別是如何實現(xiàn)的么?


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


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


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


面試官:怎么講?


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


面試官:那怎么解決?


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


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


:….我能喝口水么


關于鎖分析的文章,希望對大家有用:


  • 深入淺出java同步器AQS

    http://www.jianshu.com/p/d8eeb31bee5c


  • java中的CAS

    http://www.jianshu.com/p/fb6e91b013cc


  • 深入淺出synchronized

    http://www.jianshu.com/p/19f861ab749e


  • 深入淺出ReentrantLock

    http://www.jianshu.com/p/4358b1466ec9


  • java中的Unsafe

    http://www.jianshu.com/p/a16d638bc921


  • java volatile關鍵字解惑

    http://www.jianshu.com/p/195ae7c77afe


  • 深入分析Object.wait/notify實現(xiàn)機制

    http://www.jianshu.com/p/f4454164c017


  • 深入分析synchronized的JVM實現(xiàn)

    http://www.jianshu.com/p/c5058b6fe8e5


3、ConcurrentHashMap


當考察數(shù)據結構時,面試官一開始會問HashMap的實現(xiàn)原理,當你說出HashMap并非線程安全之后,會讓你自己引出ConcurrentHashMap,接著就可能開始如下的對話。


場景對話:


面試官:談談ConcurrentHashMap實現(xiàn)原理


:@#¥@@基于分段鎖的%%¥#@#¥,但是1.8之后改變實現(xiàn)方式了


面試官:1.8啥方式


:把1.8的實現(xiàn)原理說了一通,其中提到了紅黑樹…


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


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


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


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


面試官:好的,那換個,你知道它的size方法是如何實現(xiàn)的么?


:size方法?是想要得到Map中的元素個數(shù)么?


面試官:對的….


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


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


:…@#¥@@…兩眼一黑


:等等,讓我想想…..應該可以用AtomicInteger變量進行記錄…嗯,對的,每次插入或刪除的時候,操作這個變量,我得意的一笑…


面試官:哦,是么,那如果我覺得這個AtomicInteger這個變量性能不好,還能再優(yōu)化么?


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


面試官:哦,那回頭你再看看源碼吧,jdk中已經實現(xiàn)了…


:哦,是么….


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


:………………


關于ConcurrentHashMap,本人也寫過不少的分析文章,希望對大家有用:



看完本文有收獲?請轉發(fā)分享給更多人

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产成人精品午夜福利| 色婷婷视频在线精品免费观看| 中国一区二区三区不卡| 久久国产亚洲精品赲碰热| 开心激情网 激情五月天| 久久本道综合色狠狠五月| 免费在线播放不卡视频| 国产精品日韩欧美第一页| 欧美日韩精品久久第一页| 亚洲综合一区二区三区在线| 91精品国产品国语在线不卡| 久久久精品日韩欧美丰满 | 日韩精品综合免费视频| 国产亚洲精品俞拍视频福利区| 国产色第一区不卡高清| 亚洲一区二区三区国产| 中文字幕在线五月婷婷| 久久热这里只有精品视频| 日韩人妻欧美一区二区久久| 亚洲专区中文字幕在线| 国产日韩欧美在线播放| 国产内射一级一片内射高清视频 | 日本高清二区视频久二区| 夫妻性生活黄色录像视频| 熟女乱一区二区三区四区| 亚洲中文字幕有码在线观看| 东京热男人的天堂社区| 中文字幕人妻av不卡| 中文字幕一二区在线观看| 国产欧美日韩在线一区二区| 国产又大又黄又粗的黄色| 亚洲丁香婷婷久久一区| 国产91麻豆精品成人区| 国产超薄黑色肉色丝袜| 大伊香蕉一区二区三区| 国产91色综合久久高清| av中文字幕一区二区三区在线| 亚洲av一区二区三区精品| 午夜视频成人在线免费| 国产成人精品在线播放| 午夜精品久久久免费视频|