28

Ответ на пост «Секреты вашей профессии, о которых лучше не говорить»178

В предыдущих ответах я уже рассказал про свой опыт работы инженером-электронщиком в сфере радиационных испытаний и о том, как я проходил стажировку на заводе Renault. А теперь настало время рассказать о моём текущем работодателе, самом любимом и ненавистном job-портале всея Руси — hh.ru. На данный момент я работаю backend-разработчиком в команде Поиска. Мы отвечаем за поисковую выдачу на сайте и пользовательские рекомендательные системы. Я решил разделить пост на две части: здесь я расскажу про общие и технические аспекты работы в hh.ru, а в следующей — о том, как правильно пользоваться поиском hh.ru и не страдать от кривых рекомендаций:)

1. Раньше я думал, что у hh.ru — совсем небольшая команда. Однако на данный момент в Техническом департаменте около 40 команд с 5-10 сотрудниками в каждой — разработчиками, тестировщиками, аналитиками и прочими достойными людьми. Каждая команда отвечает за свою функциональность. Например, сейчас аж 3 команды поиска: 2 из них отвечают за поиск с точки зрения ML, это коллаборации дата-сайентистов и бэкендеров, я работаю как раз в такой, а третья — за поиск с точки зрения UI/UX, в ней коллабят фронтендеры и бэкендеры.

2. Чтобы устроиться фронтенд- или бэкенд- разработчиком в hh, вам придется овладеть сразу двумя языками программирования. Для фронта это JavaScript и Python, для бэка — Java и Python. Фишка в том, что у нас существует сервис интеграционной логики между фронтом и бэком, и написан он на Питоне. “Трогать” его приходится всем: как фронтендерам, так и бэкендерам. Первые через этот сервис отправляют запросы на бэк, а вторые отдают в сервис данные, которые потом отправляются на фронтенд. Есть случаи взаимодействия между фронтом и бэком без этого сервиса, но полностью от него избавиться у нас пока не получается. Но, как говорится, есть нюанс: сразу на собеседовании знание Питона могут не требовать, однако с вероятностью 80% его придется выучить после трудоустройства на позицию web-разработчика.

3. Поиск в hh самописный, создан на основе библиотеки Lucene. Основная причина — историческая. Когда писался поиск hh, никакого ElasticSearch не существовало. Более того, некоторые команды, которые сначала активно пользовались Эластиком, раздумывают о переходе на наш поиск. Вообще, в hh любят самописки. У нас множество внутренних “авторских” библиотек, а также три известных мне opensource фреймворка: frontik, Nivelir и nab. Внутри hh эти фреймворки используются повсеместно. Фронтик — это асинхронный сервер приложений, основанный на Python-библиотеке Tornado. Например, сервис интеграционной логики из предыдущего факта создан как раз на основе Фронтика. Nivelir — это фреймворк для навигации в iOS-приложениях, был разработан относительно недавно нашими iOS-разработчиками. Подробнее про него можно почитать тут. А NaB — это такой hh-специфичный Spring Boot. Под капотом у него Spring Framework, но сконфигурированный специально под наши нужды.

4. Внутри поиска многие проблемы решаются банальным переиндексированием. Дело в том, что при любых изменениях вакансии или резюме сам документ на самом деле не изменяется. В поисковом индексе создается новый документ с изменениями, а старый вариант помечается как удаленный. Но физическое удаление старой версии из индекса происходит только при переиндексации. Как правило переиндексация происходит автоматически, но сбои случаются. Хорошей иллюстрацией таких сбоев послужит недавний случай из поиска резюме (этот поиск видят работодатели), который произошел перед новогодними праздниками. В поисковой выдаче при фильтрации по “Активно ищет работу” попались пару резюме со статусом “Не ищет работу”. Оказалось, что соискатели с этими резюме недавно поменяли статус, а индексация засбоила. После переиндексации статус этих резюме в выдаче стал отображаться как надо. В поиске вакансий аналогичные мелкие нестыковки в выдаче могут решаться переиндексированием соответствующей вакансии. Поэтому, если пользователь пишет о каких-то проблемах с конкретной вакансией/резюме в поисковой выдаче, первое, что мы пробуем сделать — переиндексировать ее. Да, прямо как в набившей оскомину шутке про “а вы пробовали выключить и включить?”

5. На hh.ru есть особый тип вакансий — вакансии Виртуального Рекрутера (ВР). Выглядят они примерно так. Вместо стандартного отклика там идет заполнение короткой анкеты. Занимается всем этим отдельная команда — это полностью их вотчина. Даже отклики там считаются не так, как в обычных hh-вакансиях. Как правило, такие вакансии заказывают большие компании для массового набора персонала, а анкета представляет собой мини-резюме. Это далеко не единственная необычная команда в hh.ru. Есть еще две команды разработчиков, которые по факту вообще не имеют никакого отношения к сайту hh.ru — команды Талантикса. Ребята разрабатывают CRM систему для эйчаров, а выглядит она так.

