JAVA進階必看目錄

JAVA  面試題總覽

1. 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 的新特性。


2. 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=20
      XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。


3. 開源框架 知識
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 啓動機制。

 

4. 操作系統
1.  Linux 系統下你關注過哪些內核參數,說說你知道的。
2.  Linux 下 IO 模型有幾種,各自的含義是什麼。
3.  epoll 和 poll 有什麼區別。
4.  平時用到哪些 Linux 命令。
5.  用一行命令查看文件的最後五行。
6.  用一行命令輸出正在運行的 java 進程。
7. 介紹下你理解的操作系統中線程切換過程。
8. 進程和線程的區別。
9. top 命令之後有哪些內容,有什麼作用。
10. 線上 CPU 爆高,請問你如何找到問題所在。

 

5. 多線程
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 和時間輪算法的異同。

 

6. TCP 與 與 HTTP
1.  http1.0 和 http1.1 有什麼區別。
2.  TCP三次握手和四次揮手的流程,爲什麼斷開連接要4次,如果握手只有兩次,會出現什麼。
3.  TIME_WAIT 和 CLOSE_WAIT 的區別。
4.  說說你知道的幾種 HTTP 響應碼,比如 200, 302, 404。
5.  當你用瀏覽器打開一個鏈接的時候,計算機做了哪些工作步驟。
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 的區別。


7. 架構設計與分佈式
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 自帶的超時機制有哪些,怎麼實現的。


8. 算法
1.  10 億個數字裏裏面找最小的 10 個。
2.  有 1 億個數字,其中有 2 個是重複的,快速找到它,時間和空間要最優。
3.  2 億個隨機生成的無序整數,找出中間大小的值。
4. 給一個不知道長度的(可能很大)輸入字符串,設計一種方案,將重複的字符排重。
5.  遍歷二叉樹。
6. 有 3n+1 個數字,其中 3n 箇中是重複的,只有 1 個是不重複的,怎麼找出來。
7. 寫一個字符串反轉函數。
8. 常用的排序算法,快排,歸併、冒泡。 快排的最優時間複雜度,最差複雜度。冒泡排序的優化方案。
9. 二分查找的時間複雜度,優勢。
10. 一個已經構建好的 TreeSet,怎麼完成倒排序。
11. 什麼是 B+樹,B-樹,列出實際的使用場景。
12. 一個單向鏈表,刪除倒數第 N 個數據。
13. 200 個有序的數組,每個數組裏面 100 個元素,找出 top20 的元素。
14. 單向鏈表,查找中間的那個元素。


9. 數據庫知識
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 的主從延遲怎麼解決。


10. 消息隊列
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 的消息延遲了怎麼處理,消息可以設置過期時間麼,過期了你們一般怎麼處理。


11. 緩存
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. 如何看待緩存的使用(本地緩存,集中式緩存),簡述本地緩存和集中式緩存和優缺點。本地緩存在併發使用時的注意事項。


12. 搜索
1.  elasticsearch 瞭解多少,說說你們公司 es 的集羣架構,索引數據大小,分片有多少,以及一些調優手段 。elasticsearch 的倒排索引是什麼。
2.  elasticsearch 索引數據多了怎麼辦,如何調優,部署。
3.  elasticsearch 是如何實現 master 選舉的。
4. 詳細描述一下 Elasticsearch 索引文檔的過程。
5. 詳細描述一下 Elasticsearch 搜索的過程。
6. Elasticsearch 在部署時,對 Linux 的設置有哪些優化方法?
7. lucence 內部結構是什麼。

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