Skip to content

Allfred/VeeamTestTask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VeeamTestTask

Разработать консольное приложение на C# для поблочного сжатия и распаковки файлов с помощью System.IO.Compression.GzipStream.

Для сжатия исходный файл делится на блоки одинакового размера, например, в 1 мегабайт. Каждый блок сжимается и записывается в выходной файл независимо от остальных блоков.

Программа должна эффективно распараллеливать и синхронизировать обработку блоков в многопроцессорной среде и уметь обрабатывать файлы, размер которых превышает объем доступной оперативной памяти.

В случае исключительных ситуаций необходимо проинформировать пользователя понятным сообщением, позволяющим пользователю исправить возникшую проблему, в частности, если проблемы связаны с ограничениями операционной системы. При работе с потоками допускается использовать только базовые классы и объекты синхронизации (Thread, Manual/AutoResetEvent, Monitor, Semaphor, Mutex) и не допускается использовать async/await, ThreadPool, BackgroundWorker, TPL. Код программы должен соответствовать принципам ООП и ООД (читаемость, разбиение на классы и т.д.).

Параметры программы, имена исходного и результирующего файлов должны задаваться в командной строке следующим образом: GZipTest.exe compress/decompress [имя исходного файла] [имя результирующего файла] В случае успеха программа должна возвращать 0, при ошибке возвращать 1.

Примечание: формат архива остаётся на усмотрение автора, и не имеет значения для оценки качества тестового, в частности соответствие формату GZIP опционально.

Исходники необходимо прислать вместе с проектом Visual Studio.

В продолжение нашего разговора отправляю Вам тестовое задание (во вложениях). Время решения мы не ограничиваем, критерии оценки (помимо качества кода и реализации многопоточности) Вы можете видеть ниже:

1.Работоспособность – проверяется на тестовых файлах с размерами от 0 до 32 Gb

2.Правильность выбора алгоритма с точки зрения эффективности – должен быть максимально загружен самый слабый компонент системы (диск/процессор)

3.Знание и умение использовать примитивы синхронизации – должны быть правильно выбраны примитивы для синхронизации потоков, доступа к данным

4.Проработка архитектуры – есть разбиение на классы по принципам ООП и ООД, не должно быть лишних классов, интерфейсов, методов и т.д.

5.Читабельность и понятность кода – код должен быть простым, аккуратным; алгоритм программы должен быть понятен без отладки

6.Грамотная обработка ошибок и нестандартных ситуаций – должна выводиться диагностическая информация, по которой должно быть понятно, что произошло, без отладки программы

7.Правильное управления ресурсами – не должно быть утечек неуправляемых ресурсов, а также наличие своевременного уничтожения управляемых ресурсов.

About

Разработать консольное приложение на C# для поблочного сжатия и распаковки файлов с помощью System.IO.Compression.GzipStream.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages