阿里JAVA架構師面試136題含答案:JVM+spring+分散式+併發程式設計!

進擊的java程式設計師k發表於2019-03-26
此文包含 Java 面試的各個方面,史上最全,苦心整理最全Java面試題目整理包括基+JVM+演算法+資料庫優化+演算法資料結構+分散式+併發程式設計+快取等,使用層面廣,知識量大,涉及你的知識盲點。要想在面試者中出類拔萃就要比人付出更多的努力,共勉!

阿里JAVA架構師面試136題含答案:JVM+spring+分散式+併發程式設計!

java高頻面試題如下:

java基礎

  1. Arrays.sort實現原理和Collection實現原理
  2. foreach和while的區別(編譯之後)
  3. 執行緒池的種類,區別和使用場景
  4. 分析執行緒池的實現原理和執行緒的排程過程
  5. 執行緒池如何調優
  6. 執行緒池的最大執行緒數目根據什麼確定
  7. 動態代理的幾種方式
  8. HashMap的併發問題
  9. 瞭解LinkedHashMap的應用嗎
  10. 反射的原理,反射建立類例項的三種方式是什麼?
  11. cloneable介面實現原理,淺拷貝or深拷貝
  12. Java NIO使用
  13. hashtable和hashmap的區別及實現原理,hashmap會問到陣列索引,hash碰撞怎麼解決
  14. arraylist和linkedlist區別及實現原理
  15. 反射中,Class.forName和ClassLoader區別
  16. String,Stringbuffer,StringBuilder的區別?
  17. 有沒有可能2個不相等的物件有相同的hashcode
  18. 簡述NIO的最佳實踐,比如netty,mina
  19. TreeMap的實現原理

JVM相關

  1. 類的例項化順序,比如父類靜態資料,建構函式,欄位,子類靜態資料,建構函式,欄位,他們的執行順序

  2. JVM記憶體分代

  3. Java 8的記憶體分代改進

  4. JVM垃圾回收機制,何時觸發MinorGC等操作

  5. jvm中一次完整的GC流程(從ygc到fgc)是怎樣的,重點講講物件如何晉升到老年代,幾種主要的jvm引數等

  6. 你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms,g1

  7. 新生代和老生代的記憶體回收策略

  8. Eden和Survivor的比例分配等

  9. 深入分析了Classloader,雙親委派機制

  10. JVM的編譯優化

  11. 對Java記憶體模型的理解,以及其在併發中的應用

  12. 指令重排序,記憶體柵欄等

  13. OOM錯誤,stackoverflow錯誤,permgen space錯誤

  14. JVM常用引數

  15. tomcat結構,類載入器流程

  16. volatile的語義,它修飾的變數一定執行緒安全嗎

  17. g1和cms區別,吞吐量優先和響應優先的垃圾收集器選擇

  18. 說一說你對環境變數classpath的理解?如果一個類不在classpath下,為什麼會丟擲ClassNotFoundException異常,如果在不改變這個類路徑的前期下,怎樣才能正確載入這個類?

  19. 說一下強引用、軟引用、弱引用、虛引用以及他們之間和gc的關係

JUC/併發相關

  1. ThreadLocal用過麼,原理是什麼,用的時候要注意什麼

  2. Synchronized和Lock的區別

  3. synchronized 的原理,什麼是自旋鎖,偏向鎖,輕量級鎖,什麼叫可重入鎖,什麼叫公平鎖和非公平鎖

  4. concurrenthashmap具體實現及其原理,jdk8下的改版

  5. 用過哪些原子類,他們的引數以及原理是什麼

  6. cas是什麼,他會產生什麼問題(ABA問題的解決,如加入修改次數、版本號)

  7. 如果讓你實現一個併發安全的連結串列,你會怎麼做

  8. 簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處

  9. 簡述AQS的實現原理

  10. countdowlatch和cyclicbarrier的用法,以及相互之間的差別?

  11. concurrent包中使用過哪些類?分別說說使用在什麼場景?為什麼要使用?

  12. LockSupport工具

  13. Condition介面及其實現原理

  14. Fork/Join框架的理解

  15. jdk8的parallelStream的理解

  16. 分段鎖的原理,鎖力度減小的思考

Spring

  1. Spring AOP與IOC的實現原理

  2. Spring的beanFactory和factoryBean的區別

  3. 為什麼CGlib方式可以對介面實現代理?

  4. RMI與代理模式

  5. Spring的事務隔離級別,實現原理

  6. 對Spring的理解,非單例注入的原理?它的生命週期?迴圈注入的原理,aop的實現原理,說說aop中的幾個術語,它們是怎麼相互工作的?

  7. Mybatis的底層實現原理

  8. MVC框架原理,他們都是怎麼做url路由的

  9. spring boot特性,優勢,適用場景等

  10. quartz和timer對比

  11. spring的controller是單例還是多例,怎麼保證併發的安全

