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

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

Стаття з групи Random UA

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]);
  }
}

Пояснення:

  • Спочатку ми створабо наші змінні та їх параметри. Ми використовуємо три як максимальну кількість елементів, які можуть бути поставлені в чергу в масиві. Ми встановабо початковий індекс передньої (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 – це просто друкує значення переднього елемента.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