Зачем нужны два survivor space?
Anonymous Quiz
27%
Чтобы постоянно дефрагментировать эту область памяти
26%
Такое разделение нужно только GC типа G1 для разбиения области памяти на фрагменты
17%
Чтобы обеспечить многопоточность самого приложения
30%
Чтобы GC работал с каждым в параллельных потоках, увеличивая скорость очистки
Пояснение к предыдущему вопросу👆
👨🏻💻В survivor space находятся объекты, которые пережили больше одного прохода GC, но меньше 15 (по умолчанию это порог, после которого объект отправляется к долгожителям в Old Generation). После проходов GC в этой области возникает проблема фрагментации – постоянно возникают «дырки» от удаленных объектов и нужно «уплотнять» их расположение в памяти для большей производительности.
Для этого данная область делится на две и каждый проход сборщика все элементы из одной копируются в другую, фрагментируясь, а вторая остается пустой. На следующем проходе они вновь меняются местами, фрагментируя расположение объектов.
Java задачи с собеседований
👨🏻💻В survivor space находятся объекты, которые пережили больше одного прохода GC, но меньше 15 (по умолчанию это порог, после которого объект отправляется к долгожителям в Old Generation). После проходов GC в этой области возникает проблема фрагментации – постоянно возникают «дырки» от удаленных объектов и нужно «уплотнять» их расположение в памяти для большей производительности.
Для этого данная область делится на две и каждый проход сборщика все элементы из одной копируются в другую, фрагментируясь, а вторая остается пустой. На следующем проходе они вновь меняются местами, фрагментируя расположение объектов.
Java задачи с собеседований
Что выведет следующий код?
Anonymous Quiz
15%
В ходе выполнения будет брошено исключение ClassCastException
11%
I'm a Daddy
16%
Код не скомпилируется
57%
It's me!
Пояснение к предыдущему вопросу👆
👨🏻💻В коде используется повышающее преобразование, когда экземпляр класса Meсоздается под ссылку родительского класса Daddy.
Не произойдет ни ошибки компиляции, ни исключения во время выполнения. Однако и при обращении по ссылке типа Daddy, и по ссылке типа Me будет вызван метод класса Me, так как сам объект относится именно к этому классу.
Java задачи с собеседований
👨🏻💻В коде используется повышающее преобразование, когда экземпляр класса Meсоздается под ссылку родительского класса Daddy.
Не произойдет ни ошибки компиляции, ни исключения во время выполнения. Однако и при обращении по ссылке типа Daddy, и по ссылке типа Me будет вызван метод класса Me, так как сам объект относится именно к этому классу.
Java задачи с собеседований
Что выведет следующий код?
Anonymous Quiz
8%
Long
45%
Произойдет ошибка компиляции
4%
Number
43%
Object
Что выведет следующий код?
Anonymous Quiz
33%
truetruetrue
30%
falsefalsefalse
7%
truefalsetrue
30%
falsefalsetrue
Пояснение к предыдущему вопросу👆
👨🏻💻 Конкатенация строк при помощи оператора «+» и метода concat отличается по своей реализации. Оператор «+», если разложить код дизассемблером и проанализировать, развернется в нечто вроде
String s1 = new StringBuilder()
.append(s1)
.append(s2)
.toString();
При этом s1 и s2 неявно преобразуются в String (т. е. null -> «null») и NullPointerException’а не возникнет. В случае же с concat оно будет брошено, т. к. метод вызывается у null-объекта.
Поэтому первые две строки отработают как ожидается. Третья строка успешно пройдет компиляцию, т. к. null-объект явно преобразовывается в строку со значением «null».
Java задачи с собеседований
👨🏻💻 Конкатенация строк при помощи оператора «+» и метода concat отличается по своей реализации. Оператор «+», если разложить код дизассемблером и проанализировать, развернется в нечто вроде
String s1 = new StringBuilder()
.append(s1)
.append(s2)
.toString();
При этом s1 и s2 неявно преобразуются в String (т. е. null -> «null») и NullPointerException’а не возникнет. В случае же с concat оно будет брошено, т. к. метод вызывается у null-объекта.
Поэтому первые две строки отработают как ожидается. Третья строка успешно пройдет компиляцию, т. к. null-объект явно преобразовывается в строку со значением «null».
Java задачи с собеседований
Какой из методов отсутствуют в String?
Anonymous Quiz
50%
codePointBefore()
35%
capacity()
10%
isEmpty(
5%
length()
Пояснение к предыдущему вопросу👆
👨🏻💻 << и >> - это операторы побитового сдвига влево и вправо соответственно. Сдвиг вправо на 1 всегда делит целое число пополам, а сдвиг влево на 1 всегда его увеличивает в два раза, это правило позволит достаточно легко разбираться с вопросами по сдвигам.
Если сдвиг происходит на несколько бит, то число делится/умножается (целочисленно) на 2 несколько раз, по количеству бит в операции.
Java задачи с собеседований
👨🏻💻 << и >> - это операторы побитового сдвига влево и вправо соответственно. Сдвиг вправо на 1 всегда делит целое число пополам, а сдвиг влево на 1 всегда его увеличивает в два раза, это правило позволит достаточно легко разбираться с вопросами по сдвигам.
Если сдвиг происходит на несколько бит, то число делится/умножается (целочисленно) на 2 несколько раз, по количеству бит в операции.
Java задачи с собеседований