Pull to refresh

Comments 38

Что такое разработка свеже-социального поиска в Яндексе? Вижу подпись у автора публикации, стало любопытно.

Привет :)


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


С тех пор служба сильно выросла и занимается много чем ещё, но новое подходящее название мы придумать не смогли. Поэтому так и оставили её службой свеже-социального поиска :)


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


О поисковой свежести я писал вот тут: https://habrahabr.ru/company/yandex/blog/329946/, а потом рассказывал вот тут: https://events.yandex.ru/lib/talks/4690/

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

Всегда приятно, когда люди интересуются этой темой!

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

А вот интересно, а есть на этот счет какие-нибудь исследования? Почему знание алгоритмов помогает быстро перестроится и научится новому, а знание, например, устройства финансовых рынков нет?

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


В данном случае речь, конечно, не о каком-то магическом превосходстве знания алгоритмов над любыми другими знаниями. Тут намного более простая мысль: если вы разбираетесь в алгоритме, то сумеете относительно быстро его реализовать на более-менее любом употребимом языке программирования.

Яндекс, а вы за решение задач на собеседовании (которое у вас длится 8ч = 4 секции по 2ч) платите деньги? Если да, то Блиц — это существенное снижение ваших затрат на подбор персонала (экономите на бедных проггерах и человекочасах HR и технических специалистов), если нет, то вы нарушаете ТК.

Если б у меня был выбор, решать за деньги или просто так, я бы выбрал деньги) Объясните, в чем смысл этого Блиц?
Порешать задачки на время и получить фан, почему нет?
Как будто на работе фана не хватает…

Я не понимаю, зачем что-то делать бесплатно, если можно за это получить деньги. У вас наверно интересная разновидность Стокгольмского синдрома.

Деньги — понятие относительное. У людей, которые свободное время измеряют в деньгах, оно обычно не стоит ни черта.
Очевидно, отфильтровать студентов тех, кто готов проходить несколько собеседований по несколько часов и взять лучших.

Я не настоящий сваршик, но отвечу. Очевидно, это чтобы сэкономить деньги: человекочасы рекрутеров. За участие в интервью, я почти уверен, Яндекс не платит. Вообще не знаю ни одной компании, где бы платили. Это же не тестовое задание, которое с натяжкой и иногда хотя бы теоретически можно где-то использовать. Интервью — это задачки-пазлы на 30-60 минут. Которые интервьювер и так умеет решать.


Со стороны претендентов на работу, этот Блиц — просто замена телефонному интервью. Кому-то это может быть просто приятнее, чем пытаться по телефону что-то объяснить рекрутеру.

С точки зрения участника может быть несколько мотивов.


  1. Это такое же олимпиадное соревнование, как и любое другое, и поэтому в нём просто будет интересно поучаствовать, попробовать свои силы, решить интересные задачи и научиться чему-то новому. Многие участвуют в подобного рода соревнованиях совершенно бесплатно и с большим удовольствием.
  2. Победители получают денежные призы, и это тоже может быть небесполезно.
  3. Это, действительно, способ избежать одного из этапов собеседования в Яндекс, заменив его процедурой более знакомой и приятной для многих, если сравнивать с традиционными интервью.

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

Раньше точно не платили. Да и вообще, вы знаете хоть одну компанию, которая платит соискателям за то, что они пришли на собеседование?
Яндекс, для меня, далеко не престижное место работы))) Тем более они загибаются, это отражается на всех их продуктах… а на такси в регионах и подавно
А что не так с их такси? Как только оно стало доступно в моем городе, пользуюсь только им. Однозначно лучшее приложение из доступных.
UFO just landed and posted this here
У Вас небольшая опечатка: не T_{i-1}, а T_{t-1}.

Не понятно какое значение принимает T_0. По определению T_k — это кол-во разных деревьев с числами
от 1 до k.

Попробуем провести рассуждение для конкретных значений N+1 и t.
Пусть N+1 = 3. Мы хотим найти T_{N+1} = T_{3}.

Ясно, что в корне любого дерева будет находиться некоторое число из множества 1,...,3.
Обозначим это число за t. Положим t=3.
Тогда в силу свойств дерева поиска левое поддерево содержит числа 1,..,3-1 = 1,..2.
А правое 3+1,… Но это больше N+1, поэтому правое поддерево — пустое.
Посмотрим на рисунок — все верно — для t=3, правое поддерево — пустое.

Количество различных возможных способов сформировать левое поддерево тогда равняется T_{2} = 2(это можно самому нарисовать),
а правое T_{3-3} = T_{0}. Но справа деревьев нет, значит T_{0} = 0.

Но тогда получается, что общее кол-во поддеревьев для t=3 = T_{2} * T_{0} = 2 * 0 = 0

Хотя по рисунку — их 2.

Формула работает, только если положить, что T_{0} = 1
Спасибо за внимательность! Опечатку в тексте и в формуле исправили.

