前言
2019年馬上就要告一段落了,馬上又準備迎接新一輪的「金三銀四」了,你是否還在尋找沒有「996」的公司,或者你在面試上面摘了跟頭?準備了體體面面的自我介紹,敗在了技術深度上;又或者技術知識背得完完全全,卻輸在了面試技巧。
115個Java面試題:
- 什麼是Java虛擬機?為什麼Java被稱作是無關的程式語言?
- JDK和JRE的區別是什麼?
- static關鍵字是什麼意思?Java中是否可以覆蓋(override)一個private或者是strtic的方法
- 是否可以在strtic環境中訪問strtic變量?
- Java支持的數據類型有哪些?什麼是自動拆裝箱?
- Java中的方法覆蓋(Overriding)和方法重載(Overriding)是什麼意思?
- Java中,什麼是構造函數重載?什麼是複製構造函數
- Java支持多繼承麼?
- 接口和抽象類的區別是什麼?
- 什麼是值傳遞和引用傳遞
- 進程和線程的區別是什麼?
- 創建線程有幾種不同的方式?你喜歡那一種?為什麼?
- 概況的解釋下線程的幾種可用狀態
- 同步方法和同步代碼塊的區別是什麼?
- 在監視器(Monitor)內部,是如何做線程同步的?程序應該做那種級別的同步?
- 什麼是死鎖(deadlock)?
- 如何確保N個線程可以訪問N個資源同時又不導致死鎖?
- Java集合類框架的基本接口有哪些?
- 為什麼集合類沒有實現Cloneable和Serializable接口?
- 什麼是疊代器(Iterator)?
- Iterator和LististIterator的區別是什麼?
- 快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什麼?
- Java中的HashMap的工作原理是什麼?
- hashCode()和equals()方法的重要性體現在什麼地方?
- HashMap和Hashtable有什麼區別?.數組(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList?
- ArrayList和LinkedList有什麼區別?
- Comparable和Comparatoromparator接口是幹什麼的?列出他們的區別
- 什麼是Java優先級隊列(PriorityQueue)?
- 你了解大O符號(big-O notation)麼?你能給出不同數據結構的例子麼?
- 如何權衡是使用無序的數組還是有序的數組?
- Java集合類框架的最佳實踐有哪些?
- Enumeration接口和Iterator接口的區別有哪些?
- HashSet和TreeSet有什麼區別?
- Java中辣椒回收有什麼目的?什麼時候進行垃圾回收
- System.ge()和Runtime.gc()會做什麼事情?
- finalize()方法什麼時候被條用?析構函數(finalization)的目的是什麼?
- 如果對象的引用被置為null,垃圾收集器是否會立即釋放對象占用的內存
- Java堆的結構是什麼樣子的?什麼是堆中的永久代(Perm Gen space)?
- 串行(serial)收集器和吞吐量(throughput)收集器的區別是什麼?
- 在Java中,對象什麼時候可以被垃圾回收?
- JVM的永久代中會發生垃圾回收麼?
- Java中的兩種異常類型是什麼?他們有什麼區別?
- Java中Exception和Error有什麼區別?
- throw和thro ws有什麼區別?異常處理的時候,finally代碼塊的重要性是什麼?
- 異常處理完成以後,Exception對象會發生什麼變化?
- finally代碼塊和finalize()方法有什麼區別?
- 什麼是(Applet)?
- 解釋一下Applet的生命周期
- 當Applet被載入的時候會發生什麼?
- Applet和普通的Java應用程式有什麼區別?
- Java Applet有哪些限制條件?
- 什麼是不受信任的Applet?
- 從網絡上加載的Applet從本地文件系統加載的Applet有什麼區別
- Applet類加載器是什麼?它會做哪些工作?
- Applet安全管理器是什麼?它會做哪些工作?
- 彈出式選擇菜單(Choice)和列表(List)有什麼區別
- 什麼是布局管理器?
- 滾動條(Scrollbar)和滾動面板(JScrollPane)有什麼區別?
- 哪些Swing的方法是線程安全的?
- 說出三種主持重繪(painting)的組件
- 什麼是裁剪(clipping)?
- MenuItem和CheckboxMenuItem的區別是什麼?
- 邊緣布局(BorderLayout)裡面的元素是如何布局的?
- 網格包布局(GridBagLayout)裡面的元素是如何布局的
- Window和Frame有什麼區別?
- 裁剪(clipping)和重繪(repainting)有什麼關係?
- 事件監聽器接口(event-listener interface)和事件適配器(event-adapter)有什麼關係
- GUI組件如何處理它自己的事件?
- Java的布局管理器比傳統的窗口系統有哪些優勢?
- Java的Swing組件使用了那種設計模式?
- 什麼是JDBC?
- 解釋下驅動(Driver)在JDBC中的角色
- Class.forName()方法有什麼作用?
- PreparedStatement比Statement有什麼優勢?
- 什麼時候用CallableStatement?用來準備CallableStatement的方法是什麼?
- 資料庫連接池是什麼意思?
- 什麼是RMI?
- RMI體系結構的基本原則是什麼?
- RMI體系結構分哪幾層?
- RMI中的遠程接口(Remote Interface)扮演了什麼樣的角色?
- java.rmi.Naming類扮演了什麼樣的角色?
- RMI的綁定(Binding)是什麼意思?
- Naming類的bind()和rebind()方法有什麼區別?
- 讓RMI程序能正確運行有哪些步驟?
- RMI在stub扮演了什麼樣的角色?
- 什麼是分布式垃圾回收(DGC)?它是如何工作的?
- RMI中使用RMI安全管理器(RMISecurityManager)的目的是什麼?
- 解釋下Marshalling和demarsahalling
- 解釋下Serialization和Deserialization
- 什麼是Servlet?
- 說一下Servlet的體系結構
- Applet和Servlet有什麼區別?
- GenericServlet和HttpServlet有什麼區別?
- 解釋下Servlet的生命周期
- doGet()方法和doPost()方法有什麼區別?
- 什麼是Web應用程式?
- 什麼是服務端包含(Server Side Include)?
- 什麼是Servlet鏈(Servlet Chaining)?
- 如何做到是哪一個客戶端的機器正在請求你的Servlet?
- HTTP響應的結構是怎麼樣的?
- 什麼是cookie?session和cookie有什麼區別?
- 瀏覽器和Servlet通信使用的是什麼協議?
- 什麼是HTTP隧道?
- sendRedirect()和forwand()方法有什麼區別
- 什麼是URL編碼和URL解碼
- 什麼是JSP頁面
- JSP請求是如何被處理的
- JSP有什麼優點
- 什麼是JSP指令(Directive)?JSP中有哪些不同類型的指令
- 什麼是JSP動作(JSP action)
- 什麼是Scriptlets
- 聲明(Decalaration)在哪裡?
- 什麼是表達式(Expression)
- 隱含對象是什麼意思?有哪些隱含對象
開源框架面試題
- BeanFactory 和 ApplicationContext 有什麼區別
- Spring Bean 的生命周期
- Spring IOC 如何實現
- 說說 Spring AOP
- Spring AOP 實現原理
- 動態代理(cglib 與 JDK)
- Spring 事務實現方式
- Spring 事務底層原理
- Spring 事務底層原理
- Spring MVC 運行流程
- Spring MVC 啟動流程
- Spring 的單例實現原理
- Spring 框架中用到了哪些設計模式
- 為什麼選擇 Netty
- 說說業務中,Netty 的使用場景
- 原生的 NIO 在 JDK 1.7 版本存在 epoll bug
- 什麼是 TCP 粘包/拆包
- TCP 粘包/拆包的解決辦法
- Netty 線程模型
- 說說 Netty 的零拷貝
- Netty 內部執行流程
設計模式
- 請列舉出在 JDK 中幾個常用的設計模式?
- 什麼是設計模式?你是否在你的代碼裡面使用過任何設計模式?
- Java 中什麼叫單例設計模式?請用 Java 寫出線程安全的單例模式
- 在 Java 中,什麼叫觀察者設計模式(observer design pattern)?
- 使用工廠模式最主要的好處是什麼?在哪裡使用?
- 舉一個用 Java 實現的裝飾模式(decorator design pattern)?它是作用於對象層次還是層次?
- 在 Java 中,為什麼不允許從靜態方法中訪問非靜態變量?
- 設計一個 ATM 機,請說出你的設計思路?
- 在 Java 中,什麼時候用重載,什麼時候用重寫?
- 舉例說明什麼情況下會更傾向於使用抽象類而不是接口
spring 25題常見面試問題
- 什麼是 Spring 框架?Spring 框架有哪些主要模塊?
- 使用 Spring 框架能帶來哪些好處?
- 什麼是控制反轉(IOC)?什麼是依賴注入?
- 請解釋下 Spring 框架中的 IoC?
- BeanFactory 和 ApplicationContext 有什麼區別?
- Spring 有幾種配置方式?
- 如何用基於 XML 配置的方式配置 Spring?
- 如何用基於 Java 配置的方式配置 Spring?
- 怎樣用註解的方式配置 Spring?
- 請解釋 Spring Bean 的生命周期?
- Spring Bean 的作用域之間有什麼區別?
- 什麼是 Spring inner beans?
- Spring 框架中的單例 Beans 是線程安全的麼?
- 請舉例說明如何在 Spring 中注入一個 Java Collection?
- 如何向 Spring Bean 中注入一個 Java.util.Properties?
- 請解釋 Spring Bean 的自動裝配?
- 請解釋自動裝配模式的區別?
- 如何開啟基於註解的自動裝配?
- 請舉例解釋@Required 註解?
- 請舉例解釋@Autowired 註解?
- 請舉例說明@Qualifier 註解?
- 構造方法注入和設值注入有什麼區別?
- Spring 框架中有哪些不同類型的事件?
- FileSystemResource 和 ClassPathResource 有何區別?
- Spring 框架中都用到了哪些設計模式?
springbobt 22題常見面試問題
- 什麼是 Spring Boot
- Spring Boot 有哪些優點
- Spring Boot 的優點有
- Spring Boot 的優點有
- 如何重新加載 Spring Boot 上的更改,而無需重新啟動伺服器
- Spring Boot 中的監視器是什麼
- 如何在 Spring Boot 中禁用 Actuator 端點安全性
- 如何在自定義埠上運行 Spring Boot 應用程式
- 什麼是 YAML
- 如何實現 Spring Boot 應用程式的安全性
- 如何實現 Spring Boot 應用程式的安全性
- 如何使用 Spring Boot 實現分頁和排序
- 什麼是 Swagger?你用 Spring Boot 實現了它嗎
- 什麼是 Spring Profiles
- 什麼是 Spring Batch
- 什麼是 FreeMarker 模板
- 什麼是 FreeMarker 模板
- 什麼是 FreeMarker 模板
- 什麼是 CSRF 攻擊
- 什麼是 CSRF 攻擊
- 什麼是 AOP
- 什麼是 Apache Kafka
Redis
- 什麼是 Redis?簡述它的優缺點
- 什麼是 Redis?簡述它的優缺點
- redis 可以持久化其數據 redis 可以持久化其數據
- Redis 主要消耗什麼物理資源
- Redis 有哪幾種數據淘汰策略
- Redis 官方為什麼不提供 Windows 版本
- 一個字符串類型的值能存儲最大容量是多少
- 為什麼 Redis 需要把所有數據放到內存中
- Redis 集群方案應該怎麼做?都有哪些方案
- Redis 集群方案什麼情況下會導致整個集群不可用
- MySQL 里有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中的數據都是熱點數據
- Redis 有哪些適合的場景
- Redis 支持的 Java 客戶端都有哪些?官方推薦用哪個
- Redis 和 Redisson 有什麼關係
- Jedis 與 Redisson 對比有什麼優缺點
- 說說 Redis 哈希槽的概念
- Redis 集群的主從複製模型是怎樣的
- Redis 集群會有寫操作丟失嗎?為什麼
- Redis 集群之間是如何複製的
- Redis 集群最大節點個數是多少
- Redis 集群如何選擇資料庫
- Redis 中的管道有什麼用
- 怎麼理解 Redis 事務
- Redis 事務相關的命令有哪幾個
- Redis key 的過期時間和永久有效分別怎麼設置
- Redis 如何做內存優化
- Redis 回收進程如何工作的
- 加鎖機制
- 鎖互斥機制
- watch dog 自動延期機制
- 可重入加鎖機制
- 釋放鎖機制
- 上述 Redis 分布式鎖的缺點
- 使用過 Redis 分布式鎖麼,它是怎麼實現的
- 使用過 Redis 做異步隊列麼,你是怎麼用的?有什麼缺點
- 什麼是緩存穿透?如何避免?什麼是緩存雪崩?何如避免
並發編程28題
- Synchronized 用過嗎,其原理是什麼?
- 你剛才提到獲取對象的鎖,這個「鎖」到底是什麼?如何確定對象的鎖?
- 什麼是可重入性,為什麼說 Synchronized 是可重入鎖?
- JVM 對 Java 的原生鎖做了哪些優化?48
- 為什麼說 Synchronized 是非公平鎖?49
- 什麼是鎖消除和鎖粗化?49
- 為什麼說 Synchronized 是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是 CAS,它有什麼特性?
- 樂觀鎖一定就是好的嗎?
- 跟 Synchronized 相比,可重入鎖 ReentrantLock 其實現原理有什麼不同?
- 那麼請談談 AQS 框架是怎麼回事兒?
- 請儘可能詳盡地對比下 Synchronized 和 ReentrantLock 的異同。
- ReentrantLock 是如何實現可重入性的?
- 除了 ReetrantLock,你還接觸過 JUC 中的哪些並發工具?
- 請談談 ReadWriteLock 和 StampedLock。
- 如何讓 Java 的線程彼此同步?你了解過哪些同步器?請分別介紹下。
- CyclicBarrier 和 CountDownLatch 看起來很相似,請對比下呢?
- Java 線程池相關問題
- Java 中的線程池是如何實現的?
- 創建線程池的幾個核心構造參數?
- 線程池中的線程是怎麼創建的?是一開始就隨著線程池的啟動創建好的嗎?
- 既然提到可以通過配置不同參數創建出不同的線程池,那麼 Java 中默認實現好的線程池又有哪些呢?請比較它們的異同
- 如何在 Java 線程池中提交線程?
- 什麼是 Java 的內存模型,Java 中各個線程是怎麼彼此看到對方的變量的?
- 請談談 volatile 有什麼特點,為什麼它能保證變量對所有線程的可見性?
- 既然 volatile 能夠保證線程間的變量可見性,是不是就意味著基於 volatile 變量的運算就是並發安全的?
- 請對比下 volatile 對比 Synchronized 的異同。
- 請談談 ThreadLocal 是怎麼解決並發安全的?
- 很多人都說要慎用 ThreadLocal,談談你的理解,使用 ThreadLocal 需要注意些什麼?
MySQL 性能優化的 21 個最佳實踐
- 為查詢緩存優化你的查詢
- EXPLAIN 你的 SELECT 查詢
- 當只要一行數據時使用 LIMIT 1
- 為搜索欄位建索引
- 在 Join 表的時候使用相當類型的例,並將其索引
- 千萬不要 ORDER BY RAND()
- 避免 SELECT *
- 永遠為每張表設置一個 ID
- 使用 ENUM 而不是 VARCHAR
- 從 PROCEDURE ANALYSE() 取得建議
- 儘可能的使用 NOT NULL
- Prepared Statements
- 無緩衝的查詢
- 把 IP 地址存成 UNSIGNED INT
- 固定長度的表會更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 語句
- 越小的列會越快
- 選擇正確的存儲引擎
- 選擇正確的存儲引擎
- 小心「永久連結」
ZooKeeper面試題目
- ZooKeeper 是什麼?
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統
- 四種類型的 znode
- Zookeeper 通知機制
- Zookeeper 做了什麼?
- zk 的命名服務(文件系統)
- zk 的配置管理(文件系統、通知機制)
- Zookeeper 集群管理(文件系統、通知機制)
- Zookeeper 分布式鎖(文件系統、通知機制)
- 獲取分布式鎖的流程
- Zookeeper 隊列管理(文件系統、通知機制)
- Zookeeper 數據複製
- Zookeeper 工作原理
- zookeeper 是如何保證事務的順序一致性的?
- Zookeeper 下 Server 工作狀態
- zookeeper 是如何選取主 leader 的?
- Zookeeper 同步流程
- 分布式通知和協調
- 機器中為什麼會有 leader?
- zk 節點宕機如何處理?
- zookeeper 負載均衡和 nginx 負載均衡區別
- zookeeper watch 機制
Tomcat 面試題
- Tomcat 的預設埠是多少,怎麼修改?
- tomcat 有哪幾種 Connector 運行模式(優化)?
- Tomcat 有幾種部署方式?
- tomcat 容器是如何創建 servlet 類實例?用到了什麼原理
- tomcat 如何優化?
- 內存調優
- 垃圾回收策略調優
- 共享 session 處理
- 專業點的分析工具有
- 添加 JMS 遠程監控
- 關於 Tomcat 的 session 數目
- 監視 Tomcat 的內存使用情況
- 列印類的加載情況及對象的回收情況
- Tomcat 一個請求的完整過程
- Tomcat 工作模式?
最後
由於這套面試題涉及的範圍很泛,很廣,很雜,大家不可能一天兩天就看完和學完,即使你已經學過了有關的技術,那麼至少也需要一個月的時間才能消化和掌握,所以,大家應該早作準備,從拿到這套面試題之日起,就要堅持在每天閒暇之餘學習其中幾道題目,日積月累,等到出去面試時,一切都水到渠成,面試時就自然會遊刃有餘了。
答題時,先答是什麼,再答有什麼作用和要注意什麼(這部分最重要,展現自己的心得)
答案的段落分別,層次分明,條理清晰都非常重要,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。
要講你做出答案的思路過程,或者說你記住答案的思想都寫下來。把答題想著是辯論賽。答題就是給別人講道理、擺事實。答題不局限於什麼格式和形式,就是要將自己的學識展現出來!
別因為人家題目本來就模稜兩可,你就心裡膽怯和沒底氣了,不敢回答了。你要大膽地指出對方題目很模糊和你的觀點,不要把面試官想得有多高,其實他和你就是差不多的,你想想,如果他把你招進去了,你們以後就是同事了,可不是差不多的嗎?
關於就業薪水,如果你是應屆生,那不能要高工資,好比大餅的故事,沒有文憑還想拿高工資,就去中關村缺什麼補什麼吧!少數人基礎確實很好,在校期間確實又做過一些項目,那仍然是可以要到相對高的工資的。
最後由於篇幅原因,在這就不做全部展示了,這些題我已經整理成pdf文檔免費分享給那些有需要的朋友,同時整理也花費了蠻多時間,有需要的朋友可以幫忙轉發分享下然後私信關鍵詞【面試資料】即可獲取免費領取方式!
更多學習資料分享