Java задачи с собеседований
6.27K subscribers
595 photos
6 videos
19 files
244 links
Задачи, тесты и теоретические вопросы по JAVA.

Репозиторий: https://github.com/proghub-official/java-interview
Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
Тест на общие знания для Java-разработчика

Java задачи с собеседований
Какие исключения будут брошены методом main?
Anonymous Quiz
45%
IndexOutOfBoundsException
20%
Код не скомпилируется
28%
NullPointerException
7%
ClassCastException
Пояснение к предыдущему вопросу👆

👨🏻‍💻 Операторы & и |применяются как побитовое «И» и «ИЛИ» соответственно, если операнды целочисленные, и как логические «И» и «ИЛИ», если операнды булевы. При этом & и |, в случае логического выражения, проверяют оба своих операнда на истинность.

Их сокращенные версии, &&и ||, оптимизированы – «И» не проверяет на истинность второй операнд, если первый «ЛОЖЬ», «ИЛИ» не проверяет второй операнд, если первый «ИСТИНА».

Это делает их полезными для оптимизации кода и позволяет избежать NullPointerExceptionв тех случаях, когда второй операнд-выражение может его инициировать (в первом операнде размещают проверку на null-значение).

Java задачи с собеседований
Пояснение к предыдущему вопросу👆

👨🏻‍💻В survivor space находятся объекты, которые пережили больше одного прохода GC, но меньше 15 (по умолчанию это порог, после которого объект отправляется к долгожителям в Old Generation). После проходов GC в этой области возникает проблема фрагментации – постоянно возникают «дырки» от удаленных объектов и нужно «уплотнять» их расположение в памяти для большей производительности.

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

Java задачи с собеседований
Тест на общие знания для Java-разработчика

Java задачи с собеседований
Пояснение к предыдущему вопросу👆

👨🏻‍💻В коде используется повышающее преобразование, когда экземпляр класса Meсоздается под ссылку родительского класса Daddy.

Не произойдет ни ошибки компиляции, ни исключения во время выполнения. Однако и при обращении по ссылке типа Daddy, и по ссылке типа Me будет вызван метод класса Me, так как сам объект относится именно к этому классу.

Java задачи с собеседований
Тест на общие знания для Java-разработчика

Java задачи с собеседований
Тест на общие знания для Java-разработчика

Java задачи с собеседований
Что выведет следующий код?
Anonymous Quiz
33%
truetruetrue
30%
falsefalsefalse
7%
truefalsetrue
30%
falsefalsetrue
Тест на общие знания для Java-разработчика

Java задачи с собеседований
Пояснение к предыдущему вопросу👆

👨🏻‍💻 Конкатенация строк при помощи оператора «+» и метода concat отличается по своей реализации. Оператор «+», если разложить код дизассемблером и проанализировать, развернется в нечто вроде

String s1 = new StringBuilder()

.append(s1)

.append(s2)

.toString();

При этом s1 и s2 неявно преобразуются в String (т. е. null -> «null») и NullPointerException’а не возникнет. В случае же с concat оно будет брошено, т. к. метод вызывается у null-объекта.

Поэтому первые две строки отработают как ожидается. Третья строка успешно пройдет компиляцию, т. к. null-объект явно преобразовывается в строку со значением «null».

Java задачи с собеседований