【面試題】java面試題整理(有空再貼答案)

面試題+基礎

各家的面試題其實都大同小異, 掌握基礎和原理,走到哪都不怕。

基礎

leetcode上有一些總結,star數非常高了。貼上url

https://github.com/CyC2018/CS-Notes

https://github.com/Snailclimb/JavaGuide

這兩個大概只是個提綱,如果是高級職位,深度可能不夠,具體的還得看書。

另外強烈推薦 http://www.iocoder.cn/ 芋道,我的面試題很多都是從上面找的。平時對提高也有幫助。

 

reids

redis的話,我推薦《Redis深度歷險:核心原理和應用實踐》 和《redis設計與實現》

 

知道redis嗎,redis是如何做持久化的
redis數據庫都是存放在內存中的,如果沒票配置持久化,服務器重啓之後數據全部丟失了,於是需要開啓reidis持久化功能,將數據保存在磁盤上,redis重啓後可以從磁盤中恢復數據。分爲2種方式,1 RDB持久化,定時通過一部方式保存到磁盤上,也成爲半持久化。實際操作過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換之前的文件,用二進制壓縮存儲。;2 AOF Appen only file就是講操作日誌追加的方式寫入文件,以日誌的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。。

介紹下redis的特點,redis的基本數據結構,數據持久化方式,主從之間如何同步;
5種數據類型就是string(字符串)、list(列表)、set(集合)、hash(散列)、zset(有序集合)
從服務器會向主服務器發出SYNC指令,當主服務器接到此命令後,就會調用BGSAVE指令來創建一個子進程專門進行數據持久化工作,也就是將主服務器的數據寫入RDB文件中。在數據持久化期間,主服務器將執行的寫指令都緩存在內存中。
在BGSAVE指令執行完成後,主服務器會將持久化好的RDB文件發送給從服務器,從服務器接到此文件後會將其存儲到磁盤上,然後再將其讀取到內存中。這個動作完成後,主服務器會將這段時間緩存的寫指令再以redis協議的格式發送給從服務器。

導致redis性能瓶頸的操作
redis有哪些接口
Redis的實現模式;
redis爲什麼這麼快?

 

java-core

基礎的話主要看源碼吧, collection和juc裏面的。 然後就是《java編程思想》和《java核心技術 卷1.2》(有很多過時的章節直接跳過即可)

1、List 和 Set 的區別
2、HashSet 是如何保證不重複的
3、HashMap 是線程安全的嗎,爲什麼不是線程安全的(最好畫圖說明多線程環境下不安全)?
4、HashMap 的擴容過程
5、HashMap 1.7 與 1.8 的 區別,說明 1.8 做了哪些優化,如何優化的?
6、final finally finalize
7、強引用 、軟引用、 弱引用、虛引用
8、Java反射
9、Arrays.sort 實現原理和 Collection 實現原理
10、LinkedHashMap的應用11、cloneable接口實現原理
12、異常分類以及處理機制
13、wait和sleep的區別
14、數組在內存中如何分配

 

java-併發

我推薦《java併發編程藝術》 我覺得比 《java併發編程實戰》更好理解一點。

 

1、synchronized 的實現原理以及鎖優化?
2、volatile 的實現原理?
3、Java 的信號燈?
4、synchronized 在靜態方法和普通方法的區別?
5、怎麼實現所有線程在等待某個事件的發生纔會去執行?
6、CAS?CAS 有什麼缺陷,如何解決?
7、synchronized 和 lock 有什麼區別?
8、Hashtable 是怎麼加鎖的 ?
9、HashMap 的併發問題?
10、ConcurrenHashMap 介紹?1.8 中爲什麼要用紅黑樹?
11、AQS
12、如何檢測死鎖?怎麼預防死鎖?
13、Java 內存模型?
14、如何保證多線程下 i++ 結果正確?
15、線程池的種類,區別和使用場景?
16、分析線程池的實現原理和線程的調度過程?
17、線程池如何調優,最大數目如何確認?
18、ThreadLocal原理,用的時候需要注意什麼?
19、CountDownLatch 和 CyclicBarrier 的用法,以及相互之間的差別?
20、LockSupport工具
21、Condition接口及其實現原理
22、Fork/Join框架的理解
23、分段鎖的原理,鎖力度減小的思考
24、八種阻塞隊列以及各個阻塞隊列的特性
單機上一個線程池正在處理服務,如果忽然斷電了怎麼辦(正在處理和阻塞隊列裏的請求怎麼處理)?
爲什麼要使用線程池?
線程池有什麼作用?
說說幾種常見的線程池及使用場景。
線程池都有哪幾種工作隊列?
怎麼理解無界隊列和有界隊列?
線程池中的幾種重要的參數及流程說明。

JVM

JVM應該就一本《深入理解JVM虛擬機》 就夠了, 但是我買的版本比較老,1.8以後內存區域做了一些改動,自己的得知道。

 

