2022 年 8 大重要的編碼面試問題和答案 [對於應屆生和有經驗者]

已發表: 2021-08-25

良好的數據結構基礎,如數組、二叉樹、哈希表和鍊錶是必不可少的。 您必須了解基本的算法、方法,並且對 Java 等編程語言有很好的掌握,尤其是在您申請編程工作時。 您絕對可以學習重要的編碼面試問題的答案,但強烈建議您自己廣泛練習這些解決方案。

最好的 8 個編碼面試問題及其答案

讓我們看看微軟、IBM、谷歌等大型公司在面試中提出的一些最重要的編碼問題。

1.如何找到單詞中第一個不重複的字符?

要回答這個問題,首先需要了解推廣這個功能必須做些什麼。 需要編寫一個接受字符串並返回第一個非重複字符的函數。

例如,在單詞“passage”中,“p”是第一個不重複的字符,或者在單詞“turtle”中,“u”是第一個不重複的字符。 那麼,我們如何解決這個問題呢? 我們可以創建一個表來存儲所有字符的重複次數,然後選擇不重複的第一個條目。

為了編寫將返回第一個非重複字母的代碼,我們可以使用 LinkedHashMap 來存儲字符數。 這個 HashMap 遵循插入的順序,並且字符被初始化在與字符串相同的位置。 必須使用 LinkedHashMap 對掃描的字符串進行迭代,以選擇值為 1 的所需條目。

解決此問題的另一種方法是使用 firstNonRepeatingChar(String word)。 這允許在單遍中識別首先出現的非重複字符。 這種方法使用兩個存儲來代替一個交互。 該方法分別存儲不重複和重複的字符,當迭代結束時,所需的字符是列表中的第一個元素。

2. 如何從數組中刪除重複項?

首先,必須使用 LinkedHashSet(Set 接口)來保留元素到集合中的原始插入順序。 您必須使用循環或遞歸函數來解決這些類型的編碼面試問題。

在處理數組時,我們必須記住的主要因素不是具有重複項的元素。 這裡的主要問題是刪除重複項。 數組是固定長度的靜態數據結構,因此無法更改。 因此,要從數組中刪除元素,您需要創建新數組並將內容複製到這些新數組中。

首先,您必須將數組轉換為 Arraylist,然後從這些 ArrayList 創建 LinkedHashSet。 如果輸入數組包含大量重複項,則可能會導致多個臨時數組,從而增加導入內容的成本。 此限制強制我們以需要較少內存和處理能力的方式解決此問題。

我們必須刪除重複項,但不要將它們複製到結果數組中,因此不會完全刪除重複項,而是簡單地將它們替換為 0 作為默認值。

3. 如何判斷一個數是否為質數?

這是最常見的編碼面試問題之一,涉及找出給定數字是否為質數。 這類程序是算法思維的基礎,因為我們必須提出解決方案,這些解決方案的基礎是素數都是自然數,不能被除 1 以外的正數整除。

我們必須編寫代碼來創建循環,檢查從 1 到目標數的每個數字,以查看目標數是否可以被除自身或 1 以外的任何其他正數整除。

這個函數將引導我們找到解決方案。 當檢查一個特別大的數字時,我們可以簡單地檢查直到 N 的平方根,N 是目標數字。 在符合條件的平方根的情況下,無需檢查直到 N。

如果這個數不能被 2 整除,則不需要檢查它是否能被其他偶數整除,從而減少了求解所需的時間。 這是解決方案的優化版本,在編寫解決方案之前分析數字會派上用場。

4. 如何檢查字符串是否只包含數字?

如果您希望編寫正則表達式來檢查字符串是否只是數字或它們是否包含非數字字符,您必須首先熟悉在 Java 正則表達式中使用字符集。 Java 等編程語言借助 java.util.regex.Matcher 類和 java.util.regex.Pattern 支持正則表達式。 Java.util.regex 是用於此目的的專用包。

為了使用正則表達式驗證僅數字的存在,我們可以使用代碼來分析字符串是否包含原始整數。 我們將檢查字符串是否僅包含 0 - 9 之間的數字。即使字符串包含數字但也包含其他字符,它也不是簡單的數字字符串。 正則表達式只檢查整數,不考慮點字符 (.),因此,使十進制數和浮點數無法通過測試。

5. 如何在沒有庫方法的幫助下反轉目標句中的單詞?

這也是非常常見的編碼面試問題之一。 首先,我們必須了解需求以及如何填補這個需求的空白。 面對這樣的問題,我們首先要專注於提出正確的問題。 字符串只不過是可能包含單個單詞或多個單詞的確定字符的句子。

一個句子也可能是空的。 例如,如果給我們一個句子“編程很有趣。”,我們必須將其反轉為“有趣的是編程”。 有效。 我們必須在 Java 中使用正則表達式將給定的字符串劃分為空格,然後應用 Collections 實用程序類中的 reverse() 方法。

