Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Работа Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
 Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Добрый день, Господа, Дамы!
Тема, конечно же не раз поднималась в ветках, но я хочу услышать ваше мнение о частном случае.
Итак, я - программист со стажем (~18лет на С++, в основном под Windows) в настоящее время столкнулся с поиском работы.
В отдном хорошем месте я проходил собеседование и, так всё было прекрасно - распрекрасно, я и мой опыт были поняты и приняты, впечатления были положительными, что после всего мне было предложено пойти на второй тур собеседования, но необходимо было выполнить коротенькое тестовое заданьеце. Предвидя праведный шквал мнений о том, что не нужно выполнять тестовые задания, выскажу свое скромное суждение, что да, наверное не нужно выполнять тестовые задания, если Вы не хотите утроиться на работу и, обратно - нужно выполнять тестовые задания если хотите получить офер. Извините.

Ну, да ладно, я отвлекся, собственно вот текст задания.


Задача: На вход подаются несколько папок с файлами. Нужно разделить содержимое файлов на блоки по 8 байт и для каждого уникального содержания блока вывести количество вхождений и имена файлов, в которых было обнаружено вхождение.
Пример:
На входе:
Input\
File1.bin [FFFA00BA FFFA00B1 FFFA00B1 FFFA00B2]
File2.bin [FFFA00B2 FFFA00B1 FFFA00B1 FFFA00B2]

На выходе:
FFFA00BA FFFA00B1 1 [File1.bin]
FFFA00B1 FFFA00B2 2 [File1.bin, File2.bin]
FFFA00B2 FFFA00B1 1 [File2.bin]

Требования к реализации
Решение должно состоять из двух процессов. Первый процесс загружает данные и передает их во второй процесс, который выполняет анализ данных и выводит результат в консоль. Передача и обработка содержимого каждого файла должна идти отдельным потоком. Пути к папкам входными файлами передаются в качестве параметров первого процесса. Канал взаимодействия между процессами может быть любым.
Не использовать сторонние (не MS библиотеки), предпочтительно использовать только WinAPI и STL.
Использовать только базовый С++ (не С++11 и пр.).

Пример использования:
Первый процесс реализует приложение loader.exe, второй процесс analyzer.exe
1. Запускаем analyzer.exe. Открывается консоль, приложение ждет сигнала.
2. Запускаем loader.exe c:\data\folder1 c:\data\folder2.
3. В консоли analyzer.exe выводится таблица с результатами анализа файлов.




...Продолжу. И что!? Спросите Вы, благородные сеньёры и, будете правы. Ниже я сформулирую вопросы на кототые я хотел бы получить ответы:

1 Где в этом задании выставлены акценты ?
2 Сколько времени нужно, чтобы выполнить такое задание ?
3 Какой именно набор из WinAPI и из STL Вы используете для решения этой задачи ?
4 Какие в этом задании есть нюансы и подводные камни, нужно ли их учтывать при решении этой задачи?


Да, вот ещё что. Пусть вам не кажется, что это с моей стороны хитрый способ рещить эту задачу за Ваш счет, я уже решил её, прошел второй этап интервью, как я её решил, какой результат получил, и что это за компания я, если это интересно, напишу позже, пусть сохранится интрига а, пока, о благородные сеньёры и дамы, жду от вас мнений, высказывайтесь!
29 янв 18, 16:02    [21147711]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
scf
Member

Откуда:
Сообщений: 1445
Ну, простенько и со вкусом. Кроме этого:
> Передача и обработка содержимого каждого файла должна идти отдельным потоком.

Заведомо плохое архитектурое решение для этой задачи.
29 янв 18, 16:17    [21147805]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
scf,


Согласен. Но здесь не об архитекрутном решении идет речь.
Ещё мнения, господа, не стесняйтесь.
29 янв 18, 16:23    [21147846]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8106
Eugene Gri

1 Где в этом задании выставлены акценты ?

