10 обязательных вопросов для любого собеседования на позицию Java Backend Developer
Источник: Medium Автор статьи делится личным опытом прохождения нескольких собеседований на позицию Java Backend Developer.
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.
Что такое очередь?
Очередь (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 — это просто печатает значение переднего элемента.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