Как меня не позвали в Яндекс на собеседование

В конце прошлого года один из сотрудников Яндекса нашел меня в “Моём Круге” (а где же ещё им искать сотрудников?) и, так как у меня указано в специализации “Perl-программист”, предложил рассмотреть вакансию Perl-разработчика в Яндексе. Со времен заполнения профиля в “Моём Круге” прошло достаточно много времени, я уже давно пересел на PHP и программировал на Perl’е достаточно редко и в специфичных задачах. Однако, давняя мечта работать в Яндексе в тот момент все ещё витала (и витает до сих пор) в моей голове, поэтому я решил попробовать свои силы. Но с другой стороны, туманная перспектива переезжать в Москву и увольняться с текущей работы совершенно не радовала. Не люблю я Москву. Работа у меня в моем городе очень хорошая. Нужно будет программировать на Perl. Родственники опять же, друзья. Зарплата примерно такая же (если вычесть аренду жилья).

“Поехали!” – сказал я Денису (назовем его так) и отправил ему свой E-mail. Ждать пришлось недолго.

Денис 14.11.2011

Антон, добрый день!

Мы хотим предложить вам решить следующую задачу.

Реализовать специализированный crawler, сохраняющий “фавиконки” (http://ru.wikipedia.org/wiki/Favicon) сайтов.

Входом для программы является текстовый файл, содержащий домены для обхода (по одному на строке), и название директории для сохранения результатов.

Требуется определить правильную иконку для каждого из файлов, с учетом де-факто стандартов (/favicon.ico, указание ссылки в теле документа), скачать ее, если она доступна, конвертировать в общий для всех формат (PNG, при необходимости – с альфа-каналом), и сохранить в указанной директории, под названием типа www.example.com.png.

Дополнительно: на всех этапах общения с сайтами нужно поддерживать ограничения, налагаемые их robots.txt; желательно эффективно использовать ресурсы многопроцессорного сервера.

Сделать нужно на Perl, можно использовать любые готовые общедоступные модули.

Ух! Это же то, чем я чаще всего занимаюсь на Perl – что-нибудь тащу, ворую, парсю и складываю.

Антон Терехов 14.11.2011

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

Провозился почти всё воскресенье, заставил работать, затем красиво оформил и частично переписал. Виталий предложил хорошую идею – переписать скрипт на неблокирующих сокетах, но я, немного повозившись с ними, решил плюнуть и показать Денису то, что получилось.

Антон Терехов 21.11.2011

Добрый день, Денис!

Задача была достаточно интересная, моя реализация в аттаче. Была идея переписать на неблокирующих сокетах, но не успел.
Для работы скрипта необходимо наличие модулей:
LWP::Simple – как правило, входит в дистрибутив
WWW::RobotRules – как правило, входит в дистрибутив
Imager – скорее всего, придется устанавливать. При установке необходимо обратить внимание, корректно ли установятся модули Imager::File::PNG и Imager::File::PNGWriter

Денис 21.11.2011

Антон,

мы бы хотели предложить вам еще одно задание.

Есть несколько серверов (допустим 10) на которых распределенно хранится какое-то большое множество чисел, 1Tb (на каждом своя часть). Есть еще один сервер, мастер, который может давать им задания посчитать что-нибудь про свою часть множества, и вернуть ему ответ. Канал между мастером и слейвами очень узкий, обмениваться можно только небольшими порциями данных, 1Kb. Нужно посчитать медиану всего общего множества.

Код, который можно запускать распределённо, писать не требуется. Просто описание алгоритма, и прототип на перле, который всё делает локально. Можно даже без отдельных процессов, просто в одном процессе разбить все данные на 10 частей, и обрабатывать их по отдельности.

Ух! А вот это уже сложнее. Да тут вообще, считай, почти одна математика. А математику я благополучно забыл сразу после того, как сдал её на втором курсе.

Антон Терехов 21.11.2011

Денис, хотелось бы уточнить пару моментов.
1) Нужно точное значение медианы или достаточно приближения?
2) Как предполагаю, массивы не отсортированы?

Денис 21.11.2011

1) Давайте будем считать, что все числа разные и их нечетное количество. И значение медианы нужно точное.
2) Это неважно, всегда можно послать слейвам команду “отсортируйте”.

Уже интереснее.

Антон Терехов 21.11.2011

Ок. Постараюсь до выходных найти время, чтобы выполнить задание.

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

Антон Терехов 28.11.2011

Добрый день, Денис!

Опять получилось присесть только в воскресенье.
Задание выполнил, во вложении архив с 2 скриптами. Один из них генерирует массивы чисел в файлы, другой находит из них медиану.

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