Существует точка зрения, что "акценты" в тестовом задании не нужны и даже вредны, поскольку требуется чтобы человек не подлаживался под "акценты", а демонстрировал собственный стиль и собственные решения, а проверяющие уж определят, подходят им такие стиль и решения или нет. Не то чтобы я ее разделяю - но она имеет право на существование.
Eugene Gri
4 Какие в этом задании есть нюансы и подводные камни, нужно ли их учтывать при решении этой задачи?

Нюансы и подводные камни в любом тестовом задании учитывать, конечно, нужно(с) Кэп
29 янв 18, 16:41    [21147955]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45451

Eugene Gri
1 Где в этом задании выставлены акценты ?

Многопоточность, IPC и, соответственно, синхронизация этого зоопарка. Возможно -
способность работать с потенциально большими данными.

Eugene Gri
2 Сколько времени нужно, чтобы выполнить такое задание ?

Лично у меня это заняло бы не менее дня, а то и двух.

Eugene Gri
3 Какой именно набор из WinAPI и из STL Вы используете для решения этой
задачи ?

Зависит от того каким способом мне придёт в голову сделать IPC. Для MMF - один набор. Для
TCP - другой. Ну и по-любому _beginthread(), CreateEvent() и т.п.

Eugene Gri
4 Какие в этом задании есть нюансы и подводные камни, нужно ли их
учтывать при решении этой задачи?

Сочетаний может быть много. Очень много. Настолько много, что полная таблица счётчиков не
влезет в ОЗУ (и не факт, что поместится на диске). Ну и, конечно, вопрос "что делать если
размер файла не кратен 8".

Posted via ActualForum NNTP Server 1.5

29 янв 18, 16:53    [21148022]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Уважаемый Кот Матроскин,

Я скажу, что совсем наоборот, "акценты" всегда нужно правильно понимать и, тем более учитывать, это как раз показывает работодателю, что претендент правильно понимает задание и старается в своём решении соответствовать этим акцентам, иначе претендент пойдет по неправильному пути. Это как сочинение в школе, есть основная тема, есть план, если Вы отклоняетесь от темы, не раскрываете её, то даже при отсутствии ошибок, получите неуд.
29 янв 18, 16:53    [21148026]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Уважаемый Dimitry Sibiryakov,
Благодарю за ответ, ваши слова наиболее всего пока соответствуют моим вопросам
29 янв 18, 16:57    [21148037]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Dimitry Sibiryakov,

Если размер файла не кратен 8, то на этот чсёт нет в задании четкой инструкции, то есть можно варьировать решением по своему усмотрению
29 янв 18, 16:59    [21148046]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8106
Eugene Gri
Я скажу, что совсем наоборот, "акценты" всегда нужно правильно понимать и, тем более учитывать

Еще раз - есть такая точка зрения/методика. У этой методики есть достоинства, есть недостатки. Вы с ней не согласны - опаньки.
29 янв 18, 17:04    [21148068]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Dimitry Sibiryakov,

Хочу спросить, что Вы имели ввиду "Возможно -
способность работать с потенциально большими данными." ? учитывая тот факт, что использовать можно только WinAPI и STL?
29 янв 18, 17:09    [21148089]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Кот Матроскин,

Спосибо, принято.
29 янв 18, 17:11    [21148099]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Господа, смелее, неужели нет бльше мнений?
29 янв 18, 17:40    [21148218]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45451

Eugene Gri
что Вы имели ввиду "Возможно - способность работать с потенциально большими данными." ?

Повторяю медленно:
Я
Сочетаний может быть много. Очень много. Настолько много, что полная таблица
счётчиков не влезет в ОЗУ (и не факт, что поместится на диске).

Восемь байт это 2^64-1 возможных значений. Может, в подсунутых файлах окажется полная
радужная таблица размером в 128 терабайт и твоё приложение, использующее std::map для
подсчёта, накроется медным тазом. Поэтому всегда надо уточнять граничные пределы.

