Сколько вариантов может напечатать thread2? (thread1 и thread2 запускаются в разных потоках)
Anonymous Quiz
18%
1
53%
2
29%
больше 2-х
Где надо поставить synchronized?
Anonymous Quiz
23%
в методах addListener и removeListener
56%
в addListener, removeListener и put
12%
нигде не надо
9%
везде поставить надо, хуже не будет
Нужно ли указывать третий параметр (mergeFunction) в методе Collectors.toMap(this::getKey(), this::getValue(), (o1, o2) -> o1) ? Если нужно, то для чего? и что будет если не указать его? пишите в комментах
Anonymous Quiz
16%
обязательно нужно всегда
45%
нужно, в зависимости от исходного стрима
18%
не нужно
19%
хочу узнать ответ
2%
не использую стримы, циклы надежнее
Может ли не завершится thread1? (thread1 и thread2 запускаются одновременно в разных потоках)
Anonymous Quiz
61%
может не завершится
19%
всегда завершится
18%
никогда не завершится
2%
другой ответ (пишите в комменты)
Можно ли xmlMapper использовать как поле в классе ниже
или нужно его объявить как переменную внутри метода deserialize?
Обоснования пишите в комментариях
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@Slf4j
@SuppressWarnings("unused")
public class EventDeserializer implements Deserializer<Event> {
private final XmlMapper xmlMapper = new XmlMapper();
@Override
public Event deserialize(String topic, byte[] data) {
try {
return xmlMapper.readValue(data, Event.class);
} catch (IOException e) {
log.error("Error deserialize message topic {}", topic, e);
}
return null;
}
}
или нужно его объявить как переменную внутри метода deserialize?
Обоснования пишите в комментариях
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@Slf4j
@SuppressWarnings("unused")
public class EventDeserializer implements Deserializer<Event> {
private final XmlMapper xmlMapper = new XmlMapper();
@Override
public Event deserialize(String topic, byte[] data) {
try {
return xmlMapper.readValue(data, Event.class);
} catch (IOException e) {
log.error("Error deserialize message topic {}", topic, e);
}
return null;
}
}
Вопрос по коду выше.
Можно ли xmlMapper использовать как поле в классе ниже
или нужно его объявить как переменную внутри метода deserialize? Обоснования пишите в комментариях
Можно ли xmlMapper использовать как поле в классе ниже
или нужно его объявить как переменную внутри метода deserialize? Обоснования пишите в комментариях
Anonymous Quiz
50%
можно объявить как поле
20%
нельзя как поле, только как переменную локальную
7%
нельзя никак
22%
разницы нет
Как правильно сравнивать строки?
Почему Ваш вариант самый правильный пишите в комменты
Почему Ваш вариант самый правильный пишите в комменты
Anonymous Quiz
43%
str.equals(“123”)
45%
“123”.equals(str)
2%
str == “123”
10%
Все варианты неверные
Что выведется в консоль?
Почему ide выделяет желтым '==' пишите в комментах
Почему ide выделяет желтым '==' пишите в комментах
Anonymous Quiz
29%
true, true
45%
true, false
23%
false, false
2%
false, true
2%
пишу на с++, потому что джава медленная
Ответ на вчерашнюю задачу:
Сравнение происходит не значений, а ссылок объектов.
Но в java есть пул для объектов типа Long (от -127 до 127 включительно)
поэтому первое равенство выполняется так как сравнивается один и тот же объект,
а второе = false, так как сравниваются разные объекты.
Идея именно поэтому и показывает warning, предлагая сравнивать через equals
Сравнение происходит не значений, а ссылок объектов.
Но в java есть пул для объектов типа Long (от -127 до 127 включительно)
поэтому первое равенство выполняется так как сравнивается один и тот же объект,
а второе = false, так как сравниваются разные объекты.
Идея именно поэтому и показывает warning, предлагая сравнивать через equals
Какой будет результат выполнения кода?
Anonymous Quiz
24%
отработает без ошибок
43%
ConcurrentModificationException
10%
NullPointerException
8%
IllegalStateException
16%
хочу узнать ответ и не испортить результаты голосования
Ответ к последнему вопросу:
Удаление элемента приведет к сдвигу в массиве и добавлению null в последнем элементе: ["1", "2", "3"] -> ["1", "3", null] и дальше вылетит NPE,
так как сравнение сделано неверно (см предыдущую задачу про сравнения строк - https://t.me/java_interview_tasks/46)
Еще один вопрос почему раньше не вылетает CME: stream().forEach() это по факту spliterator().forEachRemainig(), а он делает проверку на concurrent modification один раз в конце для оптимизации, поэтому ConcurrentModificationException не вылетает в данном примере
Удаление элемента приведет к сдвигу в массиве и добавлению null в последнем элементе: ["1", "2", "3"] -> ["1", "3", null] и дальше вылетит NPE,
так как сравнение сделано неверно (см предыдущую задачу про сравнения строк - https://t.me/java_interview_tasks/46)
Еще один вопрос почему раньше не вылетает CME: stream().forEach() это по факту spliterator().forEachRemainig(), а он делает проверку на concurrent modification один раз в конце для оптимизации, поэтому ConcurrentModificationException не вылетает в данном примере
Telegram
Java Interview Tasks
Как правильно сравнивать строки?
Почему Ваш вариант самый правильный пишите в комменты
str.equals(“123”) / “123”.equals(str) / str == “123” / Все варианты неверные
Почему Ваш вариант самый правильный пишите в комменты
str.equals(“123”) / “123”.equals(str) / str == “123” / Все варианты неверные
Какие варианты вывода могут быть? (y,x)
(похожая задача была тут - https://t.me/java_interview_tasks/26)
(Методы thread1 и thread2 запускаются в разных потоках, одновременно, один раз каждый)
public class Test {
int x;
volatile int y;
public void thread1() {
x = 1;
y = 1;
}
public void thread2() {
System.out.println(y);
System.out.println(x);
}
}
(похожая задача была тут - https://t.me/java_interview_tasks/26)
(Методы thread1 и thread2 запускаются в разных потоках, одновременно, один раз каждый)
public class Test {
int x;
volatile int y;
public void thread1() {
x = 1;
y = 1;
}
public void thread2() {
System.out.println(y);
System.out.println(x);
}
}
Telegram
Java Interview Tasks
#concurrency #java
class A {
int a;
int b;
void m1() {
a++;
b++;
}
void m2() {
System.out.println(b);
System.out.println(a);
}…
class A {
int a;
int b;
void m1() {
a++;
b++;
}
void m2() {
System.out.println(b);
System.out.println(a);
}…
Какие варианты вывода могут быть?
Anonymous Quiz
38%
"0, 0", "1, 1", "0, 1","1, 0"
32%
"0, 0", "1, 1", "0, 1"
9%
"1, 1", "0, 1","1, 0"
20%
узнать ответ
Ответ на вчерашнюю задачу:
запрещённый вариант y=1,x=0, так как y - volatile и мы увидели уже в нем 1 , то все что до этого было записано в потоке thread1, мы увидим тоже (больше подробностей и примеров есть тут - https://github.com/openjdk/jcstress/blob/master/jcstress-samples/src/main/java/org/openjdk/jcstress/samples/jmm/basic/BasicJMM_06_Causality.java)
запрещённый вариант y=1,x=0, так как y - volatile и мы увидели уже в нем 1 , то все что до этого было записано в потоке thread1, мы увидим тоже (больше подробностей и примеров есть тут - https://github.com/openjdk/jcstress/blob/master/jcstress-samples/src/main/java/org/openjdk/jcstress/samples/jmm/basic/BasicJMM_06_Causality.java)
GitHub
jcstress/BasicJMM_06_Causality.java at master · openjdk/jcstress
https://openjdk.org/projects/code-tools/jcstress. Contribute to openjdk/jcstress development by creating an account on GitHub.
Какой размер будет у экземпляра объекта А?
public class A {
char ch1;
long l1;
int i1;
}
# openjdk-17.0.1
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8bytes aligned.
Обоснование пишите в комментариях
public class A {
char ch1;
long l1;
int i1;
}
# openjdk-17.0.1
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8bytes aligned.
Обоснование пишите в комментариях
Какой размер будет у экземпляра объекта А?
Anonymous Quiz
29%
16 bytes
7%
18 bytes
24%
24 bytes
27%
32 bytes
13%
36 bytes
Размер экземпляра объекта А
Размер считается так в 64 битной jvm:
12-байтовый заголовок (object header: mark, object header: class), дополненный до размера, кратного 8-ми байтам
Далее идут поля, уложенные максимально компактно, учитывая выравнивание на 8
И в данном случае еще будет 6 байтов - дырка после выравнивания на 8 (object alignment gap)
То есть, напрмер, можно было бесплатно добавить еще один char и int в объект, размер бы не изменился
Подробнее:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 int A.i1 N/A
16 8 long A.l1 N/A
24 2 char A.ch1 N/A
26 6 (object alignment gap)
Instance size: 32 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total
Размер считается так в 64 битной jvm:
12-байтовый заголовок (object header: mark, object header: class), дополненный до размера, кратного 8-ми байтам
Далее идут поля, уложенные максимально компактно, учитывая выравнивание на 8
И в данном случае еще будет 6 байтов - дырка после выравнивания на 8 (object alignment gap)
То есть, напрмер, можно было бесплатно добавить еще один char и int в объект, размер бы не изменился
Подробнее:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 int A.i1 N/A
16 8 long A.l1 N/A
24 2 char A.ch1 N/A
26 6 (object alignment gap)
Instance size: 32 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total
🔥2