java面試題

1.“你能不能談?wù)劊琷ava GC是在什么時候耀找,對什么東西,做了什么事情业崖?”

在什么時候:
  1. 新生代有一個Eden區(qū)和兩個survivor區(qū)野芒,首先將對象放入Eden區(qū),如果空間不足就向其中的一個survivor區(qū)上放双炕,如果仍然放不下就會引發(fā)一次發(fā)生在新生代的minor GC狞悲,將存活的對象放入另一個survivor區(qū)中,然后清空Eden和之前的那個survivor區(qū)的內(nèi)存妇斤。在某次GC過程中摇锋,如果發(fā)現(xiàn)仍然又放不下的對象,就將這些對象放入老年代內(nèi)存里去趟济。
  2. 大對象以及長期存活的對象直接進入老年區(qū)乱投。
  3. 當(dāng)每次執(zhí)行minor GC的時候應(yīng)該對要晉升到老年代的對象進行分析,如果這些馬上要到老年區(qū)的老年對象的大小超過了老年區(qū)的剩余大小顷编,那么執(zhí)行一次Full GC以盡可能地獲得老年區(qū)的空間。
對什么東西:

從GC Roots搜索不到剑刑,而且經(jīng)過一次標記清理之后仍沒有復(fù)活的對象媳纬。

做什么:

新生代:復(fù)制清理;
老年代:標記-清除和標記-壓縮算法施掏;
永久代:存放Java中的類和加載類的類加載器本身钮惠。

GC Roots都有哪些:
  1. 虛擬機棧中的引用的對象
  2. 方法區(qū)中靜態(tài)屬性引用的對象,常量引用的對象
  3. 本地方法棧中JNI(即一般說的Native方法)引用的對象七芭。

2.Synchronized 與Lock都是可重入鎖素挽,同一個線程再次進入同步代碼的時候.可以使用自己已經(jīng)獲取到的鎖。

Synchronized是悲觀鎖機制狸驳,獨占鎖预明。而Locks.ReentrantLock是,每次不加鎖而是假設(shè)沒有沖突而去完成某項操作耙箍,如果因為沖突失敗就重試撰糠,直到成功為止。 ReentrantLock適用場景

某個線程在等待一個鎖的控制權(quán)的這段時間需要中斷
需要分開處理一些wait-notify辩昆,ReentrantLock里面的Condition應(yīng)用阅酪,能夠控制notify哪個線程,鎖可以綁定多個條件。
具有公平鎖功能术辐,每個到來的線程都將排隊等候砚尽。


3.String、StringBuffer與StringBuilder之間區(qū)別

  1. 三者在執(zhí)行速度方面的比較:StringBuilder > StringBuffer > String
  2. string 字符串常量

StringBuffer是線程安全的辉词,每次操作字符串必孤,String會生成一個新的對象,而StringBuffer不會较屿;
StringBuilder是非線程安全的


4.Volatile和Synchronized四個不同點:

  1. 粒度不同隧魄,前者針對變量 ,后者鎖對象和類
  2. syn阻塞隘蝎,volatile線程不阻塞
  3. syn保證三大特性购啄,volatile不保證原子性
  4. syn編譯器優(yōu)化,volatile不優(yōu)化 volatile具備兩種特性:

5.線程池

線程池的作用:

在程序啟動的時候就創(chuàng)建若干線程來響應(yīng)處理嘱么,它們被稱為線程池狮含,里面的線程叫工作線程
第一:降低資源消耗。通過重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗曼振。
第二:提高響應(yīng)速度几迄。當(dāng)任務(wù)到達時,任務(wù)可以不需要等到線程創(chuàng)建就能立即執(zhí)行冰评。
第三:提高線程的可管理性映胁。
常用線程池:
ExecutorService 是主要的實現(xiàn)類,其中常用的有
Executors.newSingleThreadPool(),
newFixedThreadPool(),
newcachedTheadPool(),
newScheduledThreadPool()甲雅。


6.SpringMVC運行原理

  1. 客戶端請求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查詢HandlerMapping解孙,找到并分發(fā)到指定的Controller中。
  3. Controller調(diào)用業(yè)務(wù)邏輯處理后抛人,返回ModelAndView
  4. DispatcherServlet查詢一個或多個ViewResoler視圖解析器弛姜,找到ModelAndView指定的視圖
  5. 視圖負責(zé)將結(jié)果顯示到客戶端