Posted via ActualForum NNTP Server 1.5

29 янв 18, 17:47    [21148241]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
wst
Member

Откуда:
Сообщений: 201
Сильно смущает момент с "базовый С++ (не С++11 и пр.)". Так что первое, что приходит в голову - мысли о каком-то адском легаси.

Что до подводных камней, то в них можно записать все моменты, которые явно не прописаны в задании:
1. про файлы с размером, не кратным 8, уже писали
2. про файлы в которых разных сочетайий больше, чем можно разместить в памяти, тоже
3. как реагировать на попытку запустить больше одного экземпляра любого из процессов (или нескольких)?
4. "Пути к папкам входными файлами передаются в качестве параметров первого процесса." - папки могут быть вложенными? С симлинками/хардлинками куда-то еще? с циклами (1/2/3/x где x - хардлинк опять на 1)? А POSIX_SEMANTICS поддерживать?
5. ограничения на размер файлов - поместятся ли счетчики, скажем, в 32 бита?
6. не уверен, но наверняка можно докопаться до кодировок в названиях файлов и в консоли
7. то же насчет возможности выводить блоки в консоль - нигде явно не прописано, что они все состоят только из подходящих значений, а то в примере только символы из [0-9A-F] и ни слова про другие значения.

это то, что с ходу пришло в голову. Наверняка, если посидеть подумать подольше - список заметно разрастется.
29 янв 18, 17:54    [21148271]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Dimitry Sibiryakov,

Я ни коим образом не указывал, что нужно использовать std::map, но Ваши оценочные выкладки по поводу "радужной оболочки" - в целом верны. Но вопрос мой состоит в том Как бы Вы подоши к решению хранения больших данных используя только WinAPI и STL? В задаче нет никаких намёков на границы и объем данных
29 янв 18, 17:57    [21148295]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45451

wst
в примере только символы из [0-9A-F] и ни слова про другие значения.

Других шестнадцатеричных циферок покамест не придумали.

Posted via ActualForum NNTP Server 1.5

29 янв 18, 17:59    [21148303]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
wst
Member

Откуда:
Сообщений: 201
пропустил момент, что в примере в задании их по 16 на строку.
29 янв 18, 18:01    [21148312]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45451

Eugene Gri
Я ни коим образом не указывал, что нужно использовать std::map

Знаете другой, более удобный способ решения этой задачи в условиях ограниченного набора
значений из (фактически) неограниченного диапазона?

Eugene Gri
Но вопрос мой состоит в том Как бы Вы подоши к решению хранения больших данных используя
только WinAPI и STL? В задаче нет никаких намёков на границы и объем данных

Вот именно поэтому-то это и надо уточнить у постановщика задачи. Потому что для
подстеливания соломки под этот случай я бы использовал sparse files, а это, в свою
очередь, приведёт к усложнению программы, её замедлению и куче работы, которая может
оказаться совершенно ненужной.

Posted via ActualForum NNTP Server 1.5

29 янв 18, 18:16    [21148366]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
wst,

Ну, вот, вот- же - оно!!!! Чувствуется, что человек- программист! Родственная душа!

Ну а теперь мои комментрарии

Сильно смущает момент с "базовый С++ (не С++11 и пр.)". Так что первое, что приходит в голову - мысли о каком-то адском легаси.
-- Да, неаверняка так и есть, продукт существует уже более 10 лет и, легаси присутствует, ну и ещё не нужно сбрасывать со счетов
"черное" чувство юмора у работодателя



Что до подводных камней, то в них можно записать все моменты, которые явно не прописаны в задании:
1. про файлы с размером, не кратным 8, уже писали
2. про файлы в которых разных сочетайий больше, чем можно разместить в памяти, тоже

3. как реагировать на попытку запустить больше одного экземпляра любого из процессов (или нескольких)?
--Хороший вопрос :) В задаче не указано, но я предположил, что запустить можно сколько угодно, но только пара процессов должна "оказаться в сцепке"