Алгоритм следующий:
0) Предположим, на старте у нас начало исследуемого отрезка 0, конец 1000000.
1) Делим исследуемый отрезок на 10 равных частей. Мастер посылает команду слейвам построить гистограммы по диапазонам. Т.е. вопрос следующий: “Сколько значений лежит в диапазоне 0-1000000, 1000000-200000, …, 9000000-1000000”.
2) Слейвы сортируют значения, высчитывают и посылают гистограмму мастеру.
3) Мастер гистограммы суммирует, и определяет, в каком отрезке лежит медиана и считает её положение в этом отрезке.
4) Рекурсивно возвращаемся к пункту 1, исследуя найденный отрезок (к примеру, 4000000-5000000), пока не будет найден отрезок, в котором лежит только одна медиана.
5) Посылаем слейвам команду прислать по 2 значения, лежащих в или выше последнего найденного отрезка (т.е. наиболее близкие с большей стороны)
6) Если количество элементов нечетное, то медиана – наименьшее значение, если четное – то среднее арифметическое между наименьшими.

В конце делаю проверку самим мастером – открываю все файлы с данными, сортирую их и нахожу медиану в одном массиве.

Спустя день ожидания получил от Дениса следующее сообщение:

Денис 29.11.2011

Антон, добрый день!

Спасибо за интерес к нашим вакансиям. Мы внимательно изучили Ваши решения.
Несмотря на то, что Вы, несомненно, обладаете некоторым интересующим
нас опытом, в настоящий момент мы не готовы предложить Вам
должность Разработчик Perl.
Тем не менее, Ваша анкета будет сохранена в нашей базе данных,
и, если Вы не возражаете, мы будем рады вернуться к рассмотрению
Вашей кандидатуры на вакансии, которые могут открыться
в нашей компании в будущем.

Комментарии по решениям:
* неэффективная и “хрупкая” реализация IPC через файлы;
* время работы зависит (хоть и логарифмично) от значений в выборке, а не от количества данных;
* отсутствие обработки ошибок;
* отсутствие use strict.

Комментарии вполне справедливые. Написать решения, которые я представил на рассмотрение в Яндекс, мне было достаточно тяжело, но от этого не менее интересно. На решения потрачено порядка 2 дней кодинга и много свободного времени для обдумывания (намного больше, конечно же, на вторую задачу).

Скачать исходники можно здесь: favicon и mediana.

С одной стороны, было немного обидно, что не позвали на собеседование. К удивлению, совсем немного.
С другой – я почувствовал радость. Даже облегчение. Что не надо никуда ехать и краснеть за свои знания )) Вакансия была ориентирована, как я понял, на Яндекс.Метрику, тогда наверняка нужны неплохие математические данные. Да и в Perl у меня, думаю, без проблем нашли бы пробелы. А уж как я был рад, что не нужно увольняться с текущей работы!
Но в любом случае я выполнил не совсем простые задачки. Может быть, на троечку с минусом, но выполнил. А это опыт. А он бесценен. И ещё одно. Даже два. Два раза я почувствовал необычайное удовлетворение после решения этих задач ))

Левелап

Давно я не писал, почему бы не добавить ещё одну страничку в индекс?

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

В последних числах декабря прошлого года я принял решение уйти с прежней работы. Одной из основных причин стала задержка зарплаты на 33 дня. А кошелёк у меня, к сожалению, не безразмерный, и золотой антилопы у меня дома тоже нет. После того, как я сходил на собеседование в другую компанию и начальство узнало об этом, мне сразу же выдали 2 зарплаты. Решение было нелегким, много сомневался, но все же решил уйти. Проработал почти до конца января, вновь сходил в “Звёздный поход”, отдохнул чуть меньше недельки (отпуска в 2010 у меня не было) и пошел уже на новую работу. Зарплату за декабрь мне выдали в феврале, за январь только на прошлой неделе. У всех бывают проблемы с финансами, но, в конце-то концов, я же наёмный работник, а не внучатый племянник руководства, готовый работать за “спасибо” и печеньки?

Про колёса. В декабре купил тот мотоцикл, о котором мечтал. Покупал во Владимире, жаркие у меня выдались 2 суток. Старый мотоцикл пока ещё стоит у меня в доме, но покупатель на него уже есть. Ещё ни разу на сузуке не катался (не считая по гаражу и перед гаражом по снегу), но уже успел неплохо с ним поебаться за зиму. Поменял свечи, поставил сигнализацию, заменил патрубки в системе охлаждения, сменил антифриз, укрепил тормозные диски, сшил чехол и всего-всего по мелочи. Сейчас он у меня не заводится – жду когда появится асфальт, тогда поменяю масло (сука, дороже, чем на машину, в 3 раза) и фильтр, соберу пластик и, наконец, начну ездить. Купил почти весь экип, осталось купить штаны. Если бы я купил их в Москве – мне бы даже тупо не хватило денег, чтобы проехать на метро. На этой неделе снова поеду, если завтра не перезвонят и не привезут на заказ.

