正所謂,無招勝有招。java
願讀到這篇文章的技術人早日明白而且脫離技術自己,早登彼岸。面試
一切技術最終只是雕蟲小技。算法
大綱數據庫
語言基礎篇編程
語言基礎緩存
鎖安全
多線程網絡
併發包中經常使用的併發容器(J.U.C)多線程
Java 的面向對象架構
Java 語言的三大特徵:封裝、繼承和多態
Java 語言數據類型
Java 的自動類型轉換,強制類型轉換
String 的不可變性,虛擬機的常量池,String.intern() 的底層原理
Java 語言中的關鍵字:final、static、transient、instanceof、volatile、synchronized的底層原理
Java 中經常使用的集合類的實現原理:ArrayList/LinkedList/Vector、SynchronizedList/Vector、HashMap/HashTable/ConcurrentHashMap 互相的區別以及底層實現原理
動態代理的實現方式
CAS、樂觀鎖與悲觀鎖、數據庫相關鎖機制、分佈式鎖、偏向鎖、輕量級鎖、重量級鎖、monitor
鎖優化、鎖消除、鎖粗化、自旋鎖、可重入鎖、阻塞鎖、死鎖
死鎖的緣由
死鎖的解決辦法
CountDownLatch、CyclicBarrier 和 Semaphore 三個類的使用和原理
併發和並行的區別
線程與進程的區別
線程的實現、線程的狀態、優先級、線程調度、建立線程的多種方式、守護線程
本身設計線程池、submit() 和 execute()、線程池原理
爲何不容許使用 Executors 建立線程池
死鎖、死鎖如何排查、線程安全和內存模型的關係
ThreadLocal 變量
Executor 建立線程池的幾種方式:
newFixedThreadPool(int nThreads)
newCachedThreadPool()
newSingleThreadExecutor()
newScheduledThreadPool(int corePoolSize)
newSingleThreadExecutor()
ThreadPoolExecutor 建立線程池、拒絕策略
線程池關閉的方式
JUC 包中 List 接口的實現類:CopyOnWriteArrayList
JUC 包中 Set 接口的實現類:CopyOnWriteArraySet、ConcurrentSkipListSet
JUC 包中 Map 接口的實現類:ConcurrentHashMap、ConcurrentSkipListMap
JUC包中Queue接口的實現類:ConcurrentLinkedQueue、ConcurrentLinkedDeque、ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque
class 文件格式、運行時數據區:堆、棧、方法區、直接內存、運行時常量池
Java 中的對象必定在堆上分配嗎?
計算機內存模型、緩存一致性、MESI 協議、可見性、原子性、順序性、happens-before、內存屏障、synchronized、volatile、final、鎖
GC 算法:標記清除、引用計數、複製、標記壓縮、分代回收、增量式回收、GC 參數、對象存活的斷定、垃圾收集器(CMS、G一、ZGC、Epsilon)
-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold
oop-klass、對象頭
即時編譯器、編譯優化
jps、jstack、jmap、jstat、jconsole、 jinfo、 jhat、javap、btrace、TProfiler、Arthas
classLoader、類加載過程、雙親委派(破壞雙親委派)、模塊化(jboss modules、osgi、jigsaw)
用戶空間以及內核空間
Linux 網絡 I/O 模型:阻塞 I/O (Blocking I/O)、非阻塞 I/O (Non-Blocking I/O)、I/O 複用(I/O Multiplexing)、信號驅動的 I/O (Signal Driven I/O)、異步 I/O
靈拷貝(ZeroCopy)
BIO 與 NIO 對比
緩衝區 Buffer
通道 Channel
反應堆
選擇器
AIO
RPC 的原理編程模型
經常使用的 RPC 框架:Thrift、Dubbo、SpringCloud
RPC 的應用場景和與消息隊列的差異
RPC 核心技術點:服務暴露、遠程代理對象、通訊、序列化
瞭解 Linux 的經常使用命令
遠程登陸
上傳下載
系統目錄
文件和目錄操做
Linux 下的權限體系
壓縮和打包
用戶和組
Shell 腳本的編寫
管道操做
分佈式中的一些基本概念:集羣(Cluster)、負載均衡(Load Balancer)等
分佈式系統理論基礎:一致性、2PC 和 3PC
分佈式系統理論基礎:CAP
分佈式系統理論基礎:時間、時鐘和事件順序
分佈式系統理論進階:Paxos
分佈式系統理論進階:Raft、Zab
分佈式系統理論進階:選舉、多數派和租約
分佈式鎖的解決方案
分佈式事務的解決方案
分佈式 ID 生成器解決方案
Netty 三層網絡架構:Reactor 通訊調度層、職責鏈 PipeLine、業務邏輯處理層
Netty 的線程調度模型
序列化方式
鏈路有效性檢測
流量整形
優雅停機策略
Netty 對 SSL/TLS 的支持
Netty 的源碼質量極高,推薦對部分的核心代碼進行閱讀:
Netty 的 Buffer
Netty 的 Reactor
Netty 的 Pipeline
Netty 的 Handler 綜述
Netty 的 ChannelHandler
Netty 的 LoggingHandler
Netty 的 TimeoutHandler
Netty 的 CodecHandler
Netty 的 MessageToByteEncoder
離線計算
掌握 MapReduce 的工做原理
能用 MapReduce 手寫代碼實現簡單的 WordCount 或者 TopN 算法
掌握 MapReduce Combiner 和 Partitioner的做用
熟悉 Hadoop 集羣的搭建過程,而且能解決常見的錯誤
熟悉 Hadoop 集羣的擴容過程和常見的坑
如何解決 MapReduce 的數據傾斜
Shuffle 原理和減小 Shuffle 的方法
十分熟悉 HDFS 的架構圖和讀寫流程
十分熟悉 HDFS 的配置
熟悉 DataNode 和 NameNode 的做用
NameNode 的 HA 搭建和配置,Fsimage 和 EditJournal 的做用的場景
HDFS 操做文件的經常使用命令
HDFS 的安全模式
Yarn 的產生背景和架構
Yarn 中的角色劃分和各自的做用
Yarn 的配置和經常使用的資源調度策略
Yarn 進行一次任務資源調度的過程
HiveSQL 的原理:咱們都知道 HiveSQL 會被翻譯成 MapReduce 任務執行,那麼一條 SQL 是如何翻譯成 MapReduce 的?
Hive 和普通關係型數據庫有什麼區別?
Hive 支持哪些數據格式
Hive 在底層是如何存儲 NULL 的
HiveSQL 支持的幾種排序各表明什麼意思(Sort By/Order By/Cluster By/Distrbute By)
Hive 的動態分區
HQL 和 SQL 有哪些常見的區別
Hive 中的內部表和外部表的區別
Hive 表進行關聯查詢如何解決長尾和數據傾斜問題
HiveSQL 的優化(系統參數調整、SQL 語句優化)
Hbase 的架構和原理
Hbase 的讀寫流程
Hbase 有沒有併發問題?Hbase 如何實現本身的 MVVC 的?
Hbase 中幾個重要的概念:HMaster、RegionServer、WAL 機制、MemStore
Hbase 在進行表設計過程當中如何進行列族和 RowKey 的設計
Hbase 的數據熱點問題發現和解決辦法
提升 Hbase 的讀寫性能的通用作法
HBase 中 RowFilter 和 BloomFilter 的原理
Hbase API 中常見的比較器
Hbase 的預分區
Hbase 的 Compaction
Hbase 集羣中 HRegionServer 宕機如何解決
實時計算篇
Kafka 的特性和使用場景
Kafka 中的一些概念:Leader、Broker、Producer、Consumer、Topic、Group、Offset、Partition、ISR
Kafka 的總體架構
Kafka 選舉策略
Kafka 讀取和寫入消息過程當中都發生了什麼
Kakfa 如何進行數據同步(ISR)
Kafka 實現分區消息順序性的原理
消費者和消費組的關係
消費 Kafka 消息的 Best Practice(最佳實踐)是怎樣的
Kafka 如何保證消息投遞的可靠性和冪等性
Kafka 消息的事務性是如何實現的
如何管理 Kafka 消息的 Offset
Kafka 的文件存儲機制
Kafka 是如何支持 Exactly-once 語義的
一般 Kafka 還會要求和 RocketMQ 等消息中間件進行比較
Spark的集羣搭建和集羣架構(Spark 集羣中的角色)
Spark Cluster 和 Client 模式的區別
Spark 的彈性分佈式數據集 RDD
Spark DAG(有向無環圖)
掌握 Spark RDD 編程的算子 API(Transformation 和 Action 算子)
RDD 的依賴關係,什麼是寬依賴和窄依賴
RDD 的血緣機制
Spark 核心的運算機制
Spark 的任務調度和資源調度
Spark 的 CheckPoint 和容錯
Spark 的通訊機制
Spark Shuffle 原理和過程
原理剖析(源碼級別)和運行機制
Spark Dstream 及其 API 操做
Spark Streaming 消費 Kafka 的兩種方式
Spark 消費 Kafka 消息的 Offset 處理
數據傾斜的處理方案
Spark Streaming 的算子調優
並行度和廣播變量
Shuffle 調優
Spark SQL 的原理和運行機制
Catalyst 的總體架構
Spark SQL 的 DataFrame
Structured Streaming 的模型
Structured Streaming 的結果輸出模式
事件時間(Event-time)和延遲數據(Late Data)
窗口操做
水印
容錯和數據恢復
Flink 集羣的搭建
Flink 的架構原理
Flink 的編程模型
Flink 集羣的 HA 配置
Flink DataSet 和 DataSteam API
序列化
Flink 累加器
狀態 State 的管理和恢復
窗口和時間
並行度
Flink 和消息中間件 Kafka 的結合
Flink Table 和 SQL 的原理和用法
大數據算法
兩個超大文件找共同出現的單詞
海量數據求 TopN
海量數據找出不重複的數據
布隆過濾器
bit-map
堆
字典樹
倒排索引
企業指望的你是什麼樣子?
1~2 門語言基礎
紮實的後臺開發基礎
離線計算方向(Hadoop/Hbase/Hive 等)
實時計算方向(Spark/Flink/Kafka 等)
知識面更寬優先(對口經驗 + 其餘)
漂亮的排版,杜絕使用 word,格式化的模板,推薦使用 MarkDown 生成 PDF
不要堆砌技術名詞,不會的不瞭解的不要寫,不然你會被虐的體無完膚
1~2 個突出的項目經歷,不要讓你的簡歷看起來像Demo同樣淺顯
寫在簡歷上的項目我建議你要熟悉每個細節,即便不是你開發的也要知道是如何實現的
若是有一段知名企業的實習或者工做經歷那麼是很大的加分