Ответ
Да, я участвовал в проведении технических собеседований на позиции junior и middle-разработчиков. Моя роль обычно заключалась в оценке практических навыков через решение задач и обсуждение архитектурных решений.
Фокус оценки:
- Базовые концепции: Понимание ООП, паттернов проектирования (например, Singleton, Factory), принципов SOLID и работы с коллекциями.
- Практическое программирование: Реализация конкретной функциональности, например, парсера логов или простого API-эндпоинта. Я смотрю на чистоту кода, выбор алгоритмов и обработку edge-cases.
- Работа с данными: Умение составлять SQL-запросы средней сложности, понимание индексов и транзакций.
Пример типового задания для backend-кандидата:
// Реализуйте простой класс для валидации данных формы.
// Он должен принимать правила и данные, возвращать массив ошибок.
class FormValidator {
private array $rules;
private array $errors = [];
public function __construct(array $rules) {
$this->rules = $rules;
}
public function validate(array $data): bool {
// Код проверки по правилам (required, email, min_length и т.д.)
// ...
return empty($this->errors);
}
public function getErrors(): array {
return $this->errors;
}
}
Помимо технической правильности, я всегда обращаю внимание на коммуникацию: как кандидат задает уточняющие вопросы, объясняет ход своих мыслей и реагирует на подсказки.
Ответ 18+ 🔞
А, так ты про собесы спрашиваешь? Ну да, приходилось, ёпта, этим заниматься — сидишь, как манда с ушами, и слушаешь, как джуны и миддлы пытаются не облажаться. Роль у меня была простая: выяснить, не пиздят ли они про свой опыт, или реально могут код написать, который не заставит меня потом ебать мои старые костыли, разгребая их говно.
На что я обычно смотрел, аж волнение ебать:
- Основы, блядь: Понимает ли человек, что такое ООП, или он просто слова слышал. Можешь объяснить, чем полиморфизм от инкапсуляции отличается, или ты просто мартышлюшка, которая копипастит с Stack Overflow? Паттерны там, SOLID — не чтобы назвать, а чтобы применить. И коллекции, ядрёна вошь, — не просто
arrayтуда-сюда пихать. - Руки из жопы или нет: Вот тут самое интересное. Даю задачку — типа, напиши парсер логов или какой-нибудь простенький эндпоинт. И смотрю, блядь, как человек думает. Пишет ли он читаемый код, думает ли об исключительных ситуациях, или его решение — это один сплошной
if-elseна три экрана, от которого глаза кровоточат. Чистота кода — это всё, чувак, терпения ноль ебать на спагетти-код. - С базами данных дружит?: Ну, middle-то уж точно должен. Не просто
SELECT * FROM users, а какой-нибудь join сообразит, про индексы понимает, зачем они. Если на вопрос про транзакции начинает про ACID рассказывать, но не может объяснить, в какой реальной задаче они нужны — это доверия ебать ноль.
Вот, смотри, какую простыню могли заставить написать на бэкенде:
// Напиши класс, который данные формы проверит. Правила ему дашь, данные — он тебе скажет, что не так.
class FormValidator {
private array $rules;
private array $errors = [];
public function __construct(array $rules) {
$this->rules = $rules;
}
public function validate(array $data): bool {
// Тут надо по правилам пройтись (обязательное поле, email, длина и всё такое)...
// ...
return empty($this->errors);
}
public function getErrors(): array {
return $this->errors;
}
}
И вот тут-то и начинается цирк. Один сразу про регулярки для email заводит, другой edge-cases ловит, а третий такой: «А можно библиотеку использовать?». Ну, ни хуя себе, конечно можно, но ты-то сам как?
Но самое главное, что я выносил из этих бесед — это не код, а коммуникация. Как человек вопросы задаёт: уточняет требования или сразу в пизду несётся делать ерунду. Как объясняет, что у него в голове происходит. И, что критично, как на подсказки реагирует. Если ему говоришь: «А тут, может, исключение выбросить?», а он упёрто стоит на своём, как хуй с горы — это плохой знак. А если слышит, думает и говорит: «Ага, точно, так лучше будет» — вот это уже теплится надежда, что с человеком можно будет работать, а не только ругаться.