後端 面試題集錦

衣舞晨風發表於2017-02-02

一、Java部分

1、java比較 icompare
2、tomcat 熱部署 載入方式與雙親委派模型?
為什麼要設計雙親委派模型?
3、java io api 過濾器模式?
4、threadLocal 實現原理?
5、tcp ip協議
6、服務端如何確定seesion是同一個?
7、記憶體屏障(Memory Barriers)
http://blog.jobbole.com/53697/
8、lock synchronized ReentrantLock
深入研究 Java Synchronize 和 Lock 的區別與用法
Java併發程式設計實戰–顯式的Condition物件
9、jvm JVM的年輕代分為哪幾代?年輕代什麼時候會進入老年代?
10、jvm JVM 垃圾回收演算法?(注意年輕代與老年代是不一樣的)?
11、jvm記憶體模型 一個變數初始化 怎麼分配記憶體 分配到什麼地方?
12、不使用雙親委派模型的缺點?
13、java 開源序列化框架有哪些?彼此之間有什麼區別(優缺點)?
14、java.util.concurrent hashmap 相關問題
15、JAVA執行緒sleep和wait方法區別
https://blog.csdn.net/jiankunking/article/details/79824353
16、PriorityQueue(優先順序佇列) 堆相關問題
17、常見的負載均衡演算法
18、java 阻塞佇列 相關問題,阻塞具體是如何實現的?
其實阻塞佇列實現阻塞同步的方式很簡單,使用的就是是lock鎖的多條件(condition)阻塞控制。使用BlockingQueue封裝了根據條件阻塞執行緒的過程,而我們就不用關心繁瑣的await/signal操作了。

lock中使用多條件condition
Java併發程式設計實戰–顯式的Condition物件
19、靜態程式碼塊、構造程式碼塊、建構函式以及Java類初始化順序
20、java 列舉的實現,內部如何進行儲存的?
Java 列舉實現原理
21、靜態內部類與普通內部類,在用法、初始化方面的區別?
22、java 原子性 可見性 順序性是通過什麼來保證的?
23、java 多執行緒內共享的模型
24、阻塞非阻塞與同步非同步
25、java nio原理
nio作用?是不是阻塞的?比如有個請求,獲取資料,後面的處理還依賴前面的資料。
Java NIO 淺析
Java NIO AIO 基本概念
26、讀寫鎖 自旋鎖 嘗試鎖(cas) cas如何保證,查詢到修改這個過程是原子的?
27、一個類中的靜態變數是在類載入的哪個步驟載入的?
28、synchronized與ReentrantLock 實現原理區別?
29、threadlocal 實現原理?應用場景?
30、常見的設計模式
31、分散式事務
32、執行緒池工作原理及機制
核心執行緒數、最大執行緒數、拋棄策略
https://www.jianshu.com/p/12468c88be50?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

一次Java執行緒池誤用引發的血案和總結
33、執行緒掛了 保活
34、keepalive 保活策略?
35、Protocol Buffers 適用場景?
36、http tcp 相比多了些什麼?有什麼不一樣的地方?
37、http與https區別?加密演算法是?
38、wait 是釋放鎖?為什麼釋放了鎖,執行緒就掛起了。
為什麼執行緒wait了就掛起了?
39、CMS 垃圾回收
40、hashmap 執行緒不安全 什麼時候會出現?會出現什麼問題?
http://www.cnblogs.com/qiumingcheng/p/5259892.html

當多個執行緒同時檢測到總數量超過門限值的時候就會同時呼叫resize操作,各自生成新的陣列並rehash後賦給該map底層的陣列table,結果最終只有最後一個執行緒生成的新陣列被賦給table變數,其他執行緒的均會丟失。而且當某些執行緒已經完成賦值而其他執行緒剛開始的時候,就會用已經被賦值的table作為原始陣列,這樣也會有問題。
41、equals 比較原理?
子類重寫equals方法
42、jvm 記憶體分佈
43、arraylist linklist
44、interger 為null 轉int 會發生什麼?

