1. 程式人生 > >史上最全阿里 Java 面試題總結

史上最全阿里 Java 面試題總結

以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關試題。

JAVA基礎

  1. JAVA中的幾種基本資料型別是什麼,各自佔用多少位元組。

  2. String類能被繼承嗎,為什麼。

  3. String,Stringbuffer,StringBuilder的區別。

  4. ArrayList和LinkedList有什麼區別。

  5. 講講類的例項化順序,比如父類靜態資料,建構函式,欄位,子類靜態資料,建構函式,字 段,當new的時候,他們的執行順序。

  6. 用過哪些Map類,都有什麼區別,HashMap是執行緒安全的嗎,併發下使用的Map是什麼,他們 內部原理分別是什麼,比如儲存方式,hashcode,擴容,預設容量等。

  7. JAVA8的ConcurrentHashMap為什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何 設計。

  8. 有沒有有順序的Map實現類,如果有,他們是怎麼保證有序的。

  9. 抽象類和介面的區別,類可以繼承多個類麼,介面可以繼承多個介面麼,類可以實現多個介面 麼。

  10. 繼承和聚合的區別在哪。

  11. IO模型有哪些,講講你理解的nio ,他和bio,aio的區別是啥,談談reactor模型。

  12. 反射的原理,反射建立類例項的三種方式是什麼。

  13. 反射中,Class.forName和ClassLoader區別 。

  14. 描述動態代理的幾種實現方式,分別說出相應的優缺點。

  15. 動態代理與cglib實現的區別。

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

  17. final的用途。

  18. 寫出三種單例模式實現 。

  19. 如何在父類中為子類自動完成所有的hashcode和equals實現?這麼做有何優劣。

  20. 請結合OO設計理念,談談訪問修飾符public、private、protected、default在應用設 計中的作用。

  21. 深拷貝和淺拷貝區別。

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

  23. error和exception的區別,CheckedException,RuntimeException的區別。

  24. 請列出5個執行時異常。

  25. 在自己的程式碼中,如果建立一個java.lang.String類,這個類是否可以被類載入器加 載?為什麼。

  26. 說一說你對java.lang.Object物件中hashCode和equals方法的理解。在什麼場景下需 要重新實現這兩個方法。

  27. 在jdk1.5中,引入了泛型,泛型的存在是用來解決什麼問題。

  28. 這樣的a.hashcode() 有什麼用,與a.equals(b)有什麼關係。

  29. 有沒有可能2個不相等的物件有相同的hashcode。

  30. Java中的HashSet內部是如何工作的。

  31. 什麼是序列化,怎麼序列化,為什麼序列化,反序列化會遇到什麼問題,如何解決。

  32. java8的新特性。

JVM知識

  1. 什麼情況下會發生棧記憶體溢位。

  2. JVM的記憶體結構,Eden和Survivor比例。

  3. JVM記憶體為什麼要分成新生代,老年代,持久代。新生代中為什麼要分為Eden和Survivor。

  4. JVM中一次完整的GC流程是怎樣的,物件如何晉升到老年代,說說你知道的幾種主要的JVM參 數。

  5. 你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。

  6. 垃圾回收演算法的實現原理。

  7. 當出現了記憶體溢位,你怎麼排錯。

  8. JVM記憶體模型的相關知識瞭解多少,比如重排序,記憶體屏障,happen-before,主記憶體,工作 記憶體等。

  9. 簡單說說你瞭解的類載入器,可以打破雙親委派麼,怎麼打破。

  10. 講講JAVA的反射機制。

  11. 你們線上應用的JVM引數有哪些。

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

  13. 怎麼打出執行緒棧資訊。

  14. 請解釋如下jvm引數的含義: -server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m - XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 - XX:+UseCMSInitiatingOccupancyOnly。

開源框架知識

  1. 簡單講講tomcat結構,以及其類載入器流程,執行緒模型等。

  2. tomcat如何調優,涉及哪些引數 。

  3. 講講Spring載入流程。

  4. Spring AOP的實現原理。

  5. 講講Spring事務的傳播屬性。

  6. Spring如何管理事務的。

  7. Spring怎麼配置事務(具體說出一些關鍵的xml 元素)。

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

  9. Springmvc 中DispatcherServlet初始化過程。

  10. netty的執行緒模型,netty如何基於reactor模型上實現的。

  11. 為什麼選擇netty。

  12. 什麼是TCP粘包,拆包。解決方式是什麼。

  13. netty的fashwheeltimer的用法,實現原理,是否出現過呼叫不夠準時,怎麼解決。

  14. netty的心跳處理在弱網下怎麼辦。

  15. netty的通訊協議是什麼樣的。

  16. springmvc用到的註解,作用是什麼,原理。

  17. springboot啟動機制。

  18. 點選這裡有一套答案版的Spring試題。

