本文轉載自:Java程序員2020剛開始找工作就碰壁?建議看完這份春招面試大綱
前言
一年之計在於春 金三銀四已經要到來,2019的新的開始,作爲一個開發人員,你是否面上了自己理想的公司,薪資達到心中理想的高度?
面試:如果不準備充分的面試,完全是浪費時間,更是對自己的不負責。
今天給大家分享下我整理的Java架構面試專題及答案,其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裏所列的肯定不可能覆蓋全部方式,不過也希望能對即將找工作的朋友起到一些幫助!
Java面試的重點:
數據結構與算法,JVM內存結構、垃圾回收器、回收算法、GC、併發編程相關(多線程、線程池等)、NIO/BIO、性能優化、設計模式、Spring框架:分佈式相關:Redis緩存、一致Hash算法、分佈式存儲、負載均衡等,微服務以及Docker容器等。在這由於文字很多,總結了java面試所涉及到的常問範圍及常問面試題免費分享給大家
面試常問的面試專題
一、JVM與性能優化
- 描述一下 JVM 加載 Class 文件的原理機制?
- 什麼是類加載器?
- 類加載器有哪些?
- 什麼是tomcat類加載機制?
- 類加載器雙親委派模型機制?
- Java 內存分配?
- Java 堆的結構是什麼樣子的?
- 簡述各個版本內存區域的變化?
- 說說各個區域的作用?
- Java 中會存在內存泄漏嗎,簡述一下?
- Java 類加載過程?
- 什麼是GC? 爲什麼要有 GC?
- 簡述一下Java 垃圾回收機制?
- 如何判斷一個對象是否存活?
- 垃圾回收的優點和原理,並考慮 2 種回收機制?基本原理是什麼?
- 深拷貝和淺拷貝?
- 什麼是分佈式垃圾回收(DGC)?它是如何工作的?
- 在 Java 中,對象什麼時候可以被垃圾回收?
- 簡述Minor GC 和 Major GC?
- Java 中垃圾收集的方法有哪些?
- 講講你理解的性能評價及測試指標?
- 常用的性能優化方式有哪些?
- 說說分佈式緩存和一致性哈希?
- 什麼是GC調優?
二、Redis
- redis數據結構有哪些?
- Redis緩存穿透,緩存雪崩?
- 如何使用Redis來實現分佈式鎖?
- Redis的併發競爭問題如何解決?
- Redis持久化的幾種方式,優缺點是什麼,怎麼實現的?
- Redis的緩存失效策略?
- Redis集羣,高可用,原理?
- Redis緩存分片?
- Redis的數據淘汰策略?
- redis隊列應用場景?
- 分佈式使用場景(儲存session)?
三、網絡編程
- TCP建立連接和斷開連接的過程?
- HTTP協議的交互流程• HTTP和HTTPS的差異,SSL的交互流程?
- TCP的滑動窗口協議有什麼用?
- HTTP協議都有哪些方法?
- Socket交互的基本流程?
- 講講tcp協議(建連過程,慢啓動,滑動窗口,七層模型)?
- webservice協議(wsdl/soap格式,與restt辦議的區別)?
- 說說Netty線程模型,什麼是零拷貝?
- TCP三次握手、四次揮手?
- DNS解析過程?
- TCP如何保證數據的可靠傳輸的?
四、設計模式與重構
- 說說幾個常見的設計模式(23種設計模式)?
- 設計一個工廠的包的時候會遵循哪些原則?
- 列舉一個使用了 Visitor/ Decorator模式的開源項目/庫?
- 如何實現一個單例?
- 代理模式(動態代理)?
- 單例模式(懶漢模式,惡漢模式,併發初始化如何解決, volatile與lock的使用)?
- JDK源碼裏面都有些什麼讓你印象深刻的設計模式使用,舉例看看?
五、分佈式
- 什麼是CAP定理?
- 說說CAP理論和BASE理論?
- 什麼是最終一致性?最終一致性實現方式?
- 什麼是一致性Hash?
- 講講分佈式事務?
- 如何實現分佈式鎖?
- 如何實現分佈式 Session?
- 如何保證消息的一致性?
- 負載均衡的理解?
10 正向代理和反向代理? - CDN實現原理?
- 怎麼提升系統的QPS和吞吐?
- Dubbo的底層實現原理和機制?
- 描述一個服務從發佈到被消費的詳細過程?
- 分佈式系統怎麼做服務治理?
- 消息中間件如何解決消息丟失問題?
- Dubbo的服務請求失敗怎麼處理?
- 對分佈式事務的理解?
- 如何實現負載均衡,有哪些算法可以實現?
- Zookeeper的用途,選舉的原理是什麼?
- 講講數據的垂直拆分水平拆分?
- zookeeper原理和適用場景?
- zookeeper watch機制?
- redis/zk節點宕機如何處理?
- 分佈式集羣下如何做到唯一序列號?
- 用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連接是線程安全的嗎?
- MQ系統的數據如何保證不丟失?
- 列舉出能想到的數據庫分庫分表策略?
六、數據結構與算法
- 鏈表與數組?
- 隊列和棧,出錢與入棧?
- 鏈表的刪除、插入、反向?
- Hash表的hash函數,衝突解決方法有哪些?
- 各種俳序:冒泡、選擇、插入、希爾、歸併、快排、堆俳、桶排、基數的原理、平均時間複雜度、最壞時間複雜度、空間複雜度、是否穩定?
- 對冒泡與快排的改進?
- 二分查找,與變種二分查找?
- 二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹?
- 二叉樹的前中後續遍歷:遞歸與非遞歸寫法,層序遍歷算法?
- KMP算法?
- 排列組合問題?
- 貪心算法、分治算法?
七、併發編程
- 跟 Synchronized 相比,可重入鎖 ReentrantLock 其實現原理有什麼不同?
- 那麼請談談 AQS 框架是怎麼回事兒?
- 請儘可能詳盡地對比下 Synchronized 和 ReentrantLock 的異同。
- ReentrantLock 是如何實現可重入性的?
- 除了 ReetrantLock,你還接觸過 JUC 中的哪些併發工具?
- 請談談 ReadWriteLock 和 StampedLock。
- 如何讓 Java 的線程彼此同步?你瞭解過哪些同步器?請分別介紹下。
- CyclicBarrier 和 CountDownLatch 看起來很相似,請對比下呢?
- Synchronized 用過嗎,其原理是什麼?
- 你剛纔提到獲取對象的鎖,這個“鎖”到底是什麼?如何確定對象的鎖?
- 什麼是可重入性,爲什麼說 Synchronized 是可重入鎖?
- JVM 對 Java 的原生鎖做了哪些優化?
- 爲什麼說 Synchronized 是非公平鎖?
- 什麼是鎖消除和鎖粗化?
- 爲什麼說 Synchronized 是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是
- 樂觀鎖一定就是好的嗎?
- 什麼是 Java 的內存模型,Java 中各個線程是怎麼彼此看到對方的變量的?
- 請談談 volatile 有什麼特點,爲什麼它能保證變量對所有線程的可見性?
- 請對比下 volatile 對比 Synchronized 的異同。
- 請談談 ThreadLocal 是怎麼解決併發安全的?
- 很多人都說要慎用 ThreadLocal,談談你的理解,使用 ThreadLocal 需要注意些什麼?
- Java 中的線程池是如何實現的?
- 創建線程池的幾個核心構造參數?
- 線程池中的線程是怎麼創建的?
- 如何在 Java 線程池中提交線程?
八、開源框架
- IOC和DI是什麼?
- Spring IOC的理解,其初始化過程?
- BeanFactory 和 FactoryBean的區別?
- BeanFactory和ApplicationContext的區別?
- ApplicationContext上下文的生命週期?
- Spring Bean的生命週期?
- Spring AOP的實現原理?
- Spring是如何管理事務的,事務管理機制?
- Spring的不同事務傳播行爲有哪些,幹什麼閈的?
- Spring中用到了那些設計模式?
- Spring MVC的工作原理?
- Spring如何解決循環依賴?
- Spring如何保證Controller併發的安全?
九、數據庫
- 事務四大特性(ACID)?
- 數據庫隔離級別,每個級別會引發什麼問題,mysql默認是哪個級別?
- innodb和myisam存儲引擎的區別?
- MYSQL的兩種存儲引擎區別(事務、鎖級別等等),各自的適用場景?
- 查詢語句不同元素(where、jion、limit, group by、having等等)執行先後順序?
- 數據庫的優化(sql語句優化和索引)?
- 索引有B+索引和hash索引,各自的區別?
- B+索引數據結構,和B樹的區別?
- 索引的分類(主鍵索引、唯一索引),最左前綴原則,哪些情況索引會失效?
- 聚集索引和非聚集索引區別
- 有哪些鎖(樂觀鎖悲觀鎖),select時怎麼加排它鎖?
- 關係型數據庫和非關係型數據庫區別?
- 數據庫三範式,根據某個場費設計數據表?
- 數據庫的讀寫分離、主從複製?
- 使用explain優化sql和索引?
- long_query怎麼解決?
- 死鎖判定原理和具體場景,死鎖怎麼解決?
- varchar和char的使用場景?
- mysql併發情況下怎麼解決(通過事務、隔離級別、鎖)?
- 數據庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌) ?
十、微服務
- 什麼是微服務?
- 微服務之間是如何獨立通訊的?
- springCloud和dubbo 有哪些區別?
- springboot和springcloud,請談談對它們的理解?
- 什麼是微服務熔斷?什麼是服務降級?
- 微服務的優缺點分別是什麼?說下在項目開發中碰到的問題?
- 你所知道的微服務技術棧有哪些?
- eureka和zookeeper都可以提供服務的註冊和發現的功能,請說說兩者的區別?