1. 程式人生 > 實用技巧 >2019面經總結

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的異同