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的持久化的方式和原理
-
技術選型,一個新技術和一個穩定的舊技術,你會怎么選擇,選擇的考慮有哪些
-
說你印象最深的美團點評技術團隊的三篇博客
-
最近在學什么新技術
-
你是怎么去接觸一門新技術的
-
會看哪些書
-
怎么選擇要看的書
Kafka實戰筆記
關于這份筆記,為了不影響大家的閱讀體驗,我只能在文章中展示部分的章節內容和核心截圖,如果你需要完整的pdf版本,戳這里即可免費領取。
- Kafka入門
- 為什么選擇Kafka
- Karka的安裝、管理和配置
- Kafka的集群
- 第一個Kafka程序
afka的生產者
- Kafka的消費者
- 深入理解Kafka
- 可靠的數據傳遞
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka實戰之削峰填谷
- 數據管道和流式處理(了解即可)
- Kafka實戰之削峰填谷
bFJ1cmN1R2dB)。**
[外鏈圖片轉存中…(img-bm4XZjb0-1625205139178)]
- Kafka入門
- 為什么選擇Kafka
- Karka的安裝、管理和配置
[外鏈圖片轉存中…(img-g0Nw8YxB-1625205139179)]
- Kafka的集群
- 第一個Kafka程序
- [外鏈圖片轉存中…(img-Ma3b4wcJ-1625205139179)]
afka的生產者
[外鏈圖片轉存中…(img-TaMGgygq-1625205139180)]
- Kafka的消費者
- 深入理解Kafka
- 可靠的數據傳遞
[外鏈圖片轉存中…(img-rFjXJIrq-1625205139181)]
[外鏈圖片轉存中…(img-G5jGtzlD-1625205139182)]
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka實戰之削峰填谷
- 數據管道和流式處理(了解即可)
[外鏈圖片轉存中…(img-JG1g0T2v-1625205139182)]
- Kafka實戰之削峰填谷
[外鏈圖片轉存中…(img-ImKLJRZ1-1625205139183)]