Exception in thread "main" java.lang.NullPointerException

45、hashmap與hashset的關係?
hashset是用hashmap來實現的,只不過map中的value都是

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();

46、執行緒與協程的區別?協程的優勢?
https://blog.csdn.net/jiankunking/article/details/79823955

47、JDK8 如何實現協程?
Java裡的協程

48、java lambda 實現原理
https://blog.csdn.net/jiankunking/article/details/79825928

49、java stream 實現原理

50、永久代(permanent generation)與Metaspace
JVM的Heap Memory和Native Memory
Java 8的元空間(metaspace)

51、如何保證GC ROOTS找的全?(比如中G1中)
G1收集器中,Region之間的物件引用以及其他收集器中的新生代和老年代之間的物件引用是使用Remembered Set來避免掃描全堆。G1中每個Region都有一個與之對應的Remembered Set,虛擬機器發現程式對Reference型別資料進行寫操作時,會產生一個Write Barrier暫時中斷寫操作,檢查Reference引用的物件是否處於不同的Region之間(在分代中例子中就是檢查是否老年代中的物件引用了新生代的物件),如果是便通過CardTable把相關引用資訊記錄到被引用物件所屬的Region的Remembered Set中。當記憶體回收時,在GC根節點的列舉範圍加入Remembered Set即可保證不對全域性堆掃描也不會有遺漏。

52、G1清理老年代、年輕代是遍歷所有嗎?

53、可重入鎖和不可重入鎖?不可重入鎖有啥缺陷?
54、CPU密集型 Java執行緒池大小為何會大多被設定成CPU核心數+1?
https://www.zhihu.com/question/38128980

以下內容摘自《Java Concurrency In Practise》8.2節
對於計算密集型的任務,在擁有N個處理器的系統上,當執行緒池的大小為N+1時,通常能實現最優的效率。(即使當計算密集型的執行緒偶爾由於缺失故障或者其他原因而暫停時,這個額外的執行緒也能確保CPU的時鐘週期不會被浪費。)

55、什麼情況下會出現ClassNotFoundException?
56、執行緒有幾種狀態?
NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
分別對應於
新建、執行、阻塞、等待、帶超時的等待、終止
57、如何動態上報JVM資訊,以便後期排查OOM等問題?
是否可以通過exporter這種方式,然後讓prometheus來抓取
58、ConcurrentHashMap put的時候加鎖的是陣列上的元素 還是啥?
是陣列上對應位置的node
https://github.com/jiankunking/backups/blob/master/jdk/ConcurrentHashMap.java

使用CAS + synchronized 來保證實現put操作:如果Key對應的陣列元素為null,則通過CAS操作將其設定為當前值。如果Key對應的陣列元素(也即連結串列表頭或者樹的根元素)不為null,則對該元素使用synchronized關鍵字申請鎖,然後進行操作。如果該put操作使得當前連結串列長度超過一定閾值,則將連結串列(定址時間複雜度為O(N))轉換為紅黑樹(定址時間複雜度為O(log(N)),插入操作完成之後如果所有元素的數量大於當前容量(預設16)*負載因子(預設0.75)就進行擴容。
59、

二、MySQL部分

1、mysql 時間 比較無效 原因?
時間比較無效比如下方連結所呈現的問題:
http://blog.csdn.net/jiankunking/article/details/53289283
2、mysql 資料庫 索引 是以什麼資料結構形式儲存的?
3、mysql與sql server 異同點? 原理上?
4、索引順序對於索引效果的影響?
5、資料庫索引如何優化(從哪幾個方面)?
6、mysql優化有哪些?

加索引有什麼規則?有哪些方式?
比如,有一個查詢where a欄位等於1,b欄位等於2,這種情況下,如何加索引?
a、b欄位都是離散值

7、比如一個表中有100條資料,a欄位的值,是從1到100,我要更新其中的資料,where條件時a>10
mysql通過innodb引擎的話,是通過表鎖還是行鎖?

8、mysql mvcc多版本併發控制
9、mysql為什麼選中B+ TREE而不是B TREE?兩種資料結構有什麼區別?
10、mysql 範圍查詢?索引的資料結構是如何處理的?

B+樹除了葉子節點其它節點並不儲存資料,節點小,磁碟IO次數就少。這是優點之一。
另一個優點是什麼,B+樹所有的Data域在葉子節點,一般來說都會進行一個優化,就是將所有的葉子節點用指標串起來。這樣遍歷葉子節點就能獲得全部資料,這樣就能進行區間訪問啦。

為什麼MongoDB採用B樹索引,而Mysql用B+樹做索引

11、mysql事務提交原理?
12、mysql 使用者編號 訂單編號 商家編號 分庫分表
需求是:

  • 可以按照訂單號查詢、
  • 可以按照使用者編號查詢該使用者所有訂單、
  • 分庫分表解決查詢慢問題、
  • 按照商家編號查詢該商家訂單資訊[商家查詢可以不是實時,允許有一點延遲])

