Java
1.多個線程同時讀寫,讀線程的數量遠遠大於寫線程,你認為應該如何解決並發的問題?你會選擇加什么樣的鎖?
2.JAVA的AQS是否了了解,它是干嘛的?
3.除了synchronized關鍵字之外,你是怎么來保障線程安全的?
4.什么時候需要加volatile關鍵字?它能保證線程安全嗎?
5.線程池內的線程如果全部忙,提交一個新的任務,會發生什什么?隊列全部塞滿了之后,還是忙,再提交會發生什么?
6.Tomcat本身的參數你⼀一般會怎么調整?
7.synchronized關鍵字鎖住的是什么東西?在字節碼中是怎么表示的?在內存中的對象上表現為什么?
8.wait/notify/notifyAll方法需不需要被包含在synchronized塊中?這是為什么?
9.ExecutorService你一般是怎么用的?是每個service放一個還是一個項目里面放一個?有什么好處?
Spring
1.你有沒有⽤用過Spring的AOP? 是用來干嘛的? 大概會怎么使用?
2.如果⼀一個接口有2個不同的實現, 那么怎么來Autowire一個指定的實現?
3.Spring的聲明式事務 @Transaction注解一般寫在什么位置? 拋出了異常會自動回滾嗎?有沒有辦法控制不觸發回滾?
4.如果想在某個Bean生成並裝配完畢后執行自己的邏輯,可以什么方式實現?
5.SpringBoot沒有放到web容器里為什么能跑HTTP服務?
6.SpringBoot中如果你想使用自定義的配置文件而不僅僅是application.properties,應該怎么弄?
7.SpringMVC中RequestMapping可以指定GET, POST方法么?怎么指定?
SpringMVC如果希望把輸出的Object(例如
8.XXResult或者XXResponse)這種包裝為JSON輸出, 應該怎么處理?
9.怎樣攔截SpringMVC的異常,然后做自定義的處理,比如打日志或者包裝成JSON
Spring 這里有一個 69 道答案版的《史上最全 69 道 Spring 面試題和答案》。
MySQL
1.如果有很多數據插入MYSQL 你會選擇什么方式?
2.如果查詢很慢,你會想到的第一個方式是什么?索引是干嘛的?
3.如果建了一個單列索引,查詢的時候查出2列,會用到這個單列索引嗎?
4.如果建了一個包含多個列的索引,查詢的時候只用了第一列,能不能用上這個索引?查三列呢?
5.接上題,如果where條件后面帶有一個 i + 5 < 100 會使用到這個索引嗎?
6.怎么看是否用到了了某個索引?
7.like %aaa%會使用索引嗎? like aaa%呢?
drop、truncate、delete的區別?
8.平時你們是怎么監控數據庫的? 慢SQL是怎么排查的?
9.你們數據庫是否支持emoji表情,如果不支持,如何操作?
10.你們的數據庫單表數據量是多少?一般多大的時候開始出現查詢性能急劇下降?
11查詢死掉了,想要找出執行的查詢進程用什么命令?找出來之后一般你會干嘛?
12.讀寫分離是怎么做的?你認為中間件會怎么來操作?這樣操作跟事務有什么關系?
13.分庫分表有沒有做過?線上的遷移過程是怎么樣的?如何確定數據是正確的?
JVM
1.你知道哪些或者你們線上使用什么GC策略? 它有什么優勢,適用於什么場景?
2.JAVA類加載器包括幾種?它們之間的父子關系是怎么樣的?雙親委派機制是什么意思?有什么好處?
3.如何自定義一個類加載器?你使用過哪些或者你在什么場景下需要一個自定義的類加載器嗎?
堆內存設置的參數是什么?
4.Perm Space中保存什么數據? 會引起OutOfMemory嗎?
5.做gc時,一個對象在內存各個Space中被移動的順序是什么?
6.你有沒有遇到過OutOfMemory問題?你是怎么來處理這個問題的?處理過程中有哪些收獲?
7.1.8之后Perm Space有哪些變動?MetaSpace大小默認是無限的么? 還是你們會通過什么方式來指定大小?
8.Jstack是干什么的? Jstat呢? 如果線上程序周期性地出現卡頓,你懷疑可能是gc導致的,你會怎么來排查這個問題?線程日志一般你會看其中的什么部分?
9.StackOverFlow異常有沒有遇到過?一般你猜測會在什么情況下被觸發?如何指定一個線程的堆棧大小?一般你們寫多少?
Linux命令
1.日志特別大只想看最后100行怎么弄弄? 如果想一直看日志的持續輸出,用什么命令?
2.如果日志一邊輸出,一邊想實時看到有沒有某個關鍵字應該怎么弄?
3.grep如果忽略大小寫應該怎么弄? 正則表達式呢?
4.vim往下一行是什么鍵?往下30行呢? 跳到文件末尾一行是什么? 跳回來是什么? 向后搜索是什么?
5.如果有個文本文件,按空格作為列的分隔符,如果想統計第三列里面的每個單詞的出現次數應該怎么弄?
6.如果把上面的出現次數排個序應該怎么弄? 想按照數字本身的順序而不是字符串的順序排列怎么弄?
7.Linux環境變量是以什么作為分隔符的?環境變量通過什么命令設置?
8.給某個文件權設置限比如設置為64 是用什么命令?這個6是什么意思?
9.Linux下面如果想看某個進程的資源占用情況是怎么看的?系統load大概指的什么意思?你們線上系統load一般多少?如果一個4核機器,你認為多少load是比較正常的?top命令里面按一下1會發生什么?
10.top命令里面,有時候所有進程的CPU使用率加起來超過100%是怎么回事?
11.還有哪些查看系統性能或者供你發現問題的命令?你一般是看哪個參數?
12.想看某個進程打開了哪些網絡連接是什么命令?里面連接的狀態你比較關心哪幾種? -- 偏題
有沒有做過Linux系統參數方面的優化,大概優化過什么?
13.系統參數里面有個叫做backlog的可以用來干什么?
14.查看網絡連接發現好多TIMEWAIT 可能是什么原因?對你的應用會有什么影響?你會選擇什么樣的方式來減少這些TIMEWAIT
15.可否介紹一下TCP三次握手的過程,如果現在有個網絡程序,你用第三方的library來發送數據,你懷疑這個library發送的數據有問題,那么怎么來驗證?tcpdump導出的文件你一般是怎么分析的?
16.KeepAlive是用來干什么的?這樣的好處是什么?
Redis -- 開發
1.緩存穿透可以介紹一下么?你認為應該如何解決這個問題?
2.你是怎么觸發緩存更新的?(比如設置超時時間(被動方式), 比如更新的時候主動update)?如果是被動的方式如何控制多個入口同時觸發某個緩存更新?
3.你們用Redis來做什么?為什么不用其他的KV存儲例例如Memcached,Cassandra等?
4.你們用什么Redis客戶端? Redis高性能的原因大概可以講一些?
5.你熟悉哪些Redis的數據結構? zset是干什么的? 和set有什么區別?
6.Redis的hash, 存儲和獲取的具體命令叫什么名字?
7.LPOP和BLPOP的區別?
8.Redis的有一些包含SCAN關鍵字的命令是干嘛的? SCAN返回的數據量是固定的嗎?
9.Redis中的Lua有沒有使用過? 可以用來做什么? 為什么可以這么用?
10.Redis的Pipeline是用來干什么的? -- 運維
Redis持久化大概有幾種方式? aof和rdb的區別是什么? AOF有什么優缺點嗎?
11.Redis Replication的大致流程是什么? bgsave這個命令的執行過程? -- 偏題
12.如果有很多 KV數據要存儲到Redis, 但是內存不足, 通過什么方式可以縮減內存? 為什么這樣可以縮小內存?
13.Redis中List, HashTable都用到了ZipList, 為什么會選擇它?
Redis 這里有一個 50 道答案版的《史上最全 50 道 Redis 面試題》。
監控、穩定性
1.業務日志是通過什么方式來收集的?
2.線上機器如何監控?采用什么開源產品或者自研的產品?它是分鍾級的還是秒級的?
3.如果讓你來想辦法收集一個JAVA后端應用的性能數據,你會在意哪些方面? 你會選擇什么樣的工具、思路來收集?
qi
4.一般你調用第三方的時候會不會監控調用情況?
阿里面題
1.hashcode相等兩個類一定相等嗎?equals呢?相反呢?
2.介紹一下集合框架?
3.hashmap hastable 底層實現什么區別?hashtable和concurrenthashtable呢?
4.hashmap和treemap什么區別?低層數據結構是什么?
5.線程池用過嗎都有什么參數?底層如何實現的?
6.sychnized和Lock什么區別?sychnize 什么情況情況是對象鎖? 什么時候是全局鎖為什么?
7.ThreadLocal 是什么底層如何實現?寫一個例子唄?
8.volitile的工作原理?
9.cas知道嗎如何實現的?
10.請用至少四種寫法寫一個單例模式?
11.請介紹一下JVM內存模型??用過什么垃圾回收器都說說唄
12.線上發送頻繁full gc如何處理? CPU 使用率過高怎么辦?
13.如何定位問題?如何解決說一下解決思路和處理方法
14.知道字節碼嗎?字節碼都有哪些?Integer x =5,int y =5,比較x =y 都經過哪些步驟?
15.講講類加載機制唄都有哪些類加載器,這些類加載器都加載哪些文件?
16.手寫一下類加載Demo
17.知道osgi嗎? 他是如何實現的???
18.請問你做過哪些JVM優化?使用什么方法達到什么效果???
19.classforName("java.lang.String")和String classgetClassLoader() LoadClass("java.lang.String") 什么區別啊?
20.探查Tomcat的運行機制即框架?
21.分析Tomcat線程模型?
22.Tomcat系統參數認識和調優?
23.MySQL底層B+Tree機制?
24.SQL執行計划詳解?
25.索引優化詳解?
26.SQL語句如如如何優化?
27.spring都有哪些機制啊AOP底層如何實現的啊IOC呢??
28.cgLib知道嗎?他和jdk動態代理什么區別?手寫一個jdk動態代理唄?
29.使用mysq1索引都有哪些原則? ?索引什么數據結構? 3+tree 和B tree 什么區別?
30.MySQL有哪些存儲引擎啊?都有啥區別? 要詳細!
31.設計高並發系統數據庫層面該怎么設計??數據庫鎖有哪些類型?如何實現呀?
32.數據庫事務有哪些?
33.如何設計可以動態擴容縮容的分庫分表方案?
34.用過哪些分庫分表中間件,有啥優點和缺點?講一下你了解的分庫分表中間件的底層實現原理?
35.我現在有一個未分庫分表的系統,以后系統需分庫分表,如何設計,讓未分庫分表的系統動態切換到分庫分表的系統上?TCC? 那若出現網絡原因,網絡連不通怎么辦啊?
36.分布式事務知道嗎? 你們怎么解決的?
37.為什么要分庫分表啊?
38.RPC通信原理,分布式通信原理
39.分布式尋址方式都有哪些算法知道一致性hash嗎?手寫一下java實現代碼??你若userId取摸分片,那我要查一段連續時間里的數據怎么辦???
40.如何解決分庫分表主鍵問題有什么實現方案??
41.redis和memcheched 什么區別為什么單線程的redis比多線程的memched效率要高啊?
42.redis有什么數據類型都在哪些場景下使用啊?
43.reids的主從復制是怎么實現的redis的集群模式是如何實現的呢redis的key是如何尋址的啊?
44.使用redis如何設計分布式鎖?使用zk可以嗎?如何實現啊這兩種哪個效率更高啊??
45.知道redis的持久化嗎都有什么缺點優點啊? ?具體底層實現呢?
46.redis過期策略都有哪些LRU 寫一下java版本的代碼吧??
47.說一下dubbo的實現過程注冊中心掛了可以繼續通信嗎??
48.dubbo支持哪些序列化協議?hessian 說一下hessian的數據結構PB知道嗎為啥PB效率是最高的啊??
49.知道netty嗎'netty可以干嘛呀NIO,BIO,AIO 都是什么啊有什么區別啊?
50.dubbo復制均衡策略和高可用策略都有哪些啊動態代理策略呢?
51.為什么要進行系統拆分啊拆分不用dubbo可以嗎'dubbo和thrift什么區別啊?
52.為什么使用消息隊列啊消息隊列有什么優點和缺點啊?
53.如何保證消息隊列的高可用啊如何保證消息不被重復消費啊
54.kafka ,activemq,rabbitmq ,rocketmq都有什么優點,缺點啊???
55.如果讓你寫一個消息隊列,該如何進行架構設計啊?說一下你的思路
56.說一下TCP 'IP四層?
57.的工作流程?? ?http1.0 http1.1http2.0 具體哪些區別啊?
58.TCP三次握手,四層分手的工作流程畫一下流程圖為什么不是四次五次或者二次啊?
59.畫一下https的工作流程?具體如何實現啊?如何防止被抓包啊??
60.源碼中所用到的經典設計思想及常用設計模式
61.系統架構如何選擇合適日志技術(log4j、log4j2、slf4j、jcl…….)
62.springAOP的原理,springAOP和Aspectj的關系,springAOP的源碼問題
63.dubbo框架的底層通信原理
64.RPC通信原理,分布式通信原理
65.如何利用springCloud來架構微服務項目
66.如何正確使用docker技術
67.springMVC的底層原理、如何從源碼來分析其原理
68.mybaits的底層實現原理,如何從源碼來分析mybaits
69.mysql的索引原理,索引是怎么實現的
70.索引的底層算法、如何正確使用、優化索引
71.springboot如何快速構建系統
72.zk原理知道嗎zk都可以干什么Paxos算法知道嗎?說一下原理和實現?
73.如果讓你寫一個消息隊列,該如何進行架構設計啊?說一下你的思路
74.分布式事務知道嗎? 你們怎么解決的?
75.請問你做過哪些JVM優化?使用什么方法達到什么效果?
