有贊雲面經
有贊雲的電話面,題目比較簡單。(更新一下,樓主一年經驗,社招java崗位)
出於什麼樣的考慮,對系統進行了重構
有了解過領域模型相關知識嗎
項目中最大的亮點,或者說項目中最大的難題是怎麼解決的
索引失效場景有哪些
Dubbo服務暴露過程
Dubbo的spi和jdk的什麼區別
Rabbitmq和kafka區別
Kafka適合什麼場景,項目中是什麼場景
Rabbit如何保證消息不丟失
Zk滿足了CAP哪些特性
項目中緩存使用場景,雙寫一致性怎麼保證的
緩存穿透,擊穿,雪崩場景,怎麼解決
HashMap初始化10000,如何擴容
Spring循環依賴有幾種,如何解決
百度現場面試:JVM+算法+Redis+數據庫!(三面)
百度一面(現場)
- 自我介紹
- Java中的多態
- 爲什麼要同時重寫hashcode和equals
- Hashmap的原理
- Hashmap如何變線程安全,每種方式的優缺點
- 垃圾回收機制
- Jvm的參數你知道的說一下
- 設計模式瞭解的說一下啊
- 手撕一個單例模式
算法題目
- 手撕算法:反轉單鏈表
- 手撕算法:實現類似微博子結構的數據結構,輸入一系列父子關係,輸出一個類似微博評論的父子結構圖
- 手寫java多線程
- 手寫java的soeket編程,服務端和客戶端
- 手撕算法: 爬樓梯,寫出狀態轉移方程
- 智力題:時針分針什麼時候重合
百度二面(現場)
- 自我介紹
- 項目介紹
- 服務器如何負載均衡,有哪些算法,哪個比較好,一致性哈希原理,怎麼避免DDOS攻擊請求打到少數機器。
- TCP連接中的三次握手和四次揮手,四次揮手的最後一個ack的作用是什麼,爲什麼要time wait,爲什麼是2msl。
- 數據庫的備份和恢復怎麼實現的,主從複製怎麼做的,什麼時候會出現數據不一致,如何解決。
- Linux查看cpu佔用率高的進程
- 手撕算法:給定一個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。
- 然後繼續在這個問題上擴展
- 求出最短那條的路徑
- 遞歸求出所有的路徑
- 設計模式講一下熟悉的
- 會不會濫用設計模式
- 多線程條件變量爲什麼要在while體裏
- 你遇到什麼挫折,怎麼應對和處理
百度三面(現場)
- 自我介紹
- 項目介紹
- Redis的特點
- Redis的持久化怎麼做,aof和rdb,有什麼區別,有什麼優缺點。
- Redis使用哨兵部署會有什麼問題,我說需要擴容的話還是得集羣部署。
- 說一下JVM內存模型把,有哪些區,分別幹什麼的
- 說一下gc算法,分代回收說下
- MySQL的引擎講一下,有什麼區別,使用場景呢
- 分佈式事務瞭解麼
- 反爬蟲的機制,有哪些方式
阿里中間件(四面)
Java中間件一面
技術一面考察範圍:
- 重點問了Java線程鎖:synchronized 和ReentrantLock相關的底層實現
- 線程池的底層實現以及常見的參數
- 數據結構基本都問了一遍:鏈表、隊列等
- Java內存模型:常問的JVM分代模型,以及JDK1.8後的區別,最後還問了JVM相關的調優參數
- 分佈式鎖的實現比較
技術一面題目:
- 1:自我介紹
- 2:擅長哪方面的技術?
- 3;java有哪些鎖中類?(樂觀鎖&悲觀鎖、可重入鎖&Synchronize等)。
- 4:比較重要的數據結構,如鏈表,隊列,棧的基本原理及大致實現
- 5:J.U.C下的常見類的使用。Threadpool的深入考察;blockingQueue的使用
- 6:Java內存分代模型,GC算法,JVM常見的啓動參數;CMS算法的過程。
- 7:Volatile關鍵字有什麼用(包括底層原理)
- 8:線程池的調優策略
- 9:Spring cloud的服務註冊與發現是怎麼設計的?
- 10:分佈式系統的全局id如何實現
- 11:分佈式鎖的方案,redis和zookeeper那個好,如果是集羣部署,高併發情況下那個性能更好。
Java中間件二面
技術二面考察範圍:
- 問了項目相關的技術實現細節
- 數據庫相關:索引、索引底層實現、mysql相關的行鎖、表鎖等
- redis相關:架構設計、數據一致性問題
- 容器:容器的設計原理等
技術二面題目:
- 參與的項目,選一個,技術難度在哪裏?
- Collections.sort底層排序方式
- 負載均衡的原理
- 設計模式與重構,談談你對重構的理解
- 談談redis相關的集羣有哪些成熟方案?
- 再談談一致hash算法(redis)?
- 數據庫索引,B+樹的特性和建樹過程
- Mysql相關的行鎖,表鎖;樂觀鎖,悲觀鎖
- 談談多線程和併發工具的使用
- 談談redis的架構和組件
- Redis的數據一致性問題(分佈式多節點環境&單機環境)
- Docker容器
Java中間件三面
技術三面考察範圍
- 主要談到了高併發的實現方案
- 以及中間件:redis、rocketmq、kafka等的架構設計思路
- 最後問了平時怎麼提升技術的
技術三面題目
- 高併發情況下,系統是如何支撐大量的請求的?
- 接着上面的問題,延伸到了中間件,kafka、redis、rocketmq、mycat等設計思路和適用場景等
- 最近上過哪些技術網站;最近再看那些書。
- 工作和生活中遇見最大的挑戰,怎麼去克服?
- 未來有怎樣的打算
- Java中間件四面
最後,你懂的,主要就是HR走流程了,主要問了未來的職業規劃。
螞蟻中間件團隊面試題
螞蟻中間件一面:
- 自我介紹
- 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算法
螞蟻中間件二面
- 你在項目中怎麼用到併發的。
- 消息隊列的使用場景,談談Kafka。
- 你說了解分佈式服務,那麼你怎麼理解分佈式服務。
- Dubbo和Spring Clound的區別,以及使用場景。
- 講一下docker的實現原理,以及與JVM的區別。
- MongoDB、Redis和Memcached的應用場景,各自優勢
- MongoDB有事務嗎
- Redis說一下sorted set底層原理
- 講講Netty爲什麼併發高,相關的核心組件有哪些
螞蟻中間件三面
- 完整的畫一個分佈式集羣部署圖,從負載均衡到後端數據庫集羣。
- 分佈式鎖的方案,Redis和Zookeeper哪個好,如果是集羣部署,高併發情況下哪個性能更好。
- 分佈式系統的全局id如何實現。
- 數據庫萬級變成億級,你如何來解決。
- 常見的服務器雪崩是由什麼引起的,如何來防範。
- 異地容災怎麼實現
- 常用的高併發技術解決方案有哪些,以及對應的解決步驟。
2021年頭條抖音Java (三面)
一面:
- hashmap,怎麼擴容,怎麼處理數據衝突?怎麼高效率的實現數據遷移?
- Linux的共享內存如何實現,大概說了一下。
- socket網絡編程,說一下TCP的三次握手和四次揮手
- 同步IO和異步IO的區別?
- Java GC機制?GC Roots有哪些?
- 紅黑樹講一下,五個特性,插入刪除操作,時間複雜度?
- 快排的時間複雜度,最壞情況呢,最好情況呢,堆排序的時間複雜度呢,建堆的複雜度是多少
二面:
- 自我介紹,主要講講做了什麼和擅長什麼
- 設計模式瞭解哪些?
- AtomicInteger怎麼實現原子修改的?
- ConcurrentHashMap 在Java7和Java8中的區別?爲什麼Java8併發效率更好?什麼情況下用HashMap,什麼情況用ConcurrentHashMap?
- redis數據結構?
- redis數據淘汰機制?
三面(約五十分鐘):
- mysql實現事務的原理(MVCC)
- MySQL數據主從同步是如何實現的?
- MySQL索引的實現,innodb的索引,b+樹索引是怎麼實現的,爲什麼用b+樹做索引節點,一個節點存了多少數據,怎麼規定大小,與磁盤頁對應。
- 如果Redis有1億個key,使用keys命令是否會影響線上服務?
- Redis的持久化方式,aod和rdb,具體怎麼實現,追加日誌和備份文件,底層實現原理的話知道麼?
- 遇到最大困難是什麼?怎麼克服?
- 未來的規劃是什麼?
- 你想問我什麼?
美團內推(一面+二面+三面)面試題目
美團一面(電話)
- 自我介紹
- 項目介紹
- Redis介紹
- 瞭解redis源碼麼
- 瞭解redis集羣麼
- Hashmap的原理,增刪的情況後端數據結構如何位移
- hashmap容量爲什麼是2的冪次
- hashset的源碼
- object類你知道的方法
- hashcode和equals
- 你重寫過hashcode和equals麼,要注意什麼
- 假設現在一個學生類,有學號和姓名,我現在hashcode方法重寫的時候,只將學號參與計算,會出現什麼情況?
- 往set裏面put一個學生對象,然後將這個學生對象的學號改了,再put進去,可以放進set麼?並講出爲什麼
- Redis的持久化?有哪些方式,原理是什麼?
- 講一下穩定的排序算法和不穩定的排序算法
- 講一下快速排序的思想
美團二面(現場)
- 自我介紹
- 講一下數據的acid
- 什麼是一致性
- 什麼是隔離性
- Mysql的隔離級別
- 每個隔離級別是如何解決
- Mysql要加上nextkey鎖,語句該怎麼寫
- Java的內存模型,垃圾回收
- 線程池的參數
- 每個參數解釋一遍
- 然後面試官設置了每個參數,給了是個線程,讓描述出完整的線程池執行的流程
- Nio和IO有什麼區別
- Nio和aio的區別
- Spring的aop怎麼實現
- Spring的aop有哪些實現方式
- 動態代理的實現方式和區別
- Linux瞭解麼
- 怎麼查看系統負載
- Cpu load的參數如果爲4,描述一下現在系統處於什麼情況
- Linux,查找磁盤上最大的文件的命令
- Linux,如何查看系統日誌文件
- 手撕算法:leeetcode原題 22,Generate Parentheses,給定 n 對括號,請寫一個函數以將其生成新的括號組合,並返回所有組合結果。
美團三面(現場)
三面沒怎麼問技術,問了很多技術管理方面的問題
- 自我介紹
- 項目介紹
- 怎麼管理項目成員
- 當意見不一致時,如何溝通並說服開發成員,並舉個例子
- 怎麼保證項目的進度
- 數據庫的索引原理
- 非聚簇索引和聚簇索引
- 索引的使用注意事項
- 聯合索引
- 從底層解釋最左匹配原則
- Mysql對聯合索引有優化麼?會自動調整順序麼?哪個版本開始優化?
- Redis的應用
- Redis的持久化的方式和原理
- 技術選型,一個新技術和一個穩定的舊技術,你會怎麼選擇,選擇的考慮有哪些
- 說你印象最深的美團點評技術團隊的三篇博客
- 最近在學什麼新技術
- 你是怎麼去接觸一門新技術的
- 會看哪些書
- 怎麼選擇要看的書
京東4面(Java研發)
一面(基礎面:約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的區別?詳細點
二面(問數據庫較多)
- 自我介紹
- 爲什麼MyISAM查詢性能好?
- 事務特性(acid)
- 隔離級別
- SQL慢查詢的常見優化步驟?
- 說下樂觀鎖,悲觀鎖(select for update),並寫出sql實現
- TCP協議的三次握手和四次揮手過程?
- 用到過哪些rpc框架
- 數據庫連接池怎麼實現
- Java web過濾器的生命週期
三面(綜合面;約一個小時)
- 自我介紹。
- ConcurrentHashMap 在Java7和Java8中的區別?爲什麼Java8併發效率更好?什麼情況下用HashMap,什麼情況用ConcurrentHashMap?
- 加鎖有什麼機制?
- ThreadLocal?應用場景?
- 數據庫水平切分,垂直切分的設計思路和切分順序
- Redis如何解決key衝突
- soa和微服務的區別?
- 單機系統演變爲分佈式系統,會涉及到哪些技術的調整?請從前面負載到後端詳細描述。
- 設計一個秒殺系統?
四面(HR面)
- 1.你自己最大優勢和劣勢是什麼
- 2.平時遇見過什麼樣的挑戰,怎麼去克服的
- 3.工作中遇見了技術解決不了的問題,你的應對思路?
- 4.你的興趣愛好?
- 5.未來的職業規劃是什麼?
【頭條Java後臺3面】— (20年十二月份)
頭條一面
- 1.講講jvm運行時數據庫區
- 2.講講你知道的垃圾回收算法
- 3.jvm內存模型jmm
- 4.內存泄漏與內存溢出的區別
- 5.select、epool 的區別?底層的數據結構是什麼?
- 6.mysql數據庫默認存儲引擎,有什麼優點
- 7.優化數據庫的方法,從sql到緩存到cpu到操作系統,知道多少說多少
- 8.什麼情景下做分表,什麼情景下做分庫
- 9.linkedList與arrayList區別 適用場景
- 10.array list是如何擴容的
- 11.volatile 關鍵字的作用?Java 內存模型?
- 12.java lock的實現,公平鎖、非公平鎖
- 13.悲觀鎖和樂觀鎖,應用中的案例,mysql當中怎麼實現,java中的實現
頭條二面
- Java 內存分配策略?多個線程同時請求內存,如何分配?
- Redis 底層用到了哪些數據結構?使用 Redis 的 set 來做過什麼?
- Redis 使用過程中遇到什麼問題?搭建過 Redis 集羣嗎?
- 如何分析“慢查詢”日誌進行 SQL/索引 優化?
- MySQL 索引結構解釋一下?(B+ 樹)
- MySQL Hash 索引適用情況?舉下例子?
頭條三面
- 如何保證數據庫與redis緩存一致的
- Redis 的併發競爭問題是什麼?如何解決這個問題?瞭解 Redis 事務的 CAS 方案嗎?
- 如何保證 Redis 高併發、高可用?
- Redis 的主從複製原理,以及Redis 的哨兵原理?
- 如果讓你寫一個消息隊列,該如何進行架構設計啊?說一下你的思路。
- MySQL數據庫主從同步怎麼實現?
- 秒殺模塊怎麼設計的,如何壓測,抗壓手段
【今日頭條Java後臺研發三面】—(20年金九銀十期間)
一面
- concurrent包下面用過哪些?
- countdownlatch功能實現
- synchronized和lock區別,重入鎖
- thread和runnable的區別
- AtomicInteger實現原理(CAS自旋)
- java併發sleep與wait、notify與notifyAll的區別
- 如何實現高效的同步鏈表
- java都有哪些加鎖方式(synchronized、ReentrantLock、共享鎖、讀寫鎖等)
- 設計模式(工廠模式、單例模式(幾種情況)、適配器模式、裝飾者模式)
- maven依賴樹,maven的依賴傳遞,循環依賴
二面
- synchronized和reentrantLock的區別,synchronized用在代碼快、方法、靜態方法時鎖的都是什麼?
- 介紹spring的IOC和AOP,分別如何實現(classloader、動態代理)
- JVM的內存佈局以及垃圾回收原理及過程講一下,講一下CMS垃圾收集器垃圾回收的流程,以及CMS的缺點
- redis如何處理分佈式服務器併發造成的不一致
- OSGi的機制
- spring中bean加載機制,bean生成的具體步驟,ioc注入的方式
- spring何時創建applicationContext
- listener是監聽哪個事件?
- 介紹ConcurrentHashMap原理,用的是哪種鎖,segment有沒可能增大?
- 解釋mysql索引、b樹,爲啥不用平衡二叉樹、紅黑樹
- Zookeeper如何同步配置
三面
- Java線程池ThreadPoolEcecutor參數,基本參數,使用場景
- MySQL的ACID講一下,延伸到隔離級別
- dubbo的實現原理,說說RPC的要點
- GC停頓原因,如何降低停頓?
- JVM如何調優、參數怎麼調?
- 如何用工具分析jvm狀態(visualVM看堆中對象的分配,對象間的引用、是否有內存泄漏,jstack看線程狀態、是否死鎖等等)
- 描述一致性hash算法(Redis)
- 分佈式雪崩場景如何避免?
-
再談談消息隊列