Рубрика: задачи, которые не дают на собесах.
❓ Вот вам задача: Есть сайт, на котором люди пишут код на C#, решая заданные алгоритмические задачи. Ваша задача, компилировать этот код на сервере, запускать на нем тесты и выдавать результат компиляции и прогона тестов. Как вы будете это делать? Как будете хранить условия задач? Как будете проверят результат выполнения?
➕ Ответили? Немного усложним задачу: что, если появился еще один язык программирования? Как будете строить архитектуру такого решения?
🗣 Я, как матерый веб-программист, конечно взял бы шину данных, поднял бы инстансы с компиляторами, которые принимают сырой код, передают его в нужный компилятор-запускатор и возвращают результат ну и так бы и расширял. Надо новый компилятор, просто добавляем новый адаптер и все. Сами задачки хранил бы в базе данных, вместе с юнит-тестами для них.
😵💫 Но ребята из Хекслета сделали все грациознее, показав, кто тут батя, и, где раки зимуют:
1. Они сохраняют файлы с кодом на сервак, как есть.
2. Потом эту папку подтягивает к докер-образу, в котором лежит компилятор, рантайм и прочее. Также там внутри лежат юнит тесты, которые проверяют решение
3. Докер-образ запускает все вышеозначенное на пользовательской папке и выдает ответ!
4. Сами задачи хранятся в обычном гитхаб-репозитории (вот в этом https://github.com/hexlet-basics), что избавляет нас от необходимости вообще создавать админку для менеджмента задач для платформы!
🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥О-ХУ-ЕТЬ! 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
Вот как можно было такое придумать? Бывалые может скажут: "Ну и что тут такого?" А я просто испытаю радость неофита при виде такого решения!
Вот тут есть статья Жени Васильева, нашего супер-техлида, из которой я достал эту информацию: https://habr.com/ru/company/hexlet/blog/652773/
Ну и, разумеется, ссылка на сорцы
https://github.com/hexlet-basics/hexlet-basics/tree/b32b228be35bed12615553515b1df05195d88e4b
Post #28
56