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

В конце прошлого года один из сотрудников Яндекса нашел меня в “Моём Круге” (а где же ещё им искать сотрудников?) и, так как у меня указано в специализации “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 у меня, думаю, без проблем нашли бы пробелы. А уж как я был рад, что не нужно увольняться с текущей работы!
Но в любом случае я выполнил не совсем простые задачки. Может быть, на троечку с минусом, но выполнил. А это опыт. А он бесценен. И ещё одно. Даже два. Два раза я почувствовал необычайное удовлетворение после решения этих задач ))

Мотосезон-2011 закрыт!

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

С ремонтом джиксера мне помогал отец моего друга, он же помог мне купить шестой фазер, который я ласково зову Машей. Андрею я очень благодарен и уверен, что ещё не раз с ним встретимся в этой жизни. Достаточно смешно получилось – утром я продал машину, а вечером этого же дня впервые прокатился на Маше, влюбился в неё и спустя час купил.

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

Машу я приобрел в отличном техническом состоянии. Несмотря на возраст (она 2004 года выпуска), на ней проехали меньше 8000 километров. Я уже наездил с ней больше, чем она проехала со всеми предыдущими хозяевами. Было несколько косяков по пластику, но их я устранил. Заменил слайдеры на дуги+слайдеры, поставил новую резину, поменял покоцанные наклейки на свеженькие. Установил сигналку. Пытался поставить ксенон (остался от машины), но, потратив на это порядка 5 часов, бросил эту затею – не хотел он влезать под пластик, уж больно толстые были блоки розжига.

За весь сезон у меня было 2 аварии, но они были на индийце (его я тоже продал в этом году), а не на Маше. Первый раз мне в правый бок въехал грузовик (какой-то старый здоровенный ГАЗ), ехавший в попутном направлении и уходящий от столкновения с отъезжающей от обочины Нивы. Отделался легким испугом и поцарапанными дугами. Ноги, слава богу, не задело. Ментов вызывать не стал – смысла биться за тысячу рублей никакого.
А второй раз прямо передо мной перестроилась “двенашка” и резко затормозила – решила пропустить пешеходов. У меня было всего два варианта – либо влетать в задницу “двенашки”, либо попытаться проскочить (что было маловероятно, но шанс оставался) между двумя соседними машинами. Торможу как могу, заднее колесо периодически уходит в юз, не хватило буквально пары сантиметров. В итоге я расцарапал всю левую бочину “тойоте”. Разбирались не долго, съездил домой, взял пятитысячную купюру, вручил водителю и снова поехал на работу. Настроение, конечно, было не очень, но уж лучше было раскошелиться и чуток расцарапать мопед, чем лежать в БСМП с переломами.

В этом году я многое понял и переосмыслил. Больше не езжу в половине экипировки – на каждую поездку, даже до соседних гаражей я одеваю полный экип. Многое читал и видел. Культура вождения наших автомобилистов оставляет желать лучшего. Кроме того, был на похоронах знакомого, с которым несколько раз катались вместе, в том числе и с подругами. Знал его пару месяцев, а теперь его уже нет. По рассказам, в своей смерти виноват он сам. Как на самом деле было, я не знаю. Надеюсь, что ему “там” хорошо и без меня.

Почти к самому концу сезона я пришел к выводу, что и подругу больше без экипировки катать не буду. Собственно, последний месяц я ездил на Маше один. Как минимум, в следующем сезоне планирую купить ей мотокуртку или черепаху, наколенники и перчатки. И ограничить число поездок с ней, т.е. на “просто покататься” её не брать. Ощущение ответственности за человека, который сидит сзади, пришло ко мне далеко не сразу. Но теперь я понимаю, насколько тяжел груз этой ответственности. И предпочитаю при возможности ездить налегке.

25 октября я возвращался домой на Маше под снегом. Поэтому для себя решил сезон-2011 считать закрытым. Осталось приготовить Машу к зимовке, уже почти все сделал, остались мелочи.

Мой любимый совок

Речь в этом посте пойдет о бывшем 38-ом магазине (сейчас это супермаркет под названием «Универсам 38») расположенный по адресу ул. Бирюзова, дом 22.

 

 

 

В первый раз конфликт с охраной и администратором в этом супермаркете у нас возник тогда, когда нас хотели заставить платить за разбитые яйца. Яйца, возможно, мы и разбили, но ни я, ни Оля этого не видели. Т.е. существует вероятность того, что Оля задела шлемом коробку и не почувствовала, но это ничем не подтвержденный факт. Охранники пытались задержать нас на выходе, на помощь им подоспела женщина-администратор с утверждением, что у них есть видеозапись, на которой якобы видно, кто и как разбивает яйца. Предложил им показать эту запись и, если действительно виноваты мы, оплатить стоимость яиц. Получил на это предложение отказ, и мы начали двигаться в сторону выхода. На нас кричали, пытались преграждать путь, обещали вызвать полицию, мы перешли дорогу в сопровождении охранника, оделись, сели на мотоцикл и уехали. Вслед нам кричали, что нас сейчас же НАСТИГНЕТ ГИБДД. Ага, и заставит платить за яйца. История подзабылась, мы спокойно продолжали ходить в супермаркет, нас узнавали, но не реагировали.

 

 

 

Примерно через месяц (16 сентября 2011 года) практически около самого входа видим показавшиеся нам забавными детские игрушки, и я делаю одну-единственную фотографию грузовиков.

