(轉)喜馬拉雅2018 Java面試題目
背景:將網上的題目整理下。
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比較的次數,這對比需要比較的數量很大的效率提高是很明顯的,一個很好的例子就是在集合中的使用;
3:線程池的工作機制,Java通過Executors工具類創建出來的線程池有什麽區別,為什麽這樣定義?
4:線程池有哪些參數,具體含義是什麽?
4:AQS 重入鎖 讀寫鎖 countdownlatch 柵欄(cyclicBarrier) 信號量(semaphore)
5:有四個線程A、B、C、D、E,現在需要E線程在ABCD四個線程結束之後再執行
控制線程順序執行 我知道的
1. join 讓主線程等待子線程運行結束後再繼續運行
2. 利用並發包裏的Excutors的newSingleThreadExecutor產生一個單線程的線程池,而這個線程池的底層原理就是一個先進先出(FIFO)的 隊列
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面試題目