Какой у вас опыт участия в собеседованиях в IT?

Ответ

Я участвовал в собеседованиях с обеих сторон баррикады: как кандидат и как интервьюер. В среднем за последние годы это 5-10 собеседований в год в каждой роли.

Типичная структура собеседования на позицию Java-разработчика включает:

  1. Теоретический блок: вопросы по Java Core (коллекции, многопоточность, JVM).
  2. Практический блок: решение алгоритмических задач и написание кода, часто с акцентом на многопоточность.
  3. Системное проектирование: для senior-уровня — обсуждение архитектуры распределенных систем.

В качестве интервьюера я оцениваю не только технические знания, но и умение мыслить вслух, задавать уточняющие вопросы и предлагать trade-offs. Пример простого, но показательного вопроса на понимание основ:

// Что выведет этот код и почему?
public class Main {
    public static void main(String[] args) {
        String s1 = "Java";
        String s2 = "Java";
        String s3 = new String("Java");
        System.out.println(s1 == s2); // true (пул строк)
        System.out.println(s1 == s3); // false (разные объекты)
    }
}

Ответ 18+ 🔞

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

Обычно всё идёт по накатанной, как в плохом сериале. Сначала тебе начинают въезжать в мозг теорией: коллекции, многопоточность, JVM... «Расскажите про разницу между HashMap и ConcurrentHashMap, а то я, блядь, сам забыл». Потом, ёпта, практика — сидишь, потеешь, пытаешься на бумажке или в онлайн-редакторе написать алгоритм, который в реальной жизни ты гуглишь за пять секунд. И обязательно, сука, задачка на потоки, чтобы кандидат почувствовал себя полным мудаком.

А для сеньоров — отдельный цирк. Начинается «системное проектирование». Сидишь и пытаешься на ходу придумать, как бы ты спроектировал «Твиттер» или «Убер», при этом в голове только одна мысль: «Я ж просто хочу писать код, а не строить, блядь, империю».

Когда я сам интервьюирую, мне, конечно, интересны знания. Но ещё больше — как человек думает. Мне не нужен робот, который зазубрил мануал. Мне нужен тот, кто может сказать: «Слушай, а тут есть нюанс, давай уточним требования, потому что если вот так, то мы получим пиздец, а если эдак — то просто небольшой косяк». Умение видеть trade-offs — это золото, ебать мои старые костыли.

Вот, например, простенький вопрос, но он сразу выносит мозг тем, кто плавает в основах. Смотри:

// Что выведет этот код и почему? Не гугли, нахуй!
public class Main {
    public static void main(String[] args) {
        String s1 = "Java";
        String s2 = "Java";
        String s3 = new String("Java");
        System.out.println(s1 == s2); // true (пул строк, детка, одна и та же ссылка из кучи)
        System.out.println(s1 == s3); // false (новый объект, новый адрес в памяти, прощай, оптимизация)
    }
}

Видишь? Казалось бы, ерунда. Но если кандидат начинает нести хуйню про то, что == сравнивает содержимое, или путается в String Pool — всё, волнение ебать, подозрение чувствую. Значит, фундамент дырявый. А без фундамента, чувак, любая архитектура развалится, как карточный домик, при первом же заходе на прод.