互聯網2020年java面試題彙總

2020年年初,新冠把我限制在出租屋20平米的空間裏,每天喫喝睡覺,空虛的要死。閒來無事那就準備跳槽吧。準備了三個半月的時間,投了約300份簡歷,面試了小二十家公司,最近也剛收到了幾個互聯網公司的offer, 今年的形勢下還算滿意吧,面試的過程是痛苦的,但是也是值得的,未來的你會感謝現在努力的自己。

今年的疫情影響,很多行業都多少受到些許衝擊,我不是科班出身,在傳統行業也呆了太久,所以面試過程最開始還是很緊張的,喫不好睡不好的,不過慢慢的就習慣了,只接收面試結果就行,多多少少有些阿Q精神,自我保護而已。正好最近在準備入職,事情不是很多,彙總下面試過程中實際遇到的問題,掌握理解的話應付大廠的一面,二面基本沒任何問題(到最後我基本都是一面全對,二面會最多錯一個問題),我掛的最多的就是三面(牽涉到項目經驗、項目管理和架構設計)這塊,沒辦法,畢竟沒實際的互聯網項目,項目沒有亮點,掛的最慘。

自我介紹

自我介紹這個是必須的,我這邊大概準備了1分鐘左右,主要是自己的教育和項目背景,自己在工作中承擔的角色,比較出色的經歷。另外這裏說一點,基本每輪的面試結束後,面試官都會問,你有什麼問題要問我嗎?這個要準備一下,要不然還是有點尷尬的,比如一面二面的時候就可以問,具體的崗位職責是什麼,會用到哪些技術棧,到了三面、四面再問技術可能就不太合適了,可以拿面試過程中答錯的問題的某個點,和麪試官交流一下,面試官基本上還是很樂意去探討這些東西。

另外,必須要有1-2個能介紹的非常熟悉的項目,面試的時候會讓介紹項目的整體功能,系統框架,核心技術棧等。這個要言簡意賅,而且還要讓面試官明白,這些都是你自己擅長的,和麪試管聊這些都會是加分點。如果講不明白的話,面試官理解不到位就會直接跳過項目,感覺就會丟分吧

java基礎

  1. HashMap的put和get過程大概描述下,是怎麼解決Hash衝突的?還有別的方法解決Hash衝突嗎?
  2. StringBuilder和StringBuffer的區別,高併發下用StringBuilder會存在什麼問題,現象是什麼?
  3. 一致性Hash怎麼實現?主要解決了什麼問題?(TreeMap)
  4. Synchronized關鍵字和Lock關鍵字的區別?平時哪個用的最多?Synchronized鎖的優化過程及原理(偏向鎖、輕量級鎖、重量級鎖、對象頭)
  5. CAS怎麼實現的,有什麼缺點嗎?JDK中是怎麼實現公平鎖和非公平鎖(AQS)?
  6. ConcurrentHashMap簡單介紹下,已經有鏈表了爲什麼要有紅黑樹?爲什麼不直接用紅黑樹呢?
  7. 用過ThreadLocal嗎?如果用過的話value存的什麼值?會存在哪些問題?還有哪些情況會導致內存泄漏?內存泄漏和內存溢出的區別?ThreadLocal怎麼獲取某個線程中變量的值(線程id)?
  8. JMM模型是什麼?知道Happens-before嗎?volatile關鍵字的作用是什麼?底層怎麼實現的?
  9. 知道JIT嗎?幹什麼用的,和其他編譯有什麼區別?
  10. 在實際的項目中用過設計模式嗎?常用的都有那種,大概介紹下使用的業務場景?用設計模式的時候怎麼規範(設計模式的原則)?Spring都用到什麼設計模式?
  11. 線程有幾種狀態?怎麼自定義一個線程池?線程池各個參數的含義?過期之後回收的是哪些線程?應用的是哪種阻塞隊列?ArrayBlockingQueue和LinkedBlockingQueue的區別?有哪些拒絕策略?
  12. 場景:有一個線程池:5個核心線程,最大線程池數是10, 阻塞隊列的長度是5,有10個任務線程過來,這時候線程池中有多少線程?
  13. 知道死鎖嗎?寫一個死鎖,在實際的項目過程中用到過死鎖嗎?怎麼發現死鎖(jstack)?怎麼解決死鎖(順序獲取鎖,活鎖)?

