10 個經典的 Java 集合面試題,看你能否答得上來?(會員專享)

本文爲CSDN博主「我要取一個響亮的暱稱」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/chen_2890/article/details/83928763出品 | CSDN(ID:CSDNnews)

01

Java 基礎

1、基本數據類型

2、包裝類型

包裝類型是對基本數據類型不足之處的補充。

基本數據類型的傳遞方式是值傳遞,而包裝類型是引用傳遞,同時提供了很多數據類型間轉換的方法。

Java1.5 以後可以自動裝箱和拆箱。

3、集合

  • List:有序、可重複。可以通過索引快速查找,但進行增刪操作時後續的數據需要移動,所以增刪速度慢。

  • Set:無序、不可重複。

  • Map:鍵值對、鍵唯一、值不唯一。Map 集合中存儲的是鍵值對,鍵不能重複,值可以重複。根據鍵得到值,對 map 集合遍歷時先得到鍵的 set 集合,對 set 集合進行遍歷,得到相應的值。

4、多線程

  • 新建狀態: 一個新產生的線程從新狀態開始了它的生命週期。它保持這個狀態直到程序 start 這個線程。

  • 運行狀態:當一個新狀態的線程被 start 以後,線程就變成可運行狀態,一個線程在此狀態下被認爲是開始執行其任務

  • 就緒狀態:當一個線程等待另外一個線程執行一個任務的時候,該線程就進入就緒狀態。當另一個線程給就緒狀態的線程發送信號時,該線程才重新切換到運行狀態。

  • 休眠狀態: 由於一個線程的時間片用完了,該線程從運行狀態進入休眠狀態。當時間間隔到期或者等待的時間發生了,該狀態的線程切換到運行狀態。

  • 終止狀態: 一個運行狀態的線程完成任務或者其他終止條件發生,該線程就切換到終止狀態。

5、熱門面試問題:

  1. 什麼是 GC?爲什麼要有 GC?

  2. final, finally 和 finalize 的區別?

  3. 什麼是單例模式?實現步驟?

  4. ArrayList 和 LinkedList 有何區別?

  5. HashMap 和 Hashtable 的區別?

  6. Iterater 和 ListIterator 之間有什麼區別?

  7. 創建線程的方式?

  8. 什麼是死鎖?

  9. wait()與 sleep()的區別?

  10. 什麼是 ThreadLocal?ThreadLocal 和 Synchonized 的區別?

這些面試題,你都會做嗎?

掃碼進入 CSDN 會員 公衆號

後臺回覆關鍵詞“ 面試 

即可領取所有的面試答案

02

Java Web

1、Ajax

AJAX = Asynchronous JavaScript and XML(異步 JavaScript 和 XML)。

Ajax 的原理簡單來說通過 XmlHttpRequest 對象來向服務器發異步請求,從服務器獲得數據,然後用 Javascript 來操作 DOM 而更新頁面。這其中最關鍵的一步就是從服務器獲得請求數據。

XmlHttpRequest 是 ajax 的核心機制,它是在 IE5 中首先引入的,是一種支持異步請求的技術。

簡單的說,也就是 Javascript 可以及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。

2、JQuery

JQuery 是一個 JavaScript 庫。功能包括 HTML 元素選取和操作、CSS 操作、HTML 事件函數、 JavaScript 特效和動畫、HTML DOM 遍歷和修改、AJAX 和 Utilities。除此之外,JQuery 還提供了大量插件。

  • 基礎語法:$(selector).action()。

  • 選擇器:主要分四大選擇器,分別是基本選擇器、層次選擇器、過濾選擇器、屬性過濾選擇器。

  • 事件:例如 click()、dblclick()、mouseenter()、mouseleave()、mousedown()等。

3、Cookie

