{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

Как подготовиться к техническому собеседованию в крупную IT-компанию

Алексей Плешканев, преподаватель Java в международной школе IT и кибербезопасности HackerU, главный инженер по разработке Сбербанка России рассказывает, какими знаниями и навыками нужно обладать Junior-разработчику, чтобы устроиться в крупную IT-компанию.

Главная ошибка всех новичков — не разобравшись в базовых вещах, например, в идеологии языка программирования, использовать сразу сложные инструменты.

И приходя на позицию Junior в компанию, они пытаются решить простые задачи сложными способами, которые отнимают много времени. В итоге пишут такой код, что любая попытка модернизации приложения приводит к потере его производительности. Личный прогресс в программировании при таком подходе быстрый, но впоследствии ребята заваливаются на серьезных задачах. Потому что есть пробелы в базе.

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

1. Глубоко изучите основу конкретного языка программирования

Если хотите стать успешными в разработке, изучите идеологию, архитектуру, особенности работы языка. Желательно написать несколько небольших проектов простым кодом. Именно простым, без фреймворков. Это даст нужные навыки.

На технических собеседованиях на позиции Junior или Middle разработчика всегда задают вопросы на знание языка. Неважно, веб или бэкенд-разработчик. Например, как правильно сравнивать между собой две строки (в каких-то кейсах сравнение работает правильно, в каких-то - нет), как устроены встроенные типы данных - строки, числа, особенности работы с ними.

Много вопросов посвящено пониманию принципов объектов ориентированного программирования. Почти всегда спрашивают про интерфейсы, коллекции, принципы их работы. Эти вещи базируются на обычной математике и присутствуют в каждом языке.

Для Android-разработчиков рекомендую изучить Oracle Certified Professional сертификаты по Java 7 и 8. Более краткого и четко изложенного руководства по языку я еще нигде не встречал. Помогает сформировать базовые необходимые навыки. Описано много хитрых вопросов, ответы на которые не все знают. Для iOs - SwiftBook - официальное издание Apple. Конкретно и точно описывает возможности языка.

2. Изучите популярные фреймворки и их функционал

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

Java фреймворки, по которым любят погонять а собеседованиях. Самый популярный - Spring Framework. Его желательно знать. Особенно, если планируешь заниматься бэкэндом. Hibernate - полезный фреймворк для работы с базами данных.

3. Разберитесь с алгоритмами и структурами данных

Про алгоритмы и коллекции спросят обязательно. У нас в Сбербанке, например, недавно искали iOs разработчика. На зарплату от 250 000 рублей в месяц. Конкретный вопрос на собеседовании:

Вот список заблокированных адресов, по которым приложение не может входить в сеть. Какой тип коллекций вы будете использовать - массив или набор (SET)? Если нужно при каждом обращении в сеть проверять, может ли приложение идти по указанному адресу?

Многие отвечают - массив. Без особых объяснений. Кто-то дает правильный ответ - SET. Но объяснить его не может. Понимает, но на интуитивном уровне. При этом человек говорит, что занимался оптимизацией кода…

Почему “массив” в данной ситуации не подходит? Если у приложения 10 запрещенных адресов, по которым нельзя “ходить”, то поисковой программе достаточно просто пройти по всем элементам массива и проверить. Это не займет много времени. Но если у вас огромное приложение с тысячей элементов (порты, айпишники), проверять их - долго и неудобно. Приложение по ощущениям пользователя будет “виснуть”, “тупить”. На самом деле оно будет осуществлять поиск путей, по которым “ходить”. Сеты же позволяют найти правильный адрес быстро, независимо от количества элементов - 10 или 1000.

Почему крупные компании гоняют по алгоритмам и структурам данных?


1. Плохо написанный код в мобильной разработке порождает недовольство клиентов приложением и приводит к потере прибыли компании. Например, если мобильное приложение банка будет плохо работать, клиент не будет пользоваться услугами банка.

2. Сейчас телефоны показывают статистику, сколько приложение потребляет памяти и энергии смартфона. Если приложение не оптимизировано, оно поглощает много памяти и энергии аккумулятора. Также потенциальная утечка клиентов.

И это далеко не полный перечень причин, по которым стоит разбираться в алгоритмах. Примеры выше достаточно явные, чтобы тебе было понятно, почему на это стоит обратить внимание. Вот почему на собеседованиях обязательно гоняют по базовым концепциям. Чем больше кандидат знает алгоритмов, подходов и способов, тем выше его потенциальная способность написать оптимизированный и красивый код. В крупных западных компаниях всегда на собеседованиях об этом спрашивают. Дают задачки на тему. Ошибка новичков в том, что они пытаются освоить крутые фреймворки, но плавают в алгоритмах.

Для тех кто хочет “прокачать” знание алгоритмов рекомендую сайт со сборником задач. Там есть ответы с разборами:

4. Заведите портфолио на GitHub

Портфолио на Гитхабе - лучший вариант показать свой опыт. Даже новичку. Придумайте мини-проект или какую-то задачку себе для развития навыков программирования. Реализуйте и выложите в сеть. Многие работодатели мониторят этот ресурс. Изучают код, решая, пригласить вас на собеседование или нет.

Я размещал проекты на этом ресурсе. Для себя. Ради опыта. И был удивлен, когда крупная компания вышла на меня и пригласила на собеседование. Оказалось, моей работой на Гитхабе заинтересовались.

5. Прочтите полезную литературу

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

  • Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих. Бхаргава Адитья.
  • Чистый код. Создание, анализ и рефакторинг. Библиотека программиста. Мартин Роберт К.
  • Head First. Паттерны проектирования. Фримен Эрик, Робсон Элизабет.
  • Совершенный код. Мастер-класс. С.Макконнелл.
  • Приемы объектно-ориентированного проектирования. Паттерны проектирования. Гамма Эрих, Хелм Ричард.
  • Kotlin в действии. Д. Жемеров, С.Исакова.
  • Java. Эффективное программирование. Блох Джошуа.
  • Алгоритмы на Java. Джитер Кевин Уэйн, Седжвик Роберт.
0
Комментарии
-3 комментариев
Раскрывать всегда