
有很多計算機科學技術專業的畢業生和程式員申請在Uber和Netflix這樣的初創公司、谷歌和阿裡巴巴這樣的大公司以及Infosys或Luxsoft等以服務為基礎的公司從事程式設計、編碼和軟體開發工作,但他們中的許多人都不知道,當你申請這些公司的職位時,你會遇到什麼樣的程式設計面試問題。
在這篇文章中,我将分享一些常見的來自不同經驗水準程式員的程式設計面試問題,他們是從剛大學畢業的人到有一到兩年經驗的程式員。
程式設計面試主要由
資料結構問題和算法問題以及一些邏輯問題組成,比如,如何在不使用臨時變量的情況下交換兩個整數?
我認為把程式設計面試問題分成不同的主題領域是有幫助的。我在訪談中經常看到的主題領域是數組、連結清單、字元串、二叉樹,以及來自算法的問題(例如字元串算法、
快速排序或
基數排序等排序算法),這就是你将在本文中找到的内容。
這些面試題不能保證你會被問到這些程式設計、資料結構和算法問題,但它們會讓你對在真正的程式設計工作面試中可能遇到的問題有足夠的了解。
一旦你完成這些問題,你就應該有足夠的信心參加任何電話或面對面的面試。
順便說一句,如果你對基本的資料結構和算法沒有充分的知識,或者從沒有接觸過它們,那麼嘗試這些問題就沒有意義了。
在這種情況下,你應該學習一門很好的課程,比如
Robert Horvick的算法和資料結構第1部分和第2部分,以更新你的DS和算法技能。
前50大算法和編碼面試問題下面是我列出的一些最常見的程式設計面試問題:
1 .數組編碼面試問題數組是最基本的資料結構,它将元素存儲在一個連續的記憶體位置。這也是面試官們熱衷的話題之一,在任何一次
程式設計面試中,你都會聽到很多關于數組的問題,比如将數組中元素位置颠倒,對數組進行排序,或者搜尋數組上的元素。
數組資料結構的主要優點是,如果知道索引,它可以提供快速的O(1)搜尋,但是從數組中添加和删除元素是很慢的,因為一旦建立了數組,就無法更改數組的大小。
為了建立更小或更大的數組,需要建立一個新數組并将所有元素從舊數組拷貝到新數組。
解決基于數組的問題的關鍵是對
數組資料結構以及基本的程式設計構造函數(如循環、遞歸和基本運算符)要有很好的了解。
以下是一些熱門的基于數組的程式設計面試問題:
1.如何在一個1到100的整數數組中找到丢失的數字?
(方法)2.如何在給定的整數數組中找到重複的數字?
3.如何在未排序整數數組中找到最大值和最小值?
4.如何找到數組所有和等于一個給定數的數對?
5.如果一個數組包含多重複制,那麼如何找到重複的數字?
6.在Java中如何從給定數組中删除多重複制?
7.如何使用快速排序算法對整數數組進行排序?
8.如何從數組中删除多重複制?
9.如何在Java中對數組進行反向操作?
10.如何在不使用任何庫的情況下從數組中删除多重複制?
這些問題不僅可以幫助你提高解決問題的能力,還可以提高你對數組資料結構的認識。
如果你需要更進階的基于數組的問題,那麼你還可以看到
程式設計面試訓練營:算法+資料結構,一個專門為面試準備的關于算法的Bootcamp風格課程,以獲得一個技術巨頭公司的工作,如谷歌,微軟,蘋果,Facebook等。
如果你覺得10個問題不夠用來訓練,或者你需要更多的訓練,你可以看一下這
30題。
2. 連結清單程式設計面試問題 連結清單是補充數組資料結構的另一種常見的資料結構。與數組類似,它也是一個線性資料結構,以線性方式存儲元素。
然而,與數組不同的是,它不會将它們存儲在連續的位置;相反,它們分散在記憶體中各處,記憶體使用節點互相連接配接。
連結清單就是節點清單,每個節點包含存儲的值和下一個節點的位址。
由于這種結構,在連結清單中添加和删除元素很容易,因為隻需要更改連結而不是建立數組,但是查找是困難的,并且通常需要O(n)來查找單個連結清單中的元素。
本文提供了更多關于數組和連結清單資料結構之間差別的資訊。
連結清單也有多種形式,比如單連結清單,它允許你沿着一個方向(向前或向後)移動周遊;雙連結清單,允許在兩個方向(向前和向後)周遊;最後,循環連結清單則形成一個環。
為了解決基于連結清單的問題,對遞歸知識進行了解是很重要的,因為連結清單是遞歸資料結構。
如果從連結清單中取出一個節點,剩下的資料結構仍然是連結清單,是以,許多連結清單問題的遞歸解決方案比疊代解決方案更簡單。
以下是一些最常見和最流行的面試問題及解決方法:
1.如何在一次周遊中找到單個連結清單的中值?
2.如何證明給定的連結清單是否包含循環?如何找到循環的頭節點?
3.如何使連結清單反向?
4.如何在不使用遞歸的情況下逆轉單連結清單?
5.如何删除未排序連結清單中的重複節點?
6.如何得到單連結清單的長度?
7.如何在單連結清單中從尾部找到第三個節點?
8.如何使用堆棧得到兩個連結清單的和?
這些問題将幫助你發展解決問題的技能,以及提高你對連結清單資料結構的知識。
如果你在解決這些連結清單程式設計問題時遇到困難,那麼我建議你通過浏覽資料結構和算法來重新整理
資料結構和算法技能:使用Java課程進行深入研究。
你可以看這
獲得更多的練習。
3. 字元串程式設計面試問題除了數組和連結清單資料結構外,字元串也是程式設計面試中的另一個熱門話題。我參加過的面試,都有以
字元串為基礎的問題字元串的一個好處是,如果你了解數組,你可以很容易地解決基于字元串的問題,因為字元串是一個字元數組。
是以,通過解決基于數組的程式設計問題所學習的所有技術也可以用于解決字元串程式設計問題。
下面是程式設計面試中經常被問到的字元串編碼問題:
1.如何從字元串列印重複字元?
2.如何檢查兩個字元串是否互相颠倒?
3.如何從字元串中列印第一個非重複字元?
4.如何使用遞歸反轉給定的字元串?
5.如何檢查字元串是否隻包含數字?
6.如何在字元串中找到重複的字元?
7.在給定的字元串中,如何計算元音和輔音的數量?
8.如何計算字元串中給定字元的出現次數?
9.如何找到一個字元串的所有排列?
10.如何在不使用任何庫方法的情況下逆轉一個句子中的單詞?
11.如何檢查兩個字元串是否互相旋轉?
12.如何檢查給定的字元串是否回文?
這些問題有助于提高對字元串資料結構的認識。如果你能在沒有任何幫助的情況下解決所有這些問題,那麼你應該不錯。
對于更進階的問題,我建議解決
Steven Skiena的算法設計手冊中給出的問題,這本書中有最棘手的算法問題。
如果你需要更多的練習,這裡有另外一個
20個字元串編碼問題的清單。
4 二叉樹編碼面試問題到目前為止,我們隻研究了線性資料結構,但是現實世界中的所有資訊都不能以線性方式表示,這就是樹資料結構的作用所在。
樹資料結構是一種允許以分層方式存儲資料的資料結構。根據存儲資料的方式的不同,樹的類型不同,例如二叉樹,其中每個節點最多有兩個子節點。
除了近親二叉搜尋樹,它也是最流行的樹資料結構之一。是以,會有許多基于它們的問題,例如如何周遊它們、計算節點、查找深度以及檢查它們是否為平衡二叉樹。
解決二叉樹問題的一個關鍵是要有很強的理論知識,例如二叉樹的大小或深度是什麼,什麼是葉子節點,什麼是節點,以及了解流行的周遊算法,例如先序周遊、後序周遊和順序周遊。
下面是一些軟體工程師或開發人員面試中常見的基于二進制樹的編碼問題:
1.如何實作二叉搜尋樹?
2.如何在給定的二叉樹中執行先序周遊?
3.如何在不使用遞歸的情況下按順序周遊給定的二叉樹?
4.如何在給定的二叉樹中執行順序周遊?
5.如何在不使用遞歸的情況下,使用順序周遊列印給定二叉樹的所有節點?
6.如何實作後序周遊算法?
7.如何在不使用遞歸的情況下周遊後序周遊中的二叉樹?
8.如何列印二叉搜尋樹的所有葉子?
9.如何計算給定二叉樹中的葉節點數?
10.如何在給定數組中執行二分法搜尋?
如果你覺得對二叉樹編碼的了解不夠充分,而且你不能自己解決這些問題,我建議你回去選擇一個好的資料結構和算法課程,比如
從0到1:Java中的資料結構和算法。如果你需要更多的推薦,這裡是我的
資料結構算法書籍和
課程清單 5 .其他編碼面試問題除了基于資料結構的問題,大多數程式設計工作面試也會問算法、設計、位操作和基于邏輯的問題,我将在本節中描述這些問題。
練習這些概念是很重要的,因為有時候這些概念在實際面試中很難解決。之前的練習不僅讓你熟悉它們,也讓你在向面試官解釋解決方案時更有信心。
1.如何實作冒泡排序算法?
2.如何實作疊代快速排序算法?
3.如何實作插入排序算法?
4.如何實作歸并排序算法?
5.如何實作桶排序算法?
6.如何實作計數排序算法?
7.如何實作基數排序算法?
8.如何在不使用第三個變量的情況下交換兩個數字?
9.如何檢查兩個矩形是否重疊?
10.如何設計自動售貨機?
如果你需要更多這樣的程式設計問題,你可以從Gayle Laakmann McDowell的著作
《破解代碼面試》中得到幫助,該書提出了189個以上的程式設計問題和解決方案。一本可以在短時間内為程式設計面試做準備的好書。
順便說一下,你在實踐中解決的問題越多,你準備的就越好。是以,如果你認為50題還不夠,你還需要更多,那麼你可以看看這些額外的
50題 電話面試的程式設計問題,以及這些
書籍 課程,以便更徹底的準備。
現在你已經為編碼面試做好了準備這些是資料結構和算法之外的一些最常見的問題,可以幫助你在面試中表現出色。這些常見的編碼、資料結構和算法問題是在任何級别的程式設計工作中成功面試任何公司(無論大小)所需要知道的。
如果你想在2018年找一份程式設計或軟體開發的工作,你可以從這些編碼問題開始準備。
這份清單提供了很好的準備主題,也有助于評估你的準備工作,找出你的優勢和劣勢。良好的資料結構和算法知識對于編碼面試的成功是很重要的,這也是你應該集中注意力的地方。
本文由
阿裡雲雲栖社群組織翻譯。
文章原标題《50-data-structure-and-algorithms-interview-questions-for-programmers》
作者:
javinpaul譯者:虎說八道,審校:。
文章為簡譯,更為詳細的内容,請檢視
原文