在 web 程序中是使用 HTTP 協議來傳輸數據的,因爲 http 是無狀態協議,一旦數據交換完畢,客戶端和服務器端的連接就會關閉,再次交換數據需要建立新的連接,所以無法實現會話跟蹤,cookie 技術則彌補了這一缺陷。

cookie 實際上一段的文本信息,客戶端請求服務器。如果服務器需要記錄該用戶的狀態,就使用 response 向客戶端瀏覽器頒發一個 cookie。客戶端瀏覽器會把 cookie 保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該 cookie 一同提交給服務器。服務器檢查該 cookie,以此來辨認用戶的狀態。服務器還可以根據需要修改 cookie 的內容。


cookie 生命週期:

cookie 的 maxAge 決定 cookie 的生命週期,單位爲秒(second)。cookie 通過 getMaxAge() 方法和 setMaxAge()方法來獲得 maxAge 屬性。

如果 maxAhe 屬性爲正,則表示 cookie 會在 maxAge 秒之後自動失效。

如果 maxAge 屬性爲負,則說明 cookie 僅在本瀏覽器窗口和本窗口打開的子窗口下有效,關閉窗口 cookie 則失效。

maxAge 的默認值是-1 當 maxAge 的值爲 0 時,表示刪除 cookie。

4、Session

session 也是一種記錄客戶狀態的機制,不同的是 cookie 保存在客戶端瀏覽器中,而 session 保存在服務器上。客戶端瀏覽器訪問服務器是時候把客戶端信息以某種形式記錄在服務器上,這就是 session 中查找該客戶的狀態。

session 生命週期:

session 保存在服務器端,爲了獲得更高的存取速度,服務器一般把 session 放在內存。每個用戶都會有一個獨立的 session,如果 session 內容過於複雜,當大量客戶訪問服務器時可能會導致內存溢出。

session 在用戶第一次訪問服務器的時候自動創建,需要注意只有訪問 JSP,Servlet 等程序時纔會創建 session;只要訪問 HTML、IMAGE 等靜態資源不會創建 session。如果尚未生成session,可以使用 request.getSession(true)強制生成 session。

session 生成後,只要用戶訪問,服務器就會更新 session 的最後訪問時間,並維護該 session。用戶每訪問服務器一次,無論是否續寫 session 服務器都認爲該用戶的 session 活躍(active)了一次。

Session 對應的類是 javax.servlet.http.HttpSession,每一個訪問者都對應一個 session 對象,並將其狀態信息保存在這個 session 對象中,session 對象的創建是在用戶第一次訪問服務器時產生的。

5、熱門面試問題:

  1. 原生態 Ajax 執行流程?

  2. 轉發(forward)和重定向(redirect)的區別?

  3. 怎麼防止表單重複提交?

  4. web.xml 文件中可以配置哪些內容?

這些面試題,你都會做嗎?

掃碼進入 CSDN 會員 公衆號

後臺回覆關鍵詞“ 面試 

即可領取所有的面試答案

03

數據庫(MySQL)

1、連接查詢

分類:內連接、外連接、自然連接(略)、交叉連接(略)。

2、內連接

基本語法:左表 [inner] join 右表 on 左表.字段 = 右表.字段;

從左表中取出每一條記錄,去右表中與所有的記錄進行匹配:匹配必須是某個條件在左表中與右表中相同最終纔會保留結果,否則不保留。

3、外連接

基本語法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

  • left join: 左外連接(左連接), 以左表爲主表

  • right join: 右外連接(右連接), 以右表爲主表

以某張表爲主,取出裏面的所有記錄,然後每條與另外一張表進行連接:不管能不能匹配上條件,最終都會保留。能匹配,正確保留;不能匹配,其他表的字段都置空 NULL。

左外連接

右外連接

4、聯合查詢

基本語法:

Select 語句 1
    
    Union [union 選項]
    
    Select 語句 2
    
    ……

將多次查詢(多條 select 語句), 在記錄上進行拼接(字段不會增加),每一條 select 語句獲取的字段數必須嚴格一致(但是字段類型無關)。