6. В hh проводится очень много A/B-экспериментов. В простом варианте в рамках таких экспериментов пользователи сайта или приложения делятся на 2 группы: контрольную и экспериментальную. Контрольная группа видит сайт или приложение без изменений, а для пользователей экспериментальной добавляется какая-нибудь новая функциональность или изменения в сайте или приложении, которые мы хотим проверить. Пользователи делятся на группы автоматически: в hh для этого используется свой специальный внутренний инструмент. Делается всё это для того, чтобы при любых изменениях наблюдать за реакцией пользователей: действительно ли мы улучшаем их жизнь или делаем все только хуже. Реакция пользователей отслеживается с помощью специальных статистических метрик, на основании которых после эксперимента выносится вердикт: выкатываем ли мы новую функциональность на всех пользователей или отказываемся от нее. Поэтому если вдруг у вас сайт выглядит или ведет себя иначе, чем у вашего знакомого — улыбнитесь, вас снимает скрытая камера:) Вернее, один из вас просто стал участником эксперимента и тестит новые фичи раньше всех. Кстати, пользуясь случаем, расскажу, что у нас есть свой видеоподкаст — “Охэхэнные истории”. В одном из выпусков мы как раз более подробно рассказывали про A/B-эксперименты. Рекомендую к просмотру.

7. Что радует: у каждого разработчика есть собственный тестовый стенд, а у тестировщиков их обычно два или три, где развернут “hh в миниатюре”. На стенде можно спокойно поиграться с различными элементами сайта, проверить какую-нибудь идею, а заодно и протестировать свои задачи.

8. В hh.ru я не встречал никаких ультимативных задач “сверху”, кроме критических случаев, когда, условно, “прод лежит”. Задачи исходят в основном от product-менеджеров, но при этом разработчик вправе самостоятельно выбирать себе задачу или генерировать идеи для следующих. Не знаю, как в других командах, но в Поиске продакты всегда открыты к идеям разработчиков.

9. Рабочее время очень гибкое. Любишь начинать работу пораньше и раньше освобождаться? Пожалуйста. Любишь по утрам поспать, но при этом засиживаешься за компом до поздней ночи? Не вопрос, работай так. Главное соблюдать 2 условия: в срок делать свои задачи и присутствовать на важных встречах. Поэтому отлучиться по уважительной причине на час-два по делам обычно не проблема, главное всё успеть.

10. Из предыдущего факта можно подумать, что разработчики работают меньше стандартных 8 часов, но это не совсем так. Зная отношение компании к своим сотрудникам (об этом позже), все стараются максимально быстро и качественно сделать свои задачи. Но иногда возникают случаи, когда человек не успел доделать задачу перед отпуском и заканчивает ее в отпуске сам, по своей инициативе, хотя менеджеры всячески протестуют против этого. О — ответственность:)

11. Каждый год hh проводит свою Школу Программистов. Занятия в ней бесплатны для всех желающих, но нужно пройти отбор в два этапа: решить 2 задачи и пройти собеседование (в разные дни). Раньше собеседование перед школой и занятия проходили очно в московском офисе компании, но с 2020 года школа полностью перешла в онлайн-формат. Теперь для занятий не обязательно проживать в Москве. Я сейчас работаю в одной команде с человеком, который от момента поступления в школу до приема на работу в hh ни разу не приезжал в Москву. Готовят в школе фронтендеров и бэкендеров, лучших учеников школы по окончании обучения hh принимает в штат. Я сам выпускник этой школы 2019-2020, и попал как раз в переходный период между оффлайн- и онлайн-форматами, подробнее о своём обучении в этой школе планирую сделать отдельный пост.

12. Ну и самое главное: hh.ru — это про людей. В это сложно поверить, не побывав внутри, но это правда так. В компании царит уважительное и доброжелательное отношение к коллегам. Плюс компания в меру своих возможностей старается помогать сотрудникам. Например, в 2021 году я попал в больницу, и у меня не было возможности сообщить об этом работодателю. Но коллеги из hh.ru связались с родственниками, выяснили подробности, помогли с оформлением больничного и спокойно ждали месяц, пока я приходил в себя. Еще один маленький нюанс, который меня поразил: тем, кто работает удаленно, начали доплачивать по 500 рублей в месяц за использование домашнего электричества для работы. Пустячок, а приятно.

107
Автор поста оценил этот комментарий
ответный пост

Как и обещал, вторая часть про “hh.ru изнутри”. В этом посте поговорим о том, как грамотно работать с поиском hh.ru и как не испортить самому себе рекомендации.

1. Про рекомендации стоит понять одну простую вещь: их никто не составляет вручную. Вакансии вам рекомендуют ML-модели (модели машинного обучения — Machine Learning) на основе вашего резюме, предыдущего опыта работы, вашего поведения на сайте: поисковых запросов, кликов по вакансиям, откликов и так далее. ML-модели учатся обобщать поведение похожих на вас пользователей и если вы будете выделяться на их фоне, то модели могут довольно сильно ошибаться. К тому же в ML существует проблема баланса между точностью и полнотой. Если стремиться к 100% точности, то мы будем находить очень мало подходящих вакансий. И, соответственно, наоборот, стремясь подобрать достаточное количество подходящих вакансий, мы снижаем точность рекомендаций. Добавьте к этому, что для повышения качества моделей, нужно довольно много вычислительных ресурсов. А еще вспомните примеры рекомендаций видео и музыки из стриминговых сервисов, там тоже не всегда всё релевантно, но в среднем пользователи на это обращают меньше внимания, чем на рекомендации вакансий. Для всей этой ситуации существует проверочный вопрос: вот если бы это был не робот, а человек, он бы смог по моему резюме и моим действиям на сайте разобраться, чего я хочу?

2. Если вы нашли баг на сайте — не стесняйтесь писать в поддержку. На сайте это кнопка “Помощь” в футере, а в мобильном приложении жмите “Профиль”, затем справа вверху гамбургер-меню и там найдете заветную “Помощь”. Все жалобы пользователей рассматриваются, у нас в команде даже есть еженедельный дежурный, который внимательно за этим следит. И при некорректной работе сайта дежурный старается либо сам починить поломку, либо найти виновника. Мелкие баги обычно фиксятся в течение пары рабочих дней.

3. Если вам, например, нужно точное совпадение при запросе “менеджер по оптовым продажам” или вы готовы работать и C#-разработчиком, и Java-разработчиком — пользуйтесь языком поисковых запросов. Мы умеем отслеживать, что запрос его использует и “развязываем руки” пользователю, не включая различные механики, влияющие на поисковую выдачу.

4. Интересный лайфхак специально для адептов Лиги лени: ищите вакансию в другом регионе, но лень высматривать его в фильтрах? Вбивайте название региона прямо в запросе, например, “программист казань”. “Казань” уйдет в фильтр по региону и поиск hh покажет вам вакансии программистов именно в этом городе.

5. Когда я приходил в hh, на сайте уже работало 5 разных стеков ML-моделей. Недавно появился еще и шестой. Они отвечают за разные поисковые выдачи и рекомендации. Практически все они используются при сортировке “по соответствию”. Если выберете другой тип сортировки, например, по дате изменения, по возрастанию или убыванию зарплаты, то включится “глупый” — обычный не ML-ный поиск, который работает хуже “умного”. Влияет это главным образом на ранжирование документов в поисковой выдаче. При ML-поиске, кроме самого запроса, учитываются еще и многие признаки, которые мы берем из ваших резюме и поведения на сайте, тогда как при обычном поиске ранжирование происходит более топорно. Как пример: вы — менеджер по продажам автомобилей и хотите продавать только их, а ваши резюме и предыдущий опыт работы целиком посвящены только этому. В основном вы смотрите вакансии менеджеров по продажам авто. Тогда при запросе “менеджер по продажам” ML-поиск будет стараться первыми показать те вакансии, которые связаны именно с продажами авто. В то время как обычный поиск покажет вперемешку менеджеров по продажам в разных сферах. Подробнее про типы поиска в hh.ru можно почитать тут.

6. Есть еще один важный нюанс. Если вы пытаетесь найти на hh работу по редкой профессии (вообще или в вашем регионе), а потом вам вдруг начинают предлагать вакансии кассиров в Пятерочке или менеджеров по продажам, а при этом вы не портили себе рекомендации (смотри пункт 1) — знайте, так hh всеми силами старается помочь вам найти хоть какую-то работу. Жизненные обстоятельства бывают разными, есть ситуации, когда работы по профессии в регионе нет, а кормить семью надо. Такие случаи мы тоже стараемся обрабатывать. Рекомендации учитывают не только куда вы откликнетесь, но и куда вас, вероятно, пригласят. Конечно, можно попытаться выучить C++ за 21 день, в резюме написать, что рассматриваете работу только тимлидом и негодовать, почему ML предлагает вам исключительно вакансии стажеров и сотрудников техподдержки. Я, конечно, утрирую, но это недалеко от истины. Система старается заботиться о времени всех участников найма. Если же вы всё-таки хотите, чтобы система не умничала — используйте поиск из пункта 3, это отключит вам поддержку при поисковой выдаче, и вы сможете поискать ровно то, что хотите.

P.S. в ближайшее время также планирую написать про свой опыт перехода из инженеров в IT. Если есть еще темы, о которых вам было бы интересно прочитать от бывшего инженера-электронщика-испытателя и нынешнего Java & Python Backend разработчика - пишите в комментариях и я постараюсь учесть ваши пожелания в будущих постах.

Показать полностью
комментарии (20)

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества