Re: попинайте реализацию тестового задания
От: Centaur Россия  
Дата: 16.08.12 17:25
Оценка: +1
Здравствуйте, developer201208, Вы писали:

D>PART 2: Perl


D>Please write a Perl script that will check a log file and count how many

D>times a pattern appears within hh hours.
D>For example...

D>checklog.pl /home/saag/mylog.txt "created '\w[1-10]$" 48


D>/* 
D>The algorithm of parsing is written with use of the following considerations:
D>- log files may be very large, up to several gygabytes;
…
D>- the distribution of timestamps is regular over the whole file;
D>- the distribution of lengths of records in the log file is regular over the whole file

D>            if (!@copy ($filePath, $tmpFilePath)) throw new CException ("Failed to create a temporary copy of the file.");

D>    // this method searches the record with a required timestamp by "breaking" into 2 parts the remaining analyzed part of the 
D>    // file and moving a pointer forward and back - it should work rather quickly even for very large files;


Вы исходите из неверных предположений, и вдобавок пишете код, который не будет работать в случае, если ваши предположения окажутся верными.

Во-первых, Ни Один порядочный администратор не позволит логам разрастаться до таких размеров, что по ним будет нужен двоичный поиск. Еженедельная, ежедневная, если надо — ежечасная ротация. В задаче требовался тупой и элементарный полный построчный перебор.

Во-вторых, если вы предполагаете, что файл Очень Большой, вплоть до Нескольких Гыгабайт, то вы ни в коем случае не имеете права его копировать целиком. Хотя бы потому, что тупой построчный перебор — это O(N), а копирование и двоичный поиск по копии — O(N) + O(log N) + O(n). Не говоря уже о требованиях по пространству.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.