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配置
,爲更快,更高效的開發生態系統鋪平了道路。