Java Interview Tasks
3.9K subscribers
185 photos
1 file
121 links
Реальные вопросы и задачи с собеседований.
Оригинальный авторский контент.
Актуальный материал.
Уровень вопросов от junior до supersenior.

Автор канала - @alexzelentsov

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
Код может быть например такой
👍22🔥6👎3
Какой из классов immutable?
👍5🔥3
👍3🔥2
Какой из классов immutable?
Anonymous Quiz
4%
Class1
30%
Class2
16%
Оба
51%
Ни один
🔥15👍8👏2
Java Interview Tasks
Photo
Ответ к вопросу про immutability:

Immutable класс — это класс, который после инициализации не может изменить свое состояние. То есть если в коде есть ссылка на экземпляр иммутабельного класса, то любые изменения в нем приводят к созданию нового экземпляра.

Чтобы класс был immutable, он должен соответствовать следующим требованиям:
1) Все поля класса должны быть приватными в соответствии с принципами инкапсуляции.
2) Для корректного создания экземпляра в нем должны быть параметризованные конструкторы, через которые осуществляется первоначальная инициализация полей класса.
3) Для исключения возможности изменения состояния после инстанцирования, в классе не должно быть сеттеров.
4) Должен быть объявлен как final, чтобы от него нельзя было наследоваться. Иначе дочерние классы могут нарушить иммутабельность.
5) Для полей-коллекций и ссылочных полей необходимо делать копии, чтобы гарантировать их неизменность.
👍27🤯5🔥2
👍14
Java Interview Tasks
Class3 immutable?
Class3 не immutable, так как в конструкторе присваивается массив, ссылка на который осталась вне этого класса. Его можно изменять там, откуда он пришел и эти изменения будут менять поле array внутри Class3
Пример immutable класса, в котором эта проблема решена:
👍21🔥5
👍31🔥6👏2😱1💩1
Что лучше использовать Integer i = new Integer(300) или Integer i = Integer.valueOf(300)?
Пишите в комменты почему выбранный Вами вариант будет лучше.
Anonymous Quiz
25%
new Integer(300)
48%
Integer.valueOf(300)
27%
одинаковые варианты
🔥9🤔5👍2👎2👏2
Java Interview Tasks
Что лучше использовать Integer i = new Integer(300) или Integer i = Integer.valueOf(300)?
Пишите в комменты почему выбранный Вами вариант будет лучше.
Ответ к вопросу new Integer(300) или Integer.valueOf(300):

valueOf в общем случае использовать предпочтительнее
Вариант new Integer(...) с 9-ой версии java помечен как @Deprecated(since="9", forRemoval = true) и будет удален в будущих версиях, то есть вам будет сложнее мигрировать на новые версии java с таким кодом.

Код valueOf:
@IntrinsicCandidate
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Используется IntegerCache.cache, что может дать прирост производительности
Так же обратите внимание на аннотацию @IntrinsicCandidate, интринсик даст прирост производительности
Про интринсики можно почитать подробнее тут - https://www.baeldung.com/jvm-intrinsics
или тут - https://habr.com/ru/post/352086/
👍23🔥2👏2😁1
Какой код более производительный?
(1) System.currentTimeMillis()
(2) Instant.now().toEpochMilli()
Anonymous Quiz
53%
(1) быстрее
17%
(2) быстрее
9%
одинаково
21%
узнать ответ
👍11🤔5🔥3👎1👏1
Java Interview Tasks
Ответ на вопрос про currentTimeMillis и toEpochMilli:

Тут очевидно, что гораздо быстрее (1) так как:
1) @IntrinsicCandidate public static native long currentTimeMillis(); - IntrinsicCandidate
(Про интринсики я писал в прошлом посте - https://t.me/java_interview_tasks/167)
2) (2) создает объект Instant.now() и далее вызывается метод .toEpochMilli(), который выполянет конвертацию -> больше операций + оверхед по памяти

Результаты у меня получились такие:
VM version: JDK 17.0.1, OpenJDK 64-Bit Server VM, 17.0.1+12-39
Units: ops/s
Benchmark Score Error
currentTimeMillis 205488100,839 ± 5397269,355
toEpochMilli 65060918,825 ± 3064529,122

Код бенчмарка ниже:
👍9🔥31👏1
@BenchmarkMode(Mode.Throughput)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
public class SystemCalls {

@Benchmark
public long curr() {
return System.currentTimeMillis();
}

@Benchmark
public long instant() {
return Instant.now().toEpochMilli();
}
}
👍9🔥4👏2
Какие значения могут напечататься? (thread1 и thread2 запускаются одновременно в разных потоках)
👍5
Какие значения могут напечататься? (thread1 и thread2 запускаются одновременно в разных потоках)
Anonymous Quiz
10%
"0, 0", "1, 1"
13%
"0, 0", "1, 1", "1, 0"
9%
"0, 0", "1, 1", "0, 1"
46%
"0, 0", "1, 1", "0, 1", "1, 0"
22%
узнать ответ
👍10🤯5🔥3
Java Interview Tasks
Какие значения могут напечататься? (thread1 и thread2 запускаются одновременно в разных потоках)
Ответ:
тут нарушен порядок HB сначала идет запись в volatile поле g а потом в x, поэтому чтение из g еденицы не дает гарантий относительно x.
Поэтому возможны все варианты: "0, 0", "1, 1", "0, 1", "1, 0"

Пример использования конструкции с правильным HB тут - https://t.me/java_interview_tasks/53
👍6🔥2👏21
Что будет напечатано?
🔥8👍1
👍10🤔6🔥3👎1👏1