Факт фотосъемки краем глаза примечает сотрудник супермаркета, подходит и требует немедленно удалить фотографию. На что получает отказ.

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

 

 

 

А вчера (20 сентября 2011 года) в очередной раз решили сходить в гости в этот замечательный магазин. На этот раз сознательно шли провоцировать (но в рамках закона), чтобы посмотреть, что же будут делать сотрудники супермаркета в нашу новую встречу. Сфотографировал стенд и при этом поздоровался с уже знакомым мне сотрудником супермаркета (тем, что на первом видео).

Проходим в зал, выбираем сосиски. Видим закрепленного за нами (какая честь!) охранника, стоит около стеллажа и наблюдает издалека. Навожу телефон на него, делаю фотографию, в это время он уже начинает на нас надвигаться с бравым видом.

Грозит вызвать полицию.

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

Господа полицейские прибыли через пару минут, попросили выйти из супермаркета. Фотографировать их не стал (мало ли, нахуячат ещё автоматами по почкам, а я парень итак не сильно здоровый), оплатили на кассе продукты, прошли к машине. Полицейские проверять документы не стали, задерживать тоже, а вежливо попросили в этот супермаркет больше не ходить. “Вы что, принципиальные что ли? Люди свою зарплату отрабатывают”. На этом с ними и распрощались и разъехались.

Ничего нового после http://zyalt.livejournal.com/389988.html

Ёбаный сбербанк

В конце мая оформил пластиковую карточку Visa Classic, потому что Electron’ы нельзя привязать к PayPal. И решил положить денег на её счет. Вкратце – банкомат заглотил 5к и карточку, после чего перезагрузился. Время было вечернее, позвонил по телефону, пока доехал до парка (минут 15), как раз взяли трубочку. Карточку заблокировал, на следующий день пошел её получать. Получил. Снова позвонил по телефону и разблокировал. Денег на ней, естественно, не было. Написал заявление. Инцидент произошел 31 мая. И вот сегодня (о, чудо!), спустя месяц, мне их вернули. 2 похода в банк, 3 не самых коротких телефонных разговора, заявление на страницу А4 с описанием произошедшего инцидента. Обещания разобраться в течении 7 дней, потом в течении 10, потом месяц. Самое обидное в этой ситуации – что мне из-за моих же денег (уже заработанных), пришлось маяться подобным дерьмом. Сбербанку очередной плюс. Как же я вас ненавижу.

Радостей полный пакет

Удалось вырвать Gemei A330 по смешной цене – $50. Сейчас дешевле $85 не нашел. Пока только запустил его, попробовал поиграть в пару игрушек. Как игровая консолька и проигрыватель HD-фильмов за такие деньги – очень круто.

Из Китая пришла очередная посылка, на этот раз с бинарными часами. Не самое лучшее фото, но смысл, думаю, понятен.

Не очень мне везёт с техникой в последнее время, сейчас ремонтирую оба сузука. Пока что езжу на старом мотоцикле, в том числе и на работу, что доставляет ряд неудобств. Во-первых, у нас дресс-код, поэтому приходится с утра заезжать домой, брать чистую рубашку, на работе полностью переодеваться с утра и вечером. Во-вторых, перевезти что-то сильно больше рюкзака по размерам тяжело. Но зато на дорогу я трачу 15 минут вместо 40-50 на машине. Задумываюсь о покупке в следующем месяце третьего мотоцикла, что-нибудь вроде такого:

Неприятно удивил Flickr (он у меня на данный момент является самым быстрым способом передачи фоток iPhone => PC) – до лимита в 200 фоток осталось всего-ничего и он хочет поиметь с меня $25 в год. Я не против платить за качественный сервис, но, во-первых, фликр сам по себе не очень мне удобен, а во-вторых, приложение для ифона _пиздец_ какое тормозное. Было хотя бы приложение быстрым – я оплатил бы год-другой.

Академ

Забыл ещё упомянуть одно важное событие. Уже после государственных экзаменов и производственной практики я решил взять в университете академический отпуск. Во-первых, не хочется сейчас заморачиваться с поиском отступных путей от весёлого путешествия в ряды нашей доблестной армии, а во-вторых, нет никакого желания писать диплом. Точнее, дипломную работу я бы с удовольствием выполнил, но оформлять её, утверждать и описывать (и что там ещё делается?) нет совершенно никакого желания. Мне и без высшего образования пока что неплохо. В любом случае, по своей специальности я _никакой_ специалист. А работы пока что много, я бы даже взял в рабство пару юных дарований.

Сейчас у меня появился лишний год отсрочки от армии. А там глядишь либо покупать военник, либо 2 года магистратуры + 4 года аспирантуры. А там хуяк! – и 28 лет.

А острый парапсориаз задним числом мне вылился всего в $500, хоть каждый год готов платить такие суммы за откос. Блять, пора вводить профессиональную армию, а то меня тошнит от всех этих уставных отношений, начальства и подчиненных, окопов и дневальных. Автоматы, это, конечно, заебись, но камуфляж мне нравится только на отдыхе – он хуево пачкается, когда в сопли валяешься под сосной или берёзой.

Левелап

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

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

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

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

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

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

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

Прогресс

Блог Макса отлично поднимается, в планах на этот год – обогнать Лебедева.

6 января блог посетили более 60 000 уникальных посетителей.
Рекламодатели! Спешите покупать рекламу, пока места ещё свободны.