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