JVM

  1. CMS和G1的區別及各自的優缺點,兩種GC回收器的回收過程(四個階段)中,哪個階段會出現STW?
  2. JVM內存模型有幾部分?介紹下類的加載過程。
  3. 類加載器都有哪些?爲什麼要這麼設計?怎麼打破雙親委派?實際使用過程中哪些框架自定義了雙親委派?怎麼實現自己的類加載器?
  4. JVM怎麼優化?常用的參數有哪些?
  5. JVM調優過程大概說一下(簡歷中提到了這塊,所以都會重點的問,只是根據實際業務,在內存資源有限的情況下調整新生代:老年代空間比例爲2:1,默認的是1:2)

nginx

  1. 在項目中,用的了nginx的什麼功能?瞭解nginx的反向代理嗎?

mysql

  1. mysql有哪幾種存儲引擎?
  2. mysql怎麼實現事務的?鎖機制瞭解嗎?有哪幾種鎖?鎖能解決數據的幻讀嗎?mysql是怎麼解決幻讀的?
  3. mysql有幾種索引類型,索引的數據結構是什麼?BTree和B+Tree的區別,爲什麼要用B+Tree?
  4. 做過mysql的優化嗎?優化思路是什麼?explain都有哪些字段及各個字段的含義?(因爲簡歷中重點提到了有優化經驗,所以sql優化這塊都會問到)。
  5. 左前綴原則瞭解嗎?有組合索引(a,b,c),a=1,c=2,b=3會走索引嗎?a=1,c=2哪些走索引? a=1,b>2,c=1哪些字段走索引?
  6. 什麼情況下會導致索引失效?對子查詢進行過優化嗎?

 

spring

  1. spring是怎麼管理事務的?能從底層介紹下嗎?(AOP、動態代理)
  2. spring的事務隔離級別有幾種?傳播機制有幾種?Not-surpport在有事務的情況下會報錯嗎?
  3. spring是怎麼解決循環依賴的問題?
  4. spring的生命週期有那幾個階段?(實例化、賦值、初始化、使用、銷燬)

dubbo

  1. dubbo的調用過程是怎麼的?都有哪些組件?
  2. 集羣容錯機制都有哪些?項目中用的容錯機制是什麼?支持的負載均衡都有哪些?支持的序列化方式有哪些?
  3. dubbo的自動裝配用到的核心技術是什麼(SPI)

 

項目、設計、管理(三面)

以上知識應付第一輪第二輪基礎面試我感覺沒什麼大問題,死知識,多理解幾遍就沒問題。我這邊面試的時候前兩輪都會通過,一般是死在第三面,下面羅列了些問題,有些問題和我自己的簡歷項目有關。

  1. 系統怎麼設計?(完全沒有着力點,這個問題太大了:我回答的:需求調研-框架設計-迭代開發-測試部署-運維支持,面試官直接下一個問題,已經涼涼)
  2. 新的需求過來了,你們公司是怎麼處理的?所有的需求都會滿足嗎?(需求評估、影響評估、開發評估、部署評估這些吧,當然不會都滿足)
  3. 你們公司對代碼是怎麼規範和管理的,因爲管理漏洞出現過什麼問題嗎?(類、字段、方法統一命名,必須加註釋等等吧,看面試官的表情,這不是他想要的答案)
  4. 代碼編寫的過程中,接口是怎麼規範的?原則是什麼?(原則好像就是設計模式的設計原則,開閉原則、接口隔離原則等,沒答出來,出來的時候想了下,可能是想要這個答案)
  5. 說下你最擅長的項目,這個項目從需求調研到運維支持都需要經過哪些流程?
  6. 重構項目的話,你們公司是怎麼做的?(比如把一個jar包服務拆分部署到多個服務器,用dubbo調用等,面試管說太籠統了,能不能抓住一個業務點,詳細的說一下。我的回答當然是不能)
  7. 微服務拆分的界定是什麼?怎麼理解微服務?(根據具體的業務進行拆分,好像不對)
  8. 項目代碼重建之後,對實際的業務有提升嗎?會帶來其他的什麼負面影響嗎?(肯定有提升,支持了節點的動態擴展,而且模塊之間的耦合度降低了,負面影響:模塊之間的調用會受網絡影響,運維和部署難度增大)
  9. 我看你項目中用到了rabbitmq,這個支持了哪些業務?爲什麼要選擇rabbitmq?(我知道加一個定時器就足夠支撐業務了,rabbitmq完全沒必要,就把mq的作用說了下,兩個面試官不依不饒的追着這個點不放,讓我着實的心虛痛苦,後來就亂說一氣了,也不知道後來都問了什麼問題,都是怎麼答的。這次面試是我最狼狽的一次,沒有之一)
  10. springboot的啓動器怎麼實現?自己能寫一個嗎?springboot的啓動過程是怎麼的(IOC和tomcat)?怎麼實現自動註解的(SPI)?

還有很多沒有整理,這兩天會抽空整理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章