跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技術原因(影響自己的發展,偏移自己規劃的軌跡),還是錢給少了,不受重視。
準備不充分的面試,完全是浪費時間,更是對自己的不負責(如果title很高,當我沒說)。
今天給大家分享下之前的同學在這次跳槽中整理的Java面試大綱,其中大部分都是面試過程中的面試題,可以對照這查漏補缺,當然了,這里所列的肯定不可能覆蓋全部方式。
項目介紹
大部分情況,這是一場面試的開門題,面試官問這個問題,主要是考察你的概述能力和全局視野。有的人經常抱怨自己每天在堆業務,但沒有成長。事實上,很多情況下確實在堆業務,但并不是沒有成長的。并非做中間件或者技術架構才是成長,例如我們的需求分析能力,溝通協作能力,產品思維能力,抽象建模能力等都是一個非常重要的硬實力。
好的,現在進入正文。
- 明確項目是做什么的
- 明確項目的價值。(為什么做這個項目,它解決了用戶什么痛點,它帶來什么價值?)
- 明確項目的功能。(這個項目涉及哪些功能?)
- 明確項目的技術。(這個項目用到哪些技術?)
- 明確個人在項目中的位置和作用。(你在這個項目的承擔角色?)
- 明確項目的整體架構。
- 明確項目的優缺點,如果重新設計你會如何設計。
- 明確項目的亮點。(這個項目有什么亮點?)
- 明確技術成長。(你通過這個項目有哪些技術成長?)
Java基礎
- List 和 Set 的區別
- HashSet 是如何保證不重復的
- HashMap 是線程安全的嗎,為什么不是線程安全的(最好畫圖說明多線程環境下不安全)?
- HashMap 的擴容過程
- HashMap 1.7 與 1.8 的 區別,說明 1.8 做了哪些優化,如何優化的?
- final finally finalize
- 強引用 、軟引用、 弱引用、虛引用
- Java反射
- Arrays.sort 實現原理和 Collection 實現原理
- LinkedHashMap的應用
- cloneable接口實現原理
- 異常分類以及處理機制
- wait和sleep的區別
- 數組在內存中如何分配
Java 并發
- synchronized 的實現原理以及鎖優化?
- volatile 的實現原理?
- Java 的信號燈?
- synchronized 在靜態方法和普通方法的區別?
- 怎么實現所有線程在等待某個事件的發生才會去執行?
- CAS?CAS 有什么缺陷,如何解決?
- synchronized 和 lock 有什么區別?
- Hashtable 是怎么加鎖的 ?
- HashMap 的并發問題?
- ConcurrenHashMap 介紹?1.8 中為什么要用紅黑樹?
- AQS
- 如何檢測死鎖?怎么預防死鎖?
- Java 內存模型?
- 如何保證多線程下 i++ 結果正確?
- 線程池的種類,區別和使用場景?
- 分析線程池的實現原理和線程的調度過程?
- 線程池如何調優,最大數目如何確認?
- ThreadLocal原理,用的時候需要注意什么?
- CountDownLatch 和 CyclicBarrier 的用法,以及相互之間的差別?
- LockSupport工具
- Condition接口及其實現原理
- Fork/Join框架的理解
- 分段鎖的原理,鎖力度減小的思考
- 八種阻塞隊列以及各個阻塞隊列的特性
Spring
- BeanFactory 和 FactoryBean?
- Spring IOC 的理解,其初始化過程?
- BeanFactory 和 ApplicationContext?
- Spring Bean 的生命周期,如何被管理的?
- Spring Bean 的加載過程是怎樣的?
- 如果要你實現Spring AOP,請問怎么實現?
- 如果要你實現Spring IOC,你會注意哪些問題?
- Spring 是如何管理事務的,事務管理機制?
- Spring 的不同事務傳播行為有哪些,干什么用的?
- Spring 中用到了那些設計模式?
- Spring MVC 的工作原理?
- Spring 循環注入的原理?
- Spring AOP的理解,各個術語,他們是怎么相互工作的?
- Spring 如何保證 Controller 并發的安全?
Netty
- BIO、NIO和AIO
- Netty 的各大組件
- Netty的線程模型
- TCP 粘包/拆包的原因及解決方法
- 了解哪幾種序列化協議?包括使用場景和如何去選擇
- Netty的零拷貝實現
- Netty的高性能表現在哪些方面
分布式相關
- Dubbo的底層實現原理和機制
- 描述一個服務從發布到被消費的詳細過程
- 分布式系統怎么做服務治理
- 接口的冪等性的概念
- 消息中間件如何解決消息丟失問題
- Dubbo的服務請求失敗怎么處理
- 重連機制會不會造成錯誤
- 對分布式事務的理解
- 如何實現負載均衡,有哪些算法可以實現?
- Zookeeper的用途,選舉的原理是什么?
- 數據的垂直拆分水平拆分。
- zookeeper原理和適用場景
- zookeeper watch機制
- redis/zk節點宕機如何處理
- 分布式集群下如何做到唯一序列號
- 如何做一個分布式鎖
- 用過哪些MQ,怎么用的,和其他mq比較有什么優缺點,MQ的連接是線程安全的嗎
- MQ系統的數據如何保證不丟失
- 列舉出你能想到的數據庫分庫分表策略;分庫分表后,如何解決全表查詢的問題
- zookeeper的選舉策略
- 全局ID
數據庫
- mysql分頁有什么優化
- 悲觀鎖、樂觀鎖
- 組合索引,最左原則
- mysql 的表鎖、行鎖
- mysql 性能優化
- mysql的索引分類:B+,hash;什么情況用什么索引
- 事務的特性和隔離級別
緩存
- Redis用過哪些數據數據,以及Redis底層怎么實現
- Redis緩存穿透,緩存雪崩
- 如何使用Redis來實現分布式鎖
- Redis的并發競爭問題如何解決
- Redis持久化的幾種方式,優缺點是什么,怎么實現的
- Redis的緩存失效策略
- Redis集群,高可用,原理
- Redis緩存分片
- Redis的數據淘汰策略
JVM
- 詳細jvm內存模型
- 講講什么情況下回出現內存溢出,內存泄漏?
- 說說Java線程棧
- JVM 年輕代到年老代的晉升過程的判斷條件是什么呢?
- JVM 出現 fullGC 很頻繁,怎么去線上排查問題?
- 類加載為什么要使用雙親委派模式,有沒有什么場景是打破了這個模式?
- 類的實例化順序
- JVM垃圾回收機制,何時觸發MinorGC等操作
- JVM 中一次完整的 GC 流程(從 ygc 到 fgc)是怎樣的
- 各種回收器,各自優缺點,重點CMS、G1
- 各種回收算法
- OOM錯誤,stackoverflow錯誤,permgen space錯誤
總結
在以往的面試經歷中總結了一些經驗,其實當你面試到一個水平相對較高的職位時,往往較量的技術方面已經是其次,大部分公司在與你聊完技術之后,更看重你的溝通能力、解決問題的能力、以及你以往的一些比較成功的經歷。
面試不光是這些準備不光包括技術,還有你對公司的了解,這是在HR這關更看重的,他們想找的不光是技術大拿,更重要的事可以跟公司共同進步的伙伴,所以當你真正開始面試,那么就要拿出自己的真誠,讓HR感受到你對公司的興趣、熱情和自信,從談吐上表現出果斷和堅定往往會是很多招聘人事更加青睞的。如果你對某一個公司很感興趣并且技術通關了,那么如何才能在多個選擇中讓公司選擇你,那就是可以讓HR在和你的交流中感覺到愉快和流暢,這點事相當重要的,可以勝任一份工作的人很多,但是能夠在溝通上略勝一籌,那么這份工作一定會是非你莫屬!
最后針對上面的高頻常問面試題我還總結出了各大互聯網公司java程序員面試涉及到的絕大部分面試題及答案做成了文檔和學習筆記文件以及架構視頻資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發等架構技術資料),希望能幫助到您面試前的復習且找到一個好的工作,也節省大家在網上搜索資料的時間來學習,也可以關注我一下以后會有更多干貨分享。
資料領取方式:加入粉絲群963944895
,私信管理員即可
?關注+轉發后,私信關鍵詞 【架構資料】即可獲取!
工作1-5年開發經驗,當你們提出漲工資的時候,或者要offer的時候底氣怎么樣,是不是底氣十足,不給漲工資就辭職,是不是有自信提出來主管、或者是項目經理都能同意,他們相當設法把你留住。如果這樣你才是成功。什么技術都沒有何談工資!
給你分析一下這些技術,給大家羅列一些技術,看你有沒有學到這些技術。
架構師筑基
開源框架解析
高性能架構
微服務架構
團隊協作開發
B2C商城項目實戰
寫在最后:
既然看到這里了,覺得筆者寫的還不錯的就點個贊,加個關注唄!點關注,不迷路,持續更新!!!