1、詳細jvm內存模型
2、講講什麼情況下回出現內存溢出,內存泄漏?
3、說說Java線程棧
4、JVM 年輕代到年老代的晉升過程的判斷條件是什麼呢?
5、JVM 出現 fullGC 很頻繁,怎麼去線上排查問題?
6、類加載爲什麼要使用雙親委派模式,有沒有什麼場景是打破了這個模式?
7、類的實例化順序
8、JVM垃圾回收機制,何時觸發MinorGC等操作
9、JVM 中一次完整的 GC 流程(從 ygc 到 fgc)是怎樣的
10、各種回收器,各自優缺點,重點CMS、G1
11、各種回收算法
12、OOM錯誤,stackoverflow錯誤,permgen space錯誤
說一下對jvm的理解,jvm的組成部分,各個部分的存儲內容以及常見的jvm的問題排查步驟。
對JVM熟不熟悉?簡單說說類加載過程,裏面執行的那些操作?
JVM方法區存儲內容 是否會動態擴展 是否會出現內存溢出 出現的原因有哪些。
介紹介紹CMS。
介紹介紹G1。
爲什麼jdk8用metaspace數據結構用來替代perm?
簡單談談堆外內存以及你的理解和認識。
JVM的內存模型的理解,threadlocal使用場景及注意事項?
JVM老年代和新生代的比例?
jstack,jmap,jutil分別的意義?如何線上排查JVM的相關問題?
Java虛擬機中,數據類型可以分爲哪幾類?
怎麼理解棧、堆?堆中存什麼?棧中存什麼?
爲什麼要把堆和棧區分出來呢?棧中不是也可以存儲數據嗎?
在Java中,什麼是是棧的起始點,同是也是程序的起始點?
爲什麼不把基本類型放堆中呢?
Java中的參數傳遞時傳值呢?還是傳引用?
Java中有沒有指針的概念?
Java中,棧的大小通過什麼參數來設置?
一個空Object對象的佔多大空間?
對象引用類型分爲哪幾類?
講一講垃圾回收算法。
如何解決內存碎片的問題?
如何解決同時存在的對象創建和對象回收問題?
講一講內存分代及生命週期。
什麼情況下觸發垃圾回收?
如何選擇合適的垃圾收集算法?
JVM中最大堆大小有沒有限制?
堆大小通過什麼參數設置?
JVM有哪三種垃圾回收器?
吞吐量優先選擇什麼垃圾回收器?響應時間優先呢?
如何進行JVM調優?有哪些方法?
如何理解內存泄漏問題?有哪些情況會導致內存泄露?如何解決?

 

Spring

spring的話,感覺現在問的少了, spring cloud會問的比較多, 應該算在微服務/分佈式的知識點裏面。

1、BeanFactory 和 FactoryBean?
2、Spring IOC 的理解,其初始化過程?
3、BeanFactory 和 ApplicationContext?
4、Spring Bean 的生命週期,如何被管理的?
5、Spring Bean 的加載過程是怎樣的?
6、如果要你實現Spring AOP,請問怎麼實現?
7、如果要你實現Spring IOC,你會注意哪些問題?
8、Spring 是如何管理事務的,事務管理機制?
9、Spring 的不同事務傳播行爲有哪些,幹什麼用的?
10、Spring 中用到了那些設計模式?
11、Spring MVC 的工作原理?
12、Spring 循環注入的原理?
13、Spring AOP的理解,各個術語,他們是怎麼相互工作的?
14、Spring 如何保證 Controller 併發的安全?

Netty

我不會

 

分佈式相關

主要考察對cap和base的理解吧, 我沒有系統學習過,主要靠平時的積累。

1、Dubbo的底層實現原理和機制
2、描述一個服務從發佈到被消費的詳細過程
3、分佈式系統怎麼做服務治理
4、接口的冪等性的概念
5、消息中間件如何解決消息丟失問題
6、Dubbo的服務請求失敗怎麼處理
7、重連機制會不會造成錯誤
8、對分佈式事務的理解
9、如何實現負載均衡,有哪些算法可以實現?
10、Zookeeper的用途,選舉的原理是什麼?
11、數據的垂直拆分水平拆分。
12、zookeeper原理和適用場景
13、zookeeper watch機制
14、redis/zk節點宕機如何處理
15、分佈式集羣下如何做到唯一序列號
16、如何做一個分佈式鎖
17、用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連接是線程安全的嗎
18、MQ系統的數據如何保證不丟失
19、列舉出你能想到的數據庫分庫分表策略;分庫分表後,如何解決全表查詢的問題
20、zookeeper的選舉策略
21、全局ID

 

mysql:

《Mysql技術內幕-innodb存儲引擎》就夠了。

mysql索引的實現原理
Innodb中,什麼是聚集索引,非聚集索引,他們是什麼關係
插入一條記錄時,聚集索引和非聚集索引是如何修改的
建立索引的標準是什麼
查看 SQL 是不是使用了索引?(有什麼工具)
SQL 索引的順序,字段的順序
MySQL 分頁查詢語句,mysql分頁有什麼優化

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章