JavaRush /Java блог /Random /Кофе-брейк #151. Реализация очереди (Queue) в Java. 10 об...

Кофе-брейк #151. Реализация очереди (Queue) в Java. 10 обязательных вопросов для любого собеседования на позицию Java Backend Developer

Статья из группы Random

10 обязательных вопросов для любого собеседования на позицию Java Backend Developer

Источник: Medium Автор статьи делится личным опытом прохождения нескольких собеседований на позицию Java Backend Developer. Кофе-брейк #151. Реализация очереди (Queue) в Java. 10 обязательных вопросов для любого собеседования на позицию Java Backend Developer - 1Часто собеседования бывают сложными. Поэтому было бы неплохо знать вопросы перед прохождением интервью. Поскольку за последние пару месяцев я прошел несколько собеседований, сейчас я могу поделиться с вами некоторыми из вопросов, которые чаще всего мне встречались. Я устраивался на должность бэкэнд-разработчика Java с опытом работы 1-3 года.

1. Java и ее функции

Интервьюер обычно спрашивает о последней используемой вами версии Java и ее функциях. Я в основном использовал Java 8, мне задавали вопросы о потоках API, лямбда-выражениях, функциональном интерфейсе и так далее. Интервьюер, как правило, спрашивал об этих функциях и приложениях на их основе.

2. Внутренняя работа HashMap

В большинстве интервью, которые я посетил, был этот вопрос. После объяснения работы некоторые спрашивали о размере HashMap по умолчанию, другие спрашивали больше о коллекциях Java.

3. Ошибки и исключения

Разница между ошибкой и исключением (Error и Exception) — очень распространенный вопрос, который задают на собеседованиях. Также спрашивают, что такое проверенные и непроверенные исключения.

4. Многопоточность

Многопоточность — это очень важная концепция для интервью, обычно вопросы задаются о классах Thread, Runnable, различиях между ними и вариантах использования обоих. Советую также изучить фреймворк Executor.

5. Строки и неизменяемость

Большинство интервьюеров спрашивали о неизменяемости в классе строк, а затем иногда спрашивали о string builder и string buffer (если вы сказали, что это изменяемые альтернативные строки). Иногда они спрашивали, как создать неизменяемый класс.

6. Сборка мусора

Сборка мусора в Java — очень важная тема для подготовки к интервью. Иногда задают вопросы о жизненном цикле сборки мусора и различных способах сборки мусора.

7. Comparator и Comparable в Java

Обычно задают вопросы о том, когда использовать Comparator и Comparable в Java, и в чем разница между ними.

8. Шаблоны проектирования Java

Что касается шаблонов проектирования Java, то вопросы обычно начинаются с разных шаблонов, используемых в текущем проекте. Иногда задают вопросы о том, когда нужно использовать каждый из них. Также спрашивают о создании неизменяемого класса (immutable class) в Java.

9. Final, Finally и Finalize

Разница между ключевыми словами final, finally и finalize — очень распространенный вопрос, который задают на интервью. В качестве дополнительного вопроса спрашивают про варианты использования каждого ключевого слова.

10. Сериализация и десериализация в Java

Сериализация и десериализация — очень важная тема для подготовки к интервью. Обычно задают вопросы о вариантах использования, иногда спрашивают о гибернации и JPA. Надеюсь, если вам скоро предстоит собеседование на должность Java-разработчика серверной части Java, подготовка упомянутых здесь вопросов вам поможет.

Реализация очереди (Queue) в Java

Источник: Faun.pub Благодаря этой публикации вы узнаете, как реализовать очередь (Queue) в Java. Кофе-брейк #151. Реализация очереди (Queue) в Java. 10 обязательных вопросов для любого собеседования на позицию Java Backend Developer - 2

Что такое очередь?

Очередь (Queue) — это линейная структура данных в виде последовательности доступа к элементам по принципу “первый пришел — первый вышел” (first in, first out). Это означает, что элемент, который будет вставлен первым, будет удален первым. То есть, элементы удаляются в том порядке, в котором они были вставлены. Очередь состоит из двух частей: Front (передней, где элементы удаляются) и Back (задней, где элементы вставляются). Общие операции с Queue: В очереди обычно используются следующие операции:
  • Enqueue — добавляет элемент из конца очереди.
  • Dequeue — удаляет элемент из начала очереди.
  • Front/Peek — возвращает значение элемента, находящегося перед очередью, без исключения (удаления) элемента из очереди.
  • IsEmpty — проверяет, пуста ли очередь.
  • IsFull — проверяет, заполнена ли очередь.
  • Display — распечатывает все элементы в очереди.

Реализация кода:


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.

  • Далее мы определим функциональность isEmpty и isFull.

  • Метод isEmpty() довольно прост, для метода isFull() наше максимальное количество элементов, разрешенных в массиве, равно 3, но три элемента в массиве обозначаются не индексом 3, а 2, поскольку первый индекс равен 0. Таким образом, максимальная длина минус 1 дает нам индекс 2, который является третьей ячейкой в ​​массиве. Когда все ячейки поставлены в очередь со значением до третьей ячейки, массив заполнен.

  • enQueue — если массив заполнен, мы получаем сообщение о том, что он заполнен. Если Front и Back части равны -1, то элемент присваивается первой ячейке с индексом 0 — в противном случае значение вставляется, а задняя позиция увеличивается.

  • deQueue — если массив пуст, получаем соответствующее сообщение. Если часть Front встретилась с Back, то мы сбрасываем их индекс обратно на -1. Если последние два условия неприменимы, то Front увеличивается.

  • display — если массив не пуст, мы перебираем и печатаем все элементы.

  • peak — это просто печатает значение переднего элемента.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