主要是自己在面試程序中整理的一些問題,以及自己被問到的關鍵點,
效果還是不錯的,美團、位元組、boss直聘、完美世界、滴滴、度小滿、58、愛奇藝都通過了,
- 基礎部分
- 專業基礎
- JVM
- 多執行緒
- 鎖
- 集合、Stream、Iterator等
- IO模型
- 框架、DB與分布式
- Spring
- MySQL
- 分布式環境
- Redis
- 訊息佇列
- 微服務
- 系統設計
- 秒殺系統
- 業務復雜的高并發場景
- 海量資料場景
基礎部分
專業基礎
- 計算機通信的四元組
- tcp和udp是哪層的?啥區別?二者特點?
- TCP協議
- 握手揮手,一般問缺失某次握手會有什么結果,網路例外會如何等
- keepalive方式和超時概念
- 突發大量time-waiting/close-waiting/xxxx的tcp鏈接,判斷原因,后續處理方式
- 擁塞控制
- CPU調度、死鎖概念、銀行家演算法等
- HTTP協議,主要看下1.1版本即可
JVM
- 堆記憶體劃分以及堆外記憶體
- 直接記憶體的概念
- 物件頭
- 執行緒共享與執行緒獨占
- 記憶體回收演算法
- CMS和G1的特點與程序,盡量詳細,其他的基本很少問
- 常用jdk工具,jmap、jstack、jps、jstat等的簡單概念,知道這四個哪個是干啥的就行
多執行緒
- 執行緒池的運行模型,以及引數意義和執行緒數的設定思路
- 多執行緒間資料共享(拓展:行程間資料共享)
- 多執行緒調度方式:Object類的、Thread類的以及JUC包的都需要了解
- ThreadLocal和Inheritablethreadlocal
- 生產-消費者模型
- 異步/回應式優化設計,Future和CompletableFuture等
- 阻塞佇列
- 執行緒安全的概念,HashTable到ConcurrentHashMap的變化,并自行設計一個簡單的執行緒安全的集合類
鎖
- Sycronized鎖升級機制
- 偏向鎖的概念
- Lock介面
- ReentrenLock的重入原理
- ReadWriteLock簡單了解(這玩意本來也沒啥意思)
- 設計一把鎖(考的是你對鎖的理解,要明白鎖的幾個必須元素,以及風險規避)
集合、Stream、Iterator等
- Java8的Stream作業模式簡單了解一下
- Iterator、foreach(A a : Collection aaa)、aaa.foreach()、for(a,b,c)的區別
- ArrayList、LinkedList這些結構了解一下,知道集合中哪些執行緒安全哪些不安全,為啥不安全,就可以了
- 為什么快取一般建議在初始化完畢,使用之前,轉換成不可變集合?
IO模型
- BIO
- NIO
- AIO
- Linux環境
- select
- poll
- epoll
框架、DB與分布式
Spring
- Spring的Bean加載機制與Java的類加載機制(雙親委派)
- Spring容器提供DI和AOP的原理
- @Repository和其他@Component、@Service等的區別
- @Configuration和@Order用法與場景
- @Controller和@RestController區別
MySQL
- B+樹的特點,B+比B多了什么?為什么用B+不用紅黑?
- 復合索引的最左優先原則
- 聚簇索引與非聚簇索引
- 查詢時的回表問題如何優化?索引覆寫是什么?
- 索引合并
- MySql對查詢陳述句會有哪些優化?
- 索引設定在頻繁更新的列上會有哪些問題?
- 頁的概念
- binlog、redolog、undolog
- 主從延遲的處理思路和優化方案
分布式環境
Redis
- redis高性能的原因
- 幾種基本資料結構,str、set、zset、list、hash
- 基本資料型別的特殊用法,bitmap、佇列、布隆過濾器、hyperloglog等
- 持久化方式,全量和增量
- 集群場景資料讀寫的節點劃分方式
- 常見問題:熱key、大value、keys*等的處理方式以及出現問題的原因
- 快取穿透、擊穿、雪崩的概念
- redis事務、lua腳本、管道通信
訊息佇列
- Kafka高效原因
- mq如何保證“最多消費一次”、“至少消費一次”、“一定只消費一次”
- kafka partition
- mq的pull push模型
微服務
- CAP模型、AP和CP
- 分布式鎖設計
- 熔斷降級的實作思路(執行緒池、信號量)
- RPC的分層設計,可以基于幾種rpc框架來說,比如feign、dubbo、grpc、thrift等
- 服務間資料互通的幾種方式,越多越好
- 常見的長鏈接與短鏈接
- 分布式事務的幾種解決方案
系統設計
秒殺系統
- 高并發變低并發
- 短高峰變長低峰
- 多節點處理
- 避免單點高壓
- 避免超賣和未賣完卻先拒絕訂單的情況
業務復雜的高并發場景
- 資料庫冷熱欄位拆表
- 根據合理的鍵拆庫
- 資料緩沖層設計
- 訊息佇列磁區(partition)消費設計
- 請求壓力均攤
- 特殊資料庫或引擎介入(時間資料庫、流式計算引擎等)
海量資料場景
- 合理的資料拆分
- 靈活利用不同型別資料庫的優勢
- 冷資料定期歸檔
- 大資料介入(Hive等)
- 靈活的快取設計(不要快取最終內容,而是快取中間計算結果)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265605.html
標籤:其他
