2019面經總結
網路收集的2019大廠面試總結
2019java面試分模組總結
設計模式
1、用到哪些設計模式?怎麼用的
2、單例模式的不同寫法
JDK
1、聊一下java的集合類
2、HashMap底層資料結構,以及解決hash碰撞的方法
3、Hashmap為什麼要使用紅黑樹
4、集合類怎麼解決高併發問題
5、佇列的使用問題
6、自定義異常的應用場景
7、Object類中的方法
8、1.8的新特性
9、Java中的靜態方法只有一個例項,如果想用多個例項怎麼辦?
10、Java面向物件的基本特徵,繼承、封裝與多型
11、重寫和過載是什麼意思
12、怎樣宣告一個類不會被繼承
13、HashMap中jdk1.7與jdk1.8的區別
14、concurrenthashMap 的底層實現原理,是如何實現執行緒安全的?
15、Java中的自增是執行緒安全的嗎,如何實現執行緒安全的自增
16、Jdk1.8種的stream有用過嗎,stream的並行操作原理,stream並行的執行緒池是從哪裡來的
17、Jdk1.8的completableFuture有用過嗎?
18、Java種的代理有幾種實現方式
JVM
1、jvm記憶體模型,以及這些空間的存放內容
2、堆記憶體劃分的空間,如何回收這些記憶體物件,有哪些回收演算法
3、jvm調優,如何解決線上gc問題
4、class初始化過程
5、記憶體溢位的原因,如何排查線上問題
6、jvm有哪些垃圾回收器,
7、類載入模型
8、JVM為什麼要增加元空間?
9、堆G1垃圾收集器有了解麼,有什麼特點
多執行緒
1、多執行緒之間是如何通訊的
2、synchronized底層實現,和lock的區別
3、synchronized關鍵字加在靜態方法和例項方法的區別
4、countdownlatch的用法
5、執行緒池
(1)Executor提供了幾種執行緒池
(2)執行緒池的引數
(3)拒絕策略
(4)任務放置的順序過程
(5)任務結束後會不會回收執行緒
(6)未使用的執行緒池中的執行緒放在哪裡
(7)執行緒池執行緒存在哪
(8)cache執行緒池會不會銷燬核心執行緒
6、Java多執行緒的幾種狀態及執行緒各個狀態之間是如何切換的
7、Java中的wait和sleep的區別與聯絡
8、如何在方法棧中進行資料傳遞?
9、ThreadLocal的底層實現形式及實現的資料結構?
10、Sychornized是否是公平鎖
11、Sychronized和ReentryLock的區別
12、伺服器CPU數量及執行緒池數量的關係
mysql
1、Mysql的索引型別,底層索引資料結構,葉子節點儲存的是什麼,索引失效的原因
2、如何優化sql,查詢計劃的結果中看哪些些關鍵資料
3、innodb和myisam的區別
4、mysql預設隔離級別,
5、mysql的樂觀鎖和悲觀鎖,鎖的種類
6、如何用sql實現樂觀鎖和悲觀鎖
7、mysql如何分庫分表
8、MySQL為什麼選擇B+樹作為它的儲存結構,為什麼不選擇Hash、二叉、紅黑樹
9、Mysql資料庫的事務與鎖的理解
10、資料庫臨時表有沒有用過,是怎麼用的?
11、多資料來源情況下如何進行事物的管理
12、Union和union all有什麼區別
13、dateTime和timestamp有什麼區別
14、mysql主從模式的實現
15、如何解析sql語句;即explain關鍵字的使用
16、Mysql的主從同步原理,mysql主從複製主要有幾種模式
Spring
1、spring的底層程式碼,
2、bean的生命週期
3、迴圈引用問題,以及spring中用到的設計模式
4、spring和springBoot的區別
5、spring的AOP的底層實現原理
6、spring的事務是如何回滾的
7、Spring 是如何解決迴圈依賴的問題的?
8、Spring IOC的理解,原理與實現
9、Bean Factory與FactoryBean有什麼區別?@Bean這個註解時如何實現Bean的注入的?
Mybatis
1、hibernate的區別
2、mybatis的快取,都快取些什麼,session快取存在哪
3、mybatis的執行流程,需要了解原始碼
4、mybatis如何防止sql注入
redis
1、redis的資料結構型別,一般都用在什麼場景下
2、sortedSet的底層資料結構
3、利用redis實現分散式鎖
4、redis使用單執行緒的好處
5、redis中如何控制多執行緒併發
6、redis刪除key的策略
7、redis的主動快取,被動快取
8、如何保證資料一致性問題
9、叢集環境下如何處理,解釋一下一致性雜湊
10、解釋一下快取擊穿,快取穿透,快取雪崩,如何解決這些問題
11、排行榜功能的實現:使用redis的zset;zset的底層資料結構是什麼樣的;除了redis的zset還有什麼其他的資料結構可以實現這個功能
12、Redis叢集種類:主從模式、cluster模式及其應用
13、Redis種資料型別及應用場景
zookeeper
1、zookeeper如何保證可用性?
2、Zookeeper的原理
3、什麼情況下會使用zookeeper,zookeeper如何監聽生成的節點,zk內部是如何實現的
4、Zookeeper0、zookeeper1、zookeeper2,三個節點的叢集描述一下從zk啟動,到zk對外提供服務的整個過程
5、有一個key,往zk寫入,到寫入成功它的大體過程是什麼樣的
6、Zookeeper監聽器的原理
MQ
1、mq的結構圖
2、如何保證消費者是否消費
3、ack返回的種類
4、請求過程服務宕機如何處理
5、什麼場景下會使用MQ;MQ的優勢與劣勢,什麼時候不能用MQ
springboot
1、springboot啟動過程中做了哪些事情?
2、Springboot 啟動類上的註解 @spring boot Application說明?
3、Springboot如何判斷當前應用是否時web應用?
4、Spring boot整合jsp的流程,需要注意哪些點
SpringCloud
1、SpringCloud和dubbo的區別
2、專案中用到了哪些元件
3、eureka的原理,如何保證高可用性,和Zookeeper有什麼區別
4、feign如何呼叫的
5、處理生產環境上配置生效問題
6、hystrix的降級策略有哪些
7、Springcloud eureka是如何註冊服務、如何監測心跳的,它註冊的流程是怎麼樣的
8、在分散式環境中如何快速發現某一臺服務有問題
9、分散式集群系統對外提供介面的時候如何驗證對方的身份
10、Eureka和zookeeper作為註冊中心有什麼區別
Linux伺服器
1、Linux如何檢視應用佔用記憶體情況
2、Linux指令碼編寫會麼
架構設計
1、如何做一個秒殺系統
2、如何實現高可用、高併發、高吞吐的技術方案
3、A給B發請求,B執行往資料庫insert的操作;設計一個架構,保證能夠提供最大的併發量
其他小知識點
1、Nginx如何做限流?令牌桶演算法與漏桶演算法
2、Tomcat調優
3、為什麼使用RPC框架,什麼時候會使用http請求
4、tomcat啟動原理
5、Http協議
6、epoll模型
7、如何實現呼叫遠端服務的介面
阿里淘系面經
一面:
1、聊之前的專案經驗,詳細描述
2、Java知識體系中整體的集合框架
3、為什麼hashmap在jdk8的時候要進行樹化(泊松分佈)
4、hashmap執行緒安全的方式(concurrenthashmap原始碼層次)
5、鎖的分類
樂觀鎖、悲觀鎖、自旋鎖、讀寫鎖、排他鎖、共享鎖、分段鎖的各種機制及實現方式
6、spring IOC的底層實現
XML、dom4j、工廠、單例
7、mysql索引的分類及實現機制
二面
1、介紹專案
2、執行緒池的建立方式、分類、應用場景、拒絕策略的場景
3、spring AOP的底層實現
動態代理、newProxyInstance、cglib、SAM
4、代理模式
靜態代理、動態代理
5、詳細介紹自己的設計模式
三面
1、千萬級資料量的list找一個數據(搶紅包案例)
四面
1、詳細專案介紹
2、JVM記憶體管理
棧上分配->TLAB->新聲代、老年代->可達性分析->GC演算法->所有垃圾回收器及其優缺點和特點
那到底多大的物件會被直接扔到老年代
G1兩個region不是連續的,而且之間還有可達的引用,我現在要回收其中一個,另一個會被怎麼處理
CMS的併發預處理和併發可中斷預處理
五面
1、百萬級int資料量的一個array求和(fork/join)
六面
1、參加面試的是碩士,所以問了科研專案
七面
1、聊人生
百度面經
1、synchrnoized和reentrantlock的底層實現及重入的底層原理
2、鎖的四種狀態及升級過程
3、CMS和G1的異同
4、G1什麼時候引發Full GC?
5、除了CAS,原子類,syn,Lock還有什麼執行緒安全的方式
6、HashMap和Hashtable的異同
7、允許null鍵的map你知道哪些
HashMap,LinkedHashMap,WeakHashMap
8、為什麼hashmap擴容的時候是兩倍
9、紅黑樹的插入時間複雜度
10、解決hash衝突的方式
11、現在有1T的資料,但是隻有1G記憶體,如何進行排序
12、Tomcat為什麼要重寫類載入器
13、tcp握手揮手過程及其狀態轉換
14、mysql隔離級別
15、B樹和B+樹的區別
16、你知道哪些設計模式,它們在JDK原始碼中是怎麼體現的
17、Java執行時資料區
18、常見的垃圾回收演算法有哪些
19、吞吐量優先和響應時間優先的回收器是哪些
20、類載入全過程
21、執行緒池7個引數
22、CAS的ABA問題怎麼解決
23、Java記憶體模型
24、什麼叫做阻塞佇列的有界和無界
25、說明session和cookie的區別
26、說一下反射,反射會影響效能嗎
27、說一些AQS
28、JUC包裡的同步元件主要實現了AQS的哪些主要方法
2019菜鳥快遞面經
阿里一面
1、java記憶體模型分為了幾塊區域?元空間裡有些啥?
2、物件存在java記憶體的那塊區域裡面
3、string類的用法,string a="Hello" string a = new string("hello")建立的流程
4、NIO知道麼? nio底層呼叫了啥?啥是非阻塞IO?
5、jdk hashmap 底層儲存?紅黑樹的特點,為啥不用陣列用紅黑樹?
6、資料庫用過麼?用的啥資料庫,mysql用的啥引擎?為啥資料庫底層用B+樹不用紅黑樹?
7、多執行緒,AtomicInteger底層用的啥?cas的原理,AtomicInteger用了Voliate麼?voliate的原理,變數加Voliate被修改了其他執行緒能立刻知道麼?
8、HBase底層資料儲存的結構,HRegion如何分裂?
9、UnSafe類知道麼?
阿里二面
1、聊專案
2、由專案聊到高併發,C3P0資料庫的優點,不加機器,單體應用怎麼優化效能?
3、校園經歷
4、一道設計模式的編碼題
寫程式碼實現以下業務場景:
“小明和小張去中介找房子,小明要3室2廳的房子但租金不要超過6000,小李的要求是租金不超過1500的都能接受。中介說沒問題,你們留個電話,有房子我通知你們”
考察點:
1、面向物件建模
2、觀察者或者Callback模式
3、策略模式
阿里三面
1、個人介紹
2、最難忘的專案
3、JVM載入類的過程,JVM的ClassLoading有幾種,怎麼改變ClassLoading的載入順序?
4、如何解決Jar包衝突
5、繼承的原理
6、對技術那方面感興趣
7、如何學習一門新技術
2019滴滴面經
一面:
1、自我介紹
2、講下快速排序,經典快排存在的問題
3、1000萬個取其中最大的100個數
3、1 MapReduce的設計思想,但是有內排序的問題
3、2堆排序,堆排序的過程
4、樹的中序遍歷實現
4.1遞迴
4.2藉助棧
5、介紹下osi7層模型
6、arp協議快取的過程
7、TCP的控制位
8、TCP的狀態
9、TCP建連的狀態
10、TCP的頭部資訊
11、jvm監控系統是通過jmx做的麼?再改進中,用的jdk自帶的工具
12、java記憶體結構
13、jvm的棧跟執行緒關係
14、是每個執行緒都會建立一個棧還是共用一個棧?
15、介紹volatile的功能
16、匯流排鎖的副作用
17、記憶體屏障的彙編指令是啥?
18、你有看過什麼原始碼嘛?AQS
19、介紹一下AQS
20、扯到了CAS的原理
21、AQS怎麼阻塞當前執行緒
22、locksupport的park在jvm怎麼實現的?
23、你瞭解垃圾回收嗎?
24、垃圾回收器讓工作執行緒停頓下來是怎麼做的?
25、GC ROOts物件有幾種?
26、gc roots怎麼判斷一個物件沒有被引用?
二面:
1、介紹專案
2、spark用的多嗎?
3、在java開發平時做了哪些專案
4、看過原始碼嗎?
5、介紹下ConcurrentHashMap
6、介紹下CAS
7、介紹下volatile
8、手寫生產者和消費者
9、mysql的索引失效和優化問題
10、mysql的索引結構
11、回表操作分析
13、介紹下左連線、右連線、全連線查詢
14、redis的應用場景
15、redis是單執行緒還是多執行緒
16、redis存線上程安全的問題嗎?為什麼
17、spring aop怎麼使用及其原理
18、怎麼實現遠端rpc?
19、es的應用場景
20、服務被別人攻擊,不斷重新整理頁面,怎麼解決這個問題
2019京東面經
1、總體說一下集合框架
2、你怎麼看待介面和抽象類
3、索引的分類
4、主鍵索引的設計應該採用B-tree索引還是hash索引
5、設計模式
6、談一談DDD面向領域程式設計
7、說一下hibernate一級快取和二級快取
8、說一下你瞭解的MQ
9、談一談你對高併發的理解,你會從什麼角度設計高併發程式
10、JUC包裡的限流該怎麼做到
11、索引不適用的條件
12、說一下NIO和AIO
13、AIO裡用到什麼設計模式
14、說一下select,poll,epoll
15、談一下TCP的擁塞控制
16、你知道什麼是as-if-serial語義嗎,它和happen-before語義有什麼區別
17、Executors建立執行緒池的方式
18、CachedThreadPool裡面用的什麼阻塞佇列
19、那你知道LinkedTransferQueue嗎,和SynchronousQueue有什麼區別
20、你還知道什麼阻塞佇列,能具體說說它們的特點嗎
21、執行緒池的執行緒數怎麼設定比較好
22、你知道新出的LongAdder嗎,和AtomicLong有什麼區別
23、那你知道LongAccumulator嗎
2019京東面經
一面:
1、zookeeper在專案中的使用及原理
2、SpringCloud的元件介紹
3、redis相關:
-
redis分散式鎖的實現方式
-
redis為什麼要使用setnx?set和setnx有什麼區別?
-
setNx:系統在10:05 設定一個值,並給出5分鐘的過期時間,系統剛剛set完之後redis叢集崩潰,10:11分系統重啟成功,那麼redis中set的值是否還存在?
-
剛剛set完資料之後,能否被持久化到快照或者binlog中
-
假設redis被持久化,且系統重啟事件超過了redis設定的過期時間,那麼key是否會被清理?
4、zookeeper的實現方式
5、多執行緒的實現方式
1、繼承thread類
2、實現runnable介面
3、實現callable介面
4、執行緒池可以進行建立,說明每個引數之間的邏輯關係
6、伺服器CPU數量及執行緒池數量的關係
7、mysql調優
1、效能監控
2、schema與資料型別優化
3、執行計劃
4、通過索引進行優化
5、查詢優化
6、分割槽表
7、伺服器引數設定
8、mysql叢集方式的優化
詳細細節可以參考mysql調優的視訊
8、如何做一個秒殺系統?
9、對自己技術的認知程度
二面:
1、mysql是叢集還是單節點?最大的表的資料量多大?
在公司的環境中,一般都是叢集的環境,單表的最大規模是沒有上限的,但是考慮到查詢效能的優化,一般在幾千萬左右,超過之後會大程度的影響效能
2、mysql主從同步機制的原理?主要有幾種模式?
3、redis持久化的方式?在哪個版本允許分散式使用?
rdb
aof
4、nginx的使用場景
請求轉發
負載均衡
反向代理
5、spark的應用場景
6、js閉包
閉包就是能夠讀取其他函式內部變數的函式
7、離職原因
2019美團面經
1、ConcurrentHashMap底層原理
2、手寫一個LRU頁面置換演算法
3、HashMap底層資料結構
4、為什麼用紅黑樹不用普通的AVL樹
5、為什麼在8的時候連結串列變成樹
6、為什麼在6的時候從樹退回連結串列
7、執行緒池7個引數,該怎麼配置最好
8、說一下volatile
9、volatile的可見性和禁止指令重排序怎麼實現的
10、CAS是什麼
11、PriorityQueue底層是什麼,初始容量是多少,擴容方式呢
12、HashMap的容量為什麼要設定為2的次冪
13、你知道跳錶嗎,什麼場景會用到
14、CopyOnWriteArrayList知道嗎,迭代器支援fail-fast嗎
15、innodb的底層資料結構
16、為什麼用B+樹不用B樹
17、為什麼用B+樹不用紅黑樹
18、coding:無序陣列怎麼尋找第k大的數,寫一個二叉樹層次遍歷
19、不知道大小的資料流取其中100個數,怎樣的取法能最隨機
20、n個物品每個物品都有一定價值,分給2個人,怎麼分兩個人的價值差最小
21、假設百度每個頁面能放100個網頁,每個頁面都有一個評分,怎樣快速找到第8頁的所有網頁
2019順豐面經
1、執行緒池的設計裡體現了什麼設計模式
2、說說你瞭解什麼設計模式,知道責任鏈設計模式嗎
3、wait/notify體現了什麼設計模式
4、執行緒池7個引數
5、談一下spring事務傳播
6、談一下IOC底層原理
7、怎麼判斷記憶體洩漏
8、怎麼在日誌裡排查錯誤,該用哪些Linux命令
9、mysql原子性和永續性怎麼保證
10、怎麼解決幻讀
11、innodb和myisam區別
12、索引分類
13、物件的建立過程
14、物件在記憶體中的儲存佈局
15、物件頭具體包括什麼
16、物件怎麼定位
17、堆的劃分
18、物件怎麼分配
19、具體講一下CMS流程
20、鎖的四種狀態
21、Object obj = new Object()這句話在記憶體裡佔用了多少記憶體
22、synchronized和reentrantLock的異同