面試日記2020-06-10

北京人谷科技有限公司

1、JDK1.8的新特性

  • Lambda表達式
  • 函數式接口
  • *方法引用和構造器調用
  • Stream API
  • 接口中的默認方法和靜態方法
  • 新時間日期API

2、Map和set的區別。

https://zhidao.baidu.com/question/463454846.html

3、HsahMap的底層原理。

https://blog.csdn.net/qq_40118851/article/details/82804510

4、簡單工廠和抽象工廠的區別。

簡單工廠:是由一個工廠對象創建產品實例,簡單工廠模式的工廠類一般是使用靜態方法,通過不同的參數的創建不同的對象實例
可以生產結構中的任意產品,不能增加新的產品

抽象工廠:提供一個創建一系列相關或相互依賴對象的接口,而無需制定他們具體的類,生產多個系列產品
生產不同產品族的全部產品,不能新增產品,可以新增產品族

5、Mysql索引的實現。

而在InnoDB 中,表數據文件本身就是按 B+Tree 組織的一個索引結構,這棵樹的葉點data 域保存了完整的數據記錄。這個索引的 key 是數據表的主鍵,因此 InnoDB 表數據文件本身就是主索引。

6、Redis的持久化機制。

對內存中的redis全量數據進行時點快照並序列化,以文件形式保存到磁盤上,生成的是dump.rdb二進制文件。到了dump時間點就生成一份新的rdb文件,同時覆蓋掉舊的。服務重啓時直接將dump文件反序列化並加載到內存中,數據恢復速度較快,也是redis默認的持久化方式。hdfs的nameNode也是用類似的方式生成fsimage文件來做持久化的,hdfs的nameNode也是用類似的方式生成fsimage文件來做持久化的

實時記錄每一條寫數據的命令,形成binlog,服務重啓時會原樣執行一遍aof文件中的所有命令,達到數據恢復的目的,但恢復速度比rdb式慢。hdfs中提供了類似的方式,edit-log,只是默認時關閉的。

7、創建線程池有哪幾種方式。

    https://blog.csdn.net/meism5/article/details/90261021

8、線程的幾個狀態。

. New:初始狀態,線程被創建,沒有調用start()
2. Runnable:運行狀態,Java線程把操作系統中的就緒和運行兩種狀態統一稱爲“運行中”
3. Blocked:阻塞,線程進入等待狀態,線程因爲某種原因,放棄了CPU的使用權
阻塞的幾種情況:
A. 等待阻塞:運行的線程執行了wait(),JVM會把當前線程放入等待隊列
B. 同步阻塞:運行的線程在獲取對象的同步鎖時,如果該同步鎖被其他線程佔用了,JVM會把當前線程放入鎖池中
C. 其他阻塞:運行的線程執行sleep(),join()或者發出IO請求時,JVM會把當前線程設置爲阻塞狀態,當sleep()執行完,join()線程終止,IO處理完畢線程再次恢復
4. Waiting:等待狀態
5. timed_waiting:超時等待狀態,超時以後自動返回
6. terminated:終止狀態,當前線程執行完畢
https://blog.csdn.net/lx_Frolf/article/details/82381849

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