7.Session與Cookie:

  1. Cookie可以讓服務(wù)端跟蹤每個客戶端的訪問,但是每次客戶端的訪問都必須傳回這些Cookie妖枚,如果Cookie很多缀旁,則無形的增加了客戶端與服務(wù)端的數(shù)據(jù)傳輸量搔确;
  2. Session則很好地解決了這個問題情龄,同一個客戶端每次和服務(wù)端交互時皆撩,將數(shù)據(jù)存儲通過Session到服務(wù)端,不需要每次都傳回所有的Cookie值抒寂,而是傳回一個ID结啼,每個客戶端第一次訪問服務(wù)器生成的唯一的ID,客戶端只要傳回這個ID就行了屈芜,這個ID通常為NAME為JSESSIONID的一個Cookie郊愧。這樣服務(wù)端就可以通過這個ID朴译,來將存儲到服務(wù)端的KV值取出了。
  3. Session和Cookie的超時問題属铁,Cookie的安全問題

8.分布式Session框架

  1. 配置服務(wù)器眠寿,Zookeeper集群管理服務(wù)器可以統(tǒng)一管理所有服務(wù)器的配置文件
  2. 共享這些Session存儲在一個分布式緩存中,可以隨時寫入和讀取焦蘑,而且性能要很好盯拱,如Memcache,Tair例嘱。
  3. 封裝一個類繼承自HttpSession狡逢,將Session存入到這個類中然后再存入分布式緩存中
  4. 由于Cookie不能跨域訪問,要實現(xiàn)Session同步拼卵,要同步SessionID寫到不同域名下奢浑。

9.Spring事務(wù)配置方法:

1.切點信息,用于定位實施事物切面的業(yè)務(wù)類方法
2.控制事務(wù)行為的事務(wù)屬性腋腮,這些屬性包括事物隔離級別雀彼,事務(wù)傳播行為,超時時間即寡,回滾規(guī)則徊哑。
Spring通過aop/tx Schema 命名空間和@Transaction注解技術(shù)來進行聲明式事物配置。


10.HashMap與HashTable的區(qū)別聪富。

1莺丑、HashMap是非線程安全的,HashTable是線程安全的墩蔓。
2窒盐、HashMap的鍵和值都允許有null值存在,而HashTable則不行钢拧。
3、因為線程安全的問題炕横,HashMap效率比HashTable的要高源内。

HashMap的實現(xiàn)機制:

維護一個每個元素是一個鏈表的數(shù)組,而且鏈表中的每個節(jié)點是一個Entry[]鍵值對的數(shù)據(jù)結(jié)構(gòu)份殿。
實現(xiàn)了數(shù)組+鏈表的特性膜钓,查找快,插入刪除也快卿嘲。
對于每個key,他對應(yīng)的數(shù)組索引下標是 int i = hash(key.hashcode)&(len-1);
每個新加入的節(jié)點放在鏈表首颂斜,然后該新加入的節(jié)點指向原鏈表首


11.死鎖的必要條件

  1. 互斥 至少有一個資源處于非共享狀態(tài)
  2. 占有并等待
  3. 非搶占
  4. 循環(huán)等待

解決死鎖:

第一個是死鎖預(yù)防,就是不讓上面的四個條件同時成立拾枣。
二是沃疮,合理分配資源盒让。
三是使用銀行家算法,如果該進程請求的資源操作系統(tǒng)剩余量可以滿足司蔬,那么就分配邑茄。


