JavaRush /Java 博客 /Random-ZH /茶歇#151。Java 中队列的实现。Java 后端开发人员职位面试的 10 个必问问题

茶歇#151。Java 中队列的实现。Java 后端开发人员职位面试的 10 个必问问题

已在 Random-ZH 群组中发布

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