1. 程式人生 > >(轉)喜馬拉雅2018 Java面試題目

(轉)喜馬拉雅2018 Java面試題目

https www get 但是 rri ref b+tree 並發 很好

背景:將網上的題目整理下。

java基礎

1:hashTable hashMap ConcurrentHashMap 的區別、數據結構、線程安全

2:equals和==區別, 重寫equals一定要重寫hashcode方法嗎?為什麽?hashcode方法有什麽作用?

這個萬年不變的面試題,這是何等的臥槽

==說明:

對於基本類型來說 ,==比較兩個基本類型的值是否相等,

對於引用類型來說,==比較的是內個引用類型的內存地址

equals說明:

equals用來比較的是兩個對象的內容是否相等,由於所有的類都是繼承自java.lang.Object類的,所以適用於所有對象,如果沒有對該方法 進行覆蓋的話,調用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷。

重寫equals一般是要重寫hashcode方法的,首先equals與hashcode間的關系是這樣的:

1、如果兩個對象相同(即用equals比較返回true),那麽它們的hashCode值一定要相同;

2、如果兩個對象的hashCode相同,它們並不一定相同(即用equals比較返回false)

比如說兩個字符串的hashcode相同,但是這兩個字符串可以是不同的字符串,對象也是同理,自己理解的。

至於hashcode有什麽用?

為了提高程序的效率才實現了hashcode方法,先進行hashcode的比較,如果不同,那沒就不必在進行equals的比較了,這樣就大大減少 了equals比較的次數,這對比需要比較的數量很大的效率提高是很明顯的,一個很好的例子就是在集合中的使用;

(轉)從一道面試題徹底搞懂hashCode與equals的作用與區別及應當註意的細節

3:線程池的工作機制,Java通過Executors工具類創建出來的線程池有什麽區別,為什麽這樣定義?

4:線程池有哪些參數,具體含義是什麽?
4:AQS 重入鎖 讀寫鎖 countdownlatch 柵欄(cyclicBarrier) 信號量(semaphore)
5:有四個線程A、B、C、D、E,現在需要E線程在ABCD四個線程結束之後再執行

控制線程順序執行 我知道的

1. join 讓主線程等待子線程運行結束後再繼續運行

2. 利用並發包裏的Excutors的newSingleThreadExecutor產生一個單線程的線程池,而這個線程池的底層原理就是一個先進先出(FIFO)的 隊列

。代碼中executor.submit依次添加了123線程,按照FIFO的特性,執行順序也就是123的執行結果,從而保證了執行順序。

3. 使用 CountDownLatch 控制多個線程執行順序 cutDown()方法和await()方法 參考:https://www.cnblogs.com/flyme/p/4568063.html


6:Java序列化,有ID和沒ID會出現問題嗎?

(轉)java 序列化ID的作用
7:JVM內存模型,為什麽survivor需要有2個。

survivor需要2個,主要是為了規避內存碎片化

8:GC算法,回收器
9:類加載機制

10. synchronized和lock的區別
11 手寫生產者消費者

mysql
1:索引都有什麽類型
2:聚集索引和非聚集索引,主鍵刪掉之後還有聚集索引嗎?
3:建了索引,什麽時候會不命中索引
4:innodb與myisam存儲引擎的區別
5:分庫分表,主從復制的延遲
6:查詢優化,

redis
淘汰機制
失效策略
持久化rdb、aof
pipeline
主從、集群

數據結構
1:鏈表,鏈表倒置、節點交換
2:Btree B+tree 紅黑樹

協議
tcp
http

喜馬拉雅2018 Java面試題目

(轉)喜馬拉雅2018 Java面試題目