按照使用者編號hash或者某種方式來決定訂單資訊落到某個庫、某個表。將確定出落某個庫、某個表這兩個資訊拼接到訂單號的某幾位上,這樣在按照訂單號查詢的時候就可以確定去哪個庫哪個表查詢、按照使用者編號查詢改使用者所有訂單也可以了(因為資料落在哪個庫哪個表是由使用者編號決定的)、商家查詢是否可以把資料寫入es這種方式來實現?(因為商家編號沒有辦法再次用到分庫分庫模式中)

13、mysql三列資料建聯合索引,如何確定順序?(三列被用到的概率一樣)
選擇更能縮小範圍的放在前面

14、聚集索引 非聚集索引 查詢效率?
http://www.veryhuo.com/a/view/15210.html

15、mysql 樂觀鎖 悲觀鎖
16、mysql索引失效
(1)、最佳左字首法則
如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最左前列開始並且不能跳過索引中的列。
(2)、不在索引列上做任何操作(計算、函式、(自動or手動)型別轉換),會導致索引失效而轉向全表掃描
(3)、儲存引擎不能使用索引中範圍條件右邊的列【範圍之後全失效,範圍之前的用於查詢,範圍用於排序】
(4)、儘量使用覆蓋索引(只訪問索引的查詢(索引列和查詢列一致)),減少select *
(5)、mysql在使用不等於(!=或<>)的時候無法使用索引會導致全表掃碼
(6)、is null,is not null 也無法使用索引
(7)、like以萬用字元開頭(’%abc…’),mysql索引失效會變成全表掃描的操作,但是like 以萬用字元開頭(‘abc%’)這種形式索引不會失效
【問題】:解決like’%字串%'時索引失效問題?
使用覆蓋索引
(8)、字串不加單引號索引失效
(9)、少用or,用它來連線時會使索引失效
17、資料庫分庫分表

三、基礎

1、程式間通訊方式有哪些?
2、有些訊號你能捕獲,有些訊號你是捕獲不了的,捕獲不了的訊號有哪些?
3、zookeeper 可以通過watch,用來做程式間通訊,那麼zk底層是使用什麼方式來實現程式間通訊的?依賴作業系統如何實現的?
4、socket通訊
5、keepalive時間限制
http 長連線解決的是連線複用問題,那麼在使用長連線的時候,同時會有多個請求,那麼如何保證多個請求之間的順序不亂呢?(因為http底層用的還是tcp協議,那麼如何保證多個請求的資料不受混淆的?)
6、tcp 如何處理粘包問題
7、http協議 如何區分header頭還有body體
8、tcp 協議網路段 協議簇
9、一次完整的http請求
10、http code 302 304含義

四、線上

