春節過後,本是金三銀四之際,大部分人也都準備好了這在兩個月裡謀得一份自己心儀的工作,奈何今年的2020有些特殊,肺炎肆虐,對我們的工作和生活都造成了極大的影響。那麼,是不是這樣,我們就不工作,不學習了呢?實際上,正是因為現在正值傳染病毒傳播期間,所以我們宅在家裡好好學習是再好不過的。對於Java程序員來說,利用這兩三個月的時間,好好學習,著手準備起來,等到疫情好轉,開始面試時,也不至於膽怯。
今天,要分享的這些是非常乾貨的面試知識,在疫情閉關期間,這些“Java技術棧”讀完,斬獲offer到手軟。(由於文章篇幅有限,完整的面試PDF文檔,私信【面試】即可免費領取)
一、Java必備技術棧之基礎篇
01 Java築基面試題(一):Tomcat+Mysql+設計模式
- Tomcat 的缺省端口是多少,怎麼修改?
- Tomcat 有哪幾種 Connector 運行模式(優化)?
- Tomcat 有幾種部署方式?
- Tomcat 容器是如何創建 servlet 類實例?用到了什麼原理?
- Tomcat 如何優化?
- 內存調優
- 垃圾回收策略調優
- 共享 session 處理
- 數據庫三範式是什麼?
- 有哪些數據庫優化方面的經驗?
- 請簡述常用的索引有哪些種類?
- 以及在 mysql 數據庫中索引的工作機制是什麼?
- MySQL 的基礎操作命令
- mysql 的複製原理以及流程。
- mysql 支持的複製類型?
- mysql 中 myisam 與 innodb 的區別?
- 請列舉出在 JDK 中幾個常用的設計模式?
- 什麼是設計模式?你是否在你的代碼裡面使用過任何設計模式?
- Java 中什麼叫單例設計模式?請用 Java 寫出線程安全的單例模式
- 在 Java 中,什麼叫觀察者設計模式(observer design pattern)?
- 使用工廠模式最主要的好處是什麼?在哪裡使用?
- 舉一個用 Java 實現的裝飾模式(decorator design pattern)?它是作用於對象層次還是類層次?
- 在 Java 中,為什麼不允許從靜態方法中訪問非靜態變量?
- 設計一個 ATM 機,請說出你的設計思路?
- ......
02 Java築基面試題(二):併發+Netty+JVM
- 現在有 T1、T2、T3 三個線程,你怎樣保證 T2 在 T1 執行完後執行,T3 在 T2 執行完後執行?
- 在 Java 中 Lock 接口比 synchronized 塊的優勢是什麼?你需要實現一個高效的緩存,它允許多個用戶讀,但只允許一個用戶寫,以此來保持它的完整性,你會怎樣去實現它?
- 在 java 中 wait 和 sleep 方法的不同?
- 用 Java 實現阻塞隊列。
- 用 Java 寫代碼來解決生產者——消費者問題。
- 用 Java 編程一個會導致死鎖的程序,你將怎麼解決?
- 什麼是原子操作,Java 中的原子操作是什麼?
- Java 中的 volatile 關鍵是什麼作用?怎樣使用它?在 Java 中它跟 synchronized 方法有什麼不同?
- 什麼是競爭條件?你怎樣發現和解決競爭?
- 你將如何使用 threaddump?你將如何分析 Thread dump?
- BIO、NIO 和 AIO 的區別?
- NIO 的組成?
- Netty 的特點?
- Netty 的線程模型?
- TCP 粘包/拆包的原因及解決方法?
- 瞭解哪幾種序列化協議?
- 如何選擇序列化協議?
- Netty 的零拷貝實現?
- Netty 的高性能表現在哪些方面?
- 內存模型以及分區,需要詳細到每個區放什麼?
- 堆裡面的分區:Eden,survival (from+ to),老年代,各自的特點。
- 對象創建方法,對象的內存分配,對象的訪問定位。
- GC 的兩種判定方法
- SafePoint 是什麼
- GC 的三種收集方法:標記清除、標記整理、複製算法的原理與特點,分別用在什麼地方,如果讓你優化收集方法,有什麼思路?
- GC 收集器有哪些?CMS 收集器與 G1 收集器的特點。
- Minor GC 與 Full GC 分別在什麼時候發生?
- .JVM 內存分哪幾個區,每個區的作用是什麼?
- ......
03 深入剖析Tomcat
04 Netty實戰
二、Java必備技術棧之進階篇
01 Spring 系列面試題(Spring+SpringBoot+SpringCloud+SpringMVC)
- 什麼是 Spring 框架?Spring 框架有哪些主要模塊
- 使用 Spring 框架能帶來哪些好處?
- 什麼是控制反轉(IOC)?什麼是依賴注入?
- 請解釋下 Spring 框架中的 IoC?
- BeanFactory 和 ApplicationContext 有什麼區別?
- Spring 有幾種配置方式?
- 如何用基於 XML 配置的方式配置 Spring?
- 如何用基於 Java 配置的方式配置 Spring?
- ......
- 什麼是 Spring Boot?
- Spring Boot 有哪些優點?
- 如何重新加載 Spring Boot 上的更改,而無需重新啟動服務器?
- Spring Boot 中的監視器是什麼?
- 如何在 Spring Boot 中禁用 Actuator 端點安全性?
- 如何在自定義端口上運行 Spring Boot 應用程序?
- 如何實現 Spring Boot 應用程序的安全性?
- 如何集成 Spring Boot 和 ActiveMQ?
- ......
- 什麼是 Spring Cloud?
- 使用 Spring Cloud 有什麼優勢?
- 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
- 負載平衡的意義什麼?
- 什麼是 Hystrix?它如何實現容錯?
- 什麼是 Hystrix 斷路器?我們需要它嗎?
- 什麼是 Netflix Feign?它的優點是什麼?
- ......
- 什麼是 SpringMVC?
- SpringMVC 工作原理
- SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
- 如果你也用過 struts2.簡單介紹下 springMVC 和 struts2 的區別有哪些?
- SpingMvc 中的控制器的註解一般用那個,有沒有別的註解可以替代?
02 面試必問併發編程高級面試專題
Synchronized 相關問題:
- Synchronized 用過嗎?其原理是什麼 ?
- 你剛才提到獲取對象的鎖,這個“鎖”到底是什麼 ?如何確定對象的鎖?
- 什麼是可重入性,為什麼說Synchronized 是可重入鎖?
- JVM對Java的原生鎖做了哪些優化?
- 為什麼說 Synchronized 是非公平鎖?
- 什麼是鎖消除和鎖粗化?
- 為什麼說 Synchronized 是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是CAS,它有什麼特性?
- 樂觀鎖一定就是好的嗎?
可重入鎖ReentrantLock 及其他顯式鎖相關問題:
- 跟 Synchronized 相 比 , 可重入鎖 ReentrantLock 其實現原理有什麼不 同 ?
- 那麼請談談AQS 框架是怎麼回事兒?
- 請儘可能詳盡地對比下 Synchronized 和 ReentrantLock的異同。
- ReentrantLock 是如何實現可重入性的?
- 除了ReetrantLock, 你還接觸過JUC 中的哪些併發工具?
- 請談談ReadWriteLock 和 StampedLock。
- 如何讓Java 的線程彼此同步?你瞭解過哪些同步器?請分別介紹下 。
- CyclicBarrier 和 CountDownLatch 看起來很相似,請對比下呢?
Java 線程池相關問題:
- Java 中的線程池是如何實現的?
- 創建線程池的幾個核心構造參數?
- 線程池中的線程是怎麼創建的?是一開始就隨著線程池的啟動創建好的嗎?
- 既然提到可以通過配置不同參數創建出不同的線程池,那麼Java 中默認實現好的線程池又有哪些呢 ? 請比較它們的異同。
- 如何在Java 線程池中提交線程?
Java 內存模型相關問題:
- 什麼是 Java 的內存模型,Java中各個線程是怎麼彼此看到對方的變量的?
- 請談談volatile 有什麼特點,為什麼它能保證變量對所有線程的可見性?
- 既然 volatile 能夠保證線程間的變量可見性,是不是就意味著基於volatile 變量的運算就是併發安全的?
- 請對比下 volatile 對比Synchronized的異同。
- 請談談 ThreadLocal 是怎麼解決併發安全的。
- 很多人都說要慎用 ThreadLocal,談談你的理解,使用ThreadLocal 需要注意些什麼?
03 分佈式數據面試專題系列:Memcached+Redis+MongoDB
memcached 是怎麼工作的?
memcached 最大的優勢是什麼?
memcached 和 MySQL 的 query cache 相比,有什麼優缺點?
memcached 和服務器的 local cache(比如 PHP 的 APC、mmap 文件等)相比,有什麼優缺點?
memcached 的 cache 機制是怎樣的?
memcached 如何實現冗餘機制?
memcached 如何處理容錯的?
我需要把 memcached 中的 item 批量導出導入,怎麼辦?
......
redis 和 memcached 什麼區別?為什麼高併發下有時單線程的 redis 比多線程的memcached 效率要高?
redis 主從複製如何實現的?redis 的集群模式如何實現?redis 的 key 是如何尋址的?
使用 redis 如何設計分佈式鎖?說一下實現思路?使用 zk 可以嗎?如何實現?這兩種有什麼區別?
知道 redis 的持久化嗎?底層如何實現的?有什麼優點缺點?
redis 過期策略都有哪些?LRU 算法知道嗎?寫一下 java 代碼實現?
......
你說的 NoSQL 數據庫是什麼意思?NoSQL 與 RDBMS 直接有什麼區別?為什麼要使用和不使用NoSQL 數據庫?說一說 NoSQL 數據庫的幾個優點?
NoSQL 數據庫有哪些類型?
MySQL 與 MongoDB 之間最基本的差別是什麼?
你怎麼比較 MongoDB、CouchDB 及 CouchBase?
MongoDB 成為最好 NoSQL 數據庫的原因是什麼?
04 分佈式通訊面試專題系列:ActiveMQ+RabbitMQ+Kafka
- 1.什麼是 ActiveMQ?
- ActiveMQ 服務器宕機怎麼辦?
- 丟消息怎麼辦?
- ActiveMQ 中的消息重發時間間隔和重發次數嗎?
- ......
- RabbitMQ 中的 broker 是指什麼?cluster 又是指什麼?
- 什麼是元數據?元數據分為哪些類型?包括哪些內容?與 cluster 相關的元數據有哪些?元數據是如何保存的?元數據在 cluster 中是如何分佈的?
- RAM node 和 disk node 的區別?
- RabbitMQ 上的一個 queue 中存放的 message 是否有數量限制?
- RabbitMQ 概念裡的 channel、exchange 和 queue 這些東東是邏輯概念,還是對應著進程實體?這些東東分別起什麼作用?
- vhost 是什麼?起什麼作用?
- 在單 node 系統和多 node 構成的 cluster 系統中聲明 queue、exchange ,以及進行 binding 會有什麼不同?
- 客戶端連接到 cluster 中的任意 node 上是否都能正常工作?
- ......
- Kafka 的設計時什麼樣的呢?
- 數據傳輸的事物定義有哪三種?
- Kafka 判斷一個節點是否還活著有那兩個條件?
- producer 是否直接將數據發送到 broker 的 leader(主節點)?
- Kafa consumer 是否可以消費指定分區消息
- Kafka 消息是採用 Pull 模式,還是 Push 模式
- Kafka 存儲在硬盤上的消息格式是什麼?
- Kafka 高效文件存儲設計特點:
- Kafka 與傳統消息系統之間有三個關鍵區別
- Kafka 創建 Topic 時如何將分區放置到不同的 Broker 中
05 分佈式限流面試專題系列:Nginx+zookeeper
- 請解釋一下什麼是 Nginx?
- 請列舉 Nginx 的一些特性。
- 請列舉 Nginx 和 Apache 之間的不同點
- 請解釋 Nginx 如何處理 HTTP 請求
- 在 Nginx 中,如何使用未定義的服務器名稱來阻止處理請求
- 使用“反向代理服務器”的優點是什麼?
- 請列舉 Nginx 服務器的最佳用途
- 請解釋 Nginx 服務器上的 Master 和 Worker 進程分別是什麼?
- 請解釋是否有可能將 Nginx 的錯誤替換為 502 錯誤、503?
- ......
- ZooKeeper 是什麼?
- ZooKeeper 提供了什麼?
- zookeeper 是如何保證事務的順序一致性的?
- zookeeper 是如何選取主 leader 的?
- 機器中為什麼會有 leader?
- zk 節點宕機如何處理?
- zookeeper 負載均衡和 nginx 負載均衡區別
- ......
總結
疫情時期不要放鬆心態,在家更要自律學習。
現在抓緊時間,不用靠金三銀四,也能找到好工作。
以上所有的面試題(含答案)、實戰文檔,學習筆記等PDF文檔資料,均免費放送分享,需要的朋友轉發+評論一下,然後關注我,私信關鍵詞【面試】即可獲取。
閱讀更多 Java架構師阿谷 的文章