Планирую продать машину в мае-июне, новую планирую купить осенью. Пока не определился, какую хочу. С одной стороны люблю быстрый разгон, с другой – и по бордюрам я любитель полазить. То ли брать третью мазду со спортивной коробкой, то ли высокий полноприводный паркетник. А мой вездеходик продавать жалко, нравится он мне. Хотя тесноват и уже старенький.

Про Максима. Честно говоря, меня заебали. Я никоим образом не влияю на то, что происходит в выпусках +100500, какие видео там комментируются, что он говорит и как одевается. Тем, кто считает, что Максим уже не торт – дам простой совет: не нравится – не смотрите. Есть куча других видеоблоггеров и просто забавных видео. А Максим ещё тот торт.

Ноупасаран, пасаны.

Школа, школа, я скучаю

В школе, в которой мы с напарником подписались проводить локальную сеть (3 этажа, 16 рабочих мест в разных уголках) всё близится к завершению. И слава богу. Теперь кроме политиков я не желаю работать ещё и со школами, что отмечено на новой странице с услугами. Директриса – отдельный разговор, и не для печати.
Я люблю животных, но думаю, что в школе им не место. В этой школе живёт порядка 15 кошек и 1 собака. Бесспорно, мышей в школе искать бесполезно, но прямо в холле жутко воняет кошачьей ссаниной. Я бы в здравом уме не отдал своего ребёнка в такую школу, да ещё и с такой пизданутой директрисой. Интересно, поможет ли звонок в СЭС решить ситуацию? Вряд ли.

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

В школе делают ремонт. Естественно, так же как и сеть, на родительские деньги. Естественно, стены ровнять никто не собирается, просто заклеивают обоями. Естественно, горелую проводку менять впадлу. А в одном из кабинетов, в котором пришлось побывать, родители не смогли скинуться ещё по 20 рублей на жидкие гвозди и придумали классный способ крепления потолочных плинтусов – на английских булавочках. А в одном месте даже пожалели пару булавочек и подпёрли плинтус антенной от телевизора.

Тоже, что ли, попробовать вместо цемента использовать ПВА?

День программиста

В этом году в России второй раз официально отмечается профессиональный праздник программистов. Коллеги, с праздником!

 

Не забываем душить коллег мышками, разбивать об головы клавиатуры и кричать “ПИ-АШ-ПИ!!!”
C утра наблюдается поисковая активность:

 

Около 10:40 по московскому времени упала статистика лирушечки. Видимо, там уже отмечают.

 

Неофициальный гимн программистов:

Мы двигаем технологии вперед, мы воплощаем идеи в рабочие проекты, мы меняем жизни людей. Мы – люди Х борцы с единицами и нулями, которым на нелегком пути помогают наши верные друзья компиляторы и интерпретаторы. За нас!

Комментируйте ненужные фичи!

Забыл отключить одну тестовую фичу и при каждой авторизации на рабочем сайте на вконтакт добавлялся балл к рейтингу. Заметил поздновато.

Йогурты работают

Теперь всегда оставляю перед компьютером на ночь бутылочку “Активии”. Потому что “Активиа” работает, когда вы отдыхаете. Если фотография плохая (а сделана дорогущей зеркалкой с суперобъективом), то всегда можно сказать что “фоткал с айфона”, и никто не придерётся.

Как и обещал, размещаю постовой на сайт человека, первым купившем рекламу у меня в блоге. Новости науки и технологий 21-го века на одном сайте. Ещё на просторах интернетов найден забавный тред на почве национальной неприязни.

После перехода на iOS 4.0.1 и очередного успешного jailbreak’а поставил достаточно удобное приложение – Installous. Теперь скачивать и обновлять сломанные приложения стало ещё проще. Естественно, с находкой этой программы мне помогли йогурты.

В связи с новым законом, завязал с кефиром и квасом. Пью только йогурты.

Webmasters.ru

Попросили поддержать быстро набирающий обороты форум веб-мастеров, а заодно дали халявную футболку. Спасибо, вот ваше фото!

Отчет о Дне Сисадмина

Ну, значит, долго ли, коротко ли, но мы собрались нашей небольшой компанией.

Пили пиво. Зарядили мангал.

Угли подошли, можно жарить!

Такого шашлыка вы наверняка никогда не ели!

Весело фотографировались и разбили клавиатуру об голову.

К тому же оказалось, что материнские платы тоже совсем неплохо горят. Особенно весело “вылетают” конденсаторы.

А потом принесли ещё один “мангал” с материнской платой. Все отлично горит даже без бензина.

Тяжелое утро мангалов.

Всем спасибо, все довольны, всем плюсую в карму. Приходите ещё на День Программиста.
Рязанцы, извините за этот двухдневный дым, это мы виноваты.

Горячая вакансия

Уже обкидал все “вштаты” и “моикруги”, но результата до сих пор нет.
Мало ли он пробежит тут? Кто должен пробежать и увидеть это объявление?
PHP-программист. Работа в офисе в Рязани, зарплата достойная, обсуждается на собеседовании. Интересные задачи, дружный коллектив.