Java 常見面試題整理

操做系統

  • 說一下線程和進程,它們的區別
  • 同步和異步的區別
  • 阻塞和非阻塞的區別
  • 操做系統中死鎖的四個必要條件
  • mmap和普通文件讀寫的區別,mmap的注意點
  • CPU密集型和IO密集型的區別

Linux

  • linux 用過的命令
  • kill 用法,某個進程殺不掉的緣由(進入內核態,忽略 kill 信號)
  • 系統管理命令(如查看內存- 網絡狀況)
  • 管道的使用
  • grep 的使用,必定要掌握,每次都會問在文件中查找
  • shell 腳本
  • find 命令
  • awk 使用
  • 講一下linux的Swap分區
  • 硬連接和軟鏈接區別
  • 講一下epoll的基本原理,優勢
  • 講一下內核態與用戶態,爲何要有用戶態和內核態,如何切換
  • 講一下五種IO模型

計算機網絡

  • 網絡爲何要分層
  • 爲何有IP地址還須要MAC地址
  • IP 地址子網劃分
  • DNS 解析過程
  • URI和URL區別
  • 說一下 TCP 和 UDP 的區別,優缺點
  • TCP如何保證可靠傳輸?怎麼作到不丟,不重,不漏(三次握手、滑動窗口、流量控制、擁塞控制)
  • TCP三次握手、TCP四次揮手
  • TCP粘包和拆包產生的緣由?解決策略?
  • 談一下你對 HTTP 的理解?
  • http2 比1.1主要改進了什麼,有什麼好的辦法解決頭部阻塞嘛?
  • 既然說 HTTP 是無狀態的,那服務器怎麼記住上次請求的用戶?
  • GET和POST區別
  • 講一下你熟悉的HTTP狀態碼,它們的含義是什麼?
  • 講一下一次完整的HTTP請求過程
  • HTTPS和HTTP的區別,https是如何保證數據傳輸的安全?
  • Session 和 Cookie 區別?

設計模式

  • 說一下你熟悉的設計模式?
  • 簡單工廠和抽象工廠有什麼區別?
  • 什麼是單例模式?在什麼狀況下須要使用單例模式?

Java基礎系列

容器

  • Collection 和 Collections 有什麼區別?
  • List、Set、Map 之間的區別是什麼?
  • ArrayList初始化默認長度、擴容、拷貝、增長和刪除時間複雜度和空間複雜度
  • ArrayList 是一個線程安全的集合類嗎?
  • ArrayList 和 LinkedList 的區別是什麼?
  • 如何實現數組和 List 之間的轉換?
  • ArrayList 和 Vector 的區別是什麼?
  • 迭代器 Iterator 是什麼?怎麼使用?有什麼特色?
  • 在 Queue 中 poll()和 remove()有什麼區別?
  • 說一下 HashMap 的底層數據結構?
  • HashMap 和 Hashtable 有什麼區別?
  • 如何決定使用 HashMap 仍是 TreeMap?
  • HashMap 存儲元素時 key 徹底同樣該怎麼處理?
  • HashMap 的默認長度是多少?如何擴容的?
  • Hash 會有什麼問題 ?怎麼避免或者減小哈希碰撞 ?
  • JDK 1.8 的 HashMap 有什麼變化?爲何 JDK 1.7 是頭插法,JDK 1.8 是尾插法?
  • ConcurrentHashMap 和 HashMap 的區別?爲何 ConcurrentHashMap 會線程安全?
  • ConcurrentHashMap 雖然是線程安全的,但它也存在什麼問題?
  • 瞭解 TreeMap 嗎?TreeMap 最大的特色是什麼?爲何已經有了 HashMap 了還要有 TreeMap 類?
  • 說一下 Fail-Fast 機制,結合源碼說一下
  • 哪些集合類是線程安全的?
  • 怎麼確保一個集合不能被修改?
  • 判斷一個集合類是否爲線程安全的機制是什麼?

