記錄一次面試題

2022-09-11 18:18:12 字數 3804 閱讀 7768

1、spring中ioc的概念

提到ioc那就不得不提控制反轉和依賴注入

控制反**原本我們建立物件時需要呼叫物件的構造方法,手動進行物件建立,現在,我們將物件的建立銷毀交由spring容器來做,它通過反射來建立物件,我們用完之後對物件進行銷毀。

依賴注入:通常的業務模組都需要呼叫兩個或兩個以上的物件來完成業務邏輯,我們在完成我們的業務**時,只需要通知spring在這裡需要呼叫另乙個物件的方法,spring就會像打針一樣在這裡注入依賴物件的例項,等待我們呼叫。物件注入的方式有三種:構造器注入,setter方法注入和介面注入

2、bena的預設作用範圍

bean的作用範圍取值有五種(scope屬性控制):

singleton:單例,也是預設值

prototype:  多例,比如讓spring接管struts2的action的時候就必須配置此屬性

request:  一次請求以及此次請求的**

session: 作用範圍是一次會話

globalsession:  作用範圍是一次全域性繪畫,比如多台伺服器之間需要共用同乙個bean的時候就需要此屬性。

預設是singleton,所以spring中物件預設是單例

3、索引的概念和作用,mysql裡主要的的索引結構,雜湊索引和b+樹索引比較

索引:是乙個資料結構,用來快速訪問資料庫**或者檢視裡的資料,需要儲存空間。

作用:①減少了資料檢索的時間

②保證了資料的唯一性

③表與表之前的參照完整性

④減少了在分組、排序的檢索時間

(1),index(普通索引):alter table 'table_name' add index index_name('col')

最基本的索引,沒有任何限制

(2),unique(唯一索引):alter table 'table_name' add unique('col')

與「普通索引」類似,不同的就是:索引列的值必須唯一,但允許有空值。

(3),primary key(主鍵索引):alter table 'table_name' add primary key('col')

是一種特殊的唯一索引,不允許有空值。

(4),fulltext(全文索引):alter table 'table_name' add fulltext('col')

僅可用於myisam和inodb,針對較大的資料,生成全文索引很耗時耗空間

組合索引:alter table 'table_name' add index index_name('col1','col2','col3')

為了更多的提高mysql效率可建立組合索引,遵循「最左字首」原則。建立復合索引應該將最常用(頻率)做限制條件的列放在最左邊,一次遞減。組合索引最左字段用in是可以用到索引的。相當於建立了col1,col1col2,col1col2col3三個索引

建立索引之後查詢會變快,對資料的增,刪,改操作會變慢

hash索引:查詢某一條記錄時會很快,因為時hash結構雜湊分布,並且鍵-值對應。但是也應此它不用於範圍查詢和排序

b+樹索引:b+tree所有索引資料都在葉子節點上,並且增加了順序訪問指標,每個葉子節點都有指向相鄰葉子節點的指標。這樣做是為了提高區間效率,例如查詢key為從18到49的所有資料記錄,當找到18後,只要順著節點和指標順序遍歷就可以以此向訪問到所有資料節點,極大提高了區間查詢效率。

4、執行緒建立方式,執行緒框架,執行緒池概念,執行緒池有哪些?執行緒池工廠有哪些執行緒池型別?執行緒池引數

(1)、繼承thread類

(2)、實現runnable介面

(3)、實現callable介面通過futuretask包裝器來建立thread線

(4)、使用executorservice、callable、future實現有返回結果的執行緒

多執行緒框架executor,jdk1.5之後引入

執行緒池,是一種執行緒的使用模式,它為了降低執行緒使用中頻繁的建立和銷毀所帶來的資源消耗與代價。

通過建立一定數量的執行緒,讓他們時刻準備就緒等待新任務的到達,而任務執行結束之後再重新回來繼續待命。

這就是執行緒池最核心的設計思路,「復用執行緒,平攤執行緒的建立與銷毀的開銷代價」。

相比於來乙個任務建立乙個執行緒的方式,使用執行緒池的優勢體現在如下幾點:

(1)、避免了執行緒的重複建立與開銷帶來的資源消耗代價

