挑戰雙十一,以一己之力拿下京東、天貓的offer;分享複習大綱

前言

雙十一來臨之際,各大電商平臺的活動正在如火如荼的進行着。程序員

而針對程序員呢!面試

程序員:老闆,我要加班!
老闆:加!無限加!加到雙十二好很差!
程序員:好的,謝謝老闆,老闆真好!

言歸正傳,本次和你們分享一下,個人前同事的複習大綱究竟是怎麼樣的!又是如何憑一己之力拿下京東、天貓的offer,別走開,且聽我慢慢道來!正則表達式

1、基礎篇

1.1 Java基礎

  • 面向對象的特徵:繼承、封裝和多態
  • final, finally, finalize 的區別
  • Exception、Error、運行時異常與通常異常有何異同
  • 請寫出5種常見到的runtime exception
  • int 和 Integer 有什麼區別,Integer的值緩存範圍
  • 包裝類,裝箱和拆箱
  • String、StringBuilder、StringBuffer
  • 重載和重寫的區別
  • 抽象類和接口有什麼區別
  • 說說反射的用途及實現
  • 說說自定義註解的場景及實現
  • HTTP請求的GET與POST方式的區別
  • Session與Cookie區別
  • 列出本身經常使用的JDK包
  • MVC設計思想
  • equals與==的區別
  • hashCode和equals方法的區別與聯繫
  • 什麼是Java序列化和反序列化,如何實現Java序列化?或者請解釋Serializable 接口的做用
  • Object類中常見的方法,爲何wait notify會放在Object裏- 邊?
  • Java的平臺無關性如何體現出來的
  • JDK和JRE的區別
  • Java 8有哪些新特性

1.2 Java常見集合

  • List 和 Set 區別
  • Set和hashCode以及equals方法的聯繫
  • List 和 Map 區別
  • Arraylist 與 LinkedList 區別
  • ArrayList 與 Vector 區別
  • HashMap 和 Hashtable 的區別
  • HashSet 和 HashMap 區別
  • HashMap 和 ConcurrentHashMap 的區別
  • HashMap 的工做原理及代碼實現,何時用到紅黑樹
  • 多線程狀況下HashMap死循環的問題
  • HashMap出現Hash DOS攻擊的問題
  • ConcurrentHashMap 的工做原理及代碼實現,如何統計全部的元素個數
  • 手寫簡單的HashMap
  • 看過那些Java集合類的源碼

1.3 進程和線程

  • 線程和進程的概念、並行和併發的概念
  • 建立線程的方式及實現
  • 進程間通訊的方式
  • 說說 CountDownLatch、CyclicBarrier 原理和區別
  • 說說 Semaphore 原理
  • 說說 Exchanger 原理
  • ThreadLocal 原理分析,ThreadLocal爲何會出現OOM,出現的深層次原理
  • 講講線程池的實現原理
  • 線程池的幾種實現方式
  • 線程的生命週期,狀態是如何轉移的

