Public
Authored by Illya Klymov 🖥

Тестовое задание по Node.js - 2019

Это все не хорошо. Это все очень не хорошо... Кто же пишет систему управления атомной электростанцией с искусственным интеллектом, да еще и на Node.JS. Это явно не могло закончиться хорошо. Эта глупая машина возомнила себя чем-то божественным и заявила, что смертные не достойны управлять силой атома. Одному Math.random() известно, что она задумала, но мы знаем точно – её надо остановить как можно скорее.

Проблема в том, что доступ к пульту управления у нас уже потерян, а отключить электроэнергию, в лучших традициях Голливуда, не выйдет. Нет, не потому что главный рычаг охраняют огромные боевые человекоподобные роботы – их отключили, еще со времен того инцидента с приведением типов, - просто это атомная электростанция и энергия тут везде.

В общем ситуация такая – отключить чудо-машину можно только если энергия не подается ни в один из 4 районов нашего городка. Протоколы защиты, и прочее-прочее – никакой угрозы в этом нет, но заказчик так хотел, а мы теперь отдуваемся. За это отвечают 4 рычага, которые наша «Кейтлин» дергает хаотически каждую секунду – не то устраивает жителям дискотеку, не то мстит за то, что при предыдущем апгрейде ей не доставили обещанные 16 петабайт оперативной памяти. Но это наш шанс. У нас есть удаленный отладочный интерфейс, который почему-то забыли закомментировать «в продакшне». Еще никогда я не был так рад криворукости нашего отдела разработки. Этот интерфейс открыт по вебсокету ws://node-test-task.javascript.ninja. Он правда, почему-то тупит поначалу, но потом каждый раз когда «Кейтлин» дергает рычаги – в сокет сыпется уведомление такого формата

{
  "revision":93,
  "levers": {
    "lever1":"changed",
    "lever2":"no-change",
    "lever3":"changed",
    "lever4":"changed"
  }
}	

Рычаги пронумерованы от 1 до 4. Всё как у людей. revision – это номер записи в логе о новом состоянии. Отключить машину можно отправив по вебсокету команду "shutdown" (да, да, просто строкой, дался вам этот JSON) и если в данный момент все 4 рычага выключены ("down") - это отключит адскую машинку и пришлет сообщение {"link": "some-link", token: "..."}. Это и будет ссылкой на регистрацию на курс и токеном для регистрации.

Можно ли узнать текущее состояние рычагов? Да, банально GET-запросом на http://node-test-task.javascript.ninja. Он правда жутко тормозит, мы, знаете ли, очень серьезно подходим к безопасности

Присоединяйтесь. И успехов. Тик-так.

P.S.: автор - Илья Климов(illya@javascript.ninja). Задать вопросы вы можете задать в Telegram-канале

Edited
38 Bytes
  • А чет не понятно, в какой момент нужно shutdown посылать? Пробовал на каждый message отправлять, проверять статусы в этом message, ходить на ручку статусов, но во всех случаях получал 'Bad try'.

  • В задании неточность:

    если в данный момент все 4 рычага выключены ("down") - это отключит адскую машинку и пришлет сообщение

    Судя по всему имеется ввиду состояние "no-change". Но почему-то сразу 4 "no-change" значения никогда не приходят. "changed" - да (ответ "Bad try" и следует разрыв ws соединения), "no-change" - не вижу.

    Edited by Igor Kot
  • В задании нет неточности :) Вы путаете состояние рычага (up/down) и событие изменения состояния (change/no-change). Поэтому вы никогда и не увидите 4 no-change - смысл присылать состояние если ничего не поменялось

  • Спасибо, задание выполняется

  • Спасибо за задание. Обязательно пройду ваш курс.

  • Интересное задание, заставляет включить мозги. Ссылку получили, но на текущий момент начать обучение на курсе не позволяет время.

  • Тестовые задания у Ильи супер!)

  • Отличное тестовое!

  • Пока отлаживал скрипт, несколько раз случайно отключил Кейтлин — рычаги частенько оказываются в нужном положении. Она могла бы присылать в уведомлении еще и токен, необходимый для отключения адской машины, действительный до следующего рывка рычагов.

  • Круто! Илья спасибо за подсказку)). Вначале думал совсем легко будет. Только в ссылке нет никакой формы(

Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment