記一次3分鐘java面試問題

記一次3分鐘java面試問題

1、講一下springboot與傳統ssm項目的優缺點

2、mysql使用like會使索引失效嗎

3、多線程

4、項目用的jdk1.8,瞭解新特性嗎

1、講一下springboot與傳統ssm項目的優缺點

這個看一下就行,知道的過,不知道的可以點這裏

2、mysql使用like會使索引失效嗎

like 以%開頭,索引無效;當like前綴沒有%,後綴有%時,索引有效。

索引失效詳細看鏈接

3、多線程

什麼是進程?

電腦中時會有很多單獨運行的程序,每個程序有一個獨立的進程,而進程之間是相互獨立存在的。比如下圖中的QQ、酷狗播放器、電腦管家等等。

什麼是線程?

進程想要執行任務就需要依賴線程。換句話說,就是進程中的最小執行單位就是線程,並且一個進程中至少有一個線程。

那什麼是多線程?提到多線程這裏要說兩個概念,就是串行和並行,搞清楚這個,我們才能更好地理解多線程。

所謂串行,其實是相對於單條線程來執行多個任務來說的,我們就拿下載文件來舉個例子:當我們下載多個文件時,在串行中它是按照一定的順序去進行下載的,也就是說,必須等下載完A之後才能開始下載B,它們在時間上是不可能發生重疊的。

並行:下載多個文件,開啓多條線程,多個文件同時進行下載,這裏是嚴格意義上的,在同一時刻發生的,並行在時間上是重疊的。

瞭解了這兩個概念之後,我們再來說說什麼是多線程。舉個例子,我們打開騰訊管家,騰訊管家本身就是一個程序,也就是說它就是一個進程,它裏面有很多的功能,我們可以看下圖,能查殺病毒、清理垃圾、電腦加速等衆多功能。

按照單線程來說,無論你想要清理垃圾、還是要病毒查殺,那麼你必須先做完其中的一件事,才能做下一件事,這裏面是有一個執行順序的。

如果是多線程的話,我們其實在清理垃圾的時候,還可以進行查殺病毒、電腦加速等等其他的操作,這個是嚴格意義上的同一時刻發生的,沒有執行上的先後順序。

以上就是,一個進程運行時產生了多個線程。

在瞭解完這個問題後,我們又需要去了解一個使用多線程不得不考慮的問題——線程安全。

今天我們不說如何保證一個線程的安全,我們聊聊什麼是線程安全?因爲我之前面試被問到了,說真的,我之前真的不是特別瞭解這個問題,我們好像只學瞭如何確保一個線程安全,卻不知道所謂的安全到底是什麼!

線程相關可查看

4、項目用的jdk1.8,瞭解新特性嗎

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

在jdk1.8中對hashMap等map集合的數據結構優化。hashMap數據結構的優化
原來的hashMap採用的數據結構是哈希表(數組+鏈表),hashMap默認大小是16,一個0-15索引的數組,如何往裏面存儲元素,首先調用元素的hashcode
方法,計算出哈希碼值,經過哈希算法算成數組的索引值,如果對應的索引處沒有元素,直接存放,如果有對象在,那麼比較它們的equals方法比較內容
如果內容一樣,後一個value會將前一個value的值覆蓋,如果不一樣,在1.7的時候,後加的放在前面,形成一個鏈表,形成了碰撞,在某些情況下如果鏈表
無限下去,那麼效率極低,碰撞是避免不了的
加載因子:0.75,數組擴容,達到總容量的75%,就進行擴容,但是無法避免碰撞的情況發生
在1.8之後,在數組+鏈表+紅黑樹來實現hashmap,當碰撞的元素個數大於8時 & 總容量大於64,會有紅黑樹的引入
除了添加之後,效率都比鏈表高,1.8之後鏈表新進元素加到末尾
ConcurrentHashMap (鎖分段機制),concurrentLevel,jdk1.8採用CAS算法(無鎖算法,不再使用鎖分段),數組+鏈表中也引入了紅黑樹的使用
HashMap詳情看這裏
項目用的jdk1.8,瞭解新特性嗎詳細

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