2019年Java面試指南

java語言和設計模式考察點(必要問題)

1.基本概念和基本原理
2.實現方式與使用姿勢
3.經常用到的知識點
4.實際應用中容易犯錯的點

加分項
1.知識點與典型的業務場景關聯
2.以反例來描述實際場景中誤用的危害
3.與知識點相關的優化點
4.與知識點相關的最新技術趨勢
5.在瞭解的前提下,儘量增加回答內容深度

面試題目

1.進程與線程的區別與聯繫
2.簡單介紹一下進程的切換過程
3.你經常使用哪些 Linux命令,主要用來解決什麼問題?
4.爲什麼TCP建連需要3次握手而斷連需要45.爲什麼TCP關閉鏈接時需要 TIME WAIT狀態,爲什麼要等2MSL?
6.一次完整的HTTP請求過程是怎樣的

JVM考察點

1.深入理解VM內存模型
2.瞭解類加載機制
3.瞭解內存可見性
4.瞭解常用的GC算法實現和適用場景
5.能夠根據業務場景選擇合適兒M參數與GC算法

加分項

1.編譯器優化
2.問題排查經驗與思路
3.VM調優經驗和調優思路
4.瞭解最新的技術趨勢(例如ZGC、 Graalvn)

面試題目

1.簡單描述一下VM的內存模型
2.什麼情況下會觸發 FULLGC?
3.Java類加載器有幾種,關係是怎樣的?
4.雙親委派機制的加載流程是怎樣的,有什麼好處?
5.1.8爲什麼用 Metaspace替換掉 Permgen? Metaspacef保存在哪裏
6.編譯期會對指令做哪些優化?(簡單描述編譯器的指令重排)
7.簡單描述一下 volatiles可以解決什麼問題?如何做到的?
8.簡單描述一下GC的分代回收
9.G1垃圾回收算法與CMS的區別有哪些?
10.對象引用有哪幾種方式,有什麼特點?
11.使用過哪些VM調試工具,主要分析哪些內容?

併發和多線程考察點

1.理解線程的同步與互斥的原理
2.掌握線程安全相關機制
3.瞭解JUC工具的使用場景與實現原理
4.熟悉線程池的原理、使用場景、常用配置
5.理解線程的同步與異步、阻塞與非阻塞

加分項

1.結合實際項目經驗或實際案例介紹原理
2.解決多線程問題的排查思路與經驗
3.熟悉常用的線程分析工具與方法
4.瞭解Java8對J∪C的增強
5.瞭解 Reactive!異步編程思想

面試題目

1.如何實現一個生產者與消費者模型?(鎖、信號量、線程通信、阻塞隊列等)
2.如何理解線程的同步與異步、阻塞與非阻塞?
3.線程池處理任務的流程是怎樣的
4.Wait與 sleep的有什麼不同?
5.Synchronized和 Reentrantlock有什麼不同?各適合什麼場景?
6.讀寫鎖適用於什麼場景? Reentrantreadwritelock是如何實現的
7.線程之間如何通信?
8.保證線程安全的方法有哪些?
9.如何儘可提高多線程併發性能?
10.Threadlocall用來解決什麼問題? Threadlocalk是如何實現的?
11.死鎖的產生條件?如何分析是否有線程死鎖?
12.在實際工作中遇到過什麼樣的併發問題,如何發現(排查)並解決的?

數據結構和算法考察點

1.瞭解基本數據結構及特點
2.表、棧、隊列、樹需要熟練掌握,深刻理解使用場景
3.瞭解常用的搜索、排序算法,及複雜度和穩定性
4.瞭解常用的字符串處理算法
5.能夠分析算法實現的複雜度
6.瞭解常用算法分類,解決問題的思路和解決哪類問題

加分項

1.能夠將數據結構與實際使用場景結合
2.不同算法在業務場景中的應用
3.面對模糊的題目能溝通確認條件和邊界
4.書寫算法代碼前,先講一下解題思路
5.能夠發現解答中的一些問題,給出改進的思路

常用工具考察點

1.瞭解常用的VM分析工具
2.掌握Git的常用操作和工作流
3.瞭解 Linux系統下常用的分析工具

