面試題彙總2020 10 13 10 14更新

2021-10-24 17:23:41 字數 2993 閱讀 5148

1、抽象類中可以包含非抽象的普通方法,介面中的所有方法必須是抽象的,不能有非抽象的普通方法。

2、抽象類中可以有普通成員變數,介面中沒有普通成員變數。

3、抽象類中的抽象方法的訪問型別是public,protect,但是介面中的的抽象方法只能是public型別的,且預設為public abstract型別。

4、抽象類中可以有靜態方法,介面中不能包含靜態方法。

1、hashmap是非執行緒安全的,只用於單執行緒環境下。hashtable是執行緒安全的,能用於多執行緒。

2、hashmap中key和value都允許為null。key為null的鍵值對永遠都放在table[0]為頭結點的鍊錶中;hashtable中不允許key和value為null。

3、兩者內部實現使用的陣列初始化和擴容方式不同;hashtable預設容量是11,而hashmap是16。hashtable擴容時,將容量變成原來的2倍加1,而hashmap擴容時,將容量變成原來的2倍。

arraylist和vector都是通過陣列方式儲存的,此陣列元素大於實際儲存的資料以便增加和插入元素,他們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入慢。

*arraylist:

底層的實現就是乙個可變陣列非同步實現,當陣列長度不夠用的時候就會重新開闢乙個新的陣列,然後將原來的資料拷貝到新的陣列內。由於這一底層實現,所以arraylist集合中元素儲存的位置是連續的,查詢起來效率比較高,插入刪除效率較低。vector與arraylist的主要是區別是,vector是執行緒安全的,但是效能比arraylist要低 *

linkedlist使用的雙向鍊錶實現儲存(將記憶體中零散的記憶體單元通過附加的引用關聯起來,形成乙個可以按序號索引的線性結構,這種鏈式儲存方式與陣列的連續儲存方式相比,記憶體的利用率更高),按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快

常用模式:單例模式、觀察者模式、裝飾者模式、工廠模式、**模式

工廠模式:工廠模式就是在介面和子類之間加入了乙個過渡端,通過此過渡端獲得介面的例項化物件,這個過渡端也就是所謂的工廠類。

spring框架的核心:ioc容器和aop模組。通過ioc容器管理pojo物件以及他們之間的耦合關係;通過aop以動態非侵入的方式增強服務。

ioc(控制反轉):ioc是inversion of control的縮寫,將你設計好的物件交給容器控制,而不是在你物件的內部自己控制。ioc理論提出的觀點大體就是這樣的,借助於「第三方」實現具體有依賴關係的物件之間的耦合。如下圖

如上圖,由於引入了中間位置的「第三方」,就是ioc容器,使得a、b、c、d這4個物件沒有了耦合關係,齒輪之間的傳動全部依靠第三方了;全部物件的控制權全部上繳給了「第三方」ioc容器,所以這個ioc容器成了整個系統的關鍵核心,它起到了一種類似「粘合劑」的作用,把系統中的所有物件給粘合起來,一起發揮作用。如果沒有這個「粘合劑」那各個物件之間就會失去聯絡,這就是為什麼有人把ioc容器比喻成「粘合劑」的由來。把上圖的ioc容器拿掉之後就變成了下圖:

●誰依賴於誰:當然是應用程式依賴於ioc容器;

●為什麼需要依賴:應用程式需要ioc容器來提供物件需要的外部資源;

●誰注入誰:很明顯是ioc容器注入應用程式某個物件,應用程式依賴的物件;

●注入了什麼:就是注入某個物件所需要的外部資源(包括物件、資源、常量資料)。

ps:再對比一下在沒有ioc容器的時候,如果物件a要依賴物件b,那麼物件a在初始化或者執行到某一時刻,自己必須主動去建立物件b或者使用已經建立的物件b。無論是建立還是使用物件b,控制權都在自己手上。

如果引入了ioc容器,物件a和物件b失去了直接的聯絡,所以當物件a執行到需要物件b的時候。ioc容器會主動建立乙個物件b注入到物件a需要的地方。

通過前後的對比,我們不難看出來:物件a獲得依賴物件b的過程,由主動行為變為了被動行為,控制權顛倒過來了,這就是「控制反轉」這個名稱的由來。

簡單的理解就是:實現ioc思想,並提供物件建立、物件裝配以及物件生命週期管理的軟體就是ioc容器。

aop(面向切面程式設計):

2023年10月14日更新 ↓↓↓

1、myisam是預設表型別不是事務安全的;innodb支援事務。

2、myisam不支援外來鍵;innodb支援外來鍵。

3、執行大量select,myisam是最好的選擇;執行大量的update和insert最好用innodb。

為什麼myisam要比innodb的查詢速度快?

innodb 在做select的時候,要維護的東西比myisam引擎多很多;

1)innodb 要快取資料和索引,myisam只快取索引塊,這中間還有換進換出的減少;

2)innodb定址要對映到塊,再到行,myisam記錄的直接是檔案的offset,定位比innodb要快;

3)innodb 還需要維護mvcc一致;雖然你的場景沒有,但他還是需要去檢查和維護mvcc ( multi-version concurrency control )多版本併發控制。

死鎖:是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象。

導致死鎖的原因:

(1)因為系統資源不足

(2)程序執行推進順序不合適

(3)資源分配不當

如果資源充足,程序的資源請求每次都能夠得到滿足,死鎖出現的可能性就很低,否則因為爭奪有限的資源而陷入死鎖。其次,程序運維推進順序與速度不同,也可能產生死鎖。

list與set方法的區別有:list可以允許重複物件和插入多個null值,而set不允許;list容器是有序的,保持了每個元素的插入順序;而set容器是無序的,list可以插入多個null元素,而set只允許插入乙個null元素。

list中的元素存放是有序的,可以存放重複的元素,檢索效率較高,插入刪除效率低。

set沒有存放順序,不能存放 重複的元素,元素檢索效率低,插入刪除效率高。

面試題彙總

1.佇列先進先出,棧先進後出。2.對插入和刪除操作的 限定 棧是限定只能在表的一端進行插入和刪除操作的線性表。佇列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。從 資料結構 的角度看,它們都是線性結構,即資料元素之間的關係相同。3.遍歷資料速度不同。順序表是在記憶體中開闢一段連續的空間...

面試題彙總

1 integer和int的區別?2 和equals的區別?int a 50,integer b 50 a b?integer c 50,b c?3 get和post的區別?4 用執行緒池建立執行緒和自己建立執行緒的區別,好處是什麼?5 利用int型陣列實現乙個棧,並實現出棧和入棧操作?要求時間複雜...

面試題彙總

題目都是我自己寫的,所以也不一定是完全正確的,因為能有很多細節沒有考慮,如果大家發現了希望指正 1 完美世界2017 刪除vector中所有偶數 最想去的地方呀。void deleteeven vector v2 else if iter 2 0 else 2 編寫類string的建構函式,析構函式...