Тестовое задание в Megaputer

Когда-то давно делал тестовое задание в Megaputer. Задание было таким:

Тестовое задание С++ программиста
1. Необходимо написать на чистом С++ класс, умеющий максимально быстро читать текстовые лог-файлы огромных размеров (около 20Mb в сутки, сотни суточных файлов) и выдавать строки, удовлетворяющие условиям простейшего regexp: (как минимум операторы * и ?, более широкий набор возможностей приветствуется). Символ ‘*’ — последовательность любых символов неограниченной длины. Символ «?» — один любой символ.
Должны корректно отрабатываться маски: *Some*, *Some, Some*, *****Some*** — не никаких ограничений на положение * в маске.
2. Класс не будет расширяться, и не будет базовым классом. Единственная задача: сканирование и поиска в файлах. Класс должен иметь следующий публичный интерфейс ((все остальное должно быть скрыто):

3. Требование к реализации:
— Платформа: только Windows (NT 4.0 и выше).
— Функциональность: максимальная производительность, кэширование
результатов поиска и файла не требуется.
— Ресурсы: затраты памяти должны быть минимальны.
— Компоненты: запрещено использование сторонних библиотек (в том числе STL) и компонентов. Разрешено использовать только WinAPI и CRT.
— Исключение: нельзя использовать Windows и С++ исключения (try, catch и т.д.).
— Оформление:
1. Код должен быть максимально простым.
2. Код должен быть максимально чистым, красивым и понятным (допустим, что класс выставляется на продажу за 1млн долларов).
3. Код должен быть абсолютно «неубиваемый» — защищённый о ошибок.
4. Результатом должен быть готовый класс (cpp + h файлы) и консольный пример (открыть текстовый файл в пару мегабайт и сделать выборку «order*closed») его использования. Файл и строка выбора должна указываться в аргументах примера.
5. Результатом должен быть образец работающего exе файла + проект для MSVS.
6. Дополнение: программа должна искать более сложные регулярные выражения, например,
ab*abc
в строке
abababca

В результате моих мытарств получилась вот такая программа:

 

 

Пример входного файла:

К сожалению, а может к счастью, само собеседование я тогда не прошёл. Сказали, что плохо C++ знаю. Но тестовое задание осталось.

 

https://github.com/urvanov-ru/megaputer — ссылка на проект на GitHub (поставьте звезду, пожалуйста).

Megaputer — тестовое задание — ZIP-архив с проектом Visual Studio 2010.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *