Здравствуйте, avpavlov, Вы писали:
AF>>Ну правильно, не надо было вообще делать это задание. Посыл таких существ на три буквы — самое правильное решение.
A>Посыл кого-либо на три буквы в ответ на необязывающую просьбу (когда можно просто отказаться) гарантировано позволяет детектить сказочных чудаков на букву М.
Ага, вот и собеседующие, которые в дальнейшем запрещают людям слущать музыку за рабочей машиной.
Сказочных кого, говорите, позволяют детектировать такие задания?
SA>Ага, вот и собеседующие, которые в дальнейшем запрещают людям слущать музыку за рабочей машиной. SA>Сказочных кого, говорите, позволяют детектировать такие задания?
Такие задания позволяют детектировать компании, куда стоит или не стоит идти (в зависимости от предпочтений)
А вот посыл на три буквы позволяет детектировать сказочных ... ну и далее по тексту
Здравствуйте, Karn, Вы писали:
K>после этого мне пришел ответ с отказом и комментариями тамошнего эксперта. Мне лично(наверное, больное самолюбие) комментарии K>к отказу показались недостаточно существенными. Если вы посмотрите задание, решение и причины отказа, буду крайне благодарен. K>Просто на мой взгляд задание я выполнил неплохо, и мне интересно насколько глубоко я ошибаюсь.
Да вообще не стоило делать это задание. Это где такое видано, чтобы столько времени тратить на задачу, ещё и неоплачиваемую, да и к тому же, не факт, что взяли бы на работу. Я бы $100 взял за реализацию. А тут бесплатно хотят в качестве тестового задания.
Здравствуйте, placement_new, Вы писали:
_>Здравствуйте, TimurSPB, Вы писали:
TSP>>Ну конечно, OOD это обязательно для парсера ссылок. А без Visual Studio 2010 так и вообще абсурд, браться за решение этой грандиозной задачи.
_>мысла тестового задания ты так и не понял.
Да его тут как бы и нет. Что проверяет это тестовое задание совершенно не ясно. Умение писать простейшие регулярки? Знание что такое рекурсия и ее ограничения на практике? Наличие дома Windows с пиратской Визуал Студией?
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, placement_new, Вы писали:
_>>Здравствуйте, TimurSPB, Вы писали:
TSP>>>Ну конечно, OOD это обязательно для парсера ссылок. А без Visual Studio 2010 так и вообще абсурд, браться за решение этой грандиозной задачи.
_>>мысла тестового задания ты так и не понял.
KP>Да его тут как бы и нет. Что проверяет это тестовое задание совершенно не ясно. Умение писать простейшие регулярки? Знание что такое рекурсия и ее ограничения на практике? Наличие дома Windows с пиратской Визуал Студией?
Да я не об этом. Я о том, что раз комманда использует OOD, то и задание от них тоже надо делать в таком стиле, не важно хорош или плох этот подход.
Здравствуйте, Synapse, Вы писали:
S>По-моему, они дураки, что вас не взяли. Видно, что человек умеет писать хороший код и не писать плохой, а в этом и состоит наша профессия.
Они не дураки, они просто выдают Denial of Service. Наплыв "специалистов" слишком велик — сотни запросов в день. Я стопроцентно уверен, что ревью был скопипейстчен.
Честно сказать, твое решение у меня вызвало шок. Нет, я конечно знал что дотнетчики страдают чрезмерным увлечением дизайном и архитектурой, но чтоб на столько.
Вобщем-то, данная задача решается в рамках простейшего приложения состоящего из 4-х основных + 5-10 вспомогательных функций:
чтение конфигурации;
загрузка страницы;
поиск ссылок ссылки на странице;
проверка найденной ссылки на уникальность.
Уж не знаю что за странные люди дали тебе эту задачу, и какие там ожидались ООП извраты, но это задача для 1-ого файла на ANSI-C.
Здравствуйте, kaa.python, Вы писали:
KP>Честно сказать, твое решение у меня вызвало шок. Нет, я конечно знал что дотнетчики страдают чрезмерным увлечением дизайном и архитектурой, но чтоб на столько. KP>Вобщем-то, данная задача решается в рамках простейшего приложения состоящего из 4-х основных + 5-10 вспомогательных функций: KP>чтение конфигурации; KP>загрузка страницы; KP>поиск ссылок ссылки на странице; KP>проверка найденной ссылки на уникальность. KP>Уж не знаю что за странные люди дали тебе эту задачу, и какие там ожидались ООП извраты, но это задача для 1-ого файла на ANSI-C.
У меня вообще-то тоже, несмотря на многолетний стаж дотнета. Принцип KISS универсален.
Разбиение на подзадачи неверное, кстати
0. Чтение конфигурации.
1. Загрузка страницы
2. Получение всех линков.
3. Отправка линков в некоторое хранилище, которое автоматом обеспечит их уникальность(напрашивается словарь, можно еще и частотный анализ линков прикрутить)
4. Spawn объектов(или потоков, хотя не факт, что наиболее эффективно) для повторения шагов 1-3 для каждого из полученных линков, пока не достигнута заданная глубина.
5. Вывод результатов в консоль.
6. Сохранение результатов в файл.
Т.е. примерно 5-6 основных сущностей надо. Многопоточность нужна только для шагов 1 и 2(пока скачивается страница, обрабатывать уже скачанные).
1м файлом тяжеловато будет решить. Или же полученный набор функций будет иметь весьма нетривиальную и запутанную логику.
Здравствуйте, StandAlone, Вы писали:
SA>Т.е. примерно 5-6 основных сущностей надо. Многопоточность нужна только для шагов 1 и 2(пока скачивается страница, обрабатывать уже скачанные).
Хватит 5-ти функций, про файл я проморгал, каюсь Многопоточность не входит в рамки задачи и как следствие не нужна.
SA>1м файлом тяжеловато будет решить. Или же полученный набор функций будет иметь весьма нетривиальную и запутанную логику.
Да нормально это одним файлом решится, в крайнем случае на Си. cURL + например sglib для rb-дерева хватит за глаза. Задача слишком примитивна чтоб городить какие-то сущности и прочее.
Вобщем мне очень интересно было бы знать, в какой компании дают на столько странные тестовые задачи
Здравствуйте, kaa.python, Вы писали:
KP>Хватит 5-ти функций, про файл я проморгал, каюсь Многопоточность не входит в рамки задачи и как следствие не нужна.
Да как не нужна? Классика же. Интенсивная работа с сетью как бы явно намекает на то, что задачи скачивания лучше отдать в отдельные потоки, и завести еще один для обработки полученных результатов.
KP>Да нормально это одним файлом решится, в крайнем случае на Си. cURL + например sglib для rb-дерева хватит за глаза.
Эээ...а дерево тут зачем, пардону просю за тупость? Для хранения уникальных линков вполне хватит обычного словаря
KP>Задача слишком примитивна чтоб городить какие-то сущности и прочее.
Сущности нужны, как минимум, для separation of concerns и последующего тестирования.
Мне один коллега вообще предложил все решить одним циклом..
KP>Вобщем мне очень интересно было бы знать, в какой компании дают на столько странные тестовые задачи
Тут же пробегало название. Касперычи это, родимые.
Здравствуйте, StandAlone, Вы писали:
SA>Да как не нужна? Классика же. Интенсивная работа с сетью как бы явно намекает на то, что задачи скачивания лучше отдать в отдельные потоки, и завести еще один для обработки полученных результатов.
Ты либо не работал с сетью, либо что… Но в сети, в случае с клиентскими приложениями, случаи когдна нужна многопоточность можно по пальцам пересчитать. Почти всегда хватает асинхронного IO.
SA>Эээ...а дерево тут зачем, пардону просю за тупость? Для хранения уникальных линков вполне хватит обычного словаря
В sglib нет словаря. А чего-то такого же компактного но со словарем я сходу вспомнить не сумел.
SA>Мне один коллега вообще предложил все решить одним циклом..
Тоже вариант.
SA>Тут же пробегало название. Касперычи это, родимые.
Здравствуйте, michael_isu, Вы писали:
_>Смысл есть, т.к. канал при загрузке страницы занимается не полностью, поэтому если одновременно грузить 100 страниц в 100 потоках — загрузятся все за не намногим большее время, чем если грузить 1 страницу.
большую часть времени занимает вообще ping. вон у меня до москвы (1000 км) 20-40 мс, до америки на порядок больше
Здравствуйте, Synapse, Вы писали:
S>Запихивание в подобные утилиты юнит-тестов и тем более контейнеров мне кажется разновидностью онанизма. В тестах больше кода, чем в самой программе. Мне недавно дали задание сделать практически то же самое с веб-мордой, получилось двести строк на Питоне, включая свой тред-пул, пока, правда, не ответили.
приходит человек устраиваться водителем карьерного самосвала. ему говорят:
— резюме у вас отличное, но мы хотели бы дать вам тестовое задание
— давайте
— вы понимаете, что в карьер мы вас пустить не можем, поэтому продемонстрируйте своё умение водить БелАЗ, перевезя вот эту булавочку моей секретарше
сама суть тех знаний, которые ожидаются от ведущего, архитектора и т.д. — в том, что это знания, необходимые только на крупных проектах. на вышеупомянутую задачу можно посадить студента, и он её решит в 10 строчек ничего не зная об ооп или ют
и что ты предлагаешь — давать тест на 10 месяцев? :D поэтому тут необходимо проявить некоторое воображение и написать нечто подобное известному файлу в 50 строк, осуществляющему сложение двух чисел. и разумеется, у проверяющего тоже должно быть это понимание и ни малейших придирок к тому, что на 50 строк кода приходится 10 классов и 100 тестов
Здравствуйте, kaa.python, Вы писали:
KP>Ты либо не работал с сетью, либо что… Но в сети, в случае с клиентскими приложениями, случаи когдна нужна многопоточность можно по пальцам пересчитать. Почти всегда хватает асинхронного IO.
Бггг. Так асинхронный ИО тоже будет в том одном файлике?
SA>>Мне один коллега вообще предложил все решить одним циклом..
KP>Тоже вариант.
Здравствуйте, BulatZiganshin, Вы писали:
BZ>и что ты предлагаешь — давать тест на 10 месяцев? :D поэтому тут необходимо проявить некоторое воображение и написать нечто подобное известному файлу в 50 строк, осуществляющему сложение двух чисел. и разумеется, у проверяющего тоже должно быть это понимание и ни малейших придирок к тому, что на 50 строк кода приходится 10 классов и 100 тестов
ИМХО, это все равно не причина делать гусеничный велосипед с независимой торсионной подвеской. Разве что топикстартеру очень хотелось попрограммировать и нечем было больше заняться...
Или он спер это решение где-то в сети и мальца перелицевал под себя
Здравствуйте, StandAlone, Вы писали:
SA>Т.е. примерно 5-6 основных сущностей надо. Многопоточность нужна только для шагов 1 и 2(пока скачивается страница, обрабатывать уже скачанные).
hint: два мелких файла скачаются за то же время, что и один
если говорить об эффективном решении, то надо брать пул зелёных потоков, делать очередь http-запросов и очередь скачанных страниц. да и парсить страницы эффективней в несколько потоков на современных cpu