其中 union 選項有 2 個。ALL:保留所有;Distinct(默認):去重。

應用:查詢同一張表,但是有不同的需求;查詢多張表,多張表的結構完全一致,保存的數據也是一樣的。

在聯合查詢中,order by 不能直接使用。需要對查詢語句使用括號纔行。另外需要配合 limit 使用。

5、索引

如果說數據庫表中的數據是一本書,那麼索引就是書的目錄。索引能夠讓我們快速的定位想要查詢的數據。

索引的結構:BTree 索引和 Hash 索引。

MyISAM 和 InnoDB 存儲引擎:只支持 BTREE 索引, 也就是說默認使用 BTREE,不能夠更換。

MEMORY/HEAP 存儲引擎:支持 HASH 和 BTREE 索引。

索引的分類:單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引。

6、數據庫引擎

InnoDB:支持事務處理,支持外鍵,支持崩潰修復能力和併發控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現併發控制(比如售票),那選擇 InnoDB 有很大的優勢。

如果需要頻繁的更新、刪除操作的數據庫,也可以選擇 InnoDB,因爲支持事務的提交(commit)和回滾(rollback)。

MyISAM:插入數據快,空間和內存使用比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇 MyISAM 能實現處理高效率。如果應用的完整性、併發性要求比較低,也可以使用。

MEMORY:所有的數據都在內存中,數據的處理速度快,但是安全性不高。如果需要很快的讀寫速度,對數據的安全性要求較低,可以選擇 MEMOEY。它對錶的大小有要求,不能建立太大的表。所以,這類數據庫只使用在相對較小的數據庫表。

7、存儲過程

SQL 語句需要先編譯然後執行,而存儲過程(Stored Procedure)是一組爲了完成特定功能的 SQL 語句集,經編譯後存儲在數據庫中,用戶通過指定存儲過程的名字並給定參數(如果該存儲過程帶有參數)來調用執行它。

存儲過程是可編程的函數,在數據庫中創建並保存,可以由 SQL 語句和控制結構組成。當想要在不同的應用程序或平臺上執行相同的函數,或者封裝特定功能時,存儲過程是非常有用的。數據庫中的存儲過程可以看做是對編程中面向對象方法的模擬,它允許控制數據的訪問方式。

存儲過程的優點:

  1. 增強 SQL 語言的功能和靈活性;

  2. 標準組件式編程;

  3. 較快的執行速度;

  4. 減少網絡流量;

  5. 作爲一種安全機制來充分利用。

8、熱門面試問題:

1、JDBC 編程的步驟?

2、事務的 ACID 是什麼?事務併發會產生哪些問題?

3、數據庫性能優化有哪些方式?

9、數據庫筆試題

(1)用一條 SQL 語句查詢出每門課都大於 80 分的學生姓名

(2)所有球隊之間的比賽組合

一張叫 team 的表,裏面只有一個字段 name,一共有 4 條紀錄,分別是 a、b、c、d,對應四個球隊,現在四個球隊進行比賽,用一條 sql 語句顯示所有可能的比賽組合。

(3)顯示文章標題,發帖人、最後回覆時間

表:id,title,postuser,postdate,parentid

準備 sql 語句:

(4)航空網的幾個航班查詢題

① 查詢起飛城市是北京的所有航班,按到達城市的名字排序

② 查詢北京到上海的所有航班記錄(起飛城市,到達城市,起飛時間,航班號)

③ 查詢具體某一天(2005-5-8)的北京到上海的的航班次數

這些面試題,你都會做嗎?

掃碼進入 CSDN 會員 公衆號

後臺回覆關鍵詞“ 面試 

即可領取所有的面試答案

本文爲CSDN博主「我要取一個響亮的暱稱」的原創文章,文章內容有所刪減。原文還有更多關於【框架部分】的知識點總結、面試題目及答案講解!

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