Тестовые задания по C#
Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио
AFCStudio • Лёгкая сложность
Тестовое задание по C# от компании AFCStudio
C# junior backend / Full-stack AFCStudio Стек технологий: Бэкенд: C#, .net core 5+ Архитектура: cqrs База данных: mssql/postgres Доп задание по фронту: без разницы (angular react razor etc) Задание Необходимо написать сервис, позволяющий создавать и редактировать сотрудников организации. Сотрудники должны иметь должность, на основе которой рассчитывается их заработная плата. Помимо CRUD-запросов должен присутствовать пагинированный запрос, включающий поле для сортировки, поле для фильтрации (по ФИО-сотрудника или должности). Задание на знание БД. Написать и приложить скрипты для: выборки всех сотрудников, сотрудников у кого зп выше 10000, удаления сотрудников старше 70 лет, обновить зп до 15000 тем сотрудникам, у которых она меньше. Доп задание (выполнять по желанию): необходимо написать сайт с горизонтальным навигационным меню, состоящим из двух вкладок: ● “О компании” (стартовая страница) ● “Сотрудники” На первой вкладке использовать произвольную верстку. При переходе на вкладку «сотрудники» должна появляться таблица, состоящая из колонок: ● “Отдел” ● “Ф.И.О” ● “Дата рождения” ● “Дата устройства на работу” ● “Заработная плата” ● “Создание/удаление/редактирование сотрудника” В колонке “Создание/удаление/редактирование сотрудника” хедер должен быть пустой, в теле - три кнопки. При нажатии на кнопки “Создать” и “Редактировать” - открывается модальное окно с полями сотрудника, при нажатии на кнопку удалить - показывается модальное окно с подтверждением. Все действия должны выполняться асинхронно т.е. без перезагрузки страницы.
NAUKA • Лёгкая сложность
Тестовое задание по C# от компании NAUKA
Необходимо разработать приложение, позволяющее управлять учетными данными сотрудников (создавать, редактировать, просматривать список и детали, удалять). Функциональные требования к веб-приложению: 1. Поддержка операций управления (создания, чтения, редактирования и удаления) данными сотрудников. Данные сотрудника определяется следующими значениями: Имя; Фамилия; Отчество; Дата рождения; Адрес проживания; Отдел; Поле ввода “О себе”. 2. Наличие пользовательского интерфейса, реализованного c использованием WinForms. Нефункциональные требования: Система хранения данных: любая СУБД; Код приложения необходимо снабдить комментариями; Приложение должно собираться без установки или настройки каких- либо дополнительных компонент; Архив с результатом тестового задания должен содержать текстовый файл readme.txt с инструкцией по настройке и конфигурированию приложения (если необходимо).
СКБ Контур • Высокая сложность
Тестовое задание по 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 из проекта с шаблоном.
СКБ Контур • Высокая сложность
Тестовое задание по C# от компании СКБ Контур
Тестовая задача “Ханаби” В этой задаче на объектно-ориентированное проектирование нужно создать систему классов, моделирующую карточную игру. Правила игры Мы используем упрощенные правила игры Ханаби. Они отличаются от стандартных. Два участника играют специальными картами. У каждой карты есть цвет (красный, зеленый, синий, желтый и белый) и достоинство (от 1 до 5). На вход программе подается список карт колоды. В колоде есть как минимум 11 карт. Первые 5 карт достаются первому игроку. Вторые 5 карт — второму. Начало новой игры описывается такой входной строкой: Start new game with deck R1 G2 B3 W4 Y5 R1 R1 B1 B2 W1 W2 W1 Эта игра начнется со следующими картами: Первый игрок: R1 G2 B3 W4 Y5 (красная единица, зеленая двойка и т.д) Второй игрок: R1 R1 B1 B2 W1 Верхняя карта колоды после такой раздачи — W2 (белая двойка) Игра кооперативная и задача у игроков общая — выложить на стол как можно больше карт, пока игра не закончилась. Игроки держат карты рубашками к себе, то есть не видят своих карт, но видят чужие. Игроки не знают ни состав колоды, ни порядок карт в колоде. Игроки ходят по очереди и пропускать ход нельзя. Ход — это одно из четырех действий: 1. Разыграть карту. Игрок выбирает одну из своих карт и кладет на стол. Играть можно только карту, которой еще нет на столе. При этом достоинство карты должно быть единицей или на столе уже должна быть карта того же цвета, но на единицу меньшего достоинства. То есть разыгранная карта должна продолжать возрастающую последовательность одного цвета или начинать последовательность нового цвета. Сыгранная карта удаляется из руки и помещается на стол. Игрок добирает карту из колоды себе в руку, в конец списка карт. Если корректно сыграть карту нельзя, то карта помещается в сброс, а игра немедленно завершается. Пример: Play card 0 — текущий игрок выкладывает первую карту Если игроку достоверно не известно, можно ли сыграть карту корректно, но он все же успешно разыгрывает эту карту, то ход считается рискованным. В этой задаче рискованными называются только такие ходы. 2. Сбросить карту. Игрок выбирает одну из своих карт, помещает её в сброс и добирает одну карту из колоды себе в руку. Пример: Drop card 4 — текущий игрок сбрасывает последнюю карту из руки 3. Подсказать цвет. Игрок называет один из цветов и указывает на все карты этого цвета в чужой руке. Цвет, которого нет в чужой руке, называть нельзя. Пример: Tell color Red for cards 0 1 2 3 4 — текущий игрок сообщает другому игроку, что у него все карты красные 4. Подсказать достоинство. Игрок называет достоинство и указывает на все карты этого достоинства в чужой руке. Достоинство, которого нет в чужой руке называть нельзя. Пример: Tell rank 1 for cards 2 4 — текущий игрок сообщает, что у другого игрока в руке вторая и четвертая карты (нумерация с нуля) — единицы. Игра завершается в трех случаях: 1. Когда колода заканчивается. То есть, последняя карта колоды никогда не играет. 2. Когда на столе 25 карт. То есть, когда больше ни одну карту выложить нельзя. 3. Когда один из игроков делает некорректный ход: разыгрывает некорректную карту или сообщает другому игроку ложную или неполную информацию о его картах. Все ходы после завершения игры нужно игнорировать. Постановка задачи Программе будут вводить через консоль описание игр одна за другой. Для каждой завершенной игры из входных данных программа должна вывести одну строку, содержащую номер хода, на котором игра завершилась, количество корректно сыгранных карт, а также количество успешных рискованных ходов.
без ограничений.
Чтобы получить полный доступ,
вам необходимо зарегистрироваться.