Загрузка…
Загрузка…
backend / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
—
01
Поведенческий
Расскажите о себе и своем опыте: что делали, с какими технологиями работали.
Вводный блок встречи
02
Теория
Какие виды JOIN ты знаешь и чем они отличаются (INNER, OUTER, LEFT, RIGHT, CROSS, FULL)?
03
Теория
Что такое агрегатная функция в SQL? Приведи примеры (MAX, MIN, AVG, COUNT).
04
Теория
Работал ли ты с транзакциями? Слышал ли про уровни изоляции транзакций?
Кандидат знал commit/rollback, про уровни изоляции не слышал. Часть формулировки в транскрипте искажена.
Заметки
Собеседование в компании СберСервис (сервисная «дочка» Сбербанка, обслуживание банкоматов и инфраструктуры). Проекты: СПРИНТ (field management system — управление удаленными инженерами, бэк + мобильное приложение, Node.js с постепенным переходом на TypeScript) и платформа «ИТ-Услуги» (услуга.точка.ру — продажа услуг инженеров малому и среднему бизнесу; Node.js, микросервисы, RabbitMQ, общий код выносится в пакеты, движение в сторону DDD, активное покрытие юнит-, интеграционными и e2e-тестами). Структура встречи: рассказ об опыте → технические вопросы (SQL/БД, JavaScript, лайвкодинг, архитектура) → рассказ о компании и вопросы кандидата. Несколько интервьюеров (Александр Цветков, Пётр, Александр). Обещали обратную связь в ближайшие дни. Есть гибкий график для студентов (20 часов в неделю), возможен договор ГПХ на первое время.
Стиль интервьюера
Несколько интервьюеров, дружелюбная атмосфера: задают наводящие вопросы, подсказывают при затруднениях, подробно разбирают ошибки в ответах (например, антипаттерны с Docker, volumes), просят комментировать решение вслух во время лайвкодинга в расшаренном редакторе. Один из интервьюеров задает «любимые» каверзные вопросы по базам данных (NULL в первичном ключе, SELF JOIN, DELETE vs TRUNCATE).
05
Теория
Какие бывают индексы и для чего вообще нужны индексы в базе данных?
06
Теория
В каких случаях первичный ключ (первичный индекс) может быть NULL?
Интервьюер назвал это своим любимым вопросом; правильный ответ — ни в каких
07
Теория
В каком случае первичный ключ может быть составным? Может ли он вообще быть составным?
08
Кейс
Приведи пример бизнес-задачи, когда нужно сделать составной первичный ключ.
Follow-up к вопросу про составной ключ; кандидат привел пример с user_id + chat_id в сессии телеграм-бота
09
Теория
Чем DELETE отличается от TRUNCATE?
10
Теория
Какой запрос быстрее: DELETE или TRUNCATE, и почему?
Follow-up к вопросу про DELETE vs TRUNCATE
11
Теория
Знаешь ли ты, что такое SELF JOIN?
Интервьюер отметил, что ни один кандидат пока не ответил сразу; задавал наводящие вопросы. Правильный ответ — join таблицы с самой собой.
12
Поведенческий
Решал ли ты задачи производительности базы данных? Расскажи про этот опыт.
Кандидат рассказал про задачу оптимизации кластерной базы на Postgres с репликами (мастер + реплики на чтение), до практики не дошел
13
Теория
Знаешь ли ты, для чего используется Patroni?
Формулировка в транскрипте частично искажена; кандидат слышал инструмент впервые
14
Теория
Слышал ли ты что-нибудь про PgBouncer (балансировщик для Postgres)?
Кандидат предположил, что это балансировщик запросов
15
Теория
Работал ли ты с базами данных в контейнерах? Назови плюсы и минусы расположения базы в контейнере и как это нужно делать, чтобы не нарушать целостность данных.
Интервьюер разобрал антипаттерны в ответе кандидата (несколько сервисов и база в одном контейнере) и объяснил про volumes для хранения данных
16
Теория
Ты работал с Sequelize — расскажи про его плюсы и минусы (в том числе по сравнению с Prisma и сырыми SQL-запросами).
Follow-up: справляется ли ORM со сложными запросами или лучше писать сырой SQL
17
Теория
Зачем в JavaScript существуют операторы строгого равенства и строгого неравенства (=== и !==)? Чем они отличаются от == и !=?
18
Теория
Сталкивался ли ты с таким понятием, как замыкание (closure)?
Кандидат ответил, что не сталкивался
19
Теория
Что такое Promise в JavaScript? Расскажи про его статусы и как с ним работать.
Follow-up'ы: объясни концептуально, как начинающему разработчику; можно ли сказать, что промис — это объект
20
Теория
Что появилось первым: then/catch или async/await? Зачем тогда добавили async/await?
Обсуждали callback hell и почему async/await лаконичнее
21
Теория
Какие есть проблемы с this в JavaScript? Чем отличается работа с this в обычной функции и в стрелочной функции?
22
Теория
Что делают методы apply, call и bind?
23
Теория
Для чего используются Map и Set в JavaScript?
Кандидат с коллекциями Map/Set не сталкивался, ответил про метод массива map
24
Теория
Зачем используется метод массива map?
25
Теория
Для чего используется метод массива reduce? Что такое аккумулятор и как его можно использовать?
Follow-up: аккумулятор может быть любым значением — пример с агрегацией массива объектов в один объект
26
Код
Лайвкодинг: напиши функцию, которая проверяет, является ли входная строка палиндромом (регистр и знаки препинания/апострофы не учитываются).
Кандидат решил через split('') → reverse() → join('') и сравнение со строкой; просили комментировать ход решения вслух
27
Код
Лайвкодинг: дан массив чисел — найди все непрерывные последовательности (каждый следующий элемент на 1 больше предыдущего) и верни массив строк вида "0->2", "4->5".
Кандидат решил задачу частично; follow-up'ы про последовательности произвольной длины. Примеры: [0,1,2,4,5,7] → ["0->2","4->5"]; [110,111,112,-5,-4,-2] → ["110->112","-5->-4"]
28
Кейс
Как ты смотришь на разбиение решения на модули/отдельные переиспользуемые функции — стоит ли выносить часть логики (например, проверку наличия последовательности) в отдельную функцию?
Теоретическая врезка по ходу второй задачи лайвкодинга
29
Теория
Расскажи, что такое dependency injection.
В резюме кандидата был указан DI; обсуждали реализацию в NestJS, синглтоны
30
Теория
Где происходит инстанцирование (создание экземпляров) сервисов при dependency injection в NestJS?
Follow-up к вопросу про DI
31
Теория
Что ты слышал о чистой архитектуре? Какие хорошие практики и паттерны знаешь (DRY, KISS, SOLID)?
32
Теория
Расскажи про SOLID: что это такое, с чем его едят и для чего оно нужно?
33
Теория
Чем dependency injection отличается от dependency inversion и для чего нужен каждый из них?
Интервьюер отметил, что многие путают эти понятия
34
Кейс
Ситуация: нужно написать два приложения, одно должно использовать Express, другое — Koa. Как ты организуешь код: будешь ли выносить общие абстракции в библиотеку и стоит ли отделять фреймворк от бизнес-логики (писать обертку над фреймворком)?
Многоступенчатый ситуационный вопрос; в итоге обсудили паттерн обертки/адаптера, чтобы не зависеть от конкретного фреймворка
35
Поведенческий
Как ты поддерживаешь свой уровень знаний: что читаешь, где практикуешься?
Кандидат назвал блог и книгу Халила Стемлера, книги по асинхронному JavaScript, YouTube (Ulbi TV)
36
Поведенческий
Решаешь ли ты каты — небольшие задачки (например, на Codewars)?
Кандидат решал задачи 5-6 уровня на Codewars около четырех месяцев назад
37
Поведенческий
Куда ты целишься дальше: хочешь заниматься бэкендом или фронтендом, какие планы на развитие?
Кандидат рассказал про интерес к highload (паттерны retry, timeout, proxy/mesh) и конференции HighLoad++
38
Поведенческий
Что ты знаешь про нашу компанию?
Кандидату не рассказывали о компании заранее; интервьюеры сами рассказали о компании и проектах