詳解Kafka生產者和消費者的工作原理!太完整了!
正文
如果你參加過一些大廠面試,肯定會遇到一些開放性的問題:
1、 寫一段程式,讓其執行時的表現為觸發了5次Young GC、3次Full GC、然後3次Young GC;
2、 如果一個Java程序突然消失了,你會怎麼去排查這種問題?
3、 給了一段Spring載入Bean的程式碼片段,闡述一下具體的執行流程?
是不是看上去很難,是不是和自己準備的“題庫”中的問題不一樣?不知道從何處下手?如果你有這種感覺,那麼說明你的技術還需要繼續修煉。
面對如此多的技術面試,怎麼樣才能說自己的技術已經過關了呢?
只有問題沒有參考答案,需要各位小夥伴下來逐一學習!
一、開場白
簡單的介紹一下自己的工作經歷與職責,在校或者工作中主要的工作內容,主要負責的內容;(你的資訊一清二白的寫在簡歷上,這個主要為了緩解面試者的壓力)
介紹下自己最滿意的,有技術亮點的專案或平臺,重點介紹下自己負責那部分的技術細節;(主要考察應聘者對自己做過的事情是否有清晰的描述,判斷做的事情的複雜度)
二、Java多執行緒
- 執行緒池的原理,為什麼要建立執行緒池?建立執行緒池的方式;
- 執行緒的生命週期,什麼時候會出現僵死程序;
- 說說執行緒安全問題,什麼實現執行緒安全,如何實現執行緒安全;
- 建立執行緒池有哪幾個核心引數? 如何合理配置執行緒池的大小?
- volatile、ThreadLocal的使用場景和原理;
- ThreadLocal什麼時候會出現OOM的情況?為什麼?
- synchronized、volatile區別、synchronized鎖粒度、模擬死鎖場景、原子性與可見性;
三、JVM相關
- JVM記憶體模型,GC機制和原理;
- GC分哪兩種,Minor GC 和Full GC有什麼區別?什麼時候會觸發Full GC?分別採用什麼演算法?
- JVM裡的有幾種classloader,為什麼會有多種?
- 什麼是雙親委派機制?介紹一些運作過程,雙親委派模型的好處;
- 什麼情況下我們需要破壞雙親委派模型;
- 常見的JVM調優方法有哪些?可以具體到調整哪個引數,調成什麼值?
- JVM虛擬機器記憶體劃分、類載入器、垃圾收集演算法、垃圾收集器、class檔案結構是如何解析的;
四、Java擴充套件篇
- 紅黑樹的實現原理和應用場景;
- NIO是什麼?適用於何種場景?
- Java9比Java8改進了什麼;
- HashMap內部的資料結構是什麼?底層是怎麼實現的?(還可能會延伸考察ConcurrentHashMap與HashMap、HashTable等,考察對技術細節的深入瞭解程度);
- 說說反射的用途及實現,反射是不是很慢,我們在專案中是否要避免使用反射;
- 說說自定義註解的場景及實現;
- List 和 Map 區別,Arraylist 與 LinkedList 區別,ArrayList 與 Vector 區別;
五、Spring相關
- Spring AOP的實現原理和場景?
- Spring bean的作用域和生命週期;
- Spring Boot比Spring做了哪些改進? Spring 5比Spring4做了哪些改進;
- 如何自定義一個Spring Boot Starter?
- Spring IOC是什麼?優點是什麼?
- SpringMVC、動態代理、反射、AOP原理、事務隔離級別;
六、中介軟體篇
- Dubbo完整的一次呼叫鏈路介紹;
- Dubbo支援幾種負載均衡策略?
- Dubbo Provider服務提供者要控制執行併發請求上限,具體怎麼做?
- Dubbo啟動的時候支援幾種配置方式?
- 瞭解幾種訊息中介軟體產品?各產品的優缺點介紹;
- 訊息中介軟體如何保證訊息的一致性和如何進行訊息的重試機制?
- Spring Cloud熔斷機制介紹;
- Spring Cloud對比下Dubbo,什麼場景下該使用Spring Cloud?
七、資料庫篇
- 鎖機制介紹:行鎖、表鎖、排他鎖、共享鎖;
- 樂觀鎖的業務場景及實現方式;
- 事務介紹,分散式事物的理解,常見的解決方案有哪些,什麼事兩階段提交、三階段提交;
- MySQL記錄binlog的方式主要包括三種模式?每種模式的優缺點是什麼?
- MySQL鎖,悲觀鎖、樂觀鎖、排它鎖、共享鎖、表級鎖、行級鎖;
- 分散式事務的原理2階段提交,同步\非同步\阻塞\非阻塞;
- 資料庫事務隔離級別,MySQL預設的隔離級別、Spring如何實現事務、JDBC如何實現事務、巢狀事務實現、分散式事務實現;
- SQL的整個解析、執行過程原理、SQL行轉列;
八、Redis
- Redis為什麼這麼快?redis採用多執行緒會有哪些問題?
- Redis支援哪幾種資料結構;
- Redis跳躍表的問題;
- Redis單程序單執行緒的Redis如何能夠高併發?
- Redis如何使用Redis實現分散式鎖?
- Redis分散式鎖操作的原子性,Redis內部是如何實現的?
九、其他
看過哪些原始碼?然後會根據你說的原始碼問一些細節的問題?(這裡主要考察面試者是否對技術有鑽研的精神,還是隻停留在表面,還是背了幾道面經,這個對於很多有強迫症的面試官,如果你連原始碼都沒看過,基本上是會pass掉的,比如我也是這樣的!)
十、最後
其實一步一步走過來,不單單隻靠面試之前刷題那麼簡單,更多的還是平時的積累。小編整理出一篇Java進階架構師之路的核心知識,同時也是面試時面試官必問的知識點,篇章也是包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多執行緒併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java演算法、資料庫、Zookeeper、分散式快取、資料結構等等
由於pdf文件裡的細節內容實在過多所以只編輯了部分知識點的章節粗略的介紹下,每個章節小節點裡面都有更細化的內容!以下就是部分章節目錄,由於頭條的篇幅限制目錄上的詳細講解也無法一一列出,文末底下有獲取以下章節的所有詳細知識講解。
JVM
- 執行緒
- JVM記憶體區域
- JVM執行時記憶體
- 垃圾回收與演算法
- JAVA 四種引用型別
- GC分代收集演算法 VS 分割槽收集演算法
- GC垃圾收集器
- JAVA IO/NIO
- JVM 類載入機制
JAVA集合
- 介面繼承關係和實現
- List
- ArrayList(陣列)
- Vector(陣列實現、執行緒同步)
- LinkList(連結串列)
- Set
- HashSet(Hash表)
- TreeSet(二叉樹)
JAVA多執行緒併發
- JAVA併發知識庫
- JAVA執行緒實現/建立方式
- 4種執行緒池
- 執行緒生命週期(狀態)
- 終止執行緒4種方式
- sleep與wait 區別
- start與run區別
- JAVA後臺執行緒
- JAVA鎖
- 執行緒基本方法4.1.11. 執行緒上下文切換
- 同步鎖與死鎖
- 執行緒池原理
- JAVA阻塞佇列原理
- CyclicBarrier、CountDownLatch、Semaphore的用法
- volatile關鍵字的作用(變數可見性、禁止重排序)
- 如何在兩個執行緒之間共享資料
JAVA基礎
- JAVA異常分類及處理
- JAVA反射
- JAVA註解
- JAVA內部類
- JAVA泛型
- JAVA序列化(建立可複用的Java物件)
- JAVA複製
Spring 原理
- Spring 特點
- Spring 核心元件
- Spring 常用模組
- Spring 主要包
- Spring 常用註解
- Spring第三方結合
- Spring IOC原理
- Spring APO原理
- Spring MVC原理
- Spring Boot原理
- JPA原理
- Mybatis快取
- Tomcat架構
由於篇幅限制小編,pdf文件的詳解資料太全面,細節內容實在太多啦,所以只把部分知識點截圖出來粗略的介紹,每個小節點裡面都有更細化的內容!有需要的程式猿(媛)可以關注我戳這裡,暗號:簡書”即可免費獲取
微服務
- 服務註冊發現
- API 閘道器
- 配置中心
- 事件排程(kafka)
- 服務跟蹤(starter-sleuth)
- 服務熔斷(Hystrix)
- Hystrix斷路器機制
- API管理
Netty 與RPC
- Netty 原理
- Netty 高效能
- Netty RPC實現
- 關鍵技術
- 核心流程
- 訊息編解碼
- 通訊過程
- RMI實現方式
分散式快取
- 快取雪崩
- 快取穿透
- 快取預熱
- 快取更新
- 快取降級
網路
- 網路7層架構
- TCP/IP原理
- TCP三次握手/四次揮手
- HTTP原理
- CDN 原理
- 分發服務系統
- 負載均衡系統
- 管理系統
日誌
- Slf4j
- Log4j
- LogBack
- Logback優點
- ELK
Zookeeper
- Zookeeper概念
- Zookeeper角色
- Zookeeper工作原理(原子廣播)
- Znode有四種形式的目錄節點
Kafka
- Kafka概念
- Kafka資料儲存設計
- partition的資料檔案(offset,MessageSize,data)
- 資料檔案分段segment(順序讀寫、分段命令、二分查詢)
- 資料檔案索引(分段索引、稀疏儲存)
- 生產者設計
- 負載均衡(partition會均衡分佈到不同broker上)
- 批量傳送
- 壓縮(GZIP或Snappy)
- 消費者設計
RabbitMQ
- RabbitMQ概念
- RabbitMQ架構
- Exchange 型別
Hbase
- Hbase概念
- 列式儲存
- Hbase核心概念
- Hbase核心架構
- Hbase的寫邏輯
- HBase vs Cassandra
- MongoDB
- MongoDB概念
- MongoDB特點
Cassandra
- Cassandra概念
- 資料模型
- Cassandra一致Hash和虛擬節點
- Gossip協議
- 資料複製
- 資料寫請求和協調者
- 資料讀請求和後臺修復
- 資料儲存(CommitLog、MemTable、SSTable)
- 二級索引(對要索引的value摘要,生成RowKey)
- 資料讀寫
設計模式
- 設計原則
- 工廠方法模式
- 抽象工廠模式
- 單例模式
- 建造者模式
- 原型模式
- 介面卡模式
- 裝飾器模式
- 代理模式
- 外觀模式
- 橋接模式
- 組合模式
- 享元模式
- 策略模式
- 模板方法模式
- 觀察者模式
- 迭代的模式
- 責任鏈模式
- 命令模式
- 備忘錄模式
負載均衡
- 四層負載均衡 vs 七層負載均衡
- 負載均衡演算法/策略
- LVS
- Keepalive
- Nginx反向代理負載均衡
- HAProxy
資料庫
- 儲存引擎
- 索引
- 資料庫三正規化
- 資料庫是事務
- 儲存過程(特定功能的SQL 語句集)
- 觸發器(一段能自動執行的程式)
- 資料庫併發策略
- 資料庫鎖
- 基於Redis分散式鎖
- 分割槽分表
- 兩階段提交協議
- 三階段提交協議
- 柔性事務
- CAP
一致性演算法
- Paxos
- Zab
- Raft
- NWR
- Gossip
- 一致性Hash
- 一致性Hash特性
- 一致性Hash原理
JAVA演算法
- 二分查詢
- 氣泡排序演算法
- 插入排序演算法
- 快速排序演算法
- 希爾排序演算法
- 歸併排序演算法
- 桶排序演算法
- 基數排序演算法
- 剪枝演算法
- 回溯演算法
- 最短路徑演算法
- 最大的陣列演算法
- 最長公共子序演算法
- 最小生成樹演算法
資料結構
- 棧(stack)
- 佇列(queue)
- 連結串列(Link)
- 散列表(Hash Table)
- 排序二叉樹
- 紅黑樹
- B-TREE
- 點陣圖
由於篇幅限制小編,pdf文件的詳解資料太全面,細節內容實在太多啦,所以只把部分知識點截圖出來粗略的介紹
最後
2020年在匆匆忙忙慌慌亂亂中就這麼度過了,我們迎來了新一年,網際網路的發展如此之快,技術日新月異,更新迭代成為了這個時代的代名詞,堅持下來的技術體系會越來越健壯,JVM作為如今是跳槽大廠必備的技能,如果你還沒掌握,更別提之後更新的新技術了。
更多JVM面試整理: