*Привет.* *Спасибо за интерес к вакансии С++ разработчика. В качестве первого этапа отбора предлагаю выполнить небольшое тестовое задание. Если мы друг другу подходим, у вас не должно возникнуть с ним серьезных затруднений.* *Успехов!* *СТО Wunder Fund Эмиль.* > Примерное время выполнения задания: **1-5 часов** ## Что делать От вас требуется написать сервер простейшего чата. Предполагается, что клиенты подключаются в этот чат, просто устанавливая tcp соединение с сервером (например, неткатом из консоли). Когда клиент отправил сообщение, это сообщение должно прийти всем, кто подключен на текущий момент, кроме него самого. Клиент не должен иметь возможности посылать больше 1 сообщения в секунду, посылать сообщения длиннее 180 символов или посылать сообщения с управляющими символами для терминала (смайлы и прочий юникод — можно). Клиент ни при каких обстоятельствах (плохая сеть, злонамеренный клиент и т.д.) не должен иметь возможности подвесить или уронить сервер. Для того, чтобы сервер поддерживал максимальное число клиентов, предпочтительно не создавать отдельный поток на каждого клиента, а использовать асинхронный ввод-вывод. Прочий функционал, такой как, ники, комнаты, историю, редактирование или удаление сообщений реализовывать не нужно. Удобную клиентскую программу (в частности, позволяющую вводить сообщения таким образом, чтобы приходящие сообщения не мешали написанию нового) тоже не надо делать. ## Как делать Можете выбирать язык на свое усмотрение из следующего списка: C++, Python, Golang. Список отсортирован в порядке предпочтительности выбора языка: Python лучше Go, а на C++ написать будет лучше всего. Мы будем рады, если код будет разумным образом разбит на классы/модули. Выделяйте те абстракции, выделить которые вам кажется логичным. Делать какие-то интерфейсы "на будущее" не нужно (по крайней мере, не усердствуйте в этом). Стремитесь сделать код максимально удобным для чтения. Во всех языках необходимо ограничится стандартной библиотекой, в том числе в случае C++ нельзя использовать boost. Стандарт C++ можете выбрать любой (но не меньше 11го). ## Что делать с решением Код нужно выложить на гитхабе или гитлабе, в публичном или приватном репозитории. Во втором случае надо дать доступ пользователю neex ([https://github.com/neex](https://github.com/neex) или [https://gitlab.com/neex](https://gitlab.com/neex) соответственно). Пожалуйста, напишите письмо на `join@wunderfund.io`, как будет готово, или если будут вопросы.