1.4 鎖機制

  • 說說線程安全問題,什麼是線程安全,如何保證線程安全
  • 重入鎖的概念,重入鎖爲何能夠防止死鎖
  • 產生死鎖的四個條件(互斥、請求與保持、不剝奪、循環等待)
  • 如何檢查死鎖(經過jConsole檢查死鎖)
  • volatile 實現原理(禁止指令重排、刷新內存
  • synchronized 實現原理(對象監視器
  • synchronized 與 lock 的區別
  • AQS同步隊列
  • CAS無鎖的概念、樂觀鎖和悲觀鎖
  • 常見的原子操做類
  • 什麼是ABA問題,出現ABA問題JDK是如何解決的
  • 樂觀鎖的業務場景及實現方式
  • Java 8並法包下常見的併發類
  • 偏向鎖、輕量級鎖、重量級鎖、自旋鎖的概念

1.5 JVM

  • JVM運行時內存區域劃分
  • 內存溢出OOM和堆棧溢出SOE的示例及緣由、如何排查與解決
  • 如何判斷對象是否能夠回收或存活
  • 常見的GC回收算法及其含義
  • 常見的JVM性能監控和故障處理工具類:jps、jstat、jmap、jinfo、jconsole等
  • JVM如何設置參數
  • JVM性能調優
  • 類加載器、雙親委派模型、一個類的生命週期、類是如何加載到JVM中的
  • 類加載的過程:加載、驗證、準備、解析、初始化
  • 強引用、軟引用、弱引用、虛引用
  • Java內存模型JMM

1.6 設計模式

  • 常見的設計模式
  • 設計模式的的六大原則及其含義
  • 常見的單例模式以及各類實現方式的優缺點,哪種最好,手寫常見的單利模式
  • 設計模式在實際場景中的應用
  • Spring中用到了哪些設計模式
  • MyBatis中用到了哪些設計模式
  • 你項目中有使用哪些設計模式
  • 說說經常使用開源框架中設計模式使用分析
  • 動態代理很重要!!!

1.7 數據結構

  • 樹(二叉查找樹、平衡二叉樹、紅黑樹、B樹、B+樹)
  • 深度有限算法、廣度優先算法
  • 克魯斯卡爾算法、普林母算法、迪克拉斯算法
  • 什麼是一致性Hash及其原理、Hash環問題
  • 常見的排序算法和查找算法:快排、折半查找、堆排序等

1.8 網絡/IO基礎

  • BIO、NIO、AIO的概念
  • 什麼是長鏈接和短鏈接
  • Http1.0和2.0相比有什麼區別
  • Https的基本概念
  • 三次握手和四次揮手、爲何揮手須要四次
  • 從遊覽器中輸入URL到頁面加載的發生了什麼?

2、數據存儲和消息隊列

2.1 數據庫

  • MySQL 索引使用的注意事項
  • DDL、DML、DCL分別指什麼
  • explain命令
  • left join,right join,inner join
  • 數據庫事物ACID(原子性、一致性、隔離性、持久性)
  • 事物的隔離級別(讀未提交、讀以提交、可重複讀、可序列化讀)
  • 髒讀、幻讀、不可重複讀
  • 數據庫的幾大範式
  • 數據庫常見的命令
  • 說說分庫與分表設計
  • 分庫與分錶帶來的分佈式困境與應對之策(如何解決分佈式下的分庫分表,全局表?)
  • 說說 SQL 優化之道
  • MySQL遇到的死鎖問題、如何排查與解決
  • 存儲引擎的 InnoDB與MyISAM區別,優缺點,使用場景
  • 索引類別(B+樹索引、全文索引、哈希索引)、索引的原理
  • 什麼是自適應哈希索引(AHI)
  • 爲何要用 B+tree做爲MySQL索引的數據結構
  • 彙集索引與非彙集索引的區別
  • 遇到過索引失效的狀況沒,何時可能會出現,如何解決
  • limit 20000 加載很慢怎麼解決
  • 如何選擇合適的分佈式主鍵方案
  • 選擇合適的數據存儲方案
  • 常見的幾種分佈式ID的設計方案
  • 常見的數據庫優化方案,在你的項目中數據庫如何進行優化的

2.2 Redis

  • Redis 有哪些數據類型
  • Redis 內部結構
  • Redis 使用場景
  • Redis 持久化機制
  • Redis 集羣方案與實現
  • Redis 爲何是單線程的?
  • 緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級
  • 使用緩存的合理性問題
  • Redis常見的回收策略

2.3 消息隊列

  • 消息隊列的使用場景
  • 消息的重發補償解決思路
  • 消息的冪等性解決思路
  • 消息的堆積解決思路
  • 本身如何實現消息隊列
  • 如何保證消息的有序性

3、開源框架和容器

3.1 SSM/Servlet

  • Servlet的生命週期
  • 轉發與重定向的區別
  • BeanFactory 和 ApplicationContext 有什麼區別
  • Spring Bean 的生命週期
  • Spring IOC 如何實現
  • Spring中Bean的做用域,默認的是哪個
  • 說說 Spring AOP、Spring AOP 實現原理
  • 動態代理(CGLib 與 JDK)、優缺點、性能對比、如何選擇
  • Spring 事務實現方式、事務的傳播機制、默認的事務類別
  • Spring 事務底層原理
  • Spring事務失效(事務嵌套),JDK動態代理給Spring事務埋下的坑
  • 如何自定義註解實現功能
  • Spring MVC 運行流程
  • Spring MVC 啓動流程
  • Spring 的單例實現原理
  • Spring 框架中用到了哪些設計模式
  • Spring 其餘產品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、SpringAMQP 等)
  • 有沒有用到Spring Boot,Spring Boot的認識、原理
  • MyBatis的原理

3.2 Netty

  • 爲何選擇 Netty
  • 說說業務中,Netty 的使用場景
  • 原生的 NIO 在 JDK 1.7 版本存在 epoll bug
  • 什麼是TCP 粘包/拆包
  • TCP粘包/拆包的解決辦法
  • Netty 線程模型
  • 說說 Netty 的零拷貝
  • Netty 內部執行流程
  • Netty 重連實現

3.3 Tomcat

  • Tomcat的基礎架構(Server、Service、Connector、Container)
  • Tomcat如何加載Servlet的
  • Pipeline-Valve機制

4、分佈式

4.1 Nginx

  • 請解釋什麼是C10K問題或者知道什麼是C10K問題嗎?
  • Nginx簡介,可參考《Nginx簡介》
  • 正向代理和反向代理
  • Nginx幾種常見的負載均衡策略
  • Nginx服務器上的Master和Worker進程分別是什麼
  • 使用「反向代理服務器」的優勢是什麼?

4.2 分佈式其餘

  • 談談業務中使用分佈式的場景
  • Session 分佈式方案
  • Session 分佈式處理
  • 分佈式鎖的應用場景、分佈式鎖的產生緣由、基本概念
  • 分佈是鎖的常看法決方案
  • 分佈式事務的常看法決方案
  • 集羣與負載均衡的算法與實現
  • 說說分庫與分表設計
  • 分庫與分錶帶來的分佈式困境與應對之策

4.3 Dubbo

  • 什麼是Dubbo
  • 什麼是RPC、如何實現RPC、RPC 的實現原理
  • Dubbo中的SPI是什麼概念
  • Dubbo的基本原理、執行流程

5、微服務

5.1 微服

  • 先後端分離是如何作的?
  • 微服務哪些框架
  • Spring Could的常見組件有哪些?可參考《Spring Cloud概述》
  • 領域驅動有了解嗎?什麼是領域驅動模型?充血模型、貧血模型
  • JWT有了解嗎,什麼是JWT,可參考《先後端分離利器之JWT》
  • 你怎麼理解 RESTful
  • 說說如何設計一個良好的 API
  • 如何理解 RESTful API 的冪等性
  • 如何保證接口的冪等性
  • 說說 CAP 定理、BASE 理論
  • 怎麼考慮數據一致性問題
  • 說說最終一致性的實現方案
  • 微服務的優缺點,可參考《微服務批判》
  • 微服務與 SOA 的區別
  • 如何拆分服務、水平分割、垂直分割
  • 如何應對微服務的鏈式調用異常
  • 如何快速追蹤與定位問題
  • 如何保證微服務的安全、認證

5.2 安全問題

  • 如何防範常見的Web攻擊、如何方式SQL注入
  • 服務端通訊安全攻防
  • HTTPS原理剖析、降級攻擊、HTTP與HTTPS的對比

5.3 性能優化

  • 性能指標有哪些
  • 如何發現性能瓶頸
  • 性能調優的常見手段
  • 說說你在項目中如何進行性能調優

6、多線程

  • AtomicInteger底層實現原理
  • synchronized與ReentraLock哪一個是公平鎖
  • CAS機制會出現什麼問題
  • 用過併發包下邊的哪些類
  • 一個線程連着調用start兩次會出現什麼狀況
  • wait方法能不能被重寫,wait能不能被中斷
  • 線程池的實現?四種線程池?重要參數及原理?任務拒接策略有哪幾種?
  • 線程狀態以及API怎麼操做會發生這種轉換
  • 經常使用的避免死鎖方法

7、JVM

  • Minor GC與Full GC分別在何時發生?何時觸發Full GC
  • GC收集器有哪些?CMS收集器與G1收集器的特色
  • Java在何時會出現內存泄漏
  • Java中的大對象如何進行存儲
  • rt.jar被什麼類加載器加載,什麼時間加載
  • 本身寫的類被什麼加載,什麼時間加載
  • 本身寫的兩個不一樣的類是被同一個類加載器加載的嗎?爲何?
  • 爲何新生代內存須要有兩個Survivor區
  • 幾種經常使用的內存調試工具:jmap、jstack、jconsole
  • 類加載的五個過程:加載、驗證、準備、解析、初始化
  • G1停頓嗎,CMS回收步驟,CMS爲何會停頓,停頓時間
  • 棧主要存的數據是什麼,堆呢
  • 堆分爲哪幾塊,好比說新生代老生代,那麼新生代又分爲何
  • 軟引用和弱引用的使用場景(軟引用能夠實現緩存,弱引用能夠用來在回調函數中防止內存泄露)

8、數據庫

  • 數據庫索引,什麼是全文索引,全文索引中的倒排索引是什麼原理
  • 數據庫最佳左前綴原則是什麼
  • 數據庫的三大範式
  • 悲觀鎖和樂觀鎖的原理和應用場景
  • 左鏈接、右鏈接、內鏈接、外鏈接、交叉鏈接、笛卡兒積等
  • 通常狀況下數據庫宕機瞭如何進行恢復(什麼是Write Ahead Log機制,什麼是Double Write機制,什麼是Check Point)
  • 什麼是redo日誌、什麼是undo日誌
  • 數據庫中的隔離性是怎樣實現的;原子性、一致性、持久性又是如何實現的
  • 什麼是組合索引,組合索引何時會失效
  • 關係型數據庫和非關係型數據庫區別
  • 數據庫死鎖如何解決
  • MySQL併發狀況下怎麼解決(經過事務、隔離級別、鎖)
  • MySQL中的MVCC機制是什麼意思,根據具體場景,MVCC是否有問題
  • MySQL數據庫的隔離級別,以及如何解決幻讀

9、緩存服務器

  • Redis中zSet跳躍表問題
  • Redis的set的應用場合
  • Redis高級特性瞭解嗎
  • Redis的pipeline有什麼用處
  • Redis集羣宕機如何處理,怎麼樣進行數據的遷移
  • Redis的集羣方案
  • Redis原子操做怎麼用比較好
  • Redis過時策略是怎麼實現的呢

10、SSM相關

  • Spring中@Autowired和@Resource註解的區別
  • Spring聲明一個 bean 如何對其進行個性化定製
  • MyBatis有什麼優點
  • MyBatis如何作事務管理

11、操做系統

  • Linux靜態連接和動態連接
  • 什麼是IO多路複用模型(select、poll、epoll)
  • Linux中的grep管道用處?Linux的經常使用命令
  • 操做系統中虛擬地址、邏輯地址、線性地址、物理地址的概念及區別
  • 內存的頁面置換算法
  • 進程調度算法,操做系統是如何調度進程的
  • 父子進程、孤兒進程、僵死進程等概念
  • fork進程時的操做
  • kill用法,某個進程殺不掉的緣由(僵死進程;進入內核態,忽略kill信號)
  • 系統管理命令(如查看內存使用、網絡狀況)
  • find命令、awk使用
  • Linux下排查某個死循環的線程

12、網絡相關

  • 數據鏈路層是作什麼的?
  • 數據鏈路層的流量控制?
  • 網絡模型的分層、IP和Mac地址在那個層、TCP和HTTP分別在那個層
  • TCP滑動窗口
  • TCP爲何可靠
  • TCP的同傳,拆包與組裝包是什麼意思
  • Https和Http有什麼區別
  • Http 爲何是無狀態的
  • TCP三次握手,爲何不是三次,爲何不是四次
  • TCP的擁塞控制、流量控制詳細說明
  • Http1.0和Http2.0的區別
  • 兩個不一樣ip地址的計算機之間如何通訊
  • 地址解析協議ARP
  • OSI七層模型分別對應着五層模型的哪一部分
  • TCP三次握手數據丟失了怎麼辦?那若是後面又找到了呢

十3、分佈式相關

  • 消息隊列使用的場景介紹和做用(應用耦合、異步消息、流量削鋒等)
  • 如何解決消息隊列丟失消息和重複消費問題
  • Kafka使用過嗎,什麼是冪等性?怎麼保證一致性,持久化怎麼作,分區partition的理解,LEO是什麼意思,如何保證多個partition之間數據一致性的(ISR機制),爲何Kafka能夠這麼快(基於磁盤的順序讀寫)
  • 異步隊列怎麼實現
  • 你項目的併發是多少?怎麼解決高併發問題?單機狀況下Tomcat的併發大概是多少,MySQL的併發大體是多少
  • 什麼是C10K問題
  • 高併發狀況下怎麼辦
  • 分佈式理論,什麼是CAP理論,什麼是Base理論,什麼是Paxos理論
  • 分佈式協議的選舉算法
  • 說一下你對微服務的理解,與SOA的區別
  • Dubbo的基本原理,RPC,支持哪些通訊方式,服務的調用過程
  • Dubbo若是有一個服務掛掉了怎麼辦
  • 分佈式事務,操做兩個表不在一個庫,如何保證一致性
  • 分佈式系統中,每臺機器如何產生一個惟一的隨機值
  • 系統的量級、pv、uv等
  • 什麼是Hash一致性算法?分佈式緩存的一致性,服務器如何擴容(哈希環)
  • 正向代理、反向代理
  • 什麼是客戶端負載均衡策略、什麼是服務器端負載均衡策略
  • 如何優化Tomcat,常見的優化方式有哪些
  • Nginx的Master和Worker,Nginx是如何處理請求的

十4、系統設計相關

  • 如何防止表單重複提交(Token令牌環等方式)
  • 有一個url白名單,須要使用正則表達式進行過濾,可是url量級很大,大概億級,那麼如何優化正則表達式?如何優化億級的url匹配呢
  • 常見的Nginx負載均衡策略;已有兩臺Nginx服務器了,假若這時候再增長一臺服務器,採用什麼負載均衡算法比較好
  • 掃描二維碼登陸的過程解析
  • 如何設計一個生成惟一UUID的算法
  • 實現一個負載均衡的算法,服務器資源分配爲70%、20%、10%
  • 有三個線程T1 T2 T3,如何保證他們按順序執行
  • 三個線程循環輸出ABCABCABC....

十5、其餘

15.1 設計能力

  • 說說你在項目中使用過的UML圖
  • 你如何考慮組件化、服務化、系統拆分
  • 秒殺場景如何設計
  • 可參考:《秒殺系統的技術挑戰、應對策略以及架構設計總結一二!》

15.2 業務工程

  • 說說你的開發流程、如何進行自動化部署的
  • 你和團隊是如何溝通的
  • 你如何進行代碼評審
  • 說說你對技術與業務的理解
  • 說說你在項目中遇到感受最難Bug,是如何解決的
  • 介紹一下工做中的一個你認爲最有價值的項目,以及在這個過程當中的角色、解決的問題、你以爲大家項目還有哪些不足的地方

15.3 軟實力

  • 說說你的優缺點、亮點
  • 說說你最近在看什麼書、什麼博客、在研究什麼新技術、再看那些開源項目的源代碼
  • 說說你以爲最有意義的技術書籍
  • 工做之餘作什麼事情、平時是如何學習的,怎樣提高本身的能力
  • 說說我的發展方向方面的思考
  • 說說你認爲的服務端開發工程師應該具有哪些能力
  • 說說你認爲的架構師是什麼樣的,架構師主要作什麼
  • 如何看待加班的問題

寫在最後

文章限於篇幅,沒法給你們展現這些面試題的答案,前同事的面試複習大綱[含答案],筆者已經整理好了,合訂成一份完整的PDF文件,包含但不限於Kafka、Mysql、Tomcat、Docker、Spring、MyBatis、Nginx、Netty、Dubbo、Redis、Netty、Spring cloud、分佈式、高併發、性能調優、微服務等架構技術。算法

須要的朋友點擊下方傳送門, 便可免費領取面試資料和視頻學習資料sql

傳送門

如下是部分面試題截圖數據庫

相關文章
相關標籤/搜索