Всем привет! У каждого из нас есть тот самый собес. Тот, воспоминания о котором заставляют рефлекторно дергаться глаз даже спустя годы.
У меня такой был лет 10 назад. Я тогда уверенно шел на Senior Java в одну ИТишную компанию.
Итак, идет собес:
- Алгоритмы? Легко.
- Разбор многопоточности с мониторами и `volatile`? На пальцах.
- Рассказ про то, как GC эвакуирует старый обьект — вообще полжизни об этом рассказываю.
И финалочка. Фраза: "Давайте порешаем задачки по SQL"
Банальнейшая задача: *«Есть таблица заказов и пользователей. Выведите имена всех юзеров, которые никогда ничего не покупали»*.
Я, матерый джавист, смотрю на это свысока. Ну окей, думаю, сейчас я вам покажу красоту Stream API... Стоп. Мы же в базе.
Интервьюер спрашивает: «А что будет, если в колонке `user_id` хотя бы раз встретится один-единственный `NULL`?»
💀 Мой мозг Senior-разраба впал в жесткий клинч. В Java `null` бросит `NPE`, мы его боимся и прячем за `Optional`. А в SQL... в SQL предикат `NOT IN (1, 2, NULL)` всегда вернет `UNKNOWN` (ложь). ВСЕГДА. Ни одна строка не пройдет фильтр.
Мой запрос молча вернул пустоту вместо правильного ответа. Логично - оффера не было.
Тот фейл научил меня простой вещи: база данных живет по своим законам. Она не кидает эксепшены тебе в лицо, она просто возвращает неверные данные, и твой идеально спроектированный сервис падает уже где-то далеко на проде со статусом 500.
К чему я это:) думая над контентом и развитием канала и пользе от него я решил миксовать темы.
Раз в неделю здесь будут выходить посты «SQL Fridays». Будем брать классические задачи, которые дают алгоритмистам, и раскладывать их.
У меня такой был лет 10 назад. Я тогда уверенно шел на Senior Java в одну ИТишную компанию.
Итак, идет собес:
- Алгоритмы? Легко.
- Разбор многопоточности с мониторами и `volatile`? На пальцах.
- Рассказ про то, как GC эвакуирует старый обьект — вообще полжизни об этом рассказываю.
И финалочка. Фраза: "Давайте порешаем задачки по SQL"
Банальнейшая задача: *«Есть таблица заказов и пользователей. Выведите имена всех юзеров, которые никогда ничего не покупали»*.
Я, матерый джавист, смотрю на это свысока. Ну окей, думаю, сейчас я вам покажу красоту Stream API... Стоп. Мы же в базе.
SELECT u.name FROM users u
WHERE u.id NOT IN (SELECT user_id FROM orders);
Интервьюер спрашивает: «А что будет, если в колонке `user_id` хотя бы раз встретится один-единственный `NULL`?»
💀 Мой мозг Senior-разраба впал в жесткий клинч. В Java `null` бросит `NPE`, мы его боимся и прячем за `Optional`. А в SQL... в SQL предикат `NOT IN (1, 2, NULL)` всегда вернет `UNKNOWN` (ложь). ВСЕГДА. Ни одна строка не пройдет фильтр.
Мой запрос молча вернул пустоту вместо правильного ответа. Логично - оффера не было.
Тот фейл научил меня простой вещи: база данных живет по своим законам. Она не кидает эксепшены тебе в лицо, она просто возвращает неверные данные, и твой идеально спроектированный сервис падает уже где-то далеко на проде со статусом 500.
К чему я это:) думая над контентом и развитием канала и пользе от него я решил миксовать темы.
Раз в неделю здесь будут выходить посты «SQL Fridays». Будем брать классические задачи, которые дают алгоритмистам, и раскладывать их.
Просмотры: 41