面試小總結:
1.多執行緒的幾種實現方式,繼承Thread類,實現Runnoble介面。
2.同步的實現方式:分別是synchronized,wait與notify、
3.執行緒的狀態、分為哪幾個狀態?
第一:新生狀態,第二:可執行狀態,
第三,阻塞狀態,第四:死亡狀態。
4.什麼是執行緒池:執行緒池其實就是容納多個執行緒的容器,其中的執行緒可以反覆使用,可以省去建立執行緒的物件的操作,不需要反覆建立現場而消耗過多的資源。
5.如何建立執行緒:都是通過執行緒池工廠建立,再呼叫執行緒池中的方法獲取執行緒,最後在通過執行緒執行任務方法。
6.執行緒間的通訊?wait掛起當前執行緒,並釋放當前資源鎖,notify隨機選擇一個解除阻塞,notifyAll一次性解除全部阻塞
7.java的反射原理:就是jvm通過位元組碼class檔案,生成相應的物件,就像正常生成一個物件一樣,其實這些都是源於位元組碼class檔案
8. ioc 控制反轉,也叫依賴注入: 就是一般來說吧,dao介面的實現不再是邏輯層呼叫工廠類了,而是通過那個Spring容器來自動為我們業務類設定dao的實現類,這樣的話剛好這個過程就反過來了,以前是怎麼做的吶,以前是我們業務層主動獲取dao, 而現在是dao曾主動被設定到業務邏輯層中了,這個就是控制反轉的由來,通過ioc可以無縫的實現資料庫的遷移。
9. 控制反轉:就是Dao介面的實現不再是通過業務邏輯層呼叫工廠類去獲取,而是通過容器來自動的為我們的業務層設定Dao的實現類,這樣這個過程就反過來,以前是我們業務層主動獲取DAO,但是現在卻是DAO被主動設定到業務邏輯層中來了,這就是控制反轉的由來。
10. 還有一個AOP面向切面程式設計:最主要的應用與日誌記錄,效能統計,安全控制,事務處理等方面 。
11. list和set的區別:其實最簡單,本質的區別是:list可以允許重複的物件,可以有null的元素,以及保證了沒個元素插入的順序,當然了輸出的順序就是插入時的順序。而set就剛好相反,set不允許重複的物件,只允許一個null元素,而且無法保證插入的順序
12. 可能面試官也會問了:什麼場景下會使用:list,set,和map , 如果是經常使用索引來對容器進行訪問的話 ,那麼我們肯定是需要使用list的,如果你已經知道索引的話,那麼list的實現類Arraylist是不二的選擇,可以更快速的訪問,如果需要經常刪除元素的話,linklist是首選,如果你想容器中的元素能夠按照他們的次序進行有序儲存,那麼還是list因為list是一個有序容器,可以按照插入順序進行儲存,如果想保證元素的插入的唯一性,肯定是set下的實現類,比如Hashset了,linkset了,Treeset了,都遵循了統一約束,如果是需要鍵和值的儲存方式,那麼map是不錯的選擇,可以根據需要選擇,hashmap,hashTable , Trermap 進行選擇。
13. 以及資料庫優化方面的:關於查詢的問題,我們知道查詢表只會有一條結果。在這種情況下,我們不妨加上LIMIT 1,這樣可以增加效能。MySQL資料庫引擎會在找到一條資料後停止搜尋,而不是佔據cpu繼續往下查直到查詢表中的最後一條資料為止。索引的話還是建立在搜尋字斷上,並不是非要建立在主鍵了,或是唯一字斷了,如果是某個欄位經常要用來做搜尋,那麼請為其建立索引,還有一個優化查詢的方式,可以通過查詢快取來優化查詢:當mysql開啟快取模式之後,mysql會把查詢結果和查詢語句存放在一張hash表中,下次可以用同樣的sql語句查詢是,mysql會先從這張表中獲取資料,如果快取沒有找到,則解析sql語句,按照正常流程走,查詢資料庫,當快取達到最大值後,會把現在新的資料寫入。