prompter: Напиши 5 вопросов с ответами, которые могут спросить на должность Java-разработчика

assistant: 1. Какие знаете шаблоны проектирования? Расскажите о двух шаблонах, которые использовали в работе - Говоря о шаблонах проектирования, которые вы можете привести в качестве примеров на собеседовании, на ум приходят:
Builder — часто используемый шаблон, альтернатива классическому созданию объектов;
паттерн Стратегия, который по своей сути представляет полиморфизм. То есть, у нас есть один интерфейс, но поведение программы будет меняться в зависимости от того, какую конкретно реализацию этого интерфейса передали в функционал (сейчас стратегия фактически везде используется в java-приложениях).
Если этого вам мало, обратите внимание на Spring (если вы с ним уже знакомы), ведь он представляет собой целую платформу фреймворков, которые в свою очередь пронизаны паттернами вдоль и поперек.

2. Какие есть типы данных в Java? - В Java есть примитивные типы данных:
byte — целые числа в пределах -128 до 127, весит 1 байт;
short — целые числа в пределах -32768 до 32767, весит 2 байта;
int — целые числа -2147483648 до 2147483647, весит 4 байта;
long — целые числа в пределах 9223372036854775808 до 9223372036854775807, весит 8 байтов;
float — числа с плавающей запятой в пределах -3.4E+38 до 3.4E+38, весит 4 байта;
double — числа с плавающей запятой в пределах -1.7E+308 до 1.7E+308, весит 8 байтов;
char — одиночные символы в UTF-16, весит 2 байта;
boolean значения true/false, весит 1 байт.

3. Чем отличается объект от примитивных типов данных? - Первое отличие: количество занимаемой памяти: примитивы занимают очень мало, ведь они содержат лишь собственное значение, в то время как объекты могут содержать очень и очень много различных значений: как примитивов, так и ссылок на другие объекты.
 
Второе отличие: Java —это объектно-ориентированный язык, поэтому в ней все работает через взаимодействие между объектами, и примитивы тут не сильно вписываются (собственно, поэтому Java — это не 100% объектно-ориентированный язык).
 
Третье, вытекающее со второго: так как Java ориентирована на взаимодействие между объектами, у этих объектов есть много различных механизмов для управления. Например, конструкторы, методы, исключения (которые работают в первую очередь с объектами), и т.д.
 
Собственно, чтобы примитивы могли как-то ввязаться (работать) в этой объектно ориентированной среде и были придуманы обертки (wrappers) для примитивных типов (Integer, Character, Double, Boolean...)

4. В чем разница передачи параметров по ссылке и по значению? - Примитивные поля хранят свое значение: например, если мы задали int i = 9; поле i хранит значение 9. Когда у нас есть ссылка на объект, это значит, что мы имеем поле со ссылкой на объект, или другими словами — со значением адреса объекта в памяти. В случае с примитивом будет копироваться значение примитива. Соответственно, в методе будет вестись работа с копией, при изменении которой оригинал не затронется.
 
В случае со ссылочным типом будет копироваться значение адреса памяти, соответственно, адрес будет все тем же, как и объект, на который он указывает. 
И если мы будем менять объект по этой новой ссылке, он будет изменен и для старой (ведь они обе указывают на один и тот же объект).

prompter: Спасибо. Приведи топ 10 самых популярных вопросов на собеседовании на должность Java-разработчика

assistant: Конкретные вопросы, задаваемые на собеседовании Java-разработчиков, могут различаться в зависимости от компании и должности. Однако, вот 10 распространенных вопросов, которые могут быть заданы на собеседовании:
1. Что такое Java Virtual Machine (JVM) и как она работает?
2. Каковы различия между String, StringBuilder и StringBuffer?
3. Каковы принципы ООП и как они реализованы в Java?
4. Что такое многопоточность и как ее реализовать в Java?
5. Как работают коллекции в Java?
6. Что такое Java 8 Stream API и как его использовать?
7. Как происходит исключительная ситуация (Exception) в Java и как их обрабатывать?
8. Что такое JavaBeans и как они используются?
9. Как реализовать наследование и полиморфизм в Java?
10. Как использовать JDBC для взаимодействия с базами данных?