Что касается T_0, то в сумме эта величина используется только при t=N или при t=0. В обоих случаях все элементы, кроме корня, попадают только в одно из поддеревьев. Значит, количество таких вариантов совпадает с количеством способов составить дерево поиска из N элементов. Поэтому, действительно, в этой задаче нужно положить T_0 = 1.
В общем-то, все логично, деревьев из 0 узлов ровно одно — дерево без узлов.
Тут на мой взгляд тоже опечатка. Нужно начало брать не T_{0}, а T_{1}=1. Тогда не придется вводить факт допущения.
Почему же? Вопрос о количестве деревьев поиска с нулём вершин вполне валиден. Более того, «пустые объекты» в комбинаторике широко используются в самых разных ситуациях. Ну, например, сочетания из нуля объектов можно встретить в формуле бинома Ньютона :)
Сразу вспомнилась статья Эти токсичные, токсичные собеседования
Цитата из статьи:
«Ведь нужно проверять фундаментальные знания»
Вы так в этом уверены? Кому именно нужно? Здесь всё же не кафедра университета и не олимпиадный кружок, предлагаю вспомнить, зачем вы вообще ищете человека. Правильно. Писать API, проектировать инфраструктуру, рисовать кнопки, чинить баги, понимать задачу из общения с бизнесом, делать продукт дороже и круче. И делать всё это в срок и за деньги.
Вы так говорите, будто фундаментальные знания — чисто академическая штука и не нужна нигде. Не все кнопки рисуют.
Я не отрицаю полезность этих знаний. Я всего лишь говорю о том, что их значение очень часто переоценивают.
Не думаю, что в команде нужно, чтобы все были шикарными алгоритмистами. Знание паттернов, умение писать «чистый» код и прокачанные softskills, как правило, более полезны в реальной работе.
Почему шикарными? Знания ряда алгоритмов, навыки вычисления сложности и т.п. — входят в ту же учебную программу по любой «околопрограммистской» специальности.
Дисклеймер: я прошел недавно это самое алгоритмическое интервью в желтую компанию, на хороший уровень.

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

Решения алгоритмических задачек на собеседовании не проверяют ваши фундаментальные, нефундаментальные или любые другие знания. Они проверяют одну вещь: скилл решать задачки на собеседовании в стрессовой ситуации. Это отдельный скилл, который после приема на работу больше не нужен. Поэтому, кстати, его надо поддерживать походами на собеседования во время работы.
Простите, но и «в реальном бою» у вас может быть напряженная ситуация, когда что-то надо сделать срочно. Так что отсылки к стресс-фактору, кмк, если не некорректны, так притянуты за уши точно.
Решения алгоритмических задачек на собеседовании не проверяют ваши фундаментальные, нефундаментальные или любые другие знания. Они проверяют одну вещь: скилл решать задачки на собеседовании в стрессовой ситуации

Решения алгоритмических задачек на собеседовании проверяют ваши фундаментальные знания.
Занудства ради, из вспомнившейся вам статьи:
Далее должна следовать обязательная ремарка про людей, пишущих поисковое ядро Google / Yandex.

Если внимательно прочитать статью, то видно, что данный блиц направлен как раз таки на разработчиков поиска и им подобных:
Хотя для оценки раундов и применяется система ACM, в отличие от спортивного программирования все задания максимально приближены к тем, которые постоянно решают в продакшене Поиска.

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


не олимпиадный кружок

Яндекс больше "олимпиадный кружок", чем какой-нибудь Люксофт или Епам. Мы сейчас не говорим, о том, что Епам богаче Я. Или что Варгейминг богаче Я. Да, богаче. Но разговор не об этом.

UFO just landed and posted this here
Так там будет несколько разных по сложности задач. Эти две — просто пример.
Объясните мне пожалуйста, а где в решении 1-й задачи топологическая сортировка.
Имплементирован простой обход графа в глубину.
При попадании в вершину никакой проверки на наличие других входящих ребер нет.
Получается в первом примере задача решена неправильно.

Буду жутко благодарен за развернутый ответ, особенно если я не прав.
В первой задаче мы сначала приводим решение, где просто выводим все процессы, которые нужно перезапустить, не учитывая при этом порядок, в котором их нужно выполнить. Для этой задачи действительно не требуется топологическая сортировка, достаточно реализованного обхода в глубину.
Далее мы решаем исходную задачу, где, по завершении обработки вершины внутри функции DFS, добавляем ее в конец вектора с результатом. Так мы гарантируем, что от добавленной на текущем шаге вершины будут зависеть только вершины, добавленные в этот вектор ранее, связей с вершинами, добавленными после текущей, не будет. Именно так и работает алгоритм топологической сортировки. В самом конце мы выводим этот вектор в обратном порядке и получаем ответ задачи.

Это свойство DFS. Он всегда сначала выйдет из вершины, от которой ничего не зависит. В противном слечае, ДФС бы зашел в зависимую вершину и вышел из нее раньше, чем из текущей. Поэтому достаточно выводить в ответ вершины по мере выхода из них (будет развернутая топологическая сортировка).

Господа, нубов хорошо прогибать на базовую алгоритмику, но прикладная соль в том, как можно оптимизировать алгоритмическое решение задачи, если компании доступны статистические данные о предыдущих попытках решений. Условно, если предыдущие таски А выполнялась 10, 60, 20, 5 сек, а таски Б — 1, 1, 3, 10 секунды, то это может изменить правила игры. Скедулер без накопления статистики неполноценен.

Пермутации бинарных деревьев обычно интересны в двух состояниях — максимально сбалансированным и максимально несбалансированном, даже не знаю, зачем могут потребоваться остальные.
Only those users with full accounts are able to leave comments. Log in, please.