1、如何線上debug?比如線上的cpu爆了,這個步驟是?
https://blog.csdn.net/jiankunking/article/details/79749836
2、線上fd耗光了,如何排查?
3、如何定位OOM 問題?
https://blog.csdn.net/jiankunking/article/details/79749483

4、
五、kakfa

1、kafka某個broker上是否可以有無限個topic?或者萬級別的topic?
2、kafka 設計,還有broker上檔案儲存
3、kakfa是否支援順序消費訊息?
4、zk在kafka叢集中的作用
5、kafka 消費時候可以批量拉取?
可以
https://stackoverflow.com/questions/35623057/can-a-kafka-consumer0-8-2-2-read-messages-in-batch
6、訊息佇列 選型 為什麼選擇kafka?
7、kafka增加、刪除節點時如何遷移資料?新的資料如何分配?
https://blog.csdn.net/lingbo229/article/details/83309208
8、kafka寫入訊息 如何保證回滾或者保證不被消費
比如在一個事務中需要發訊息給kafka,當事務失敗的時候,如何取消kafka中的訊息或者讓它不被消費
9、kafka 如何確保訊息消費且只消費一次?

六、ES

1、在ElasticSearch中,叢集(Cluster),節點(Node),分片(Shard),Indices(索引),replicas(備份)之間是什麼關係?
https://www.zhihu.com/question/26446020/answer/75952428

2、elasticsearch整個建索引、查詢的過程
3、elasticsearch如何選舉
Elasticsearch選舉master的時候, 當加入一個節點, 如果之前的Elasticsearch叢集已經正常的在執行, 那麼此時這個節點的加入會選擇接受之前的master, 然後自己連線master並加入這個master構成的叢集。如果是整個master叢集剛開始初始啟動的時候,這時候情況就會不同,就會出現選舉master的過程。 這時候的選舉可能選到了自己作為master, 也有可能是接受其他節點的master。

Bully演算法
Leader選舉的基本演算法之一。 它假定所有節點都有一個惟一的ID,該ID對節點進行排序。 任何時候的當前Leader都是參與叢集的最高id節點。 該演算法的優點是易於實現,但是,當擁有最大 id 的節點處於不穩定狀態的場景下會有問題,例如 Master 負載過重而假死,叢集擁有第二大id 的節點被選為 新主,這時原來的 Master 恢復,再次被選為新主,然後又假死…
elasticsearch 通過推遲選舉直到當前的 Master 失效來解決上述問題,但是容易產生腦裂,再通過 法定得票人數過半 解決腦裂
4、ik 是如何進行分詞的?

七、OpenTSDB

1、OpenTSDB與HBase 關係
2、

八、腦經急轉彎

1、判斷一個整數是2的N次方?
https://blog.csdn.net/tianyunzqs/article/details/53234236
2、二叉樹拷貝(非遞迴)
3、BitMap演算法(應用)

九、其他

1、分散式鎖有哪些實現方式?
http://www.hollischuang.com/archives/1716
2、分散式事務
3、異地多活
4、zookeeper叢集 當一個節點掛了一天,當再次啟動的時候,如何識別哪個是leader?
5、有什麼知名的開源apm(Application Performance Management)工具嗎?
https://www.zhihu.com/question/27994350/answer/118821214
6、pinpoint 原理?
7、consul template作用?如何與prometheus互動的?
通過監聽Consul中的資料可以動態修改一些配置檔案,比如可以watch consul中的kv資料,動態生成prometheus的告警rule檔案等
8、

十、金融

1、同業拆借
2、信用卡消費一筆錢,是如何到收款人的賬戶的?(整個流轉過程)
https://blog.csdn.net/jiankunking/article/details/84347429
3、複式記賬

十一、Spring

1、spring 注入 介面即如何注入一個介面的多個實現類?
https://www.cnblogs.com/lee10010/p/7888121.html
https://www.cnblogs.com/linjiaxin/p/5897749.html
2、

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章