作業系統

  1. Linux系統下你關注過哪些核心引數,說說你知道的。

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

  3. epoll和poll有什麼區別。

  4. 平時用到哪些Linux命令。

  5. 用一行命令檢視檔案的最後五行。

  6. 用一行命令輸出正在執行的java程序。

  7. 介紹下你理解的作業系統中執行緒切換過程。

  8. 程序和執行緒的區別。

  9. top 命令之後有哪些內容,有什麼作用。

  10. 線上CPU爆高,請問你如何找到問題所在。

多執行緒

  1. 多執行緒的幾種實現方式,什麼是執行緒安全。

  2. volatile的原理,作用,能代替鎖麼。

  3. 畫一個執行緒的生命週期狀態圖。

  4. sleep和wait的區別。

  5. sleep和sleep(0)的區別。

  6. Lock與Synchronized的區別 。

  7. synchronized的原理是什麼,一般用在什麼地方(比如加在靜態方法和非靜態方法的區別,靜 態方法和非靜態方法同時執行的時候會有影響嗎),解釋以下名詞:重排序,自旋鎖,偏向鎖,輕 量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖。

  8. 用過哪些原子類,他們的原理是什麼。

  9. JUC下研究過哪些併發工具,講講原理。

  10. 用過執行緒池嗎,如果用過,請說明原理,並說說newCache和newFixed有什麼區別,構造函 數的各個引數的含義是什麼,比如coreSize,maxsize等。

  11. 執行緒池的關閉方式有幾種,各自的區別是什麼。

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

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

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

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

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

  17. 有哪些無鎖資料結構,他們實現的原理是什麼。

  18. 講講java同步機制的wait和notify。

  19. CAS機制是什麼,如何解決ABA問題。

  20. 多執行緒如果執行緒掛住了怎麼辦。

  21. countdowlatch和cyclicbarrier的內部原理和用法,以及相互之間的差別(比如 countdownlatch的await方法和是怎麼實現的)。

  22. 對AbstractQueuedSynchronizer瞭解多少,講講加鎖和解鎖的流程,獨佔鎖和公平所 加鎖有什麼不同。

  23. 使用synchronized修飾靜態方法和非靜態方法有什麼區別。

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

  25. 導致執行緒死鎖的原因?怎麼解除執行緒死鎖。

  26. 非常多個執行緒(可能是不同機器),相互之間需要等待協調,才能完成某種工作,問怎麼設計這種協調方案。

  27. 用過讀寫鎖嗎,原理是什麼,一般在什麼場景下用。

  28. 開啟多個執行緒,如果保證順序執行,有哪幾種實現方式,或者如何保證多個執行緒都執行完 再拿到結果。

  29. 延遲佇列的實現方式,delayQueue和時間輪演算法的異同。

  30. 點選這裡有一套答案版的多執行緒試題。