加分項

1.能夠主動出擊體現知識廣度
2.能夠體現實戰能力

框架考察點

1.掌握 Spring的IOC、AOP的概念與實現
2.掌握 Springe的 Context創建流程和Bean的生命週期
3瞭解 Spring常用註解的作用與使用方式
4.瞭解 Spring Boot的相關知識點
5.掌握Netty的線程處理模型
6.知道常用RPC框架的特點
7瞭解 Mybatis、 Hibernate的實現原理

加分項

1.閱讀過框架源碼,瞭解實現細節及思路
2.除了會應用,還能夠理解理念
3.瞭解最新實現或方向
4.有實際優化經驗,例如nety性能調優

面試題

1.SSH和SSM框架組合的區別是什麼?
2.能描述一下 Spring Context初始化的整個流程嗎?
3.簡單介紹一下Bean的生命週期及作用域。
4.Spring配置中的 placeholder佔位符是如何替換的?有什麼辦法可以實現自定義的配置替換?
5.Spring MVCE的工作流程是怎樣的?
6.Springs如何解決循環依賴?
7.Bean的構造方法、@ Postconstruct註解、 Initializing Bean、init- methodl的執行順序是怎樣的?
8.說說 Netty中有哪些重要的對象,它們之間的關係是什麼?
9.RPC與HTP的區別是什麼,什麼場景適合選用RPC,什麼場景適合使用HTTP?
10.RPC的交互流程是怎樣的?
11.請介紹一下 Myatis的緩存機制。
12.Mybatis如何配置動態SQL?有哪些動態SQL標籤?

緩存考察點

1.瞭解緩存的使用場景,不同類型緩存的使用方式
2.掌握MC和 Redise的常用命令
3.瞭解MC和 Redis?在內存中的存儲結構
4.瞭解MC和 Redist的數據失效方式和剔除策略
5.瞭解 Redise的持久化、主從同步與 clusteri部署的原理

加分項
1.結合實際應用場景來介紹緩存的使用
2.有過分佈式緩存設計和應用經驗
3.瞭解緩存使用中可能產生的問題
4.知道 Redise的典型應用場景
5.知道 Redis的新特性

面試題

1.Redisi和 Memcache有什麼區別?該如何選用?
2.你用到過哪些 Redisl的數據結構?用在什麼場景下?
2.Redis有哪些持久化方式,區別是什麼?
3.Redise的過期機制是怎樣的? Redis有哪些淘汰策略?
5.如何保證 Redis的高併發和高可用?
6.如何使用 Redis?實現延時隊列?如如何使用 Redis實現分佈式鎖?

中間件和Mysql考察點

1.瞭解消息隊列、數據庫的基本原理和常用隊列、數據庫的特點。
2.瞭解 Kafka的架構和消息處理流程
3.理解數據庫事務的ACID特性和隔離級別
4.掌握常用的MSQL語句,和常用函數
5.瞭解MySQL數據庫不同引擎的特點及不同類型的索引實現

加分項

瞭解新特性
1.知知道數據庫表設計原則、有設計經驗
2.有過數據庫調優經驗
3.消息隊列使用經驗,不同場景下的取捨

面試題

1.使用過消息隊列嗎?在什麼場景使用的?用來解決什麼問題?
2.使用隊列時如何保證可靠性?
3.MQ有可能發生重複消費嗎,如何解決?
4.在數據庫中查詢語句速度很慢,如何優化
5.數據庫事務有哪些特性?事務的隔離級別有哪幾種?
6.如何對SQL語句進行優化?

分佈式和項目技術

表達溝通
1.分佈式架構的理解
2.瞭解系統優化的常用方法
3.對工作的熟悉程度
4.解決問題能力

加分項

1.關注業界最新趨勢
2.如果有方案對比選型會更好

項目介紹

1.交代背景:STAR法則
2.描述架構:架構圖或交互流程圖
3.做了什麼:重點突出
4.結果如何:用實例佐證
5.如何改進:存在的問題與解決方法

準備前的技巧

提前思考、提前準備
項目在精不在多
我瞭解的,就是我的
體現對架構的理解,對設計的思考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章