【面经一】Java高级面经
文章目錄
- 一、Java基礎
- 1. 解釋下什么是面向對象?面向對象和面向過程的區別?
- 2. 面向對象的三大特性?分別解釋下?
- 3. JDK、JRE、JVM 三者之間的關系?
- 4. 重載和重寫的區別?
- 5. Java 中是否可以重寫一個 private 或者 static 方法?
- 6. 構造方法有哪些特性?
- 8. Java 中創建對象的幾種方式?
- 9. 抽象類和接口有什么區別?
- 10. 靜態變量和實例變量的區別?
- 11、short s1 = 1;s1 = s1 + 1;有什么錯?那么 short s1 = 1; s1 += 1;呢?有沒有錯誤?
- 12. Integer 和 int 的區別?
- 14. switch 語句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?
- 15、final、finally、finalize 的區別
- 16. == 和 equals 的區別?
- 17. 兩個對象的 hashCode() 相同,則 equals() 也一定為 true 嗎?
- 19. & 和 && 的區別?
- 20. Java 中的參數傳遞是傳值呢?還是傳引用?
- 21. Java 中的 Math.round(-1.5) 等于多少?
- 22. 如何實現對象的克隆?
- 23. 深克隆和淺克隆的區別?
- 24. 什么是 Java 的序列化,如何實現 Java 的序列化?
- 25. 什么情況下需要序列化?
- 26. 泛型, 什么是類型擦除 ?
- 27. 什么是泛型中的限定通配符和非限定通配符 ?
- 29. Java 中的反射是什么意思?有哪些應用場景?
- 30. 反射的優缺點?
- 31. Java 中的動態代理是什么?有哪些應用?
- 32. 怎么實現動態代理?
- 33. static 關鍵字的作用?
- 34. super 關鍵字的作用?
- 35. 字節和字符的區別?
- 36. String 為什么要設計為不可變類?
- 37. String、StringBuilder、StringBuffer 的區別?
- 39. String str = "i" 與 String str = new String("i") 一樣嗎?
- 40. String 類的常用方法都有那些?
- 41. final 修飾 StringBuffer 后還可以 append 嗎?
- 42. Java 中的 IO 流的分類?說出幾個你熟悉的實現類?
- 43. 字節流和字符流有什么區別?
- 44. BIO、NIO、AIO 有什么區別?
- 二、Java異常
- 1. finally 塊中的代碼什么時候被執行?
- 2. finally 是不是一定會被執行到?
- 3. try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?
- 4. try-catch-finally 中那個部分可以省略?
- 5. Error 和 Exception 的區別?
- 6. 運行時異常與受檢異常有何異同?
- 7. throw 和 throws 的區別?
- 8. 常見的異常類有哪些?
- 9. 主線程可以捕獲到子線程的異常嗎?
- 三、Java集合
- 1. Java 中常用的容器有哪些?
- 2. ArrayList 和 LinkedList 的區別?
- 3. ArrayList 實現 RandomAccess 接口有何作用?為何 LinkedList 卻沒實現這個接口?
- 4. ArrayList 的擴容機制?
- 5. Array 和 ArrayList 有何區別?什么時候更適合用 Array?
- 6. HashMap 的實現原理/底層數據結構?JDK1.7 和 JDK1.8
- 7. HashMap 的 put 方法的執行過程?
- 8. HashMap 的 get 方法的執行過程?
- 9. HashMap 的 resize 方法的執行過程?
- 10. HashMap 的 size 為什么必須是 2 的整數次方?
- 11. HashMap 多線程死循環問題?
- 12. HashMap 的 get 方法能否判斷某個元素是否在 map 中?
- 13. HashMap 與 HashTable 的區別是什么?
- 14. HashMap 與 ConcurrentHashMap 的區別是什么?
- 15. HashTable 和 ConcurrentHashMap 的區別?
- 16. ConcurrentHashMap 的實現原理是什么?
- 17. HashSet 的實現原理?
- 18. HashSet 怎么保證元素不重復的?
- 19. LinkedHashMap 的實現原理?
- 20. Iterator 怎么使用?有什么特點?
- 21. Iterator 和 ListIterator 有什么區別?
- 22. Iterator 和 Enumeration 接口的區別?
- 23. fail-fast 與 fail-safe 有什么區別?
- 24. Collection 和 Collections 有什么區別?
- 四、Java并發
- 1. 并行和并發有什么區別?
- 2. 線程和進程的區別?
- 3. 守護線程是什么?
- 4. 創建線程的幾種方式?
- 5. Runnable 和 Callable 有什么區別?
- 6. 線程狀態及轉換?
- 7. sleep() 和 wait() 的區別?
- 8. 線程的 run() 和 start() 有什么區別?
- 9. 在 Java 程序中怎么保證多線程的運行安全?
- 10. Java 線程同步的幾種方法?
- 11. Thread.interrupt() 方法的工作原理是什么?
- 12. 談談對 ThreadLocal 的理解?
- 13. 在哪些場景下會使用到 ThreadLocal?
- 14. 說一說自己對于 synchronized 關鍵字的了解?
- 15. 如何在項目中使用 synchronized 的?
- 16. 說說 JDK1.6 之后的 synchronized 關鍵字底層做了哪些優化,可以詳細介紹一下這些優化嗎?
- 17. 談談 synchronized 和 ReenTrantLock 的區別?
- 18. synchronized 和 volatile 的區別是什么?
- 19. 談一下你對 volatile 關鍵字的理解?
- 20. 說下對 ReentrantReadWriteLock 的理解?
- 21. 說下對悲觀鎖和樂觀鎖的理解?
- 22. 樂觀鎖常見的兩種實現方式是什么?
- 23. 樂觀鎖的缺點有哪些?
- 24. CAS 和 synchronized 的使用場景?
- 25. 簡單說下對 Java 中的原子類的理解?
- 26. atomic 的原理是什么?
- 27. 說下對同步器 AQS 的理解?
- 28. AQS 的原理是什么?
- 29. AQS 對資源的共享模式有哪些?
- 30. AQS 底層使用了模板方法模式,你能說出幾個需要重寫的方法嗎?
- 31. 說下對信號量 Semaphore 的理解?
- 32. CountDownLatch 和 CyclicBarrier 有什么區別?
- 33. 說下對線程池的理解?為什么要使用線程池?
- 34. 創建線程池的參數有哪些?
- 35. 如何創建線程池?
- 36. 線程池中的的線程數一般怎么設置?需要考慮哪些問題?
- 37. 執行 execute() 方法和 submit() 方法的區別是什么呢?
- 38. 說下對 Fork和Join 并行計算框架的理解?
- 39. JDK 中提供了哪些并發容器?
- 40. 談談對 CopyOnWriteArrayList 的理解?
- 41. 談談對 BlockingQueue 的理解?分別有哪些實現類?
- 42. 談談對 ConcurrentSkipListMap 的理解?
- 五、Java JVM
- 1. 說一下 Jvm 的主要組成部分?及其作用?
- 2. 談談對運行時數據區的理解?
- 3. 堆和棧的區別是什么?
- 4. 堆中存什么?棧中存什么?
- 5. 為什么要把堆和棧區分出來呢?棧中不是也可以存儲數據嗎?
- 6. Java 中的參數傳遞時傳值呢?還是傳引用?
- 7. Java 對象的大小是怎么計算的?
- 8. 對象的訪問定位的兩種方式?
- 9. 判斷垃圾可以回收的方法有哪些?
- 10. 垃圾回收是從哪里開始的呢?
- 11. 被標記為垃圾的對象一定會被回收嗎?
- 12. 談談對 Java 中引用的了解?
- 13. 談談對內存泄漏的理解?
- 14. 內存泄露的根本原因是什么?
- 15. 舉幾個可能發生內存泄漏的情況?
- 16. 盡量避免內存泄漏的方法?
- 17. 常用的垃圾收集算法有哪些?
- 18. 為什么要采用分代收集算法?
- 19. 分代收集下的年輕代和老年代應該采用什么樣的垃圾回收算法?
- 20. 什么是浮動垃圾?
- 21. 什么是內存碎片?如何解決?
- 22. 常用的垃圾收集器有哪些?
- 23. 談談你對 CMS 垃圾收集器的理解?
- 24. 談談你對 G1 收集器的理解?
- 25. 說下你對垃圾回收策略的理解/垃圾回收時機?
- 26. 談談你對內存分配的理解?大對象怎么分配?空間分配擔保?
- 27. 說下你用過的 JVM 監控工具?
- 28. 如何利用監控工具調優?
- 29. JVM 的一些參數?
- 30. 談談你對類文件結構的理解?有哪些部分組成?
- 31. 談談你對類加載機制的了解?
- 32. 類加載各階段的作用分別是什么?
- 33. 有哪些類加載器?分別有什么作用?
- 34. 類與類加載器的關系?
- 35. 談談你對雙親委派模型的理解?工作過程?為什么要使用
- 36. 怎么實現一個自定義的類加載器?需要注意什么?
- 37. 怎么打破雙親委派模型?
- 38. 有哪些實際場景是需要打破雙親委派模型的?
- 39. 談談你對編譯期優化和運行期優化的理解?
- 40. 為何 HotSpot 虛擬機要使用解釋器與編譯器并存的架構?
- 41. 說下你對 Java 內存模型的理解?
- 42. 內存間的交互操作有哪些?需要滿足什么規則?
- 六、SSM框架
- 1. 使用 Spring 框架的好處是什么?
- 2. 解釋下什么是 AOP?
- 3. AOP 的代理有哪幾種方式?
- 4. 怎么實現 JDK 動態代理?
- 5. AOP 的基本概念:切面、連接點、切入點等?
- 6. 通知類型(Advice)型(Advice)有哪些?
- 7. 談談你對 IOC 的理解?
- 8. Bean 的生命周期?
- 9. Bean 的作用域?
- 10. Spring 中的單例 Bean 的線程安全問題了解嗎?
- 11. 談談你對 Spring 中的事物的理解?
- 12. Spring 中的事務隔離級別?
- 13. Spring 中的事物傳播行為?
- 14. Spring 常用的注入方式有哪些?
- 15. Spring 框架中用到了哪些設計模式?
- 16. ApplicationContext 通常的實現有哪些?
- 17. 談談你對 MVC 模式的理解?
- 18. SpringMVC 的工作原理/執行流程?
- 19. SpringMVC 的核心組件有哪些?
- 20. SpringMVC 常用的注解有哪些?
- 21. @RequestMapping 的作用是什么?
- 22. 如何解決 POST 請求中文亂碼問題,GET 的又如何處理呢?
- 23. SpringMVC 的控制器是不是單例模式,如果是會有什么問題,怎么解決?
- 24. SpringMVC 怎么樣設定重定向和轉發的?
- 25. SpringMVC 里面攔截器是怎么寫的?
- 26. SpringMVC 和 Struts2 的區別有哪些?
- 27. 談談你對 MyBatis 的理解?
- 28. MyBaits 的優缺點有哪些?
- 29. MyBatis 與 Hibernate 有哪些不同?
- 30. MyBatis 中 #{} 和 ${}的區別是什么?
- 31. MyBatis 是如何進行分頁的?分頁插件的原理是什么?
- 32. MyBatis 有幾種分頁方式?
- 33. MyBatis 邏輯分頁和物理分頁的區別是什么?
- 34. MyBatis 是否支持延遲加載?如果支持,它的實現原理是什么?
- 35. 說一下 MyBatis 的一級緩存和二級緩存?
- 36. Mybatis 有哪些執行器(Executor)?
- 37. MyBatis 動態 SQL 是做什么的?都有哪些動態 SQL?能簡述一下動態 SQL的執行原理不?
- 七、MySQL
- 1. 請說下你對 MySQL 架構的了解?
- 2. 一條 SQL 語句在數據庫框架中的執行流程?
- 3. 數據庫的三范式是什么?
- 4. char 和 varchar 的區別?
- 5. varchar(10) 和 varchar(20) 的區別?
- 6. 談談你對索引的理解?
- 7. 索引的底層使用的是什么數據結構?
- 8. 談談你對 B+ 樹的理解?
- 9. 為什么 InnoDB 存儲引擎選用 B+ 樹而不是 B 樹呢?
- 10. 談談你對聚簇索引的理解?
- 11. 談談你對哈希索引的理解?
- 12. 談談你對覆蓋索引的認識?
- 13. 索引的分類?
- 14. 談談你對最左前綴原則的理解?
- 15. 怎么知道創建的索引有沒有被使用到?或者說怎么才可以知道這條語句運行很慢的原因?
- 16. 什么情況下索引會失效?即查詢不走索引?
- 17. 查詢性能的優化方法?
- 18. InnoDB 和 MyISAM 的比較?
- 19. 談談你對水平切分和垂直切分的理解?
- 20. 主從復制中涉及到哪三個線程?
- 21. 主從同步的延遲原因及解決辦法?
- 22. 談談你對數據庫讀寫分離的理解?
- 23. 請你描述下事務的特性?
- 24. 談談你對事務隔離級別的理解?
- 25. 解釋下什么叫臟讀、不可重復讀和幻讀?
- 26. MySQL 默認的隔離級別是什么?
- 27. 談談你對MVCC 的了解?
- 28. 說一下 MySQL 的行鎖和表鎖?
- 29. InnoDB 存儲引擎的鎖的算法有哪些?
- 30. MySQL 問題排查都有哪些手段?
- 31. MySQL 數據庫 CPU 飆升到 500% 的話他怎么處理?
- 八、Redis
- 1. 談下你對 Redis 的了解?
- 2. Redis 一般都有哪些使用場景?
- 3. Redis 有哪些常見的功能?
- 4. Redis 支持的數據類型有哪些?
- 5. Redis 為什么這么快?
- 6. 什么是緩存穿透?怎么解決?
- 7. 什么是緩存雪崩?該如何解決?
- 8. 怎么保證緩存和數據庫數據的一致性?
- 9. Redis 持久化有幾種方式?
- 10. Redis 怎么實現分布式鎖?
- 11. Redis 淘汰策略有哪些?
- 12. Redis 常見性能問題和解決方案?
- 九、計算機網絡
- 1. 為什么需要三次握手?兩次不行?
- 2. 為什么需要四次揮手?三次不行?
- 3. TCP與UDP有哪些區別?各自應用場景?
- 4. HTTP1.0,1.1,2.0 的版本區別
- 5. POST和GET有哪些區別?各自應用場景?
- 6. HTTP 哪些常用的狀態碼及使用場景?
- 7. HTTP狀態碼301和302的區別,都有哪些用途?
- 8. 在交互過程中如果數據傳送完了,還不想斷開連接怎么辦,怎么維持?
- 9. HTTP 如何實現長連接?在什么時候會超時?
- 10. TCP 如何保證有效傳輸及擁塞控制原理
- 11. IP地址有哪些分類?
- 12. GET請求中URL編碼的意義
- 13. 什么是SQL 注入?舉個例子?
- 14. 談一談 XSS 攻擊,舉個例子?
- 15. 講一下網絡五層模型,每一層的職責?
- 16. 簡單說下 HTTPS 和 HTTP 的區別
- 17. 對稱加密與非對稱加密的區別
- 18. 簡單說下每一層對應的網絡協議有哪些?
- 19. ARP 協議的工作原理?
- 20. TCP 的主要特點是什么?
- 21. UDP 的主要特點是什么?
- 22. TCP 和 UDP 分別對應的常見應用層協議有哪些?
- 23. 為什么 TIME-WAIT 狀態必須等待 2MSL 的時間呢?
- 24. 保活計時器的作用?
- 25. TCP 協議是如何保證可靠傳輸的?
- 26. 談談你對停止等待協議的理解?
- 27. 談談你對 ARQ 協議的理解?
- 28. 談談你對滑動窗口的了解?
- 29. 談下你對流量控制的理解?
- 30. 談下你對 TCP 擁塞控制的理解?使用了哪些算法?
- 31. 什么是粘包?
- 32. TCP 黏包是怎么產生的?
- 33. 怎么解決拆包和粘包?
- 34. forward 和 redirect 的區別?
- 35. HTTP 方法有哪些?
- 36. 在瀏覽器中輸入 URL 地址到顯示主頁的過程?
- 37. DNS 的解析過程?
- 38. 談談你對域名緩存的了解?
- 39. 談下你對 HTTP 長連接和短連接的理解?分別應用于哪些場景?
- 40. HTTPS 的工作過程?
- 41. HTTP 和 HTTPS 的區別?
- 42. HTTPS 的優缺點?
- 43. 什么是數字簽名?
- 44. 什么是數字證書?
- 45. Cookie 和 Session 有什么區別?
- 十、操作系統
- 1. 簡單說下你對并發和并行的理解?
- 2. 同步、異步、阻塞、非阻塞的概念
- 3. 進程和線程的基本概念
- 4. 進程與線程的區別?
- 5. 為什么有了進程,還要有線程呢?
- 6. 進程的狀態轉換
- 7. 進程間的通信方式有哪些?
- 8. 進程的調度算法有哪些?
- 9. 什么是死鎖?
- 10. 產生死鎖的原因?
- 11. 死鎖產生的必要條件?
- 12. 解決死鎖的基本方法?
- 13. 怎么預防死鎖?
- 14. 怎么避免死鎖?
- 15. 怎么解除死鎖?
- 16. 什么是緩沖區溢出?有什么危害?
- 17. 分頁與分段的區別?
- 18. 物理地址、邏輯地址、虛擬內存的概念
- 19. 頁面置換算法有哪些?
- 20. 談談你對動態鏈接庫和靜態鏈接庫的理解?
- 21. 外中斷和異常有什么區別?
- 22. 一個程序從開始運行到結束的完整過程,你能說出來多少?
- 23. 什么是用戶態和內核態
- 24. 用戶態和內核態是如何切換的?
- 25. 進程終止的方式
- 26. 守護進程、僵尸進程和孤兒進程
- 27. 如何避免僵尸進程?
- 28. 介紹一下幾種典型的鎖?
- 29. 常見內存分配內存錯誤
- 30. 內存交換中,被換出的進程保存在哪里?
- 31. 原子操作的是如何實現的
- 32. 抖動你知道是什么嗎?它也叫顛簸現象
- 十一、消息隊列與分布式
- 1. 消息隊列的基本作用?
- 2. 消息隊列的優缺點有哪些?
- 3. 如何保證消息隊列的高可用?
- 4. 如何保證消息不被重復消費?或者說,如何保證消息消費的冪等性?
- 5. 如何保證消息的可靠性傳輸?或者說,如何處理消息丟失的問題?
- 6. 如何保證消息的順序性?
- 7. 大量消息在 MQ 里長時間積壓,該如何解決?
- 8. MQ 中的消息過期失效了怎么辦?
- 9. RabbitMQ 有哪些重要的角色?
- 10. RabbitMQ 有哪些重要的組件?
- 11. RabbitMQ 有幾種廣播類型?
- 12. Kafka 可以脫離 zookeeper 單獨使用嗎?為什么?
- 13. Kafka 有幾種數據保留的策略?
- 14. Kafka 的分區策略有哪些?
- 15. 談下你對 Zookeeper 的認識?
- 16. Zookeeper 都有哪些功能?
- 17. 談下你對 ZAB 協議的了解?
- 18. Zookeeper 怎么保證主從節點的狀態同步?
- 19. Zookeeper 有幾種部署模式?
- 20. 說一下 Zookeeper 的通知機制?
- 21. 集群中為什么要有主節點?
- 22. 集群中有 3 臺服務器,其中一個節點宕機,這個時候 Zookeeper 還可以使用嗎?
- 23. 說一下兩階段提交和三階段提交的過程?分別有什么問題?
- 24. Zookeeper 宕機如何處理?
- 25. 說下四種類型的數據節點 Znode?
- 26. Zookeeper 和 Dubbo 的關系?
一、Java基礎
1. 解釋下什么是面向對象?面向對象和面向過程的區別?
面向對象是一種基于面向過程的編程思想,是一種編程風格。把一切東西看成是一個個對象,比如人、耳機、鼠標、水杯等,他們各自都有屬性。
區別:
2. 面向對象的三大特性?分別解釋下?
- 封裝:將抽象性函式接口的實現細節部分包裝、隱藏起來的方法。比如使用private修飾屬性、方法,然后提供公共方式進行訪問、修改等。
- 繼承:當多個類中內容出現了重復,把重復內容放到新的類中,通過extends 關鍵字讓原來的類和新的類產生關聯關系;新的類稱為父類/超類,原來的類稱為子類/派生類。
- 多態:同一個行為具有多個不同表現形式或形態的能力,多態存在的三個必要條件 :繼承、重寫、父類引用指向子類對象
3. JDK、JRE、JVM 三者之間的關系?
- JDK(Java Development Kit)是針對Java開發員的產品,是整個Java的核心,包括了Java運行環境JRE、Java工具和Java基礎類庫。
- JRE(Java Runtime Environment)是運行JAVA程序所必須的環境的集合,包含JVM標準實現及Java核心類庫。
- JVM(Java Virtual Machine)即Java虛擬機,是整個java實現跨平臺的最核心的部分,能夠運行以Java語言寫作的軟件程序。
4. 重載和重寫的區別?
都是多態的體現
- 重載(overload)
- 重寫(override)
5. Java 中是否可以重寫一個 private 或者 static 方法?
不可以
因為 private 修飾的變量和?法只能在當前類中使?, 如果是其他的類繼承當前類是不能訪問到 private 變量或?法的,當然也不能重寫(覆蓋)
因為?法重寫(覆蓋)是基于運?時動態綁定的,? static ?法是編譯時靜態綁定的
6. 構造方法有哪些特性?
8. Java 中創建對象的幾種方式?
9. 抽象類和接口有什么區別?
抽象類
接口
jdk1.8可以寫以default和static開頭的具體方法
類與類:
繼承關系,只能單繼承。可以多層繼承。
類與接口:
實現關系,可以單實現,也可以多實現。
類還可以在繼承一個類的同時實現多個接口。
接口與接口:
繼承關系,可以單繼承,也可以多繼承。
體現的理念不同
抽象類里面定義的都是一個繼承體系中的共性內容。
接口是功能的集合,是一個體系額外的功能,是暴露出來的規則。
10. 靜態變量和實例變量的區別?
11、short s1 = 1;s1 = s1 + 1;有什么錯?那么 short s1 = 1; s1 += 1;呢?有沒有錯誤?
char、short、byte在做運算時,會自動提升為int,所以s1+1為int,報錯,需要強轉s1=(short) s1+1
Java語言規范中講到,復合賦值E1 op =E2等價于簡單賦值E1=(T) (E1 op E2),隱式的有個強轉
12. Integer 和 int 的區別?
int是基本數據類型,默認值為0
Integer是int的包裝類,默認值值null,是一個對象,提供了各種API接口
使用==比較時,int比較的是值,Integer比較的是內存地址,在直接賦值(不是new出來的)或者valueOf時,值在-128-127之間為true
14. switch 語句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?
switch可以作用于char、short、byte、int、enum、String以及對應的包裝類
jdk1.7開始支持String
15、final、finally、finalize 的區別
final是修飾符,被修飾的類不能被繼承,被修飾的方法不能重寫,被修飾的變量需要初始化且不能修改(可以在代碼塊中初始化),修飾的變量為引用類型時,指引用地址不可變,引用的對象內容可以修改
finally異常捕捉時配合try使用,一定會被執行的代碼
finalize是Object的方法,目的是為了保證對象在垃圾回收之前完成特定資源的回收,但調用該方法不保證一定被回收,不推薦使用
16. == 和 equals 的區別?
基本數據類型==比較的是值,引用類型比較的是地址
equals比較的是地址,可以進行重寫
17. 兩個對象的 hashCode() 相同,則 equals() 也一定為 true 嗎?
不一定,比如哈希沖突。對象一樣,則hashCode一定相同
19. & 和 && 的區別?
&是按位與,不會短路,a&b是把a和b都轉換成二進制數然后再進行與的運算
&&是邏輯與,會短路,a&&b就是當且僅當兩個操作數均為 true時,其結果才為 true,只要有一個為false,a&&b就為false
20. Java 中的參數傳遞是傳值呢?還是傳引用?
值傳遞
基本數據類型傳遞是一個副本
引用類型傳遞是引用地址,所以在用=賦值時,改變的是自身的地址引用,不會改變原對象。如果是修改內容,則原對象內容也會被修改
21. Java 中的 Math.round(-1.5) 等于多少?
Math的round方法是四舍五入,如果參數是負數,則往大的數如,Math.round(-1.5)=-1,如果是Math.round(1.5)則結果為2
22. 如何實現對象的克隆?
分為淺克隆和深克隆
23. 深克隆和淺克隆的區別?
- 淺克隆:對當前對象進行克隆,并克隆該對象所包含的8種基本數據類型和String類型屬性(拷貝一份該對象并重新分配內存,即產生了新的對象);但如果被克隆的對象中包含除8中數據類型和String類型外的其他類型的屬性,淺克隆并不會克隆這些屬性(即不會為這些屬性分配內存,而是引用原來對象中的屬性)
- 深拷貝:在淺克隆的基礎上,遞歸地克隆除8種基本數據類型和String類型外的屬性(即為這些屬性重新分配內存而非引用原來對象中的屬性)
24. 什么是 Java 的序列化,如何實現 Java 的序列化?
什么是java序列化:當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個Java對象轉換為字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復為Java對象。
Java中的序列化機制能夠將一個實例對象(只序列化對象的屬性值,而不會去序列化什么所謂的方法。)的狀態信息寫入到一個字節流中使其可以通過socket進行傳輸、或者持久化到存儲數據庫或文件系統中;然后在需要的時候通過字節流中的信息來重構一個相同的對象。
如何實現序列化:一般而言,要使得一個類可以序列化,只需簡單實現java.io.Serializable接口即可。
對象的序列化主要有兩種用途:
1)把對象的字節序列永久地保存到硬盤上,通常存放在一個文件中;
2)在網絡上傳送對象的字節序列。
25. 什么情況下需要序列化?
26. 泛型, 什么是類型擦除 ?
當在類的定義時沒有進行任何限制,那么在類型擦除后將會被替換成Object,例如<T>、<?>都會被替換成Object。
當類定義中的參數類型存在上下限(上下界),那么在類型擦除后就會被替換成類型參數所定義的上界或者下界,例如<? extend Person>會被替換成Person,而<? super Person>則會被替換成Object
常用的通配符為:T, E, K, V, ?
- ? 表示不確定的類型
- T(type) 表示具體的一個類型
- K和V分別表示鍵值對中的key和value
- E (element) 代表Element
27. 什么是泛型中的限定通配符和非限定通配符 ?
限定通配符對類型進行了限制,有兩種限定通配符:
<? extends T>它通過確保類型必須是T及T的子類來設定類型的上界;
<? super T>它通過確保類型必須是T及T的父類設定類型的下界;
非限定通配符:類型為<T>,可以用任意類型來替代
29. Java 中的反射是什么意思?有哪些應用場景?
Java反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類中的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為 java 語言的反射機制。
反射詳情
30. 反射的優缺點?
反射優缺點
31. Java 中的動態代理是什么?有哪些應用?
AOP就是根據動態代理做的,@Transactional也是基于動態代理
spring boot 2.x版本默認為CGLib動態代理
如果類實現了接口,使用JDK代理,否則使用CGLib
動態代理的應用:Spring的AOP,加事務,加權限,加日志
32. 怎么實現動態代理?
- JDK動態代理
被代理類首先要實現接口,創建一個處理類實現InvocationHandler接口,重寫invoke方法,在invoke方法里寫增強代碼,還要寫一個獲取代理對象實例的方法,通過Proxy.newProxyInstance實例化
- CGLib字節碼代理
被代理類不能為final類,創建一個類實現MethodInterceptor 接口,重寫intercept方法,在intercept方法里寫增強代碼,同樣需要一個獲取代理對象的方法,通過Enhancer創建代理對象
33. static 關鍵字的作用?
(1)static成員變量
java中可以通過statin關鍵字修飾變量達到全局變量的效果。static修飾的變量(靜態變量)屬于類,在類第一次通過類加載器到jvm時被分配內存空間。
(2)static成員方法
static修飾的方法屬于類方法,不需要創建對象就可以調用。static方法中不能使用this和super等關鍵字,不能調用非static方法,只能訪問所屬類的靜態成員變量和靜態方法。
(3)static 代碼塊
JVM在加載類時會執行static代碼塊,static代碼塊常用于初始化靜態變量,static代碼只會在類被加載時執行且執行一次。
(4)static內部類
static內部類可以不依賴外部類實例對象而被實例化,而內部類需要在外部類實例化后才能被實例化。
靜態內部類不能訪問外部類的普通變量,只能訪問外部類的靜態成員變量和靜態方法。
34. super 關鍵字的作用?
1、super表示超(父)類的意思,this表示對象本身
2、super可用于訪問父類被子類隱藏或著覆蓋的方法和屬性,使用形式為super.方法(屬性)
3、在類的繼承中,子類的構造方法中默認會有super()語句存在(默認隱藏),相當于執行父類的相應構造方法中的語句,若顯式使用則必須位于類的第一行
4、對于父類有參的構造方法,super不能省略,否則無法訪問父類的有參構造方法,使用形式為super(xx,xx…)
35. 字節和字符的區別?
字節(Byte)是計量單位,表示數據量多少,是計算機信息技術用于計量存儲容量的一種計量單位,通常情況下一字節等于八位。
字符(Character)計算機中使用的字母、數字、字和符號,比如’A’、‘B’、‘$’、'&'等。
一般在英文狀態下一個字母或字符占用一個字節,一個漢字用兩個字節表示。
字節與字符:
- ASCII 碼中,一個英文字母(不分大小寫)為一個字節,一個中文漢字為兩個字節。
- UTF-8 編碼中,一個英文字為一個字節,一個中文為三個字節。
- Unicode 編碼中,一個英文為一個字節,一個中文為兩個字節。
- 符號:英文標點為一個字節,中文標點為兩個字節。例如:英文句號 . 占1個字節的大小,中文句號 。占2個字節的大小。
- UTF-16 編碼中,一個英文字母字符或一個漢字字符存儲都需要 2 個字節(Unicode 擴展區的一些漢字存儲需要 4 個字節)。
- UTF-32 編碼中,世界上任何字符的存儲都需要 4 個字節。
36. String 為什么要設計為不可變類?
1)常量池的需要
字符串常量池是 Java 堆內存中一個特殊的存儲區域,當創建一個 String 對象時,假如此字符串在常量池中不存在,那么就創建一個;假如已經存在,就不會再創建了,而是直接引用已經存在的對象。這樣做能夠減少 JVM 的內存開銷,提高效率。
2)hashCode 的需要
因為字符串是不可變的,所以在它創建的時候,其 hashCode 就被緩存了,因此非常適合作為哈希值(比如說作為 HashMap 的鍵),多次調用只返回同一個值,來提高效率。
3)線程安全
就像之前說的那樣,如果對象的狀態是可變的,那么在多線程環境下,就很容易造成不可預期的結果。而 String 是不可變的,就可以在多個線程之間共享,不需要同步處理。
37. String、StringBuilder、StringBuffer 的區別?
1、運算速度比較(通常情況下):StringBuilder > StringBuffer > String
2、線程安全性:StringBuilder(非線程安全),StringBuffer(線程安全的)
3、總結
String:適用于少量的字符串操作。
StringBuilder:適用于單線程下在字符串緩沖區進行大量操作。
StringBuffer:適用于多線程下在字符串緩沖區進行大量操作。
39. String str = “i” 與 String str = new String(“i”) 一樣嗎?
不一樣
40. String 類的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引處的字符。
replace():字符串替換。
trim():去除字符串兩端空白。
split():分割字符串,返回一個分割后的字符串數組。
getBytes():返回字符串的 byte 類型數組。
ength():返回字符串長度。
toLowerCase():將字符串轉成小寫字母。
toUpperCase():將字符串轉成大寫字符。
substring():截取字符串。
equals():字符串比較。
41. final 修飾 StringBuffer 后還可以 append 嗎?
可以。final 修飾的是一個引用變量,那么這個引用始終只能指向這個對象,但是這個對象內部的屬性是可以變化的。
42. Java 中的 IO 流的分類?說出幾個你熟悉的實現類?
- 按照流的流向分,可以分為輸入流和輸出流;
- 按照操作單元劃分,可以劃分為字節流和字符流;
- 按照流的角色劃分為節點流和處理流。
- InputStream/Reader: 所有的輸入流的基類,前者是字節輸入流,后者是字符輸入流。
- OutputStream/Writer: 所有輸出流的基類,前者是字節輸出流,后者是字符輸出流。
按操作方式分類結構圖
按操作對象分類結構圖
43. 字節流和字符流有什么區別?
1、定義
字節流是一種執行8位字節輸入和輸出的機制,基本單元為字節;而字符流是Java中執行16位Unicode輸入和輸出操作的機制,基本單元為Unicode碼元。
2、結尾
字節流以stream結尾;而字符流以reader和writer結尾
3、處理方式
字節流是最基本的,采用ASCII編碼;它通常用于處理二進制數據,它是按字節來處理的,實際上它可以處理任意類型的數據,但它不支持直接寫入或讀取Unicode碼元。
字符流采用Unicode編碼,它是按虛擬機的encode來處理,也就是要進行字符集的轉化;它通常處理文本數據,它支持寫入及讀取Unicode碼元。
4、緩沖區
字節流默認不使用緩沖區;字符流使用緩沖區。
44. BIO、NIO、AIO 有什么區別?
BIO
同步并阻塞(傳統阻塞型),服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷
NIO
同步非阻塞,服務器實現模式為一個線程處理多個請求(連接),即客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求就進行處理
AIO
異步非阻塞,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由操作系統先完成了再通知服務器應用去啟動線程進行處理,一般適用于連接數較多且連接時間較長的應用
偽異步I/O
偽異步I/O采用了線程池實現,因此避免了為每個請求創建一個獨立線程造成線程資源耗盡的問題,但由于底層依然是采用的同步阻塞模型,因此無法從根本上解決問題
如果單個消息處理的緩慢,或者服務器線程池中的全部線程都被阻塞,那么后續Socket的I/O消息都將在隊列中排隊。新的Socket請求將被拒絕,客戶端會發生大量連接超時
IO詳細介紹
二、Java異常
1. finally 塊中的代碼什么時候被執行?
點此查看詳情
finally塊的作用就是為了保證無論出現什么情況,finally塊里的代碼一定會被執行。由于程序執行return就意味著結束對當前函數的調用并跳出這個函數體,因此任何語句要執行都只能在return前執行(除非碰到exit函數),因此finally塊里的代碼也是在return之前執行的。此外,如果try-finally或者catch-finally中都有return,那么finally塊中的return將會覆蓋別處的return語句,最終返回到調用者那里的是finally中return的值
2. finally 是不是一定會被執行到?
不一定
當程序進入try塊之前就出現異常時,會直接結束,不會執行finally塊中的代碼
當程序在try塊中強制退出時也不會去執行finally塊中的代碼
3. try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?
會執行,如果finally中有return,則會覆蓋catch中的return
4. try-catch-finally 中那個部分可以省略?
以下三種情況都是可以的:
try-catch
try-finally
try-catch-finally
可以省略catch或者finally。catch和finally不可以同時省略。
點此查看詳情
5. Error 和 Exception 的區別?
看這里
6. 運行時異常與受檢異常有何異同?
同上
7. throw 和 throws 的區別?
throw拋出一個異常
throws在方法上聲明可能拋出的異常
8. 常見的異常類有哪些?
9. 主線程可以捕獲到子線程的異常嗎?
三、Java集合
1. Java 中常用的容器有哪些?
2. ArrayList 和 LinkedList 的區別?
3. ArrayList 實現 RandomAccess 接口有何作用?為何 LinkedList 卻沒實現這個接口?
4. ArrayList 的擴容機制?
5. Array 和 ArrayList 有何區別?什么時候更適合用 Array?
6. HashMap 的實現原理/底層數據結構?JDK1.7 和 JDK1.8
7. HashMap 的 put 方法的執行過程?
8. HashMap 的 get 方法的執行過程?
9. HashMap 的 resize 方法的執行過程?
10. HashMap 的 size 為什么必須是 2 的整數次方?
11. HashMap 多線程死循環問題?
12. HashMap 的 get 方法能否判斷某個元素是否在 map 中?
13. HashMap 與 HashTable 的區別是什么?
14. HashMap 與 ConcurrentHashMap 的區別是什么?
15. HashTable 和 ConcurrentHashMap 的區別?
16. ConcurrentHashMap 的實現原理是什么?
17. HashSet 的實現原理?
18. HashSet 怎么保證元素不重復的?
19. LinkedHashMap 的實現原理?
20. Iterator 怎么使用?有什么特點?
21. Iterator 和 ListIterator 有什么區別?
22. Iterator 和 Enumeration 接口的區別?
23. fail-fast 與 fail-safe 有什么區別?
24. Collection 和 Collections 有什么區別?
四、Java并發
1. 并行和并發有什么區別?
2. 線程和進程的區別?
3. 守護線程是什么?
4. 創建線程的幾種方式?
5. Runnable 和 Callable 有什么區別?
6. 線程狀態及轉換?
7. sleep() 和 wait() 的區別?
8. 線程的 run() 和 start() 有什么區別?
9. 在 Java 程序中怎么保證多線程的運行安全?
10. Java 線程同步的幾種方法?
11. Thread.interrupt() 方法的工作原理是什么?
12. 談談對 ThreadLocal 的理解?
13. 在哪些場景下會使用到 ThreadLocal?
14. 說一說自己對于 synchronized 關鍵字的了解?
15. 如何在項目中使用 synchronized 的?
16. 說說 JDK1.6 之后的 synchronized 關鍵字底層做了哪些優化,可以詳細介紹一下這些優化嗎?
17. 談談 synchronized 和 ReenTrantLock 的區別?
18. synchronized 和 volatile 的區別是什么?
19. 談一下你對 volatile 關鍵字的理解?
20. 說下對 ReentrantReadWriteLock 的理解?
21. 說下對悲觀鎖和樂觀鎖的理解?
22. 樂觀鎖常見的兩種實現方式是什么?
23. 樂觀鎖的缺點有哪些?
24. CAS 和 synchronized 的使用場景?
25. 簡單說下對 Java 中的原子類的理解?
26. atomic 的原理是什么?
27. 說下對同步器 AQS 的理解?
28. AQS 的原理是什么?
29. AQS 對資源的共享模式有哪些?
30. AQS 底層使用了模板方法模式,你能說出幾個需要重寫的方法嗎?
31. 說下對信號量 Semaphore 的理解?
32. CountDownLatch 和 CyclicBarrier 有什么區別?
33. 說下對線程池的理解?為什么要使用線程池?
34. 創建線程池的參數有哪些?
35. 如何創建線程池?
36. 線程池中的的線程數一般怎么設置?需要考慮哪些問題?
37. 執行 execute() 方法和 submit() 方法的區別是什么呢?
38. 說下對 Fork和Join 并行計算框架的理解?
39. JDK 中提供了哪些并發容器?
40. 談談對 CopyOnWriteArrayList 的理解?
41. 談談對 BlockingQueue 的理解?分別有哪些實現類?
42. 談談對 ConcurrentSkipListMap 的理解?
五、Java JVM
1. 說一下 Jvm 的主要組成部分?及其作用?
2. 談談對運行時數據區的理解?
3. 堆和棧的區別是什么?
4. 堆中存什么?棧中存什么?
5. 為什么要把堆和棧區分出來呢?棧中不是也可以存儲數據嗎?
6. Java 中的參數傳遞時傳值呢?還是傳引用?
7. Java 對象的大小是怎么計算的?
8. 對象的訪問定位的兩種方式?
9. 判斷垃圾可以回收的方法有哪些?
10. 垃圾回收是從哪里開始的呢?
11. 被標記為垃圾的對象一定會被回收嗎?
12. 談談對 Java 中引用的了解?
13. 談談對內存泄漏的理解?
14. 內存泄露的根本原因是什么?
15. 舉幾個可能發生內存泄漏的情況?
16. 盡量避免內存泄漏的方法?
17. 常用的垃圾收集算法有哪些?
18. 為什么要采用分代收集算法?
19. 分代收集下的年輕代和老年代應該采用什么樣的垃圾回收算法?
20. 什么是浮動垃圾?
21. 什么是內存碎片?如何解決?
22. 常用的垃圾收集器有哪些?
23. 談談你對 CMS 垃圾收集器的理解?
24. 談談你對 G1 收集器的理解?
25. 說下你對垃圾回收策略的理解/垃圾回收時機?
26. 談談你對內存分配的理解?大對象怎么分配?空間分配擔保?
27. 說下你用過的 JVM 監控工具?
28. 如何利用監控工具調優?
29. JVM 的一些參數?
30. 談談你對類文件結構的理解?有哪些部分組成?
31. 談談你對類加載機制的了解?
32. 類加載各階段的作用分別是什么?
33. 有哪些類加載器?分別有什么作用?
34. 類與類加載器的關系?
35. 談談你對雙親委派模型的理解?工作過程?為什么要使用
36. 怎么實現一個自定義的類加載器?需要注意什么?
37. 怎么打破雙親委派模型?
38. 有哪些實際場景是需要打破雙親委派模型的?
39. 談談你對編譯期優化和運行期優化的理解?
40. 為何 HotSpot 虛擬機要使用解釋器與編譯器并存的架構?
41. 說下你對 Java 內存模型的理解?
42. 內存間的交互操作有哪些?需要滿足什么規則?
六、SSM框架
1. 使用 Spring 框架的好處是什么?
2. 解釋下什么是 AOP?
3. AOP 的代理有哪幾種方式?
4. 怎么實現 JDK 動態代理?
5. AOP 的基本概念:切面、連接點、切入點等?
6. 通知類型(Advice)型(Advice)有哪些?
7. 談談你對 IOC 的理解?
8. Bean 的生命周期?
9. Bean 的作用域?
10. Spring 中的單例 Bean 的線程安全問題了解嗎?
11. 談談你對 Spring 中的事物的理解?
12. Spring 中的事務隔離級別?
13. Spring 中的事物傳播行為?
14. Spring 常用的注入方式有哪些?
15. Spring 框架中用到了哪些設計模式?
16. ApplicationContext 通常的實現有哪些?
17. 談談你對 MVC 模式的理解?
18. SpringMVC 的工作原理/執行流程?
19. SpringMVC 的核心組件有哪些?
20. SpringMVC 常用的注解有哪些?
21. @RequestMapping 的作用是什么?
22. 如何解決 POST 請求中文亂碼問題,GET 的又如何處理呢?
23. SpringMVC 的控制器是不是單例模式,如果是會有什么問題,怎么解決?
24. SpringMVC 怎么樣設定重定向和轉發的?
25. SpringMVC 里面攔截器是怎么寫的?
26. SpringMVC 和 Struts2 的區別有哪些?
27. 談談你對 MyBatis 的理解?
28. MyBaits 的優缺點有哪些?
29. MyBatis 與 Hibernate 有哪些不同?
30. MyBatis 中 #{} 和 ${}的區別是什么?
31. MyBatis 是如何進行分頁的?分頁插件的原理是什么?
32. MyBatis 有幾種分頁方式?
33. MyBatis 邏輯分頁和物理分頁的區別是什么?
34. MyBatis 是否支持延遲加載?如果支持,它的實現原理是什么?
35. 說一下 MyBatis 的一級緩存和二級緩存?
36. Mybatis 有哪些執行器(Executor)?
37. MyBatis 動態 SQL 是做什么的?都有哪些動態 SQL?能簡述一下動態 SQL的執行原理不?
七、MySQL
1. 請說下你對 MySQL 架構的了解?
2. 一條 SQL 語句在數據庫框架中的執行流程?
3. 數據庫的三范式是什么?
4. char 和 varchar 的區別?
5. varchar(10) 和 varchar(20) 的區別?
6. 談談你對索引的理解?
7. 索引的底層使用的是什么數據結構?
8. 談談你對 B+ 樹的理解?
9. 為什么 InnoDB 存儲引擎選用 B+ 樹而不是 B 樹呢?
10. 談談你對聚簇索引的理解?
11. 談談你對哈希索引的理解?
12. 談談你對覆蓋索引的認識?
13. 索引的分類?
14. 談談你對最左前綴原則的理解?
15. 怎么知道創建的索引有沒有被使用到?或者說怎么才可以知道這條語句運行很慢的原因?
16. 什么情況下索引會失效?即查詢不走索引?
17. 查詢性能的優化方法?
18. InnoDB 和 MyISAM 的比較?
19. 談談你對水平切分和垂直切分的理解?
20. 主從復制中涉及到哪三個線程?
21. 主從同步的延遲原因及解決辦法?
22. 談談你對數據庫讀寫分離的理解?
23. 請你描述下事務的特性?
24. 談談你對事務隔離級別的理解?
25. 解釋下什么叫臟讀、不可重復讀和幻讀?
26. MySQL 默認的隔離級別是什么?
27. 談談你對MVCC 的了解?
28. 說一下 MySQL 的行鎖和表鎖?
29. InnoDB 存儲引擎的鎖的算法有哪些?
30. MySQL 問題排查都有哪些手段?
31. MySQL 數據庫 CPU 飆升到 500% 的話他怎么處理?
八、Redis
1. 談下你對 Redis 的了解?
2. Redis 一般都有哪些使用場景?
3. Redis 有哪些常見的功能?
4. Redis 支持的數據類型有哪些?
5. Redis 為什么這么快?
6. 什么是緩存穿透?怎么解決?
7. 什么是緩存雪崩?該如何解決?
8. 怎么保證緩存和數據庫數據的一致性?
9. Redis 持久化有幾種方式?
10. Redis 怎么實現分布式鎖?
11. Redis 淘汰策略有哪些?
12. Redis 常見性能問題和解決方案?
九、計算機網絡
1. 為什么需要三次握手?兩次不行?
2. 為什么需要四次揮手?三次不行?
3. TCP與UDP有哪些區別?各自應用場景?
4. HTTP1.0,1.1,2.0 的版本區別
5. POST和GET有哪些區別?各自應用場景?
6. HTTP 哪些常用的狀態碼及使用場景?
7. HTTP狀態碼301和302的區別,都有哪些用途?
8. 在交互過程中如果數據傳送完了,還不想斷開連接怎么辦,怎么維持?
9. HTTP 如何實現長連接?在什么時候會超時?
10. TCP 如何保證有效傳輸及擁塞控制原理
11. IP地址有哪些分類?
12. GET請求中URL編碼的意義
13. 什么是SQL 注入?舉個例子?
14. 談一談 XSS 攻擊,舉個例子?
15. 講一下網絡五層模型,每一層的職責?
16. 簡單說下 HTTPS 和 HTTP 的區別
17. 對稱加密與非對稱加密的區別
18. 簡單說下每一層對應的網絡協議有哪些?
19. ARP 協議的工作原理?
20. TCP 的主要特點是什么?
21. UDP 的主要特點是什么?
22. TCP 和 UDP 分別對應的常見應用層協議有哪些?
23. 為什么 TIME-WAIT 狀態必須等待 2MSL 的時間呢?
24. 保活計時器的作用?
25. TCP 協議是如何保證可靠傳輸的?
26. 談談你對停止等待協議的理解?
27. 談談你對 ARQ 協議的理解?
28. 談談你對滑動窗口的了解?
29. 談下你對流量控制的理解?
30. 談下你對 TCP 擁塞控制的理解?使用了哪些算法?
31. 什么是粘包?
32. TCP 黏包是怎么產生的?
33. 怎么解決拆包和粘包?
34. forward 和 redirect 的區別?
35. HTTP 方法有哪些?
36. 在瀏覽器中輸入 URL 地址到顯示主頁的過程?
37. DNS 的解析過程?
38. 談談你對域名緩存的了解?
39. 談下你對 HTTP 長連接和短連接的理解?分別應用于哪些場景?
40. HTTPS 的工作過程?
41. HTTP 和 HTTPS 的區別?
42. HTTPS 的優缺點?
43. 什么是數字簽名?
44. 什么是數字證書?
45. Cookie 和 Session 有什么區別?
十、操作系統
1. 簡單說下你對并發和并行的理解?
2. 同步、異步、阻塞、非阻塞的概念
3. 進程和線程的基本概念
4. 進程與線程的區別?
5. 為什么有了進程,還要有線程呢?
6. 進程的狀態轉換
7. 進程間的通信方式有哪些?
8. 進程的調度算法有哪些?
9. 什么是死鎖?
10. 產生死鎖的原因?
11. 死鎖產生的必要條件?
12. 解決死鎖的基本方法?
13. 怎么預防死鎖?
14. 怎么避免死鎖?
15. 怎么解除死鎖?
16. 什么是緩沖區溢出?有什么危害?
17. 分頁與分段的區別?
18. 物理地址、邏輯地址、虛擬內存的概念
19. 頁面置換算法有哪些?
20. 談談你對動態鏈接庫和靜態鏈接庫的理解?
21. 外中斷和異常有什么區別?
22. 一個程序從開始運行到結束的完整過程,你能說出來多少?
23. 什么是用戶態和內核態
24. 用戶態和內核態是如何切換的?
25. 進程終止的方式
26. 守護進程、僵尸進程和孤兒進程
27. 如何避免僵尸進程?
28. 介紹一下幾種典型的鎖?
29. 常見內存分配內存錯誤
30. 內存交換中,被換出的進程保存在哪里?
31. 原子操作的是如何實現的
32. 抖動你知道是什么嗎?它也叫顛簸現象
十一、消息隊列與分布式
1. 消息隊列的基本作用?
2. 消息隊列的優缺點有哪些?
3. 如何保證消息隊列的高可用?
4. 如何保證消息不被重復消費?或者說,如何保證消息消費的冪等性?
5. 如何保證消息的可靠性傳輸?或者說,如何處理消息丟失的問題?
6. 如何保證消息的順序性?
7. 大量消息在 MQ 里長時間積壓,該如何解決?
8. MQ 中的消息過期失效了怎么辦?
9. RabbitMQ 有哪些重要的角色?
10. RabbitMQ 有哪些重要的組件?
11. RabbitMQ 有幾種廣播類型?
12. Kafka 可以脫離 zookeeper 單獨使用嗎?為什么?
13. Kafka 有幾種數據保留的策略?
14. Kafka 的分區策略有哪些?
15. 談下你對 Zookeeper 的認識?
16. Zookeeper 都有哪些功能?
17. 談下你對 ZAB 協議的了解?
18. Zookeeper 怎么保證主從節點的狀態同步?
19. Zookeeper 有幾種部署模式?
20. 說一下 Zookeeper 的通知機制?
21. 集群中為什么要有主節點?
22. 集群中有 3 臺服務器,其中一個節點宕機,這個時候 Zookeeper 還可以使用嗎?
23. 說一下兩階段提交和三階段提交的過程?分別有什么問題?
24. Zookeeper 宕機如何處理?
25. 說下四種類型的數據節點 Znode?
26. Zookeeper 和 Dubbo 的關系?
總結
以上是生活随笔為你收集整理的【面经一】Java高级面经的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像显示的 flickering
- 下一篇: Java 从身份证号码中获取出生日期、性