Gh0st dev | Всякое про IT – Telegram
Gh0st dev | Всякое про IT
97 subscribers
53 photos
22 links
Тут полезные материалы, советы и мемы про айтишечку и всякое около нее
___
by @dsvtlg
Download Telegram
Что будет выведено в консоль?
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
Как настроить Хуёкер?

🍌 Меня, как и всех остальных в России забанили в Docker

При попытке скачать docker-образ вы увидите примерно следующее:
403 Forbidden
Since Docker is a US company, we must comply with US export control regulations. In an effort to comply with these, we now block all IP addresses that are located in Cuba, Iran, North Korea, Republic of Crimea, Sudan, and Syria.

(Ставь лайк если на Кубе или в Иране)

Я полез искать варианты обхода блокировок, потому что каждый раз включать VPN не хотелось, и наткнулся на него
Вашему вниманию - 👩‍💻 ХУЕКЕР!

Во-первых, у него смешное название
Во-вторых он реально работает

Короче - минусов нет

Для тех, кому нужна инструкция по настройке - она ниже



Как начать ползоваться Хуекером:

1. Заходим в Docker Desktop, нажимаем Настройки

2. Выбираем раздел Docker Engine

3. Вставляем в конфигурацию строчку

"registry-mirrors": ["https:\/\/huecker.io"]


4. Жмем Apply & restart

5. Теперь можете всем говорить Докер-Хуёкер
Please open Telegram to view this post
VIEW IN TELEGRAM
👏21🔥1
👩‍💻 Практическая задача c #собесы

🖥 Тема - #SQL

В базе данных существуют две таблицы:

🟢В первой хранятся данные по заказам

 - ord_num - номер заказа
- purch_amt - сумма заказа
- ord_date - дата заказа
- customer_id - ID клиента, совершившего заказ
- salesman_id - ID продавца


🟢Во второй данные о клиентах

 - customer_id - ID клиента
- cust_name - имя клиента
- city - город проживания
- status - статус в программе лояльности


👩‍💻 Задача - написать SQL запрос, с помощью которого можно для всех заказов с суммой от 500 до 2000 вывести:
- Номер заказа
- Сумму заказа
- Имя покупателя
- Город покупателя

Ответ выложил в комменты
🔽🔽🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻2👾1
Это я вчера первое видео на канал снимал, сейчас монтируется уже
🔥6👨‍💻2🙈1
Итоги того самого собеседования подъехали кстати
🔥7
🔥 Их боялись даже синьоры...

Алгоритмические задачи — это задачи, которые часто предлагают решить на собеседовании в крупных компаниях. Иногда для этого выделяют отдельный этап интервью.

Я тоже проводил такие собеседования с кандидатами, и заметил, что даже опытные программисты, претендующие на должности senior, tech lead или team lead, часто не могут справиться с алгоритмическими задачами.

С другой стороны, студенты и стажеры часто успешно проходили этот этап и получали оценку Middle или Middle+.

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

Если хотите потренироваться — вот задача, которая есть в открытом доступе leetcode и которую я встречал на реальном алгоритмическом собеседовании.


Дан массив nums содержащий n различные чисел в диапазоне от 0 до n. Нужно вернуть единственное число из этого диапазаона, которое отсутствует в массиве

Примеры:
Input: [3, 0, 1]
Output: 4

Input: [0, 1]
Output: 2

Input: [9, 6, 4, 2, 3, 5, 7, 0, 1]
Output: 8



➡️Попробовать решить можно - здесь

⚠️Усложнение:
если решил задачу с помощью сортировки массива - решить без сортировки массива
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Java понятный язык - говорили они
В программировании все логично - утверждали они
🤯1😱1