Gh0st dev | Всякое про IT – Telegram
Gh0st dev | Всякое про IT
97 subscribers
53 photos
22 links
Тут полезные материалы, советы и мемы про айтишечку и всякое около нее
___
by @dsvtlg
Download Telegram
Channel name was changed to «Дмитрий Свиридов | dsvdev»
Channel name was changed to «dsvdev | Дмитрий Свиридов про IT»
Настало время оживить это место! Подробности про меня в закрепе, а сейчас расскажу про рубрики, которые будут на канале

#собесы - вопросы и ответы с собеседований
Первый пост из этой рубрики выйдет уже сегодня в 18:00, там поделюсь несколькими вопросами и ответами с собеседования на Senior Java-разработчика, а полная запись собеседования уже на Boosty

В программе Java Core, Spring, микросервисы и обсуждение практического опыта

Подпишись если интересно!
🔥21👏1
🔤🔤🔤🔤🔤🔤

💬 Первый пост из рубрики #собесы

Недавно прошел собес в зеленый банк на позицию Senior Java Developer
Поделюсь несколькими вопросами отуда

👩‍💻 Тема - Java Core

Какое значение будет выведено на экран?

public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.println(myClass.getValue());
}
}

class MyClass {
private static int value = 1;

static {
value = 2;
}

{
value = 3;
}

public MyClass() {
MyClass.value = 4;
}

public int getValue() {
return value;
}
}


Опрос ниже
🔽🔽🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻2🤔1
Что будет выведено в консоль?
Anonymous Quiz
10%
1
8%
2
5%
3
55%
4
23%
Посмотреть результаты
3👨‍💻2
👩‍💻 Тема - Многопоточность

Какой вариант лучше использовать при вызове синхронизированного кода если синхронизировать нужно методы first() и second()

Вариант 1:

synchronized void foo() {
first();
second();
third();
}


Вариант 2:

void foo() {
synchronized (this) {
first();
second();
}
third();
}


Опрос ниже
🔽🔽🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻2
👩‍💻 Тема - Базы данных

Какие уровни изоляции транзакций существуют в Spring?


@Transactional(isolation = ???)
public void log(String message){
// ...
}


Опрос ниже
🔽🔽🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
Завтра вечером выложу подробный разбор ответов на все три вопроса
Если интересно - подпишись!
🔥3
🆘Объяснение вчерашних вопросов

Первый вопрос очень часто встречается на собеседованиях любого уровня. Главное знать взаимный порядок выполнения блоков инициализации и конструктора
Первым выполняется статический блок инициализации, вторым - нестатический блок инициализации, а конструктор выполняется последним

class MyClass {
static {
//1
}

{
//2
}

public MyClass() {
//3
}
}


📌 Все становится немного сложнее, когда классы объединены иерархией наследования

Сначала выполняются все статические блоки инициализации начиная с родительских классов, и только после них, поочередно блоки инициализации и конструкторы также начиная с родительских классов

class MyClass {
static {
//1
}

{
//3
}

public MyClass() {
//4
}
}

class MySecondClass extends MyClass {
static {
//2
}

{
//5
}

public MySecondClass() {
//6
}
}


Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🆘Объяснение вчерашних вопросов 2

Второй вопрос связан с одной из самых сложных тем на собеседованиях, но сам по себе довольно прост

Главное помнить - что синхронизировать нужно только непотокобезопасный код, в нашем случае методы first() и second()

Поэтому выбираем вариант 2
void foo() {
synchronized (this) {
first();
second();
}
third();
}


Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🆘Объяснение вчерашних вопросов 3

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


➡️READ_UNCOMMITED - Одна транзакция может прочитать изменения другой транзакции, которая еще не завершилась (Не закоммитила свои изменения).

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

Такую проблему называют проблемой грязного чтения или DIRTY READ


➡️READ_COMMITED - Одна транзакция может прочитать только примененные (закоммиченные) изменения другой транзакции.

⚠️ Этот уровень изоляции применяется в большинстве баз по умолчанию

При таком уровне изоляции нет угрозы чтения неактуальных данных, но первая транзакция может получить другие данные при повторном чтении, если вторая что-то в них поменяла.

Эту проблема называется неповторяемое чтение или NON-REPEATABLE READ


➡️REPEATABLE_READ - Уровень изоляции, при котором можно избежать предыдущей проблемы.

Все данные, уже прочитанные транзакцией, при повторном чтении останутся теми же, даже если другая транзакция их изменила. Но это не касается новых данных.

Здесь может возникать проблема фантомного чтения (PHANTOM_READ), когда транзакция, при одинаковых запросах получает разное количество строк таблицы.



➡️SERIALIZABLE - Уровень изоляции, при котором транзакции вообще не запускаются параллельно, а выполняются строго друг за другом.

Это позволяет избежать всех проблем из списка выше, но сильно замедляет работу программы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻2