java面經查缺補漏之四十八天(進程的並行與併發,最左前綴,explain,拒絕策略)

1.進程的並行與併發?

併發就是在單核處理中同時處理多個任務

並行就是在多核處理器中同時處理多個任務

 

 

 

2.最左前綴匹配原則?

建立了聯合索引(a,b,c)

select * from test where a<10 ;

select * from test where a<10 and b <10;

explain select * from test where a<10 and b <10 and c<10;

都是可以用到索引的,相當於創建了a,ab,abc

但是能不能將順序換一下呢?可以的

select * from test where b<10 and a <10;

select * from test where b<10 and a <10 and c<10;

不是最左匹配原則嗎?

查了下資料發現:mysql查詢優化器會判斷糾正這條sql語句該以什麼樣的順序執行效率最高,最後才生成真正的執行計劃。所以,當然是我們能儘量的利用到索引時的查詢順序效率最高咯,所以mysql查詢優化器會最終以這種順序進行查詢執行。

注意:

select * from test where b<10 and c <10;不行

但是select * from test where a<10 and c <10是可以的

當b+樹的數據項是複合的數據結構,比如(name,age,sex)的時候,b+數是按照從左到右的順序來建立搜索樹的,比如當(張三,20,F)這樣的數據來檢索的時候,b+樹會優先比較name來確定下一步的所搜方向,如果name相同再依次比較age和sex,最後得到檢索的數據;但當(20,F)這樣的沒有name的數據來的時候,b+樹就不知道下一步該查哪個節點,因爲建立搜索樹的時候name就是第一個比較因子,必須要先根據name來搜索才能知道下一步去哪裏查詢。比如當(張三,F)這樣的數據來檢索時,b+樹可以用name來指定搜索方向,但下一個字段age的缺失,所以只能把名字等於張三的數據都找到,然後再匹配性別是F的數據了, 這個是非常重要的性質,即索引的最左匹配特性。

3.數據庫的explain能夠獲取什麼信息?

表的讀取順序

數據讀取操作的操作類型

那些索引可以使用

那些索引被實際使用

表之間的引用

每張表有多少行被優化器查詢

4.線程池的拒絕策略?

threadPool = new ThreadPoolExecutor();//默認線程池,可控制參數比較多   

可輸入如下參數:

corePoolSize: 線程池維護線程的最少數量
maximumPoolSize:線程池維護線程的最大數量
keepAliveTime: 線程池維護線程所允許的空閒時間(解釋:當線程池的數量超過corePoolSize時,多餘的空閒線程的存活時間。)
unit: 線程池維護線程所允許的空閒時間的單位
workQueue: 線程池所使用的緩衝隊列
handler: 線程池對拒絕任務的處理策略

四種拒絕策略:

rejected = new ThreadPoolExecutor.AbortPolicy();//默認,隊列滿了丟任務拋出異常
rejected = new ThreadPoolExecutor.DiscardPolicy();//隊列滿了丟任務不異常
rejected = new ThreadPoolExecutor.DiscardOldestPolicy();//將最早進入隊列的任務刪,之後再嘗試加入隊列
rejected = new ThreadPoolExecutor.CallerRunsPolicy();//如果添加到線程池失敗,那麼主線程會自己去執行該任務

 

5.Spring與Springboot的關係?

springboot是框架中的框架,是Spring框架的擴展,它消除了設置Spring應用程序所需的XML配置,爲更快,更高效的開發生態系統鋪平了道路。

 

 

 

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