Конечно, это далеко не исчерпывающий список вопросов, но ответы на эти вопросы помогут определить уровень знаний кандидата в Java-разработке.

prompter: Приведи список литературы для начинающего Java-разработчика.

assistant: Конечно, вот топ 10 наиболее популярных вопросов, которые могут задать на собеседовании на должность Java-разработчика:

* Что такое Java Virtual Machine (JVM) и как она работает?
* Что такое многопоточность и как ее реализовать в Java?
* Как управлять памятью в Java?
* Что такое Java Collections Framework и какие интерфейсы он включает?
* Какие принципы ООП в Java?
* Что такое Java Servlets и как они используются?
* Что такое Spring Framework и как его использовать?
* Какие существуют методы сериализации и десериализации объектов в Java?
* Что такое Java Persistence API (JPA) и как она работает?
* Какие существуют способы обработки исключений в Java и как их использовать?

Это далеко не полный список вопросов, которые могут быть заданы на собеседовании, но он может помочь вам подготовиться и оценить ваш уровень знаний в Java.

prompter: какая средняя зарплата Java-разработчика в Москве на 2022 год ?

assistant: 1.Что вам больше всего нравится в работе Java-разработчика?
Честный ответ — это все, что мы тут можем порекомендовать. У каждого кандидата будут свои причины заниматься программированием, и интервьюер хочет узнать именно о вас и о том, что вас мотивирует.

Хотя это кажется прямым вопросом, целесообразно заранее обдумать свой ответ, чтобы вы могли четко сформулировать свой ответ.

2.Расскажите о том, как вы улучшили код. Что вы искали?
Интервьюер хочет получить представление о вашем базовом понимании работы над кодом и задает этот открытый вопрос, чтобы узнать, насколько уверенно вы можете говорить и объяснять, как вы работаете.

Ваш ответ может включать в себя то, как вы определяете некачественный код и отличите его от высококачественного, переходя к объяснению факторов, которые вы проверяете при оценке качества кодирования. Общие факторы включают:

Тестируемость;
Надежность;
Возможность понимания;
Возможность повторного использования;
Краткость.
Завершите свой ответ, рассказав, что делать, если ваши тесты выявляют некачественный код. Решениями могут быть применение иного стандарта кодирования, следование передовым практикам и рефакторинг унаследованного кода.

3.Как вы проверяете свой код?
Интервьюер оценивает ваш уровень базовых знаний в области кодирования.

Правильный ответ — использовать процессы разработки, основанные на тестировании, чтобы многократно подвергать код различным тестовым ситуациям на этапе разработки, а не сначала завершать кодирование, а затем тестировать.

4.Как написать пузырьковую сортировку? Какова его вычислительная сложность?
Пузырьковая сортировка (bubble sort) — это простой алгоритм (который часто преподают в основах информатики) для получения базовых знаний о сортировке. Этот вопрос оценивает, обладает ли кандидат базовыми знаниями, необходимыми для кодирования. Алгоритм пузырьковой сортировки идет по списку, сравнивая соседние элементы и меняя их местами, если они расположены в неправильном порядке. Его наихудший случай и средняя сложность — O (n2).

5.Что такое двоичное дерево? Как бы вы его создали?
Двоичное дерево — это структура данных, в которой каждый элемент или узел имеет не более двух дочерних элементов.

Дочерний элемент слева имеет такое же или меньшее значение, чем родительский. Дочерний элемент справа имеет такое же или большее значение, чем родительский. Для кодирования двоичного дерева требуется рекурсивный метод вставки, и ваш ответ должен охватывать вставку элементов, поиск элементов и удаление элементов.

Информация была взята из:https://hrlider.ru/posts/java-programming-interview/