(2)、提公升了任務響應速度,任務來了直接選乙個執行緒執行而無需等待執行緒的建立

(3)、執行緒的統一分配和管理,也方便統一的監控和調優

執行緒池的實現天生就實現了非同步任務介面,允許你提交多個任務到執行緒池,執行緒池負責選用執行緒執行任務排程。

j**a通過executors提供四種執行緒池,分別為:

[ newfixedthreadpool()方法 ]

該方法返回乙個固定執行緒數量的執行緒池。該執行緒池中的執行緒數量始終不變,當有乙個新的任務提交時,執行緒池中若有空閒執行緒,則立即處理。

若沒有空閒執行緒,則新的任務會被暫存在乙個任務佇列中,待有執行緒空閒時,便處理在任務佇列中的任務。

[ newsinglethreadexecutor()方法 ]

該方法返回乙個只有乙個執行緒的執行緒池。

若多多餘乙個任務被提交到該執行緒池,任務會被儲存在乙個任務佇列中,待執行緒空閒,按先入先出順序執行任務。

[ newcachedthreadpool()方法 ]

該方法返回乙個可具實際情況調整執行緒數量的執行緒池,執行緒池的執行緒數量不確定,但若有空閒執行緒可以復用,則會有優先使用而可以復用執行緒。若所有執行緒均在工作,又有新的任務提交,則會建立新的現場處理任務。所有執行緒在當前任務執行完畢後,將返回執行緒池進行復用。

[ newsinglethreadscheduledexecutor()方法 ]

該方法返回乙個scheduleexecutorservice物件,執行緒池大小為1

scheduleexecutorservice介面在executorservice介面之上擴張了在給定時間執行某任務的功能,如:在某個固定的延時之後執行,或者週期性執行某個任務。

[newschedulethreadpool()方法]

該方法返回乙個scheduleexecutorservice物件,但該執行緒池可以指定執行緒數量

int corepoolsize

核心執行緒數量,執行緒池將長期保證這些執行緒處於存活狀態,即使執行緒已經處於閒置狀態。除非配置了allowcorethreadtimeout將不會保證長期存活於執行緒池內,在閒置超過keepalivetime後被銷毀。

int maximumpoolsize

執行緒池內的最大數量,執行緒池內維護的執行緒不得超過該數量,大於核銷執行緒數量小於最大執行緒數量的執行緒將在閒置超過keepalivetime後被銷毀。

long keepalivetime

保證存活時間,若執行緒數超過了corepoolsize,執行緒閒置時間超過了保證存活時間,該執行緒將被銷毀。另外unit指的是保活時間的單位。

blockingqueue workqueue

阻塞佇列,存放等待執行的任務,執行緒從workqueue中取任務,若無任務將阻塞等待。可以傳入限制容量大小的佇列或無限拓展佇列。

threadfactory threadfactory

建立執行緒的工廠。

rejectedexecutionhandler handler

處理執行緒池及佇列滿載後的拒絕請求處理器。

記錄一次面試題

前面去了平安外包進行了一次web前端面試,那邊要求不是很高,問的問題也都是很常見的問題,但是我也從中發現了自己缺點,即沒有綜合組織過自己的思路,大部分問題雖然回答出來了,但是沒有條理性。這點在面試的時候應該是大忌,因為這裡涉及到了乙個工作溝通問題以及對基礎知識的熟練程度問題。所以在接下來的時間裡,我...

一次面試題錯誤總結

a 0x7fffffff,b 0x7fffffff 求 a b 答案見 兩個色子,擲一次,擲出10點的概率是多少?乙個色子6面 兩個色子的組合是6x6 36面 擲出10點的組合是 6 4 5 5 4 6 三種情況 所以 3 36 1 12 請用數學公式描述如何計算向量v的反射向量r v和n都是單位向...

面試題 01 05 一次編輯

字串有三種編輯操作 插入乙個字元 刪除乙個字元或者替換乙個字元。給定兩個字串,編寫乙個函式判定它們是否只需要一次 或者零次 編輯。示例 1 輸入 first pale second ple 輸出 true 分情況討論 長度差超過2 肯定錯 len1 len2 可能是替換 len1 len2 是刪除,...