前言
工作擰螺絲,面試造火箭。我想這是每個程式設計師比較頭疼的事情吧!但是,又必須要經歷一個面試流程,尤其是摸不清面試官問的問題,導致面試的時候不知道如何回答。
本文是工作7年Java程式設計師從幾十次面試中挑選出來的面試機率比較大的一些題目,保證都是大家被問過的(就是這麼自信),希望對大家找工作有所幫助。
下面的面試題只是我整理出來的一小部分常問的題目,另外本人整理並收藏了20年多家公司面試題知識點合集,以及各種Java核心知識點可以免費分享給大家,下方只是部分資料圖展示。
需要的朋友可以點選傳送門獲取Java面試題資料:https://shimo.im/docs/QyJrRJVRdpptDYgk/
一、JVM系列面試題
1、堆裡面的分割槽:Eden,survival (from+ to),老年代,各自的特點。
答:JVM 分為堆區和棧區,還有方法區,初始化的物件放在堆裡面,引用放在棧裡面,
class 類資訊常量池(static 常量和 static 變數)等放在方法區
new:①方法區:主要是儲存類資訊,常量池(static 常量和 static 變數),編譯後的程式碼(位元組碼)等資料
②堆:初始化的物件,成員變數 (那種非 static 的變數),所有的物件例項和陣列都要在堆上分配
③棧:棧的結構是棧幀組成的,呼叫一個方法就壓入一幀,幀上面儲存區域性變數表,運算元棧,方法出口等資訊,區域性變數表存放的是 8 大基礎型別加上一個應用型別,所以還是一個指向地址指標
④ 本地方法棧:主要為 Native 方法服務
⑤ 程式計數器:記錄當前執行緒執行的行號
2、GC 的兩種判定方法:
3、SafePoint 是什麼
4、GC 的三種收集方法:標記清除、標記整理、複製演算法的原理與特點,分別用在什麼地方,如果讓你優化收集方法,有什麼思路?
5、Minor GC 與 Full GC 分別在什麼時候發生?
6、JVM 記憶體分哪幾個區,每個區的作用是什麼?
7、 如何判斷一個物件是否存活?(或者 GC 物件的判定方法)
二、Redis系列面試題
1、Redis 與 memcached 相比有哪些優勢?
2、Redis 支援哪幾種資料型別?
3、Redis 有哪幾種資料淘汰策略?
4、為什麼 Redis 需要把所有資料放到記憶體中?
5、Redis 叢集方案什麼情況下會導致整個叢集不可用?
6、MySQL 裡有 2000w 資料,redis 中只存 20w 的資料,如何保證 redis 中的資料都是熱點 資料?
7、Redis 和 Redisson 有什麼關係?
三、 Mysql系列面試題
1、Mysql 的技術特點是什麼?
2、在 Mysql 中 ENUM 的用法是什麼?
3、與 Oracle 相比,Mysql 有什麼優勢?
4、列的字串型別可以是什麼?
5、請簡潔描述 Mysql 中 InnoDB 支援的四種事務隔離級別名稱,以及逐級之間的區別?
6、LIKE 宣告中的%和_是什麼意思?
7、MyISAM 表格將在哪裡儲存,並且還提供其儲存格式?
四、Netty系列面試題
1、BIO、NIO 和 AIO 的區別?
答:BIO:一個連線一個執行緒,客戶端有連線請求時伺服器端就 需要啟動一個執行緒進行處理。執行緒開銷大。
偽非同步 IO:將請求連線放入執行緒池,一對多,但執行緒還是很寶貴的資源。
NIO:一個請求一個執行緒,但客戶端傳送的連線請求都會註冊到多路複用器上,多路複用
器輪詢到連線有 I/O 請求時才啟動一個執行緒進行處理。
AIO:一個有效請求一個執行緒,客戶端的 I/O 請求都是由 OS 先完成了再通知伺服器應用去啟動執行緒進行處理,BIO 是面向流的,NIO 是面向緩衝區的;BIO 的各種流是阻塞的。而 NIO 是非阻塞的;BIO的 Stream 是單向的,而 NIO 的 channel 是雙向的。
NIO 的特點:事件驅動模型、單執行緒處理多工、非阻塞 I/O,I/O 讀寫不再阻塞,而是返回 0、基於 block 的傳輸比基於流的傳輸更高效、更高階的 IO 函式 zero-copy、IO 多路複用大大提高了 Java 網路應用的可伸縮性和實用性。基於 Reactor 執行緒模型。
在 Reactor 模式中,事件分發器等待某個事件或者可應用或個操作的狀態發生,事件分發器就把這個事件傳給事先註冊的事件處理函式或者回撥函式,由後者來做實際的讀寫操作。如在 Reactor 中實現讀:註冊讀就緒事件和相應的事件處理器、事件分發器等待事件、事件到來,啟用分發器,分發器呼叫事件對應的處理器、事件處理器完成實際的讀操作,處理讀到的資料,註冊新的事件,然後返還控制權。
2、TCP 粘包/拆包的原因及解決方法?
3、瞭解哪幾種序列化協議?
4、如何選擇序列化協議?
5、Netty 的零拷貝實現?
6、.Netty 的高效能表現在哪些方面?
五、SQL優化系列面試題
1、Mysql 的技術特點是什麼?
答:Mysql 資料庫軟體是一個客戶端或伺服器系統,其中包括:支援各種客戶端程式和庫的多執行緒 SQL 伺服器、不同的後端、廣泛的應用程式程式設計介面和管理工具。
2、Heap 表是什麼?
3、Mysql 伺服器預設埠是什麼?
4、與 Oracle 相比,Mysql 有什麼優勢?
5、區分 CHAR_LENGTH 和 LENGTH?
6、Mysql 中使用什麼儲存引擎?
六、Duddo系列面試題
1、Dubbo 中 zookeeper 做註冊中心,如果註冊中心叢集都掛掉,釋出者和訂閱者之間還能通訊麼?
2、dubbo 服務負載均衡策略?
3、Dubbo 在安全機制方面是如何解決的
4、dubbo 連線註冊中心和直連的區別
5、dubbo 服務叢集配置(叢集容錯模式)
6、dubbo 通訊協議 dubbo 協議為什麼要消費者比提供者個數多:
7、dubbo 通訊協議 dubbo 協議適用範圍和適用場景
七、設計模式系列面試題
1、請列舉出在 JDK 中幾個常用的設計模式?
答:單例模式(Singleton pattern)用於 Runtime,Calendar 和其他的一些類中。工廠模式(Factory pattern)被用於各種不可變的類如Boolean,像 Boolean.valueOf,觀察者模式(Observer pattern)被用於 Swing 和很多的事件監聽中。裝飾器設計模式(Decoratordesign pattern)被用於多個 Java IO 類中。
2、什麼是設計模式?你是否在你的程式碼裡面使用過任何設計模式?
3、Java 中什麼叫單例設計模式?請用 Java 寫出執行緒安全的單例模式
4、在 Java 中,什麼叫觀察者設計模式(observer design pattern)?
5、使用工廠模式最主要的好處是什麼?在哪裡使用?
6、舉一個用 Java 實現的裝飾模式(decorator design pattern)?它是作用於物件層次還是類層次?
7、舉例說明什麼情況下會更傾向於使用抽象類而不是介面?
總結
針對以上面試題,我總結出了網際網路公司Java程式設計師面試中,涉及到的絕大部分面試題(附答案詳解)。編成了文件和PDF格式的資料,免費分享給大家。包括 Dubbo、Redis、Netty、Zookeeper、Spring Cloud、分散式、高併發等架構技術點核心資料),希望能幫助到您面試前的複習並且能找到一個心儀的工作。同時,也節省大家去網上搜尋資料浪費的時間來學習,也可以關注我喲以後還會有更多幹貨分享噠~
說到這裡,想必大家都蠢蠢欲動了吧,由於文章字數原因,完整資料不能全部上傳,需要資料的朋友可以點選傳送門獲取Java面試題資料:https://shimo.im/docs/QyJrRJVRdpptDYgk/