Java學習的三個終極問題及學習路線規劃,王者筆記!
01 阿裡中間件(四面,Java崗)

1.1 Java中間件一面
技術一面考察範圍
重點問了Java線程鎖:synchronized 和ReentrantLock相關的底層實作 線程池的底層實作以及常見的參數 資料結構基本都問了一遍:連結清單、隊列等 Java記憶體模型:常問的JVM分代模型,以及JDK1.8後的差別,最後還問了JVM相關的調優參數 分布式鎖的實作比較技術
一面題目
- 自我介紹
- 擅長哪方面的技術?
- java有哪些鎖中類?(樂觀鎖&悲觀鎖、可重入鎖&Synchronize等)。
- 比較重要的資料結構,如連結清單,隊列,棧的基本原理及大緻實作
- J.U.C下的常見類的使用。Threadpool的深入考察;blockingQueue的使用
- Java記憶體分代模型,GC算法,JVM常見的啟動參數;CMS算法的過程。
- Volatile關鍵字有什麼用(包括底層原理)
- 線程池的調優政策
- Spring cloud的服務注冊與發現是怎麼設計的?
- 分布式系統的全局id如何實作
- 分布式鎖的方案,redis和zookeeper那個好,如果是叢集部署,高并發情況下那個性能更好。
1.2 Java中間件二面
技術二面考察範圍:
問了項目相關的技術實作細節 資料庫相關:索引、索引底層實作、mysql相關的行鎖、表鎖等 redis相關:架構設計、資料一緻性問題 容器:容器的設計原理等技術
二面題目:
- 參與的項目,選一個,技術難度在哪裡?
- Collections.sort底層排序方式
- 負載均衡的原理設計模式與重構,談談你對重構的了解
- 談談redis相關的叢集有哪些成熟方案?
- 再談談一緻hash算法(redis)?
- 資料庫索引,B+樹的特性和建樹過程
- Mysql相關的行鎖,表鎖;樂觀鎖,悲觀鎖
- 談談多線程和并發工具的使用
- 談談redis的架構群組件
- Redis的資料一緻性問題(分布式多節點環境&單機環境)
- Docker容器
1.3 Java中間件三面
技術三面考察範圍:
主要談到了高并發的實作方案 以及中間件:redis、rocketmq、kafka等的架構設計思路 最後問了平時怎麼提升技術的技術
三面題目
- 高并發情況下,系統是如何支撐大量的請求的?
- 接着上面的問題,延伸到了中間件,kafka、redis、rocketmq、mycat等設計思路和适用場景等
- 最近上過哪些技術網站;最近再看那些書。
- 工作和生活中遇見最大的挑戰,怎麼去克服?
- 未來有怎樣的打算
1.4 Java中間件四面
最後,你懂的,主要就是HR走流程了,主要問了未來的職業規劃。
02 頭條Java背景3面
2.1 頭條一面
- 講講jvm運作時資料庫區
- 講講你知道的垃圾回收算法
- jvm記憶體模型jmm
- 記憶體洩漏與記憶體溢出的差別
- select、epool 的差別?底層的資料結構是什麼?
- mysql資料庫預設存儲引擎,有什麼優點
- 優化資料庫的方法,從sql到緩存到cpu到作業系統,知道多少說多少
- 什麼情景下做分表,什麼情景下做分庫
- linkedList與arrayList差別 适用場景
- array list是如何擴容的
- volatile 關鍵字的作用?Java 記憶體模型?
- java lock的實作,公平鎖、非公平鎖
- 悲觀鎖和樂觀鎖,應用中的案例,mysql當中怎麼實作,java中的實作
2.2 頭條二面
- Java 記憶體配置設定政策?
- 多個線程同時請求記憶體,如何配置設定?
- Redis 底層用到了哪些資料結構?
- 使用 Redis 的 set 來做過什麼?
- Redis 使用過程中遇到什麼問題?
- 搭建過 Redis 叢集嗎?
- 如何分析“慢查詢”日志進行 SQL/索引 優化?
- MySQL 索引結構解釋一下?(B+ 樹)
- MySQL Hash 索引适用情況?舉下例子?
2.3 頭條三面
- 如何保證資料庫與redis緩存一緻的Redis 的并發競争問題是什麼?
- 如何解決這個問題?
- 了解 Redis 事務的 CAS 方案嗎?
- 如何保證 Redis 高并發、高可用?
- Redis 的主從複制原理,以及Redis 的哨兵原理?
- 如果讓你寫一個消息隊列,該如何進行架構設計啊?說一下你的思路。
- MySQL資料庫主從同步怎麼實作?
- 秒殺子產品怎麼設計的,如何壓測,抗壓手段
03 今日頭條Java背景研發三面
3.1 一面
- concurrent包下面用過哪些?
- countdownlatch功能實作
- synchronized和lock差別,重入鎖thread和runnable的差別
- AtomicInteger實作原理(CAS自旋)
- java并發sleep與wait、notify與notifyAll的差別
- 如何實作高效的同步連結清單
- java都有哪些加鎖方式(synchronized、ReentrantLock、共享鎖、讀寫鎖等)
- 設計模式(工廠模式、單例模式(幾種情況)、擴充卡模式、裝飾者模式)
- maven依賴樹,maven的依賴傳遞,循環依賴
3.2 二面
- synchronized和reentrantLock的差別,synchronized用在代碼快、方法、靜态方法時鎖的都是什麼?
- 介紹spring的IOC和AOP,分别如何實作(classloader、動态代理)JVM的記憶體布局以及垃圾回收原理及過程
- 講一下,講一下CMS垃圾收集器垃圾回收的流程,以及CMS的缺點
- redis如何處理分布式伺服器并發造成的不一緻OSGi的機制spring中bean加載機制,bean生成的具體步驟,ioc注入的方式spring何時建立- applicationContextlistener是監聽哪個事件?
- 介紹ConcurrentHashMap原理,用的是哪種鎖,segment有沒可能增大?
- 解釋mysql索引、b樹,為啥不用平衡二叉樹、紅黑樹
- Zookeeper如何同步配置
3.3 三面
- Java線程池ThreadPoolEcecutor參數,基本參數,使用場景
- MySQL的ACID講一下,延伸到隔離級别
- dubbo的實作原理,說說RPC的要點
- GC停頓原因,如何降低停頓?
- JVM如何調優、參數怎麼調?
- 如何用工具分析jvm狀态(visualVM看堆中對象的配置設定,對象間的引用、是否有記憶體洩漏,jstack看線程狀态、是否死鎖等等)
- 描述一緻性hash算法
- 分布式雪崩場景如何避免?
- 再談談消息隊列
04 抖音Java 三面
4.1 一面:
- hashmap,怎麼擴容,怎麼處理資料沖突?
- 怎麼高效率的實作資料遷移?
- Linux的共享記憶體如何實作,大概說了一下。
- socket網絡程式設計,說一下TCP的三次握手和四次揮手同步IO和異步IO的差別?
- Java GC機制?GC Roots有哪些?
- 紅黑樹講一下,五個特性,插入删除操作,時間複雜度?
- 快排的時間複雜度,最壞情況呢,最好情況呢,堆排序的時間複雜度呢,建堆的複雜度是多少
4.2 二面:
- 自我介紹,主要講講做了什麼和擅長什麼
- 設計模式了解哪些?
- AtomicInteger怎麼實作原子修改的?
- ConcurrentHashMap 在Java7和Java8中的差別?
- 為什麼Java8并發效率更好?什麼情況下用HashMap,什麼情況用ConcurrentHashMap?
- redis資料結構?
- redis資料淘汰機制?
4.3 三面(約五十分鐘):
- mysql實作事務的原理(MVCC)
- MySQL資料主從同步是如何實作的?
- MySQL索引的實作,innodb的索引,b+樹索引是怎麼實作的,為什麼用b+樹做索引節點,一個節點存了多少資料,怎麼規定大小,與磁盤頁對應。
- 如果Redis有1億個key,使用keys指令是否會影響線上服務?
- Redis的持久化方式,aod和rdb,具體怎麼實作,追加日志和備份檔案,底層實作原理的話知道麼?
- 遇到最大困難是什麼?怎麼克服?
- 未來的規劃是什麼?
- 你想問我什麼?
05 百度三面
5.1 百度一面
- 自我介紹
- Java中的多态
- 為什麼要同時重寫hashcode和equals
- Hashmap的原理
- Hashmap如何變線程安全,每種方式的優缺點
- 垃圾回收機制
- Jvm的參數你知道的說一下
- 設計模式了解的說一下啊
- 手撕一個單例模式
- 手撕算法:反轉單連結清單
- 手撕算法:實作類似微網誌子結構的資料結構,輸入一系列父子關系,輸出一個類似微網誌評論的父子結構圖
- 手寫java多線程
- 手寫java的soeket程式設計,服務端和用戶端
- 手撕算法: 爬樓梯,寫出狀态轉移方程
- 智力題:時針分針什麼時候重合
5.2 百度二面(現場)
- 自我介紹
- 項目介紹
- 伺服器如何負載均衡,有哪些算法,哪個比較好,一緻性哈希原理,怎麼避免DDOS攻擊請求打到少數機器。
- TCP連接配接中的三次握手和四次揮手,四次揮手的最後一個ack的作用是什麼,為什麼要time wait,為什麼是2msl。
- 資料庫的備份和恢複怎麼實作的,主從複制怎麼做的,什麼時候會出現資料不一緻,如何解決。
- Linux檢視cpu占用率高的程序
- 手撕算法:給定一個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。
- 然後繼續在這個問題上擴充
- 求出最短那條的路徑
- 遞歸求出所有的路徑
- 設計模式講一下熟悉的
- 會不會濫用設計模式
- 多線程條件變量為什麼要在while體裡
- 你遇到什麼挫折,怎麼應對和處理
5.3 百度三面(現場)
- 自我介紹
- 項目介紹
- Redis的特點
- Redis的持久化怎麼做,aof和rdb,有什麼差別,有什麼優缺點。
- Redis使用哨兵部署會有什麼問題,我說需要擴容的話還是得叢集部署。
- 說一下JVM記憶體模型把,有哪些區,分别幹什麼的
- 說一下gc算法,分代回收說下
- MySQL的引擎講一下,有什麼差別,使用場景呢
- 分布式事務了解麼
- 反爬蟲的機制,有哪些方式
06 螞蟻中間件團隊面試題
6.1 螞蟻中間件一面:
- 自我介紹
- JVM垃圾回收算法和垃圾回收器有哪些,最新的JDK采用什麼算法。
- 新生代和老年代的回收機制。
- 講一下ArrayList和linkedlist的差別,ArrayList與HashMap的擴容方式。
- Concurrenthashmap1.8後的改動。
- Java中的多線程,以及線程池的增長政策和拒絕政策了解麼。
- Tomcat的類加載器了解麼
- Spring的ioc和aop,Springmvc的基本架構,請求流程。
- HTTP協定與Tcp有什麼差別,http1.0和2.0的差別。
- Java的網絡程式設計,講講NIO的實作方式,與BIO的差別,以及介紹常用的NIO架構。
- 索引什麼時候會失效變成全表掃描
- 介紹下分布式的paxos和raft算法
6.2 螞蟻中間件二面
- 你在項目中怎麼用到并發的。
- 消息隊列的使用場景,談談Kafka。
- 你說了解分布式服務,那麼你怎麼了解分布式服務。
- Dubbo和Spring Clound的差別,以及使用場景。
- 講一下docker的實作原理,以及與JVM的差別。
- MongoDB、Redis和Memcached的應用場景,各自優勢
- MongoDB有事務嗎
- Redis說一下sorted set底層原理
- 講講Netty為什麼并發高,相關的核心元件有哪些
6.3 螞蟻中間件三面
- 完整的畫一個分布式叢集部署圖,從負載均衡到後端資料庫叢集。
- 分布式鎖的方案,Redis和Zookeeper哪個好,如果是叢集部署,高并發情況下哪個性能更好。
- 分布式系統的全局id如何實作。
- 資料庫萬級變成億級,你如何來解決。
- 常見的伺服器雪崩是由什麼引起的,如何來防範。
- 異地容災怎麼實作
- 常用的高并發技術解決方案有哪些,以及對應的解決步驟。
07 京東4面(Java研發)
7.1 一面(基礎面:約1小時)
- 自我介紹,主要講講做了什麼和擅長什麼
- springmvc和spring-boot差別
- @Autowired的實作原理
- Bean的預設作用範圍是什麼?其他的作用範圍?
- 索引是什麼概念有什麼作用?MySQL裡主要有哪些索引結構?哈希索引和B+樹索引比較?
- Java線程池的原理?線程池有哪些?線程池工廠有哪些線程池類型,及其線程池參數是什麼?
- hashmap原理,處理哈希沖突用的哪種方法?
- 還知道什麼處理哈希沖突的方法?
- Java GC機制?GC Roots有哪些?
- Java怎麼進行垃圾回收的?什麼對象會進老年代?垃圾回收算法有哪些?為什麼新生代使用複制算法?
- HashMap的時間複雜度?HashMap中Hash沖突是怎麼解決的?連結清單的上一級結構是什麼?Java8中的HashMap有什麼變化?紅黑樹需要比較大小才能進行插入,是依據什麼進行比較的?其他Hash沖突解決方式?
- hash和B+樹的差別?分别應用于什麼場景?哪個比較好?
- 項目裡有個資料安全的,aes和md5的差別?詳細點
7.2 二面(問資料庫較多)
- 自我介紹
- 為什麼MyISAM查詢性能好?
- 事務特性(acid)
- 隔離級别
- SQL慢查詢的常見優化步驟?
- 說下樂觀鎖,悲觀鎖(select for update),并寫出sql實作
- TCP協定的三次握手和四次揮手過程?
- 用到過哪些rpc架構
- 資料庫連接配接池怎麼實作
- Java web過濾器的生命周期
7.3 三面(綜合面;約一個小時)
- 自我介紹。
- ConcurrentHashMap 在Java7和Java8中的差別?為什麼Java8并發效率更好?什麼情況下用HashMap,什麼情況用ConcurrentHashMap?
- 加鎖有什麼機制?
- ThreadLocal?應用場景?
- 資料庫水準切分,垂直切分的設計思路和切分順序
- Redis如何解決key沖突
- soa和微服務的差別?
- 單機系統演變為分布式系統,會涉及到哪些技術的調整?請從前面負載到後端較長的描述。
- 設計一個秒殺系統?
7.4 四面(HR面)
- 你自己最大優勢和劣勢是什麼
- 平時遇見過什麼樣的挑戰,怎麼去克服的
- 工作中遇見了技術解決不了的問題,你的應對思路?
- 你的興趣愛好?
- 未來的職業規劃是什麼?
08 美團java進階開發3面
8.1 美團一面
- 自我介紹
- 項目介紹
- Redis介紹
- 了解redis源碼麼
- 了解redis叢集麼
- Hashmap的原理,增删的情況後端資料結構如何位移
- hashmap容量為什麼是2的幂次
- hashset的源碼
- object類你知道的方法
- hashcode和equals
- 你重寫過hashcode和equals麼,要注意什麼
- 假設現在一個學生類,有學号和姓名,我現在hashcode方法重寫的時候,隻将學号參與計算,會出現什麼情況?
- 往set裡面put一個學生對象,然後将這個學生對象的學号改了,再put進去,可以放進set麼?并講出為什麼
- Redis的持久化?有哪些方式,原理是什麼?
- 講一下穩定的排序算法和不穩定的排序算法
- 講一下快速排序的思想
8.2 美團二面
- 自我介紹
- 講一下資料的acid
- 什麼是一緻性
- 什麼是隔離性
- Mysql的隔離級别
- 每個隔離級别是如何解決
- Mysql要加上nextkey鎖,語句該怎麼寫
- Java的記憶體模型,垃圾回收
- 線程池的參數
- 每個參數解釋一遍
- 然後面試官設定了每個參數,給了是個線程,讓描述出完整的線程池執行的流程
- Nio和IO有什麼差別
- Nio和aio的差別
- Spring的aop怎麼實作
- Spring的aop有哪些實作方式
- 動态代理的實作方式和差別
- Linux了解麼
- 怎麼檢視系統負載
- Cpu load的參數如果為4,描述一下現在系統處于什麼情況
- Linux,查找磁盤上最大的檔案的指令
- Linux,如何檢視系統日志檔案
- 手撕算法:leeetcode原題 22,Generate Parentheses,給定 n 對括号,請- 寫一個函數以将其生成新的括号組合,并傳回所有組合結果。
8.3 美團三面(現場)
三面沒怎麼問技術,問了很多技術管理方面的問題
- 自我介紹
- 項目介紹
- 怎麼管理項目成員
- 當意見不一緻時,如何溝通并說服開發成員,并舉個例子
- 怎麼保證項目的進度
- 資料庫的索引原理
- 非聚簇索引和聚簇索引
- 索引的使用注意事項
- 聯合索引
- 從底層解釋最左比對原則
- Mysql對聯合索引有優化麼?會自動調整順序麼?哪個版本開始優化?
- Redis的應用
- Redis的持久化的方式和原理
- 技術選型,一個新技術和一個穩定的舊技術,你會怎麼選擇,選擇的考慮有哪些
- 說你印象最深的美團點評技術團隊的三篇部落格
- 最近在學什麼新技術
- 你是怎麼去接觸一門新技術的
- 會看哪些書
- 怎麼選擇要看的書
最後
給大家送上一份福利,領取方式:戳這裡免費下載下傳
Java架構進階面試及知識點文檔筆記
這份文檔共498頁,其中包括Java集合,并發程式設計,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面試解析及知識點整理
Java分布式進階面試問題解析文檔
其中都是包括分布式的面試問題解析,内容有分布式消息隊列,Redis緩存,分庫分表,微服務架構,分布式高可用,讀寫分離等等!
網際網路Java程式員面試必備問題解析及文檔學習筆記
Java架構進階視訊解析合集