多線程

  • 線程有哪些狀態?
  • 並行和併發有什麼區別?
  • 線程和進程的區別?
  • 守護線程是什麼?
  • 建立線程有哪幾種方式?
  • 說一下 runnable 和 callable 有什麼區別?
  • sleep() 和 wait() 有什麼區別?
  • notify()和 notifyAll()有什麼區別?
  • 爲何線程通訊的方法wait(), notify()和notifyAll()被定義在Object類裏?
  • 線程的 run()和 start()有什麼區別?
  • 什麼是線程安全?在 java 程序中怎麼保證多線程的運行安全?
  • 鎖的升級原理是什麼?
  • 對象鎖和靜態鎖之間的區別
  • 什麼是死鎖?怎麼防止死鎖?
  • ThreadLocal 是什麼?有哪些使用場景?
  • 說一下 synchronized 底層實現原理?
  • synchronized 和 volatile 的區別是什麼?
  • synchronized 和 Lock 有什麼區別?
  • synchronized 和 ReentrantLock 區別是什麼?
  • 說一下 atomic 的原理?
  • CAS是什麼?缺點
  • 說一下 AQS的原理?
  • 如何中止一個線程?
  • final域的內存語義

線程池

  • 線程池的實現原理,爲何要用線程池
  • 線程池中Executor、ExecuteService、Executors 的區別
  • 線程池都有哪些狀態?
  • 線程池中 submit()和 execute()方法有什麼區別?
  • 線程池都有哪幾種工做隊列?
  • 怎麼理解無界隊列和有界隊列?
  • ThreadPoolExecutor執行的策略
  • 說說幾種常見的線程池及使用場景?特色?爲何不推薦經過Executors直接建立線程池
  • 四種拒絕策略
  • 線程池ThreadPoolExecutor參數如何設置
  • 單機上一個線程池正在處理服務,若是突然斷電了怎麼辦(正在處理和阻塞隊列裏的請求怎麼處理)?

反射

  • 什麼是反射?
  • 什麼是 Java 序列化?什麼狀況下須要序列化?
  • 動態代理是什麼?有哪些應用?
  • 怎麼實現動態代理?

對象拷貝

  • 爲何要使用克隆?
  • 如何實現對象克隆?
  • 深拷貝和淺拷貝區別是什麼?

異常

  • Java 異常的體系結構
  • throw 和 throws 的區別?
  • final、finally、finalize 有什麼區別?
  • try-catch-finally 中哪一個部分能夠省略?
  • try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
  • 常見的異常類有哪些?

JVM

  • 說一下對jvm的理解,jvm的組成部分,各個部分的存儲內容以及常見的jvm的問題排查步驟。
  • 對JVM熟不熟悉?簡單說說類加載過程,裏面執行的那些操做?
  • JVM方法區存儲內容 是否會動態擴展 是否會出現內存溢出 出現的緣由有哪些。
  • 介紹介紹CMS。
  • 介紹介紹G1。
  • 爲何jdk8用metaspace數據結構用來替代perm?
  • 簡單談談堆外內存以及你的理解和認識。
  • JVM的內存模型的理解,threadlocal使用場景及注意事項?
  • JVM老年代和新生代的比例?
  • jstack,jmap,jutil分別的意義?如何線上排查JVM的相關問題?
  • Java虛擬機中,數據類型能夠分爲哪幾類?
  • 怎麼理解棧、堆?堆中存什麼?棧中存什麼?
  • 爲何要把堆和棧區分出來呢?棧中不是也能夠存儲數據嗎?
  • 在Java中,什麼是是棧的起始點,同是也是程序的起始點?
  • 爲何不把基本類型放堆中呢?
  • Java中的參數傳遞時傳值呢?仍是傳引用?
  • Java中有沒有指針的概念?
  • Java中,棧的大小經過什麼參數來設置?
  • 一個空Object對象的佔多大空間?
  • 對象引用類型分爲哪幾類?
  • 講一講垃圾回收算法。
  • 如何解決內存碎片的問題?
  • 如何解決同時存在的對象建立和對象回收問題?
  • 講一講內存分代及生命週期。
  • 什麼狀況下觸發垃圾回收?
  • 如何選擇合適的垃圾收集算法?
  • JVM中最大堆大小有沒有限制?
  • 堆大小經過什麼參數設置?
  • JVM有哪三種垃圾回收器?
  • 吞吐量優先選擇什麼垃圾回收器?響應時間優先呢?
  • 如何進行JVM調優?有哪些方法?
  • 如何理解內存泄漏問題?有哪些狀況會致使內存泄露?如何解決?