4. "Пути к папкам входными файлами передаются в качестве параметров первого процесса." - папки могут быть вложенными? С
симлинками/хардлинками куда-то еще? с циклами (1/2/3/x где x - хардлинк опять на 1)? А POSIX_SEMANTICS поддерживать?
--Да, есть такое дело :) В задании нет прямого указания, что мы должны лезть в подпапки и, следовательно, мы не лезеем, а если мы встречаем хардлинки и симлинки указывающие на файлы, считаем их файлами. POSIX-SEMANTICS - на Windows это уже черезчур. Хорошее замечание


5. ограничения на размер файлов - поместятся ли счетчики, скажем, в 32 бита?
--Да нет огданичений на размер файла. При чем тут счетчик 32 бита?

6. не уверен, но наверняка можно докопаться до кодировок в названиях файлов и в консоли
--Правильно, в консоль нужно выводить только UTF-32

7. то же насчет возможности выводить блоки в консоль - нигде явно не прописано, что они все состоят только из подходящих значений, а то в примере только символы из [0-9A-F] и ни слова про другие значения.
--Любой фал можно предтавлять как бинарный, так что пролемы тут не вижу

это то, что с ходу пришло в голову. Наверняка, если посидеть подумать подольше - список заметно разрастется.
29 янв 18, 18:21    [21148386]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45451

Eugene Gri
5. ограничения на размер файлов - поместятся ли счетчики, скажем, в 32 бита?
*--Да нет огданичений на размер файла. При чем тут счетчик 32 бита?*

Что Вы собираетесь показывать в качестве "количества вхождений" для входного файла
размером в 32 гигабайта, набитого нулями? Ноль?..

Posted via ActualForum NNTP Server 1.5

29 янв 18, 18:25    [21148399]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Dimitry Sibiryakov,

Да 32 бита недостаточно
29 янв 18, 18:27    [21148407]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Dimitry Sibiryakov,


Знаете другой, более удобный способ решения этой задачи в условиях ограниченного набора
значений из (фактически) неограниченного диапазона?
--Да, предположительно знаю, но это уже решение выходит за границы требований в постановке задачи. Я как раз хотел бы узнать знаете ли Вы.


Вот именно поэтому-то это и надо уточнить у постановщика задачи. Потому что для
подстеливания соломки под этот случай я бы использовал sparse files, а это, в свою
очередь, приведёт к усложнению программы, её замедлению и куче работы, которая может
оказаться совершенно ненужной.
--Да, совершенно верное и ценное замечание, это приведет к более комплексному решению
29 янв 18, 18:31    [21148415]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 2966
Делал похожее задание для java в 2013.

Можно посмотреть тут: https://github.com/javadev/search-file-by-template

Потратил дня 3.

С уважением, Валентин
29 янв 18, 18:37    [21148429]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Здравствуйте, Валентин!

Я плохо знаю Java, но мне кажется, что Ваша задача несколько иная, а что касается поиска в подпапках, то OK, раве что JVM различет ли особенности файловой системы? Я не знаю. А так - ничего не могу сказать. Надеюсь Вы хорошо трудоустроены.
С Уважением, Евгений.
29 янв 18, 18:47    [21148458]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о тестовых заданиях  [new]
Eugene Gri
Member

Откуда: Москва
Сообщений: 102
Valentin Kolesnikov,


Валентин, извините, за мое мнение, но выскажу.
1) Функция private void findFiles, - она рекурсивнея и поэтому может упасть при огоромной вложенности в файловой сиситемы
2) Не используется распараллеливание поика вглубь
3) В прогорамме нет понимания архитектурны
4) Не уверен, но при большом количестве файлов UI список может сильно тормозить

Если эти замечания покажутся Вам надуманными и неверными, то не принимайте их близко к сердцу, я-же С++ник
29 янв 18, 18:58    [21148480]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
Все форумы / Работа Ответить