一旦您能夠使用正則表達式'\\s' 來劃分字符串,就會返回一個單詞數組作為結果。 這也處理使用多個空格分隔的單詞。 一旦返回數組,您就可以選擇從這些數組創建 ArrayLists,然後使用 Collections.reverse() 方法。 這將反轉 ArrayLists,並且每個單詞都將以相反的順序重新初始化。

現在,剩下的就是使用 StringBuilder 通過 ArrayList 迭代連接多個字符串。 必須確保將大小指定為 StringBuilder 調整大小在處理能力和內存方面是一個代價高昂的過程。 調整大小最終通過從舊數組複製內容來創建新數組。

6. 如何替換或刪除字符串中的字符?

假設我們有一個字符串“Woocommerce”,並且我們希望將字母“r”替換為“n”,有多種方法可以實現這一點。 Java 中的字符串類提供了多種方法來使用 CharSequence 和子字符串替換字符串中的字符。

您可以輕鬆地在字符串中調用替換方法,該方法最終將替換目標字符並返回所需的字符。 字符串在 Java 等編程語言中是不可變的。

因此,每次對字符串執行刪除或替換等操作時,都會默認生成新的字符串對象。 使用 Java 替換字符串有 4 種重載方法:

  • 替換(char oldChar,char newChar)
  • replaceAll(字符串正則表達式,字符串替換)
  • replace(CharSequence 目標,CharSequence 替換)
  • replaceFirst(字符串正則表達式,字符串替換)

CharSequence 是字符串、StringBuilder 和 StringBuffer 的超級接口之一,允許我們將其中的任何對像作為此替換方法的參數傳遞。 replaceAll() 最終用替換字符串替換每個匹配項,而 replaceFirst() 只替換第一個匹配項。

總而言之,所有這些都是接受正則表達式的強大方法。 Java.lang.String 類允許所有這些重載方法,這些方法可以輕鬆替換 Java 中的單個字符或子字符串。

強烈建議使用 replaceAll(),因為它會替換每次出現的匹配字符。 遵循這種方法可以讓我們期待正則表達式模式,從而獲得更多的權力。 此方法還可以用管道替換每個逗號,以將逗號分隔的文件轉換為堆分隔的字符串。

但是,如果只希望替換單個字符,則可以使用將新舊給定字符考慮在內的 replace() 方法。

閱讀: Java 面試問答

7. 如何在 Java 等編程語言中將文本附加到文件中?

與創建新文件並將數據寫入新文件相比,追加是非常不同的。 在追加的情況下,文件已經存在,我們只需在文件末尾添加文本。 這類似於日誌文件,因為它們會隨著系統不斷更新。

日誌文件是附加文本的完美示例,因為應用程序會迭代地將日誌詳細信息附加到這些文件中。 此問題不需要日誌框架,但您必須知道如何將文本附加到現有文件中。 為了解決這個問題,您必須了解編寫字符文件的便利類。

該類具有假定默認字節緩衝區和字符編碼的可接受性的構造函數。 如果您希望自己指定值,您可以簡單地使用 FileOutputStream 構造 OutputStreamWriter。 文件的可用性取決於底層平台,它決定了是否可以創建文件。

一些平台允許使用單個 FileWrite 或多個文件寫入對象來初始化文件以編寫函數。 但是,一旦相關文件已經初始化,此類的構造函數將失敗。 FileWriter 用於寫入字符流,FileOutputStream 可以寫入原始字節流。

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

8. 如何在整數數組中找到最大或最小的數?

對於這個解決方案,我們必須編寫一個函數或方法,該函數或方法可以從完全成熟的整數數組中找到最大或最小數字。 我們必須首先在 Java 中創建一個名為 MaximumMinimumArrayDemo.java 的源文件,並將編寫的代碼複製到此處以進行編譯和執行。

我們可以使用我們可以稱為“最大”和“最小”的兩個變量來分別存儲數組中的最大值和最小值。 最小的數字可以使用 integer.MIN_VALUE 初始化,最大的數字可以使用 integer.MAX_VALUE 初始化。

對於您啟動的循環的每次迭代,您可以將當前數字與“最大”和“最小”進行比較,並相應地更新它們。 數組不會覆蓋 Java 中的 toString 方法,因此您可以使用 Arrays.toString() 打印目標數組的內容。

您可以使用此靜態方法直接調用 main 函數。 然後,您必須通過此方法傳遞隨機數組,以檢查是否已準確返回最大值和最小值。 您還可以選擇通過 IDE 中的單元測試自動執行此測試。

結帳:簡歷中的 4 大計算機技能

結論

專注於編程的課程不僅可以很好地解決問題,還可以增加求職時被選中的機會。 如果您想了解更多關於 Java 編程和更高級的編碼問題,您可以報名參加綜合課程,例如upGrad 的計算機科學理學碩士全棧開發課程

成為全棧開發人員

申請 upGrad 的軟件工程與工作相關的 PG 認證