JavaRush /Java Blog /Random-TW /茶歇#151。Java 中佇列的實作。Java 後端開發人員職位面試的 10 個必問問題

茶歇#151。Java 中佇列的實作。Java 後端開發人員職位面試的 10 個必問問題

在 Random-TW 群組發布

Java 後端開發人員職位面試的 10 個必問問題

資料來源:Medium 文章作者分享了他透過多次 Java 後端開發人員職位面試的個人經驗。 茶歇#151。 Java 中佇列的實作。 Java 後端開發人員職位面試的 10 個必問問題 - 1面試往往很困難。因此,在面試之前了解問題是個好主意。由於過去幾個月我經歷了多次採訪,現在我可以與大家分享一些我最常遇到的問題。我申請了一個具有 1-3 年經驗的後端 Java 開發人員的職位。

1.Java及其特點

面試官通常會詢問你正在使用的Java的最新版本及其功能。我主要使用 Java 8,經常被問到有關 API 流、lambda 表達式、函數式介面等問題。面試官通常會詢問這些功能以及基於它們的應用程式。

2.HashMap的內部運作原理

我參加的大部分面試都有這個問題。在解釋了它的工作原理之後,有些人詢問了預設的 HashMap 大小,有些人詢問了更多有關 Java 集合的資訊。

3. 錯誤和異常

錯誤和異常之間的區別是面試中很常見的問題。還問了什麼是檢查異常和非檢查異常。

4. 多線程

多執行緒對於面試來說是一個非常重要的概念,通常會問有關 Thread、Runnable 類別、它們之間的差異以及兩者的用例的問題。我還建議你研究一下Executor框架。

5. 字串和不變性

大多數面試官詢問字串類別中的不變性,有時也會詢問字串產生器和字串緩衝區(如果您說它們是可變的替代字串)。有時他們會問如何創建一個不可變的類別。

6. 垃圾收集

Java 中的垃圾收集是面試準備中非常重要的議題。有時會詢問有關垃圾收集生命週期和垃圾收集的不同方法的問題。

7. Java中的比較器和Comparable

常見的問題是在 Java 中何時使用 Comparator 和 Comparable 以及它們之間有什麼區別。

8.Java設計模式

當談到 Java 設計模式時,問題通常會從目前專案中使用的不同模式開始。有時會詢問何時使用它們中的每一個。也詢問了有關在 Java 中建立不可變類別的問題。

9. 最終、最後和最終確定

關鍵字final、finally 和finalize 之間的差異是面試中很常見的問題。作為一個附加問題,他們詢問使用每個關鍵字的選項。

10. Java 中的序列化與反序列化

序列化和反序列化是準備面試的一個非常重要的主題。通常會詢問用例,有時會詢問休眠和 JPA。如果您即將面臨 Java 伺服器端開發人員職位的面試,希望準備此處提到的問題會對您有所幫助。

在 Java 中實作佇列

來源:Faun.pub 感謝這份出版物,您將學習如何在 Java 中實現隊列。 茶歇#151。 Java 中佇列的實作。 Java 後端開發人員職位面試的 10 個必問問題 - 2

什麼是隊列?

隊列是一種線性資料結構,其元素存取順序按照「先進先出」原則進行。這意味著先插入的元素將先被刪除。也就是說,元素按照插入的順序被刪除。隊列由兩部分組成:Front(前面,刪除元素的地方)和Back(後面,插入元素的地方)。 常見的佇列操作: 佇列常用的操作如下:
  • 入隊- 從佇列末端新增一個元素。
  • 出隊- 從隊列頭部刪除一個元素。
  • Front/Peek - 傳回佇列前面元素的值,而不是從佇列中排除(刪除)該元素。
  • IsEmpty - 檢查佇列是否為空。
  • IsFull - 檢查佇列是否已滿。
  • 顯示- 列印佇列中的所有項目。

程式碼實作:

public class Example {
public static void main(String[] args) {
    Queue myQueue = new Queue();
    myQueue.enQueue(3);
    myQueue.enQueue(2);
    myQueue.enQueue(1);
    myQueue.display();
    myQueue.deQueue();
    myQueue.peak();
}
}
class Queue {
  int queueLength = 3;
  int items[] = new int[queueLength];
  int front = -1;
  int back = -1;
  boolean isFull(){
      if(back == queueLength - 1){
          return true;
      } else {
          return false;
      }
  }
  boolean isEmpty(){
      if(front == -1 && back == -1){
          return true;
      } else {
          return false;
      }
  }
   void enQueue(int itemValue) {
      if(isFull()){
          System.out.println("Queue is full");
      } else if(front == -1 && back == -1){
          front = back = 0;
          items[back] = itemValue;
      } else{
          back++;
          items[back] = itemValue;
      }
  }
   void deQueue(){
      if(isEmpty()){
          System.out.println("Queue is empty. Nothing to dequeue");
      } else if (front == back){
          front = back = -1;
      } else {
          front++;
      }
  }
  void display(){
      int i;
      if(isEmpty()){
          System.out.println("Queue is empty");
      } else {
          for(i = front; i <= back; i++){
              System.out.println(items[i]);
          }
      }
  }
  void peak(){
      System.out.println("Front value is: " + items[front]);
  }
}

解釋:

  • 首先我們建立變數及其參數。我們使用 3 作為可以在陣列中排隊的最大元素數。我們將正面(Front)和背面(Back)的初始索引設定為-1。

  • 接下來我們將定義isEmptyisFull的功能。

  • isEmpty()方法非常簡單,對於isFull()方法,數組中允許的最大元素數是3,但是數組中的三個元素不是用索引3 表示,而是用2 表示,因為第一個索引是0。所以最大長度負 1 給出索引 2,它是數組中的第三個單元格。當所有單元格都以直到第三個單元格的值排隊時,數組已滿。

  • enQueue - 如果陣列已滿,我們會收到一則訊息,表示陣列已滿。如果 Front 和 Back 部分均為 -1,則該元素將指派給索引 0 處的第一個儲存格 - 否則將插入該值並遞增後面的位置。

  • deQueue - 如果陣列為空,我們會收到對應的訊息。如果 Front 部分與 Back 部分相遇,那麼我們將它們的索引重置回 -1。如果最後兩個條件不適用,則 Front 會增加。

  • display - 如果陣列不為空,我們將迭代並列印所有元素。

  • Peak - 這只是列印前導元素的值。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION