Trust Wallet
Моя история прохождения интервью в Trust Wallet в августе 2023 года на позицию Backend Golang Developer. Весь процесс занял у меня около 20 дней.
О компании
Компания занимается разработкой мульти-кошелька для криптовалют. Является дочерней компанией Binance. Это первая компания, занимающаяся криптовалютами, где я когда-либо собеседовался. Я очень скептически отношусь к надёжности компаний, которые занимаются криптовалютами, но Binance и Trust Wallet вызывают у меня у меня гораздо большее доверие, нежели другие.
Компания нанимает сотрудников по всему миру, давая возможность работать удалённо. Коммуникация между сотрудниками может проходить асинхронно в чатах.
Подготовка
Так как я уже являюсь пользователем их продукта, мне не пришлось узнавать подробности о деятельности компании. Почитал отзывы и информацию об интервью на Glassdoor, ничего очень полезного там для себя я не нашёл. Интервью отчётов по моей позиции почти не было.
Скрининг интервью
Первое интервью было типичным — скрининг с рекрутером. Этап проходил на английском языке. Мне задали вопросы о моём опыте в разработке, несколько простых вопросов про Go, а также спросили о готовности к тестовому заданию.
В конце этого этапа меня попросили прислать информацию о моей доступности на следующей неделе. На следующий день после скрининга я получил приглашение на первое техническое интервью.
Первое техническое интервью
Спустя неделю после скрининга был первый технический этап. Интервьюер был русскоговорящим и сам этап проходил на русском языке.
Этот этап мне очень понравился и стал одним из самых запоминающихся в моей карьере. Вместо стандартных вопросов разговор шёл более свободно, больше напоминая обмен мнениями и опытом.
Интервьюер интересовался моим техническим опытом и деятельностью в нынешней команде. Он поинтересовался, что конкретно входит в мои обязанности, что мне нравится в работе, какие инструменты и практики использую. Я рассказал в подробностях обо всём этом, это заняло около половины времени.
Затем мне была задана небольшая задача. Необходимо было спроектировать офлайн хранилище книг в библиотеке для быстрого поиска, выбрать структуру данных для хранилища и объяснить её. В процессе решения мы затронули некоторые технические внутренности языка Go. Это заняло чуть меньше оставшейся половины времени.
Оставшееся время было для моих вопросов, их было много. Я спрашивал про особенности работы, внутренние процессы и команду.
Тестовое задание
Спустя три дня после технического интервью я получил письмо об успешном прохождении предыдущего этапа. Мне необходимо было сообщить о готовности приступить к тестовому заданию, на выполнение которого отводилось 3 дня.
Задачей была разработка компонента для парсинга транзакций Ethereum с использованием Ethereum JSONRPC. Обязательным условием было отказаться от использования сторонних библиотек. В тексте задачи было указано, что ориентир времени 4 часа, само время не отслеживается, требований идеального выполнения нет.
На задачу я потратил больше времени, чем указано в рекомендации — около 6 часов. Примерно час ушёл на изучение документации Ethereum, а также на разработку архитектуры решения и определение модулей и зон ответственности в коде. Затем я потратил около 3 часов на написание основного кода и тестов, а последний час уделил множеству мелких доработок. Вдобавок, мой друг-коллега помог мне с ревью моего кода и предложил несколько идей и улучшений.
Итог тестового задания
Свой код с тестовым заданием я опубликовал на GitHub. Также, уже после отправки своего кода, я нашел ещё другие результаты тестового задания на GitHub от другого кандидата.
Ответ по тестовому заданию мне обещали дать в течение недели. В конце недели я напомнил о себе, но ответа не получил. В понедельник ранним утром я получил письмо со стандартным отказом: после тщательного рассмотрения их команда решила отклонить мою кандидатуру. Других подробностей и какого-либо фидбека не было. Я решил добиться более подробной обратной связи по тестовому заданию и написал письмо рекрутеру.
Спустя один день я получил письмо с фидбеком. Решение посчитали достаточно хорошим и подходящим для ряда задач, но искали более совершенный вариант. По версии проверяющего, в предоставленном мной решении были свои плюсы и минусы. Из достоинств:
- проверка подписанных адресов выполняется за O(1);
- передача контекста;
- внедрение зависимостей;
- тесты.
Из недостатков:
- сложная и неудобная в обслуживании реализация клиента JSON;
- управление ошибками неэффективно, отсутствует механизм обёртывания ошибок;
- использование синхронных карт и мьютекса для хранения данных, хотя достаточно было бы только мьютекса;
- отсутствие контроля за параллельной работой парсера;
- усложнение процесса с транзакциями в базе данных, что в реальных условиях, скорее всего, окажется неэффективным.
Итог
В целом, процесс интервью мне понравился, за исключением времени ответа и фидбека. Результат проверки тестового задания вызвал у меня скорее вопросы и несогласие. Некоторые из указанных недостатков, по моему мнению, являются субъективными и могли бы стать предметом дискуссии. Некоторые из недостатков были мне известны и указаны в TODO в README, т.к. их реализация требовала ещё времени. С оставшимися недостатками я полностью согласен и к ним притензий уже нет.
Итог прохождения собеседования я скорее отношу к удаче, т.к. за рекомендуемые 4 часа мне сложно представить, каким может быть совершенный вариант без использования сторонних библиотек.