Продолжительность обучения:
Программа по Java - 5 месяцев.
Чем занимался раньше?
Работал инженером.
Где работает сейчас?
Разработчик в Epam.
Наш выпускник, Весновский Александр, рассказывает, какие вопросы задают на собеседованиях в крупных компаниях, почему не надо делать тестовые задания и как стать выпускником Kata. Статья очень длинная, но крайне полезная. По ней можно готовиться к собеседованиям:)
Я – разработчик в Epam. Веду проект — система “Умный город” от Норильского Никеля.
До этого работал в Сбере. Ушел, потому что у них там все медленно, на мой взгляд. Доступы на 3 недели растянулись, я еще попал на внутренний проект. Стек, на который я устраивался , оказался не тот – Java7. Из Spring только DI и IoC, XML-конфиги + внутренняя платформа.
Народ вокруг какой-то вялый – никто ничего не знает, задачу поставить не могут. Мне пришлось объяснять продакт-оунеру, что такое ролевая модель, чтобы хоть как-то узнать, что вообще надо делать с этой платформой. Плюс, приходилось бегать, обивая пороги кучи команд и расспрашивать что да как, что мне такой вариант не подходит.
Искал работу, не делая ни одного отклика:) Просто выложил резюме на HH. 2 недели ушло на поиски, прошел около 20 собеседований.
На собеседованиях спрашивали по-разному: от стандарта, до подумать (Spring, Jpa, Transactional, уровни изоляции, Core по полной, иногда паттерны и алгоритмы). Частенько спрашивали про стримы, я их знал плохо, выезжал на Sql.
Тестовые задания не делал, говорил «времени нет, для оценки моих знаний существуют собеседования». Всегда прокатывало, соглашались без тестовых.
Вопросы, которые чаще всего задавали на собеседованиях:
1) Про SQL спрашивают везде. Explain обязателен, всех волнуют параметры плана запроса, не только время выполнения.
2) Стримы. Альфа, Epam и многие другие, считают это прям обязательным. Стоит учить как следует, причем на практике.
3) Transactional – досконально – propagation, isolation, блокировки. Это все спрашивали подробно и на примерах. Частый вопрос – транзакция внутри транзакции и вызов транзакционного метода из нетранзакционного. Как исключения влияют на роллбэки. Некоторые спрашивают, как это сделать через базу – я обычно говорил, что делали спрингом. Также спрашивают про прокси и аспекты внутри.
4) Архитектура приложения, которое вы "писали" на коммерческом опыте.
5) Security. Вопросы: как вы конфигурировали, как избегали тащить всего юзера со ссылками на роли, почему нельзя было сделать более легковесный объект для авторизации и тянуть остальные поля в рамках сессии. Ответ про сервлет-фильтры внутри секьюрити, и что их около 15-ти дает большие плюсы.
6) Валидация и контракты по формату JSON с серверной стороны.
7) O () в коллекциях максимально подробно.
8) Рекурсивный вызов synchronized метода по тому же объекту – что будет, также что будет, если два потока будут вызывать static synchronized методы (разные) одного класса.
9) Если где-то сказать "красно-черное дерево", это практически гарантирует подробный расспрос, если сказать просто дерево – не цепляются – максимум log(n).
10) Паттерны спрашивают по-разному: сначала хотят список, а потом какую-нибудь реализацию. Спрашивают про встроенные паттерны спринга. Самое интересное – когда просят спроектировать классы и постепенно подводят к тому, чтобы ты сам привел все к паттерну. Я там сам не заметил как стратегию и фасад реализовал, просто рассуждая и размышляя.
11) По алгоритмам – многие на решении задач просят оптимизировать уже решенное, и сортировки вроде быстрой и слиянием очень помогут. Удаление элементов коллекции при переборе forEach – на этом пытаются поймать – итератор, removeIf() или стримы спасают.
12) Boot – parent, starter – как частично запретить конфиг по умолчанию.
13) По JPA любимый вопрос – про маппинг коллекций, отношения – из этого чаще всего беседа идет в сторону графов, fetch-стратегий.
14) SOAP, REST почти везде. Как создать обращение к другому приложению по URL, SOLID – все морщатся на книжных примерах – стоит максимально отходить от статей.
15) Многопоточность. Все вопросы, которые в jsHelper и то, что в Kata обычно спрашивают на подготовке. Единственное, сколько к вам подключалось пользователей – как вы осуществляли контроль – ни в коем случае нельзя говорить, что средствами кода проекта – это провал.
Хочу сказать, что все эти ответы с точки зрения уже поработавшего в сфере человека – полный бред, но вряд ли без опыта кто-то из ребят сможет объяснить все это нормально. Тут надо именно потрогать, особенно, что касается CI/CD, Liquibase, Kafka, Jira и т.п. Так что это нельзя принимать за правду. Это мои личные лайфхаки на собесе, успешно прокатившие. Строил из себя бывалого разработчика, только закончившего Kata:)
Я пошел сначала на вторую вышку в Бауманку, на программную инженерию, отучился 3 года, бросил. Все без толку, там сидят пожилые люди, которые реальной работы никогда не видели.
Kata и, конкретно, Алексей Мельников, Святослав и Герман дали сильный пинок, показали как правильно учиться и сузили спектр. Так бы я до сих пор копался в книгах.
На самом деле, этот подход максимально и в сжатые сроки дать нужную информацию, эффективен для становления в этой профессии. Курсы, книги, сами по себе бесполезны без человека, который направит, замотивирует и остановит в самозакапывании.
Меня и других студентов к собеседованиям готовил Стас. Я все это совмещал с работой, а по вечерам мы созванивались отдельно и готовили друг друга, спорили, пробовали разные варианты. Собесы – самая веселая часть учебы, ты просто выкладываешь резюме, и тебе начинают звонить и знакомиться легионы женщин:) Только успевай записывать когда, с кем и на что договорился. Буквально за два дня у меня были расписаны 2 недели по 4-5 собесов в день.
Через пару-тройку собеседований понимаешь, как это работает и привыкаешь, и выясняется, что знаешь много. Главное – не дать себя потопить. Хитрые лиды и архитекторы постоянно пытаются подловить – не стоит мычать, волноваться, выдумывать или же вываливать подробно все, что знаешь, цитируя "Философию", Шилдта и Википедию – выглядит глупо и вызывает доп вопросы еще глубже.
Я получил 11 офферов за полторы недели и успешно устроился в самое приятное место.
Не бояться. Не делать тестовые (потеря времени). Разговаривать уверенно. Хорошо знать Sql и Stream API и функционалку в целом, Method reference, Lambda.
Самое главное, что я хотел сказать – просто делай то, что говорят наставники, и не считай, что ты знаешь как лучше тебе учиться. Они знают, не сомневайся. Сколько раз я пытался закопаться, думая, что недостаточно знаю и умею, не слушал ментора, тем самым только тормозил учебу.
Как пример, тяжелым был переход на предпроект, когда кода стало резко больше и сразу куча технологий. Я попытался сделать паузу, мотивируя тем, что надо все досконально изучить. Алексей и Герман не дали сделать ошибку. Сказали: «Ты ,конечно, можешь пойти учить наизусть книги вроде "рецепты регулярных выражений", но толку никакого, только оттянешь время, а так через месяц ты будешь писать на спринге».
И что вы думаете, через месяц я действительно писал на спринге, причем с пониманием того, что делаю, и думал, как же можно было так затупить:) Просто подход к учебе меняется на от целого к частному, по спирали. Через какое-то время обнаружил, что уже не могу больше суток не писать – тянет обратно.
После окончания JM моя зп выросла. При этом, количество рабочих часов не изменилось, плюс, теперь могу работать из дома.
Предложения сыпятся даже при закрытом резюме, через день. Лет через 5 планирую стать архитектором, думаю, получится раньше.
Другие истории:
Анастасия, за 3 месяца стала тестировщиком без IT-бэкграундa
«3 часа и тестовое было сделано...»
Камиль, в IT после 40 лет
«Все возможно. Надо лишь приложить усилие и не опускать руки...»
Дмитрий Сало. Разработчик в Лиге Цифровой Экономики
«Kata приучает учиться быстро, абстрагируясь от всего лишнего...»
Илья Князев. Разработчик в Тинькофф Банке.
«Важно, помимо работы, не забывать о семье, времени на себя и отдыхе…»