Про технические собеседования

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

Например, недавно был такой случай с кандидатом, претендующим на позицию сеньора:

Задание - написать минимум кода, который будет переворачивать зеркально любое слово. Кандидат пишет так: public static void mirrorWord() { String word = "Hello"; StringBuilder result = new StringBuilder(); for(int i = word.length() – 1; i > 0; i-) { result.append(word.charAt(i)); } sout(result); }

Комментарий интервьюера: Код работает, да, но он длинный и не ёмкий. А можешь в одну строку?

Ответ: не могу.

А я ждал такое: sout(new StringBuilder(word).reverse().toString()); - помимо того, что тот же самый код реализован в одну стоку, здесь ещё присутствует знания методов Java типа reverse(). Поэтому кандидату с его заявленным грейдом на сеньора был отказ.

Ещё примеры.

Задание: Напиши метод, который принимает строку и возвращает новую строку, где каждый символ повторяется дважды. Например, для строки "abc" метод должен вернуть "aabbcc".

Решение кандидата: public static String doubleCharacters(String input) { StringBuilder result = new StringBuilder(); for (char c : input.toCharArray()) { result.append(c); result.append(c); } return result.toString(); }

Кандидат использовал не оптимальное решение.

Оптимальное решение: public static String doubleCharacters(String input) { return input.replaceAll(".", "$0$0"); }

Анализ: Здесь используется встроенная функциональность регулярных выражений Java, что значительно сокращает длину кода и делает его более читаемым. Кандидат, знающий подобные трюки, показывает хорошее владение языком и внимание к деталям.

Задача на работу с коллекциями

Задание: Напиши метод, который удаляет дубликаты из списка целых чисел и сохраняет порядок оставшихся элементов.

Решение кандидата: public static List<Integer> removeDuplicates(List<Integer> list) { List<Integer> result = new ArrayList<>(); for (Integer num : list) { if (!result.contains(num)) { result.add(num); } } return result; }

Комментарий интервьюера: Решение работает, но оно неэффективно для больших списков. Можно ли предложить более оптимальный вариант? Кандидат не смог.

Оптимальное решение: public static List<Integer> removeDuplicates(List<Integer> list) { LinkedHashSet<Integer> set = new LinkedHashSet<>(list); return new ArrayList<>(set); }

Поэтому не стоит лгать в резюме, когда, например джун+ заявляет о себе, как сеньор и подобное, ну рил, не надо, теряют время обе стороны и впечатления остаются негативные.

Про технические собеседования | Сетка — социальная сеть от hh.ru Про технические собеседования | Сетка — социальная сеть от hh.ru