TCP與HTTP

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

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

  3. TIME_WAIT和CLOSE_WAIT的區別。

  4. 說說你知道的幾種HTTP響應碼,比如200, 302, 404。

  5. 當你用瀏覽器開啟一個連結(如:http://www.javastack.cn)的時候,計算機做了哪些工作步驟。

  6. TCP/IP如何保證可靠性,說說TCP頭的結構。

  7. 如何避免瀏覽器快取。

  8. 如何理解HTTP協議的無狀態性。

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

  10. HTTP有哪些method

  11. 簡述HTTP請求的報文格式。

  12. HTTP的長連線是什麼意思。

  13. HTTPS的加密方式是什麼,講講整個加密解密流程。

  14. Http和https的三次握手有什麼區別。

  15. 什麼是分塊傳送。

  16. Session和cookie的區別。

  17. 點選這裡有一套答案版的試題。

架構設計與分散式

  1. 用java自己實現一個LRU。

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

  3. 設計一個秒殺系統,30分鐘沒付款就自動關閉交易。

  4. 如何使用redis和zookeeper實現分散式鎖?有什麼區別優缺點,會有什麼問題,分別適用什麼 場景。(延伸:如果知道redlock,講講他的演算法實現,爭議在哪裡)

  5. 如果有人惡意建立非法連線,怎麼解決。

  6. 分散式事務的原理,優缺點,如何使用分散式事務,2pc 3pc 的區別,解決了哪些問題,還有 哪些問題沒解決,如何解決,你自己專案裡涉及到分散式事務是怎麼處理的。

  7. 什麼是一致性hash。

  8. 什麼是restful,講講你理解的restful。

  9. 如何設計一個良好的API。

  10. 如何設計建立和保持100w的長連線。

  11. 解釋什麼是MESI協議(快取一致性)。

  12. 說說你知道的幾種HASH演算法,簡單的也可以。

  13. 什麼是paxos演算法, 什麼是zab協議。

  14. 一個線上文件系統,文件可以被編輯,如何防止多人同時對同 一份文件進行編輯更新。

  15. 線上系統突然變得異常緩慢,你如何查詢問題。

  16. 說說你平時用到的設計模式。

  17. Dubbo的原理,有看過原始碼麼,資料怎麼流轉的,怎麼實現叢集,負載均衡,服務註冊 和發現,重試轉發,快速失敗的策略是怎樣的 。

  18. 一次RPC請求的流程是什麼。

  19. 自己實現過rpc麼,原理可以簡單講講。Rpc要解決什麼問題。

  20. 非同步模式的用途和意義。

  21. 程式設計中自己都怎麼考慮一些設計原則的,比如開閉原則,以及在工作中的應用。

  22. 設計一個社交網站中的“私信”功能,要求高併發、可擴充套件等等。 畫一下架構圖。

  23. MVC模式,即常見的MVC框架。

  24. 聊下曾經參與設計的伺服器架構並畫圖,談談遇到的問題,怎麼解決的。

  25. 應用伺服器怎麼監控效能,各種方式的區別。

  26. 如何設計一套高併發支付方案,架構如何設計。

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

  28. Zookeeper的用途,選舉的原理是什麼。

  29. Zookeeper watch機制原理。

  30. Mybatis的底層實現原理。

  31. 請思考一個方案,實現分散式環境下的countDownLatch。

  32. 後臺系統怎麼防止請求重複提交。

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

  34. 講講你理解的服務治理。

  35. 如何做到介面的冪等性。

  36. 如何做限流策略,令牌桶和漏斗演算法的使用場景。

  37. 什麼叫資料一致性,你怎麼理解資料一致性。

  38. 分散式服務呼叫方,不依賴服務提供方的話,怎麼處理服務方掛掉後,大量無效資源請求 的浪費,如果只是服務提供方吞吐不高的時候該怎麼做,如果服務掛了,那麼一會重啟,該怎 麼做到最小的資源浪費,流量半開的實現機制是什麼。

  39. dubbo的泛化呼叫怎麼實現的,如果是你,你會怎麼做。

  40. 遠端呼叫會有超時現象,如果做到優雅的控制,JDK自帶的超時機制有哪些,怎麼實現的。

演算法

  1. 10億個數字裡裡面找最小的10個。

  2. 有1億個數字,其中有2個是重複的,快速找到它,時間和空間要最優。

  3. 2億個隨機生成的無序整數,找出中間大小的值。

  4. 給一個不知道長度的(可能很大)輸入字串,設計一種方案,將重複的字元排重。

  5. 遍歷二叉樹。

  6. 有3n+1個數字,其中3n箇中是重複的,只有1個是不重複的,怎麼找出來。

  7. 寫一個字串(如:www.javastack.cn)反轉函式。

  8. 常用的排序演算法,快排,歸併、冒泡。 快排的最優時間複雜度,最差複雜度。氣泡排序的 優化方案。

  9. 二分查詢的時間複雜度,優勢。

  10. 一個已經構建好的TreeSet,怎麼完成倒排序。

  11. 什麼是B+樹,B-樹,列出實際的使用場景。

  12. 一個單向連結串列,刪除倒數第N個數據。

  13. 200個有序的陣列,每個數組裡面100個元素,找出top20的元素。

  14. 單向連結串列,查詢中間的那個元素。

資料庫知識

  1. 資料庫隔離級別有哪些,各自的含義是什麼,MYSQL預設的隔離級別是是什麼。

  2. 什麼是幻讀。

  3. MYSQL有哪些儲存引擎,各自優缺點。

  4. 高併發下,如何做到安全的修改同一行資料。

  5. 樂觀鎖和悲觀鎖是什麼,INNODB的標準行級鎖有哪2種,解釋其含義。

  6. SQL優化的一般步驟是什麼,怎麼看執行計劃,如何理解其中各個欄位的含義。

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

  8. MYsql的索引原理,索引的型別有哪些,如何建立合理的索引,索引如何優化。

  9. 聚集索引和非聚集索引的區別。

  10. select for update 是什麼含義,會鎖表還是鎖行或是其他。

  11. 為什麼要用Btree實現,它是怎麼分裂的,什麼時候分裂,為什麼是平衡的。

  12. 資料庫的ACID是什麼。

  13. 某個表有近千萬資料,CRUD比較慢,如何優化。

  14. Mysql怎麼優化table scan的。

  15. 如何寫sql能夠有效的使用到複合索引。

  16. mysql中in 和exists 區別。

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

  18. MVCC的含義,如何實現的。

  19. 你做過的專案裡遇到分庫分表了嗎,怎麼做的,有用到中介軟體麼,比如sharding jdbc等,他 們的原理知道麼。

  20. MYSQL的主從延遲怎麼解決。

訊息佇列

  1. 訊息佇列的使用場景。

  2. 訊息的重發,補充策略。

  3. 如何保證訊息的有序性。

  4. 用過哪些MQ,和其他mq比較有什麼優缺點,MQ的連線是執行緒安全的嗎,你們公司的MQ服務 架構怎樣的。

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

  6. rabbitmq如何實現叢集高可用。

  7. kafka吞吐量高的原因。

  8. kafka 和其他訊息佇列的區別,kafka 主從同步怎麼實現。

  9. 利用mq怎麼實現最終一致性。

  10. 使用kafka有沒有遇到什麼問題,怎麼解決的。

  11. MQ有可能發生重複消費,如何避免,如何做到冪等。

  12. MQ的訊息延遲了怎麼處理,訊息可以設定過期時間麼,過期了你們一般怎麼處理。

快取

  1. 常見的快取策略有哪些,如何做到快取(比如redis)與DB裡的資料一致性,你們專案中用到了 什麼快取系統,如何設計的。

  2. 如何防止快取擊穿和雪崩。

  3. 快取資料過期後的更新如何設計。

  4. redis的list結構相關的操作。

  5. Redis的資料結構都有哪些。

  6. Redis的使用要注意什麼,講講持久化方式,記憶體設定,叢集的應用和優劣勢,淘汰策略等。

  7. redis2和redis3的區別,redis3內部通訊機制。

  8. 當前redis叢集有哪些玩法,各自優缺點,場景。

  9. Memcache的原理,哪些資料適合放在快取中。

  10. redis和memcached 的記憶體管理的區別。

  11. Redis的併發競爭問題如何解決,瞭解Redis事務的CAS操作嗎。

  12. Redis的選舉演算法和流程是怎樣的。

  13. redis的持久化的機制,aof和rdb的區別。

  14. redis的叢集怎麼同步的資料的。

  15. 知道哪些redis的優化操作。

  16. Reids的主從複製機制原理。

  17. Redis的執行緒模型是什麼。

  18. 請思考一個方案,設計一個可以控制快取總體大小的自動適應的本地快取。

  19. 如何看待快取的使用(本地快取,集中式快取),簡述本地快取和集中式快取和優缺點。

  20. 本地快取在併發使用時的注意事項。

  21. 點選這裡有一套答案版的Redis試題。

搜尋

  1. elasticsearch瞭解多少,說說你們公司es的叢集架構,索引資料大小,分片有多少,以及一些 調優手段 。elasticsearch的倒排索引是什麼。

  2. elasticsearch 索引資料多了怎麼辦,如何調優,部署。

  3. elasticsearch是如何實現master選舉的。

  4. 詳細描述一下Elasticsearch索引文件的過程。

  5. 詳細描述一下Elasticsearch搜尋的過程。

  6. Elasticsearch在部署時,對Linux的設定有哪些優化方法?

  7. lucence內部結構是什麼。

以上面試題整理來源於網路,僅供給大家參考,沒有答案哦。大家對比一下,自己還差多遠?從而提高面試成功率。