Тестовые задания по C#

Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио

стэк>
Компания>
Сложность>

СКБ Контур • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по C# от компании СКБ Контур

ImageTransformer Нужно написать сервис, решающий такую задачу. По HTTP приходит запрос, содержащий картинку в формате png, координаты прямоугольной области и тип преобразования. Надо применить к картинке преобразование, вырезать фрагмент, соответствующий заданной области, и отправить в ответ. Вопросы по заданию можно задавать здесь: https://t.me/joinchat/A3Kxg0zr49r5YbnfHpIT0A Требования к решению Ожидается, что ваш сервис будет подвергаться большой нагрузке. Поэтому он, конечно же, должен работать максимально быстро. Чем быстрее обрабатывается каждый запрос — тем лучше. Чем больше запросов в секунду обрабатывается — тем лучше. Но у любой производительности есть предел, и ваш сервис должен быть готов столкнуться с нагрузкой, превышающей его возможности. Требования к стабильности под экстремальной нагрузкой: 1. Если нагрузка превышает возможности сервиса — производительность не должна деградировать. То есть, если сервис способен обработать максимум X rps, при нагрузке X * 2 rps сервис должен всё ещё обрабатывать не меньше X rps. Запросы, до которых очередь дойдет не скоро, можно сразу отклонять с ошибкой. 2. Производительность сервиса не должна деградировать со временем. Если сервис круглосуточно работает под нагрузкой без перезапусков, никакие ресурсы не должны закончиться и пропускная способность не должна уменьшиться. 3. Клиенты не должны замечать кратковременные задержки в работе сервиса. Если случилась пауза из-за GC, или ещё по какой-то причине сервис короткое время не обрабатывал запросы, клиенты не должны получить ошибок, если пауза действительно была небольшая. Известно, что сервис будет запущен на виртуальной машине с 8 GB оперативной памяти и 8 ядрами процессора. Операционная система — 64-битная Windows Server 2016. Реализация Сервис должен представлять собой self-hosted веб-сервер, написанный на C# под .NET 4.6.2. Можно использовать вот этот шаблон проекта: https://github.com/DQKrait/Kontur.ImageTransformer

СКБ Контур • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по C# от компании СКБ Контур

Задание Напишите сервер статистики для многопользовательской игры-шутера. Матчи этой игры проходят на разных серверах, и задача сервера статистики — строить общую картину по результатам матчей со всех серверов. Сервер должен представлять собой standalone-приложение, реализующее описанный ниже RESTful API. Общая схема работы такая: игровые сервера анонсируют себя advertise-запросами, затем присылают результаты каждого завершенного матча. Сервер статистики аккумулирует разную статистику по результатам матчей и отдает её по запросам (статистика по серверу, статистика по игроку, топ игроков и т.д.). Нельзя​​использовать​​.NET​​Core. Требования к решению ● Сервер должен реализовывать описанное выше API. ● Сервер должен поддерживать работу на произвольном HTTP-префиксе (задается при запуске). ● Сервер не должен терять данные при перезапуске. Если на PUT-запрос сервер вернул 200 OK, данные не должны быть потеряны даже в случае аварийного завершения приложения. Допустима потеря данных при внезапном выключении хоста. Для​​хранения​​данных​​можно​​использовать​​как​​собственное​​решение,​​так​​и готовую​​embedded-базу​​данных.​​В​​качестве​​БД​​не​​рекомендуется использовать​​MSSQL​​LocalDB. ● Сервер не должен падать при получении некорректных запросов. На такие запросы нужно отправлять ответ с кодом, отличным от 200 OK. Допустимы любые коды вида 4xx и 5xx. ● Сервер должен быстро обслуживать все виды запросов. ● Сервер должен уметь логировать ошибки. ● Код должен быть покрыт тестами. ● Код должен быть написан аккуратно и с любовью к деталям. Оформление решения ● Все внешние модули, от которых зависит решение, должны содержаться в папке с решением. Также допускаются зависимости от nuget-модулей. ● Решение должно успешно собираться с помощью msbuild: nuget restore && msbuild /p:Configuration=Release. В результате сборки папка Kontur.GameStats.Server/bin/Release внутри папки с решением должна содержать всё необходимое для работы приложения. ● Сервер должен запускаться из папки bin/Release следующим образом: Kontur.GameStats.Server.exe --prefix http://+:8080/, где вместо http://+:8080/ может быть любой UrlPrefix. ● Можно использовать в качестве заготовки проект из репозитория на гитхабе: https://github.com/DQKrait/Kontur.GameStats

Waliot • Лёгкая сложность

Лёгкий уровень сложности - 1 звезда

Тестовое задание по C# от компании Waliot

Сервис геокодирования 🗺️ Тестовое задание на позицию backend разработчика. Задача Необходимо разработать приложение с возможностью прямого и обратного геокодирования (из координат в адрес и наоборот). Не требуется разворачивать собственную базу данных с адресами, достаточно использовать сторонние API (Google, Яндекс, другое). Таким образом приложение является кэширующим прокси-сервисом для стороннего сервиса геокодирования. Приложение должно предоставлять API с JSON форматом данных. Требования Java / Kotlin Spring Boot Кэширование результатов запросов. В качестве кэша можно использовать SQL базу данных (MySQL, Postgres, другое), либо NoSQL решение (Memcached, Redis, другое). Логирование ошибок и работы приложения в целом. Покрытие тестами базовой функциональности. Дополнительно (будет преимуществом) Метрики работы приложения (Actuator, Dropwizard, другое). Сборка и запуск приложения в Docker. Решение Решение должно быть представлено публичным репозиторием или zip-архивом. В проекте необходимо добавить readme с инструкцией по запуску приложения. Результат решения (ссылку на репозиторий или zip-архив) следует отправить на почту по адресу: gehrman.i@firstmk.ru. Удачи! <3

СКБ Контур • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по C# от компании СКБ Контур

Задача. Архиватор логов Неотъемлемая часть любого промышленного приложения — это его логи. Туда попадают записи о всех важных событиях в жизни приложения, например ошибках, скорости и результатах выполнения пользовательских запросов. Зачастую чтение логов — единственный способ разобраться с внезапно возникшей в продакшене неведомой проблемой, или посчитать какую-то статистику о работе приложения. За день приложение под хорошей нагрузкой может генерировать десятки гигабайт логов. Все эти логи хочется хранить вечно, а значит, их надо сжимать. Обычно для этих целей используются алгоритмы сжатия общего назначения — например, gzip. Но можно ли сжимать лучше? Наверное да — ведь логи имеют специфичный формат записей и множество повторяющихся элементов. Ваша задача — продемонстрировать, что это возможно. Задача Разработать приложение для архивации логов в заданном формате (см. конец этого документа). Это должно быть консольное приложение, имеющее два режима работы: сжатие и разжатие. При запуске с двумя аргументами приложение должно запускаться в режиме сжатия: dotnet LogPacker.dll <input_file> <output_file> Первый аргумент задает путь до исходного лог-файла. Второй аргумент задает путь до файла, куда вы запишете сжатые данные. При запуске с тремя аргументами, где первый равен -d, приложение должно запускаться в режиме разжатия: dotnet Kontur.LogPacker.dll -d <input_file> <output_file> Здесь второй аргумент задает путь до сжатого файла, сформированного вашим приложением, а третий аргумент — путь до разжатого файла. Требования и ограничения Внимание! Чтобы соблюсти все базовые требования к решению, рекомендуем воспользоваться шаблоном: https://github.com/DQKrait/Kontur.LogPacker/tree/master Там также есть набор простейших тестов и утилита для запаковки решения в архив перед отправкой на проверку. Внимание! Для выполнения задания вам понадобится .NET Core SDK 2.1 и среда разработки Visual Studio 2017 или JetBrains Rider. Пробную версию JetBrains Rider можно скачать тут: https://www.jetbrains.com/rider/ Функциональные требования: После цикла сжатие-разжатие файл должен быть побайтово равен исходному. Алгоритм должен корректно работать на логах, где строки имеют другой формат, а также на данных, вообще не являющихся логами (в общем случае это просто случайные бинарные данные). Требований по качеству сжатия в таком случае нет, но требования по скорости сжатия сохраняются. Качество сжатия: на произвольных лог-файлах заданного формата размер сжатых данных должен быть меньше, чем при использовании gzip (здесь и далее имеется в виду стандартная реализация из .NET Core: GZipStream с CompressionLevel.Optimal). Ваш архиватор должен выигрывать хотя бы 1 процентный пункт (если gzip сжимает файл до 25% исходного размера, у вас должно получаться 24% или ещё меньше). Скорость сжатия: на любых данных время работы вашего алгоритма не должно превышать время работы gzip более чем в два раза. Аналогично со скоростью разжатия. Потребление оперативной памяти: объем потребляемой оперативной памяти не должен зависеть от размера входных данных и на любых входных данных не должен выходить за разумные пределы (100-200 МБ). Загрузка процессора: архивация логов не должна мешать другим работающим на машине приложениям. Поэтому ваш архиватор должен работать в один поток. Решение может создавать временные файлы, но их суммарный размер не должен превышать размер входного файла, и они должны удаляться до завершения процесса архиватора. Все временные файлы должны находиться в рабочей директории приложения (т. е. если вы будете указывать только имя файла, без директории, всё сработает как надо). Требования к оформлению: Решение должно представлять собой консольное приложение на .NET Core 2.1. Нельзя использовать внешние библиотеки и приложения, как из nuget, так и подключаемые вручную. Решение должно быть запаковано в zip-архив с фиксированной структурой папок. Чтобы не ошибиться, рекомендуем воспользоваться утилитой Kontur.LogPacker.SubmitHelper из проекта с шаблоном.

Получите доступ более чем к 500 тестовым заданиям
Сервис можно использовать бесплатно,
без ограничений. Чтобы получить полный доступ,
вам необходимо зарегистрироваться.
где найти тестовые задания для практики
пример тестового задания junior
тестовые задания для junior csharp
практические задачи по csharp
решение тестового задания csharp