Java面試必問面試題,你掌握了嗎?
瑞士電腦科學家Niklaus Wirth在1976年寫了一本書,名為《演算法+資料結構=程式設計》。
40多年後,這個等式仍被奉為真理。這就是為什麼在面試過程中,需要考察軟體工程師對資料結構的理解。
幾乎所有的問題都需要面試者對資料結構有深刻的理解。無論你是初入職場的新兵(剛從大學或者程式設計培訓班畢業),還是擁有幾十年經驗的職場老鳥。
有些面試題會明確提及某種資料結構,例如,“給定一個二叉樹。”而另一些則隱含在面試題中,例如,“我們希望記錄每個作者相關的書籍數量。”
即便是對於一些非常基礎的工作來說,學習資料結構也是必須的。那麼,就讓我們先從一些基本概念開始入手。
什麼是資料結構?
簡單地說,資料結構是以某種特定的佈局方式儲存資料的容器。這種“佈局方式”決定了資料結構對於某些操作是高效的,而對於其他操作則是低效的。首先我們需要理解各種資料結構,才能在處理實際問題時選取最合適的資料結構。
資料是電腦科學當中最關鍵的實體,而資料結構則可以將資料以某種組織形式儲存,因此,資料結構的價值不言而喻。
無論你以何種方式解決何種問題,你都需要處理資料——無論是涉及員工薪水、股票價格、購物清單,還是隻是簡單的電話簿問題。
資料需要根據不同的場景,按照特定的格式進行儲存。有很多資料結構能夠滿足以不同格式儲存資料的需求。
常見的資料結構
首先列出一些最常見的資料結構,我們將逐一說明:
陣列
棧
佇列
連結串列
樹
圖
字典樹(這是一種高效的樹形結構,但值得單獨說明)
雜湊表(雜湊表)
陣列
陣列是最簡單、也是使用最廣泛的資料結構。棧、佇列等其他資料結構均由陣列演變而來。下圖是一個包含元素(1,2,3和4)的簡單陣列,陣列長度為4。
每個資料元素都關聯一個正數值,我們稱之為索引,它表明陣列中每個元素所在的位置。大部分語言將初始索引定義為零。關注Java技術棧微信公眾號,回覆”面試”獲取更多博主精心整理的面試題。
以下是陣列的兩種型別:
一維陣列(如上所示)
多維陣列(陣列的陣列)
陣列的基本操作
Insert——在指定索引位置插入一個元素
Get——返回指定索引位置的元素
Delete——刪除指定索引位置的元素
Size——得到陣列所有元素的數量
面試中關於陣列的常見問題
尋找陣列中第二小的元素
找到陣列中第一個不重複出現的整數
合併兩個有序陣列
重新排列陣列中的正值和負值
棧
著名的撤銷操作幾乎遍佈任意一個應用。但你有沒有思考過它是如何工作的呢?這個問題的解決思路是按照將最後的狀態排列在先的順序,在記憶體中儲存歷史工作狀態(當然,它會受限於一定的數量)。這沒辦法用陣列實現。但有了棧,這就變得非常方便了。
可以把棧想象成一列垂直堆放的書。為了拿到中間的書,你需要移除放置在這上面的所有書。這就是LIFO(後進先出)的工作原理。
下圖是包含三個資料元素(1,2和3)的棧,其中頂部的3將被最先移除:
棧的基本操作
Push——在頂部插入一個元素
Pop——返回並移除棧頂元素
isEmpty——如果棧為空,則返回true
Top——返回頂部元素,但並不移除它
面試中關於棧的常見問題
使用棧計算字尾表示式
對棧的元素進行排序
判斷表示式是否括號平衡
佇列
與棧相似,佇列是另一種順序儲存元素的線性資料結構。棧與佇列的最大差別在於棧是LIFO(後進先出),而佇列是FIFO,即先進先出。
一個完美的佇列現例項子:售票亭排隊隊伍。如果有新人加入,他需要到隊尾去排隊,而非隊首——排在前面的人會先拿到票,然後離開隊伍。
下圖是包含四個元素(1,2,3和4)的佇列,其中在頂部的1將被最先移除:
移除先入隊的元素、插入新元素
佇列的基本操作
Enqueue() —— 在佇列尾部插入元素
Dequeue() ——移除佇列頭部的元素
isEmpty()——如果佇列為空,則返回true
Top() ——返回佇列的第一個元素
面試中關於佇列的常見問題
使用佇列表示棧
對佇列的前k個元素倒序
使用佇列生成從1到n的二進位制數
連結串列
連結串列是另一個重要的線性資料結構,乍一看可能有點像陣列,但在記憶體分配、內部結構以及資料插入和刪除的基本操作方面均有所不同。關注Java技術棧微信公眾號,回覆”面試”獲取更多博主精心整理的面試題。
連結串列就像一個節點鏈,其中每個節點包含著資料和指向後續節點的指標。 連結串列還包含一個頭指標,它指向連結串列的第一個元素,但當列表為空時,它指向null或無具體內容。
連結串列一般用於實現檔案系統、雜湊表和鄰接表。
這是連結串列內部結構的展示:
連結串列包括以下型別:
單連結串列(單向)
雙向連結串列(雙向)
連結串列的基本操作:
InsertAtEnd – 在連結串列的末尾插入指定元素
InsertAtHead – 在連結列表的開頭/頭部插入指定元素
Delete – 從連結列表中刪除指定元素
DeleteAtHead – 刪除連結列表的第一個元素
Search – 從連結串列中返回指定元素
isEmpty – 如果連結串列為空,則返回true
面試中關於連結串列的常見問題
反轉連結串列
檢測連結串列中的迴圈
返回連結串列倒數第N個節點
刪除連結串列中的重複項
圖
圖是一組以網路形式相互連線的節點。節點也稱為頂點。 一對節點(x,y)稱為邊(edge),表示頂點x連線到頂點y。邊可以包含權重/成本,顯示從頂點x到y所需的成本。
圖的型別
無向圖
有向圖
在程式語言中,圖可以用兩種形式表示:
鄰接矩陣
鄰接表
常見圖遍歷演算法
廣度優先搜尋
深度優先搜尋
面試中關於圖的常見問題
實現廣度和深度優先搜尋
檢查圖是否為樹
計算圖的邊數
找到兩個頂點之間的最短路徑
樹
樹形結構是一種層級式的資料結構,由頂點(節點)和連線它們的邊組成。 樹類似於圖,但區分樹和圖的重要特徵是樹中不存在環路。
樹形結構被廣泛應用於人工智慧和複雜演算法,它可以提供解決問題的有效儲存機制。
這是一個簡單樹的示意圖,以及樹資料結構中使用的基本術語:
Root – 根節點
Parent – 父節點
Child – 子節點
Leaf – 葉子節點
Sibling – 兄弟節點
以下是樹形結構的主要型別:
N元樹
平衡樹
二叉樹
二叉搜尋樹
AVL樹
紅黑樹
2-3樹
其中,二叉樹和二叉搜尋樹是最常用的樹。
面試中關於樹結構的常見問題:
求二叉樹的高度
在二叉搜尋樹中查詢第k個最大值
查詢與根節點距離k的節點
在二叉樹中查詢給定節點的祖先節點
字典樹(Trie)
字典樹,也稱為“字首樹”,是一種特殊的樹狀資料結構,對於解決字串相關問題非常有效。它能夠提供快速檢索,主要用於搜尋字典中的單詞,在搜尋引擎中自動提供建議,甚至被用於IP的路由。
以下是在字典樹中儲存三個單詞“top”,“so”和“their”的例子:
這些單詞以頂部到底部的方式儲存,其中綠色節點“p”,“s”和“r”分別表示“top”,“thus”和“theirs”的底部。
面試中關於字典樹的常見問題
計算字典樹中的總單詞數
列印儲存在字典樹中的所有單詞
使用字典樹對陣列的元素進行排序
使用字典樹從字典中形成單詞
構建T9字典(字典樹+ DFS )
雜湊表
雜湊法(Hashing)是一個用於唯一標識物件並將每個物件儲存在一些預先計算的唯一索引(稱為“鍵(key)”)中的過程。因此,物件以鍵值對的形式儲存,這些鍵值對的集合被稱為“字典”。可以使用鍵搜尋每個物件。基於雜湊法有很多不同的資料結構,但最常用的資料結構是雜湊表。
雜湊表通常使用陣列實現。
雜湊資料結構的效能取決於以下三個因素:
雜湊函式
雜湊表的大小
碰撞處理方法
下圖為如何在陣列中對映雜湊鍵值對的說明。該陣列的索引是通過雜湊函式計算的。
面試中關於雜湊結構的常見問題:
在陣列中查詢對稱鍵值對
追蹤遍歷的完整路徑
查詢陣列是否是另一個陣列的子集
檢查給定的陣列是否不相交
以上是在程式設計面試之前你應該知曉的八大資料結構。
進群:可以領取免費的架構師學習資料;瞭解最新的學習動態;瞭解最新的阿里、京東招聘資訊;獲取更多的面試資料 Java高架構師、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師之路 想要學習以上內容進群:878249276 ,進群獲取架構師視訊、筆記、原始碼、課件、等書籍資料
相關文章
- 40個Java集合面試問題和答案,面試奇葩問題,你掌握了嗎?Java面試
- 【4】進大廠必須掌握的面試題-Java面試-jdbc面試題JavaJDBC
- Java程式設計師面試必須要掌握的面試題Java程式設計師面試題
- 8道經典JavaScript面試題解析,你真的掌握JavaScript了嗎?JavaScript面試題
- 面試現場:這些常問的面試題你都會了嗎面試題
- 【5】進大廠必須掌握的面試題-Java面試-spring面試題JavaSpring
- 最新阿里Java面試題,這些面試題你會嗎?阿里Java面試題
- 10道Python基礎面試題附答案,你都掌握了嗎?Python面試題
- 面試常遇的打家劫舍問題你學會了嗎~面試
- Linux面試必問題,想從事Linux工作這些你會了嗎?Linux面試
- Java 進階面試問題必備Java面試
- 面試現場!月薪3w+的這些資料探勘SQL面試題你都掌握了嗎?SQL面試題
- 這些喜聞樂見的Java面試知識點,你都掌握了嗎?Java面試
- 24個必須掌握的資料庫面試問題~資料庫面試
- 【9】進大廠必須掌握的面試題-DevOps面試面試題dev
- 【面試篇】金九銀十面試季,這些面試題你都會了嗎?面試題
- 【8】進大廠必須掌握的面試題-Java面試-異常和執行緒面試題Java執行緒
- 千圖網,你面試了嗎面試
- 【11】進大廠必須掌握的面試題-持續整合面試面試題
- 【面試必備】常見Java面試題大綜合Java面試題
- java面試問題Java面試
- 初級運維必備掌握面試題目運維面試題
- 這幾道Java集合框架面試題在面試中幾乎必問Java框架面試題
- 面試時,你會問面試官哪些問題?面試
- 大小廠必問Java後端面試題(含答案)Java後端面試題
- 【12】進大廠必須掌握的面試題-持續測試面試面試題
- 面試必備問題集錦面試
- 面試筆記之必掌握的java核心技能點面試筆記Java
- 2020年前必須掌握的資料庫面試問題~資料庫面試
- 你真的理解反向傳播嗎?面試必備反向傳播面試
- 3道常見的vue面試題,你都會了嗎?Vue面試題
- 常見Linux運維面試題,你答對了嗎?Linux運維面試題
- 大廠必問的Java虛擬機器面試題Java虛擬機面試題
- Airbnb面試的27個奇葩問題,你 hold 住嗎?AI面試
- Java 最常見的 200+ 面試題:面試必備Java面試題
- 騰訊這套SpringMvc面試題你懂多少(面試必備)SpringMVC面試題
- java面試題總結(開發者必備)Java面試題
- 前端面試題:你知道websocket嗎?前端面試題Web