12.Java的四種引用,強弱軟虛俊啼,以及用到的場景

  1. 利用軟引用和弱引用解決OOM問題:用一個HashMap來保存圖片的路徑和相應(yīng)圖片對象關(guān)聯(lián)的軟引用之間的映射關(guān)系肺缕,在內(nèi)存不足時,JVM會自動回收這些緩存圖片對象所占用的空間授帕,從而有效地避免了OOM的問題同木。
  2. 通過軟可及對象重獲方法實現(xiàn)Java對象的高速緩存:比如我們創(chuàng)建了一Employee的類,如果每次需要查詢一個雇員的信息跛十。哪怕是幾秒中之前剛剛查詢過的彤路,都要重新構(gòu)建一個實例,這是需要消耗很多時間的偶器。我們可以通過軟引用和 HashMap 的結(jié)合斩萌,先是保存引用方面:以軟引用的方式對一個Employee對象的實例進行引用并保存該引用到HashMap 上,key 為此雇員的 id屏轰,value為這個對象的軟引用颊郎,另一方面是取出引用,緩存中是否有該Employee實例的軟引用霎苗,如果有姆吭,從軟引用中取得。如果沒有軟引用唁盏,或者從軟引用中得到的實例是null内狸,重新構(gòu)建一個實例,并保存對這個新建實例的軟引用厘擂。
  3. 強引用:如果一個對象具有強引用昆淡,它就不會被垃圾回收器回收。即使當(dāng)前內(nèi)存空間不足刽严,JVM也不會回收它昂灵,而是拋出 OutOfMemoryError 錯誤,使程序異常終止舞萄。如果想中斷強引用和某個對象之間的關(guān)聯(lián)眨补,可以顯式地將引用賦值為null,這樣一來的話倒脓,JVM在合適的時間就會回收該對象撑螺。
  4. 軟引用:在使用軟引用時,如果內(nèi)存的空間足夠崎弃,軟引用就能繼續(xù)被使用甘晤,而不會被垃圾回收器回收含潘,只有在內(nèi)存不足時,軟引用才會被垃圾回收器回收安皱。
  5. 弱引用:具有弱引用的對象擁有的生命周期更短暫调鬓。因為當(dāng) JVM 進行垃圾回收,一旦發(fā)現(xiàn)弱引用對象酌伊,無論當(dāng)前內(nèi)存空間是否充足腾窝,都會將弱引用回收。不過由于垃圾回收器是一個優(yōu)先級較低的線程居砖,所以并不一定能迅速發(fā)現(xiàn)弱引用對象虹脯。
  6. 虛引用:顧名思義,就是形同虛設(shè)奏候,如果一個對象僅持有虛引用循集,那么它相當(dāng)于沒有引用,在任何時候都可能被垃圾回收器回收蔗草。

13.Override和Overload的含義以及區(qū)別

  1. Overload顧名思義是重新加載咒彤,它可以表現(xiàn)類的多態(tài)性,可以是函數(shù)里面可以有相同的函數(shù)名但是參數(shù)名咒精、返回值镶柱、類型不能相同;或者說可以改變參數(shù)模叙、類型歇拆、返回值但是函數(shù)名字依然不變。
  2. 就是ride(重寫)的意思范咨,在子類繼承父類的時候子類中可以定義某方法與其父類有相同的名稱和參數(shù)故觅,當(dāng)子類在調(diào)用這一函數(shù)時自動調(diào)用子類的方法,而父類相當(dāng)于被覆蓋(重寫)了渠啊。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末输吏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子替蛉,更是在濱河造成了極大的恐慌评也,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灭返,死亡現(xiàn)場離奇詭異,居然都是意外死亡坤邪,警方通過查閱死者的電腦和手機熙含,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艇纺,“玉大人怎静,你說我怎么就攤上這事邮弹。” “怎么了蚓聘?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵腌乡,是天一觀的道長。 經(jīng)常有香客問我夜牡,道長与纽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任塘装,我火速辦了婚禮急迂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹦肴。我一直安慰自己僚碎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布阴幌。 她就那樣靜靜地躺著勺阐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矛双。 梳的紋絲不亂的頭發(fā)上渊抽,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音背零,去河邊找鬼腰吟。 笑死,一個胖子當(dāng)著我的面吹牛徙瓶,可吹牛的內(nèi)容都是我干的毛雇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侦镇,長吁一口氣:“原來是場噩夢啊……” “哼灵疮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起壳繁,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤震捣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闹炉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒿赢,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年渣触,在試婚紗的時候發(fā)現(xiàn)自己被綠了羡棵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗅钻,死狀恐怖皂冰,靈堂內(nèi)的尸體忽然破棺而出店展,到底是詐尸還是另有隱情,我是刑警寧澤秃流,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布赂蕴,位于F島的核電站,受9級特大地震影響舶胀,放射性物質(zhì)發(fā)生泄漏概说。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一峻贮、第九天 我趴在偏房一處隱蔽的房頂上張望席怪。 院中可真熱鬧,春花似錦纤控、人聲如沸挂捻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻撒。三九已至,卻和暖如春耿导,著一層夾襖步出監(jiān)牢的瞬間声怔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工舱呻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留醋火,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓箱吕,卻偏偏與公主長得像芥驳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茬高,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容