Рубрики
Без рубрики

Мой опыт с мутантным вызовом Mercadolibre

В рамках процесса выбора разработчика я сделал для мутантной задачи Mercadolibre. Я говорю здесь мой опыт и мое отражение. Помечено Мели, Меркадолибру, Backend, Python.

Техническое интервью состоит из разработки API, чтобы Магнито мог набирать мутантов. API получает массив слов, которые представляют ДНК человека. Если 4 равные буквы (A, T, G, C) были обнаружены, то была обнаружена мутация.

Проблема была много целей, но несколько раз (не более 30 часов), чтобы сделать это: хорошо!

Цели

Явные требования.

  • Эффективен: вы должны обнаружить, если человек мутант или нет
  • Эффективно: сделать алгоритм, который может поддерживать миллион запросов в секунду
  • Время: Сделайте это не более недели. Подумайте, что я должен сделать это после работы, поэтому он должен быть сделан в течение 30 часов.
  • Тестирование покрытия> 80%

Общие требования.

  • Человеческий читаемый код: напишите чистый код с помощью передовой практики, комментарий при необходимости и т. Д.
  • Используйте облачные рамки: AWS, Google, Heroku
  • Нагружать в Github
  • Сделать readme и Дополнительная документация

Перед кодированием

Я начал читать PDF и думать о том, какая структура должна быть (ранняя верна, максимальная длина, Regex?) И фреймворк для использования, Wher Spring или Python Flask. Как загрузка проекта в GitHub было требованием, я ищу такие проекты и царапин идей. Всегда учитывая, что у меня есть несколько раз, чтобы сделать это и надо приоритетировать мою «программу должен быть» списком.

Выберите каркас: Java или Python?

Java и Python – это две рамки, с которыми я знаком, больше с Python, чем Java. Java Spring – это хороший выбор, поскольку многие веб-проекты сделаны с ним и обладают неоспоримым зрелом. В поисках в проектах я понял, что проект был сделан с Python, поэтому я сделал выбор. Почему python? Поскольку я работал в основном с Python, я чувствую себя комфортно с ним (o, я к нему привык), потому что является быстрой кодированием и имеет приемлемую производительность. Я знаю, что он используется для больших данных и наук. Python также более «гибкий», чем Java. Еще один разум для того, что я выбираю Heroku для облачного сервера, потому что это быстро создать приложение. На данный момент не требуется никаких оснований DB-упорства.

Больше нет мыслей: начните кодировать: D

  • Раннее возвращение. Это не было явным требованием, но я считал необходимым. На мой взгляд, вы можете сделать эффективный алгоритм, избегая обозначений O (n ^ n), встроенных петель, нанесение машинного обучения (нет времени для их изучения). Однако есть классический человек, который всегда присутствует: плохой вход. Так что раннее возвращение очень важно. Функция, которую она должна определять плохие записи, поскольку слова, не пустые и имеют буквы ДНК (A, T, G, C), матрица имеет правильный порядок (NXN). Я должен проверить, имеет ли матрица более X заказа? Оформление 1000N может заставить систему разрушаться (наконец, у меня не было информации о том). Другое дело, что менее 1% людей являются мутантными, а> 99% не мутантны, поэтому возможно, что API можно получить в основном человеком. Какая жаль, я не мог раннее обнаружить, если это человек, пока я не обнаружил раньше, не является мутангом. Наконец, если я обнаруживаю, это мутант, сломайте петлю.
  • Проверка слова Mutant: Regex, список символов в словом, двоичном поиску или древесных структурах, методах поиска AI. Я считаю, что Regex более гибкая и хорошая практика, которая жесткокодирует список возможных слов (AAAA, CCCC, TTTT, GGGG). Я понял, что не ожидается, что они не смогли найти другое письмо для мутантной ДНК или другой последовательности (например, Tata): не требуется гибкого, просто эффективно. Нет времени для последних методов. Итак, я выбираю для жесткокодирования 4 последовательностей в пределах, если.
  • Чтение матричных стратегий: в проектах я обнаружил, что на прочитанные матрицы было 3 стратегии. Слева направо для каждого ряда. Снизу вверх, для каждого столбца. И каждая диагональ. Для этого мне нужно сломать матрицу в массивах символов, поэтому он добавил комплекс к алгоритму. Так что, я решил иметь веру и сначала проверять матрицу горизонтально. Если мне повезло, я мог бы обнаружить мутант в рядах. Если нет, проверьте в столбцах. Наконец, если это необходимо, сломайте матрицу в массивах CHAR, чтобы можно было проверить диагонали. Другими словами, начните с простого сценария и оставьте сложные до конца.
  • Сохранить результат для повторяющихся записей. Это связано с ранним возвратом. Подумайте, если человек настаивает на проверке снова (плохо умышленно или нет), что могло бы отлетные ресурсы. Поэтому я считаю хорошей практикой, чтобы сохранить результат для записи. Я использовал Redis для этого. Это стоит намного меньше, чем переработка матрицы ДНК.
  • Уведомить результат пользователю? Как достигая первой версии, я понял, если бы был хороший выбор, чтобы уведомить человека, если это ложный результат. Рекремент был возвращен 200, если были мутантным и 403, если были человеком. Во-первых, 200 означает, что сервер может обработать запросы и 403 – это запрещенный доступ; Для API-REST 403 можно интерпретировать как ошибку доступа. Я думаю, что он должен ответить на 200 в обоих случаях. Во-вторых, иногда не приятно давать дополнительную информацию пользователю, программа предназначалась для навлечения мутантов. Потому что, если бы моя интерпретация ситуации, я прошу Mercadolibre рекрутеры об этом. Они ответили, что делают то, что я чувствую. Поэтому я держу доказательство: 200, если мутант, 403, если человек

После кодирования

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

Еще одна вещь, которую я должен был разобраться, использует Heroku, поблагодарить доброжелательность не была большой проблемой, но я взял меня 6 часов (2 дня).

Делать

Я действительно хотел сделать лучшую программу, но было мало времени для интервью.

  • Работа с трансформацией алгебры на матрице: обратная матрица, транспонирование и т. Д.
  • Поиск методов, таких как двоичный поиск, дерево, методы AI …
  • Используйте немного балансировщика нагрузки, как Nginx

Что я выучил

Тестовый код важнее, чем я знал. Выберите хорошую рамку, с которой вам удобно, это хорошее решение. Напишите свой опыт и поделитесь! Я начал проект, увидев другие проекты и сэкономить меня много времени.

Мой код расположен https://github.com/alesisjoan/meli-mutant

Надеюсь, это помогло тебе.

Оригинал: “https://dev.to/alesisjoan/my-experience-with-mercadolibre-s-mutant-challenge-52n4”