English ·   Russian
Пост

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 часа мне сложно представить, каким может быть совершенный вариант без использования сторонних библиотек.

Авторский пост защищен лицензией CC BY 4.0 .

Популярные теги