MySQL

  • 說一下 ACID 是什麼?
  • 說一下四種隔離級別,默認的隔離級別是什麼,怎麼避免不可重複讀?
  • char 和 varchar 的區別是什麼?
  • float 和 double 的區別是什麼?
  • mysql 的內鏈接、左鏈接、右鏈接有什麼區別?
  • mysql 索引是怎麼實現的?
  • B+樹索引和哈希索引的區別
  • B樹和B+樹的區別
  • 彙集索引和輔助索引
  • 什麼狀況下應不建或少建索引,致使索引失效的一些狀況
  • key和index的區別
  • 怎麼驗證 mysql 的索引是否知足需求?
  • 說一下 mysql 經常使用的引擎?MyISAM和InnoDB的區別?如何選擇?
  • 說一下 mysql 的行鎖和表鎖?
  • 鎖的算法(Record Lock、Gap Lock、Next-Key Lock)
  • MySQL怎麼實現redo log和binlog的一致性
  • 說一下樂觀鎖和悲觀鎖?
  • 說一下MySQL分區怎麼實現,對業務層透明嗎?MySQL支持的分區類型有哪些?使用場景?分區與分表的區別?
  • mysql主從同步原理
  • 說一下MVVC
  • mysql 問題排查都有哪些手段?
  • 如何作 mysql 的性能優化?

Netty

  • Netty爲何比NIO快?
  • 講一下Netty零拷貝原理,爲何會有內核空間?怎麼管理?
  • NIO必定比IO快嗎?什麼狀況下會比IO慢?

Spring

  • 爲何要使用 spring?
  • 講一下aop的實現原理?JDK動態代理和CGLIB代理的區別
  • 講一下ioc的實現原理?
  • spring 有哪些主要模塊?
  • spring 經常使用的注入方式有哪些?
  • spring 中的 bean 是線程安全的嗎?
  • spring 支持幾種 bean 的做用域?
  • spring 自動裝配 bean 有哪些方式?
  • spring 事務實現方式有哪些?事務失效的幾種緣由
  • 說一下 spring 的事務隔離?
  • 說一下 spring mvc 運行流程?
  • spring mvc 有哪些組件?
  • @RequestMapping 的做用是什麼?
  • @Autowired 的做用是什麼?

Spring Boot

  • 什麼是 Spring Boot?爲何要用 Spring Boot?和Spring有什麼區別?
  • Spring Boot 核心配置文件是什麼?
  • Spring Boot配置文件有哪幾種類型?它們有什麼區別?
  • Spring Boot 有哪些方式能夠實現熱部署?
  • 微服務怎麼拆分
  • 講一下DDD

SpringCloud

  • SpringCloud和Dubbo區別
  • Eureka實現原理
  • Eureka和ZooKeeper均可以提供服務註冊與發現的功能,請說說兩個的區別
  • Hystrix是什麼,熔斷器實現原理
  • Feign的優勢是什麼

MyBatis

  • mybatis的特性
  • mybatis的#號和$號有什麼區別
  • mybatis如何進行類型轉換
  • mybatis的xml有什麼標籤
  • mybatis底層如何加載mapper,以及SQL語句具體怎麼執行
  • mybatis 有哪些執行器(Executor)?
  • mybatis 有幾種分頁方式?
  • RowBounds 是一次性查詢所有結果嗎?爲何?
  • mybatis 邏輯分頁和物理分頁的區別是什麼?
  • mybatis 是否支持延遲加載?延遲加載的原理是什麼?
  • MyBatis 如何處理批量請求?
  • 說一下 mybatis 的一級緩存和二級緩存?(高頻)
  • mybatis 分頁插件的實現原理是什麼?
  • mybatis 如何編寫一個自定義插件?

消息隊列

  • 說說你使用過什麼消息中間件?
  • 爲何要在系統裏引入消息中間件?
  • 消息中間件技術選型爲何是RabbitMQ?技術選型的依據是什麼?
  • 怎麼保證消息中間件的高可用性?避免消息中間件故障後引起系統總體故障?
  • RabbitMQ的高可用性怎麼實現。
  • 怎麼保證投遞出去的消息只有一條,不會出現重複的數據?
  • 消息重複是什麼形成的,從生產端和消費端兩個角度來考慮
  • 如何保證消息的順序性?若是不須要保證消息順序,爲何不須要?
  • 是否遇到過消息積壓的生產故障?若是沒遇到過,你考慮一下如何應對?
  • 說說RabbitMQ的底層架構原理,邏輯架構、物理架構以及數據持久化機制?
  • 大家RabbitMQ的最高峯QPS每秒是多少?線上如何部署的,部署了多少臺機器,機器的配置如何?
  • 說說Kafka的底層架構原理,磁盤上數據如何存儲的,總體分佈式架構是如何實現的?
  • 說說Kafka是如何保證數據的高容錯性的?零拷貝等技術是如何運用的?高吞吐量下如何優化生產者和消費者的性能?
  • 說說你對Kafka源碼的理解?
  • RocketMQ的一個特色是對分佈式事務的支持,說說他在分佈式事務支持的底層原理?
  • RocketMQ的源碼看過麼,聊聊你對RocketMQ源碼的理解?
  • 若是讓你來動手實現一個分佈式消息中間件,總體架構你會如何設計實現?

Redis

  • Redis 都有哪些數據類型?它們的內部數據結構是什麼?分別在哪些場景下使用比較合適?
  • Redis有人說是單線程和有人說是多線程,你怎麼看?Redis 爲何是單線程的?
  • Redis 和 Memcached 有什麼區別?爲何單線程的 Redis 比多線程的 Memcached 效率要高得多?
  • Redis 的線程模型是什麼?講一下多路I/O複用模型?
  • Redis主從複製是怎麼實現的
  • 什麼是 Redis 的雪崩和穿透?Redis 崩潰以後會怎麼樣?系統該如何應對這種狀況?如何處理 Redis 的穿透?
  • Redis 的持久化有哪幾種方式?區別?持久化機制具體底層是如何實現的?
  • redis 支持的 java 客戶端都有哪些?jedis 和 redisson 有哪些區別?
  • 如何保證緩存與數據庫的雙寫一致性?
  • Redis 的併發競爭問題是什麼?如何解決?瞭解 Redis 事務的 CAS 方案嗎?
  • Redis 集羣模式的工做原理?Redis 的 key 是如何尋址的?分佈式尋址都有哪些算法?瞭解一致性 hash 算法嗎?如何動態增長和刪除一個節點?
  • Redis 怎麼實現分佈式鎖?有什麼缺陷?
  • Redis 如何作內存優化?
  • Redis 設置過時時間的原理?
  • Redis 淘汰策略有哪些?
  • Redis 常見的性能問題有哪些?該如何解決?
  • Redis 和MySQL區別,MySQL也有存儲文檔格式的存儲引擎Memory,它們什麼區別?

Zookeeper

  • raft協議相比paxos的優劣

Nginx

  • 講一下nginx負載均衡,優點,Apache和Nginx區別
  • cgi和fastcgi區別
  • Nginx架構、模塊關係、accept_mutex的實現以及多進程的負載均衡
  • nginx部署的時候出現502了嗎,500何時出現的
  • Nginx負載均衡致使用戶兩次調用服務不在一個IP上,怎麼保持鏈接

MongoDB

  • MongoDB和MySQL區別,MySQL也有存儲文檔格式的存儲引擎Archive,它們什麼區別?

Solr

  • Solr全量索引的時候發現數據有丟失,怎麼處理?
  • Solr地理位置搜索的原理是什麼?
  • 倒排索引的優點?
相關文章
相關標籤/搜索