分散式相關

  1. Dubbo的底層實現原理和機制

  2. 描述一個服務從釋出到被消費的詳細過程

  3. 分散式系統怎麼做服務治理

  4. 介面的冪等性的概念

  5. 訊息中介軟體如何解決訊息丟失問題

  6. Dubbo的服務請求失敗怎麼處理

  7. 重連機制會不會造成錯誤

  8. 對分散式事務的理解

  9. 如何實現負載均衡,有哪些演算法可以實現?

  10. Zookeeper的用途,選舉的原理是什麼?

  11. 資料的垂直拆分水平拆分。

  12. zookeeper原理和適用場景

  13. zookeeper watch機制

  14. redis/zk節點當機如何處理

  15. 分散式叢集下如何做到唯一序列號

  16. 如何做一個分散式鎖

  17. 用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連線是執行緒安全的嗎

  18. MQ系統的資料如何保證不丟失

  19. 列舉出你能想到的資料庫分庫分表策略;分庫分表後,如何解決全表查詢的問題。

演算法和資料結構以及設計模式

  1. 海量url去重類問題(布隆過濾器)

  2. 陣列和連結串列資料結構描述,各自的時間複雜度

  3. 二叉樹遍歷

  4. 快速排序

  5. BTree相關的操作

  6. 在工作中遇到過哪些設計模式,是如何應用的

  7. hash演算法的有哪幾種,優缺點,使用場景

  8. 什麼是一致性hash

  9. paxos演算法

  10. 在裝飾器模式和代理模式之間,你如何抉擇,請結合自身實際情況聊聊

  11. 程式碼重構的步驟和原因,如果理解重構到模式?

資料庫

  1. MySQL InnoDB儲存的檔案結構

  2. 索引樹是如何維護的?

  3. 資料庫自增主鍵可能的問題

  4. MySQL的幾種優化

  5. mysql索引為什麼使用B+樹

  6. 資料庫鎖表的相關處理

  7. 索引失效場景

  8. 高併發下如何做到安全的修改同一行資料,樂觀鎖和悲觀鎖是什麼,INNODB的行級鎖有哪2種,解釋其含義

  9. 資料庫會死鎖嗎,舉一個死鎖的例子,mysql怎麼解決死鎖

Redis&快取相關

  1. Redis的併發競爭問題如何解決了解Redis事務的CAS操作嗎

  2. 快取機器增刪如何對系統影響最小,一致性雜湊的實現

  3. Redis持久化的幾種方式,優缺點是什麼,怎麼實現的

  4. Redis的快取失效策略

  5. 快取穿透的解決辦法

  6. redis叢集,高可用,原理

  7. mySQL裡有2000w資料,redis中只存20w的資料,如何保證redis中的資料都是熱點資料

  8. 用Redis和任意語言實現一段惡意登入保護的程式碼,限制1小時內每使用者Id最多隻能登入5次

  9. redis的資料淘汰策略

網路相關

  1. http1.0和http1.1有什麼區別

  2. TCP/IP協議

  3. TCP三次握手和四次揮手的流程,為什麼斷開連線要4次,如果握手只有兩次,會出現什麼

  4. TIME_WAIT和CLOSE_WAIT的區別

  5. 說說你知道的幾種HTTP響應碼

  6. 當你用瀏覽器開啟一個連結的時候,計算機做了哪些工作步驟

  7. TCP/IP如何保證可靠性,資料包有哪些資料組成

  8. 長連線與短連線

  9. Http請求get和post的區別以及資料包格式

  10. 簡述tcp建立連線3次握手,和斷開連線4次握手的過程;關閉連線時,出現TIMEWAIT過多是由什麼原因引起,是出現在主動斷開方還是被動斷開方。

其他

  1. maven解決依賴衝突,快照版和發行版的區別

  2. Linux下IO模型有幾種,各自的含義是什麼

  3. 實際場景問題,海量登入日誌如何排序和處理SQL操作,主要是索引和聚合函式的應用

  4. 實際場景問題解決,典型的TOP K問題

  5. 線上bug處理流程

  6. 如何從線上日誌發現問題

  7. linux利用哪些命令,查詢哪裡出了問題(例如io密集任務,cpu過度)

  8. 場景問題,有一個第三方介面,有很多個執行緒去呼叫獲取資料,現在規定每秒鐘最多有10個執行緒同時呼叫它,如何做到。

  9. 用三個執行緒按順序迴圈列印abc三個字母,比如abcabcabc。

  10. 常見的快取策略有哪些,你們專案中用到了什麼快取系統,如何設計的

  11. 設計一個秒殺系統,30分鐘沒付款就自動關閉交易(併發會很高)

  12. 請列出你所瞭解的效能測試工具

  13. 後臺系統怎麼防止請求重複提交?

總結

在以往的面試經歷中總結了一些經驗,其實當你面試到一個水平相對較高的職位時,往往較量的技術方面已經是其次,大部分公司在與你聊完技術之後,更看重你的溝通能力、解決問題的能力、以及你以往的一些比較成功的經歷。

面試不光是這些準備不光包括技術,還有你對公司的瞭解,這是在hr這關更看重的,他們想找的不光是技術大拿,更重要的事可以跟公司共同進步的夥伴,所以當你真正開始面試,那麼就要拿出自己的真誠,讓hr感受到你對公司的興趣、熱情和自信,從談吐上表現出果斷和堅定往往會是很多招聘人事更加青睞的。如果你對某一個公司很感興趣並且技術通關了,那麼如何才能在多個選擇中讓公司選擇你,那就是可以讓hr在和你的交流中感覺到愉快和流暢,這點事相當重要的,可以勝任一份工作的人很多,但是能夠在溝通上略勝一籌,那麼這份工作一定會是非你莫屬!



相關文章