Комментарии 104
У Яши на прием стоит возрастной фильтр <= 40, их несколько раз ловили на этом, но они продолжают утверждать что его нет. Возможно в этом дело. Спасибо за статью.
По закону нельзя ограничивать - вот они и отрицают, а по справедливости имеют полное право сами устанавливать критерии, кто им нравится, а кто нет.
В результате люди, которых они не возьмут, тратят зря свое время
по справедливости имеют полное право сами устанавливать критерии, кто им нравится, а кто нет
По справедливости, компания вообще должна узнавать возраст кандидата только в тот момент, когда он пришел с паспортом и трудовой книжкой в кадры оформляться. Чтобы не возникало искушения нарушать законодательство.
А это две стороны медали:
Многие граждане, нанимая бригаду плиточников для ремонта квартиры - уже заранее формируют для себя критерии, кого они наймут, а кого нет, еще не спрашивая у работников, насколько они профессиональны как плиточники.
Было бы интересно, если бы законодательство обязывало вас нанять первого же пришедшего мастера - а ведь для компании по сути так и есть.
Но если кандидат вам не нравится по личному ощущению - вы его не наймете, найдя 100 причин, предложив мини-оплату или невыносимые условия работы.
Вместе с тем, это ваши личные заморочки, и возможно, кандидат отличный, просто "не ваш". А он тратит своё время на вас, не зная заранее, что вы уже всё решили, и чисто из вежливости морочите ему голову.
В случае компании "вежливость" - необходимость соблюдения законодательства.
Вот это - не очень хорошо.
Другой вопрос что сами критерии могут быть формальными и не вполне отражающими реальность: представлять себе, например, кандидата "40+" в виде дряхлого деда с ходунками, с пачкой парацетамола и карманным тонометром, который вот-вот кони двинет, прямо во время собеседования.
Они бы лучше взяли кого помоложе, вон того парня с ноутом, сидевшего в кафе, например - но он к ним не придет, потому что его резюме с возрастом "40+" только что завернул HR.
законодательство обязывало вас нанять первого же пришедшего мастера
Ну не совсем) Я частный заказчик, а не юр. лицо и для нас правила разные. Работодателя не заставляют брать первого, но заставляют "избирательно не игнорировать" людей по возрасту. Близко, но не то
представлять себе, например, кандидата "40+" в виде дряхлого деда с ходунками, с пачкой парацетамола и карманным тонометром
В представлении 22-летней эйчарши всё примерно так и выглядит)
еще не спрашивая у работников, насколько они профессиональны как плиточники.
Но Yandex же спросил, и не один раз.
И не просто спросил, а оценил, "измерив".
Было бы интересно, если бы законодательство обязывало вас нанять первого же пришедшего мастера - а ведь для компании по сути так и есть.
Так не есть.
Компании же не нанимают "первого же пришедшего мастера", а проводят несколькодневные собеседования. Также и я буду проверять плиточника на знания и умения, а не его хобби, увлечения и возраст. Пускай он будет старым, но искусным мастером, чем молодым дебилом.
Но почему эйчар сразу не отсеял кандидата, если он не подходит по возрасту или какому-то другому формальному критерию?
Неправда. Я знаю человека, который также через WO получил весьма достойный оффер от Яндекса и ему 45+. И еще пару 40+ не через WO, а "просто собеседования".
Я после 40 без опыта устроился в Яндекс
Забавно, а мне до сих пор приходят приглашения на скрининг от рекрутеров)
ну меня в мои 50+ вполне брали, но за десять финальных собесов с командами в итоге не сошлись - с кем задачами, с кем деньгами.
Потенциальную ЗП хоть обговорили перед началом этапов?
да.
хорошая новость в том, что на маленькую зп достаточно алго-секций, без архитектурной.
хорошая новость в том, что на маленькую зп достаточно алго-секций
Прочел вот эту часть фразы и думал что это сарказм, а оказалось - нет, великое достижение, конечно (Тут сарказм) :)
маленькая зп - это для junior-позиций, видимо? Или они готовы тимлида брать на маленькую?
честно, не осведомлен о том какие грейды как называются, и какая сетка.
я назвал сколько мне надо, они сказали что это сегмент выше среднего и требует пройти архитектуру.
если бы оказалось, что это должность называется, например, "ведущий junior", мне не принципиально - должностями в наше время никого не удивить, и я ими уже переболел.
Мне сказали на собесе с HR, что кол-во секции зависят от позиции. Вроде у них есть такие варианты как сениор, тех лид и тим лид, на эти позиции нужно пройти архитектурный собес. Все что ниже только первый собес по языку - на котором нужно написать простой алгоритм или задачу и второй - где нужно написать миниму два алгоритма с оптимальным потреблением времени и памяти, если не получиться то не проходишь. Так же я читал отзывы тех кто проходил, и подметил что чем выше позиция тем более сложные алгоритмические задачи.
Вообще у них на сайте подробный гайд. Они мне предложили ЗП такую же как у других вакансиях на рынке в РФ, для моего уровня, я так понял на сениора ожидаемая оптимальная ЗП это 400.000 рублей. наверное можно чуть выше или чуть ниже. Что соответствует цифрам на getmatch например.
Поскольку для успешного прохождения их собеседования от меня требовалось специально готовиться, пока я это делал, я успел пройти другие собесы и получить оферы как миниму не хуже.
По мимо 4х начальных сосесов - HR(задает вопросы по языку и технологиям), секция по языку, секция по алгоритмам, секция по системному дизайну. Нужно ещё проходить один или два собеса с командой в которой открыты вакансии(Про два собеса я читал истории в сети, тех кто проходил). На мой взгляд это какая то жесть. Учитывая что яндекс платит ЗП такую же как в других местах - выглядит странно. Но нужно отметить что вроде как яндекс, дает сотрудникам опционы. Мне про это ничего не говорили, просто читал в сети. Может быть с опционами у них действительно хорошее предложение.
Итого, стало понятно что они копирую процесс найма FAANG, как и все остальное, кроме суммы ЗП :)
Мое мнение яндекс это для тех кому очень хочется там работать, потому что ему просто нравиться эта компания или хочеть поучаствовать в разработке - высоконагруженных систем.
Если вы, хотите пройти собес в Яндекс - нужно готовиться хотя бы за пол года, если до этого нет схожего опыта.
Плохая новость, что среди крупных компаний они предлагают ЗП ниже средней, а при оффере ставят ЗП не ту на которую договаривались, а, условно, на 20% ниже, с обоснованием, ну мы же Яндекс, гордись что вообще предложили работу.
Рекрутер предлагает попробовать еще через полгода (!).
А что должно измениться
Очевидно же! Будет другой интервьюер.
Не только. Из Яндекса за полгода могут уволиться люди, которые были лучше собеседуемого )) Или появиться новые задачи/проекты, где достаточно и более слабых скиллов. Да много всего может измениться за полгода. Яндексу просто нравится, когда к ним в очередь стоят люди, это позволяет увольнять без жалости текущих сотрудников, т.к. новые все равно быстро набегут )))
Да и соискатель подрастет в скиллах
Очевидно же! Будет другой интервьюер.
Совершенно не очевидно.
Неожиданно?
Яша на самом деле берет ребят 40+, но это личные рекомендации и звезды индустрии - т.е. повышенные требования к опыту и знаниям, нежели к 25-ти летним.
Все эти этапы нужны: 1 - для ментальной оценки (когда в целом понимают, что ум живой), 2 - для формального отказа - когда видят супер сеньера, мечтающего наконец-то попасть в бигтех после ООО Рога и копыта, но можно без обид сказать что секцию не прошел (хотя я знаю много ребят, которых брали, несмотря на то, что алгосы прошли слабо).
Совет такой: если вы чувствуете, что были хороши на собесе (хотя это может быть лишь субъективный взгляд) и больше уже не выдадите, то не нужно тратить время (всё равно зае*ут). Если понимаете, что могли бы ответить лучше, то попробуйте ещё (всё равно типичные алгосики надо знать, а саморазвитие не помешает).
Все эти этапы для этого не нужны.
Для того чтобы сделать "ментальную оценку" не нужно 3 технических этапа, достаточно одного. А формальный отказ можно вообще не обосновывать или придумать обоснование за 7 секунд. Если для этого нужно 10 этапов собеседований, значит вы тратите деньги на то, что можно легко получить бесплатно.
Чтобы нанять кого-то, надо понимать, кто вам нужен и уметь проводить собеседования. И делать это должен нанимающий менеджер или его доверенное лицо, а не какой-то корнеплод, живущий на горе, который вообще никакого отношения к предстоящей работе не имеет.
Я где-то читал что проводят несколько "одинаковых" этапов чтобы исключить фактор субъективности вопрошающих. Ну и вопрошаемый тоже может психануть/затупить - а тут ему: второй шанс. Тоже, конечно, калька с зарубежных компаний. Вариант когда конкретная команда сразу собеседуют на нужную ей должность мне нравится больше. Но возможно ли это для крупной лавки - не знаю.
Два алгоритмических этапа по сути были одинаковыми, неясно, почему их два
как говорят сами интервьюеры, итоговую оценку этого этапа берут по среднему, чтобы исключить предвзятость одного мнения
иногда бывает и три этапа, если оценки на первых двух сильно расходятся
нужно при рекурсивном обходе сохранять вершины в мапу, где ключ — Set вершин
Всегда завидовал (и буду завидовать) людям которые с ходу такие решения придумывают. Хотя казалось бы очевидно - пиши в ассоциативный массив и жди когда ошибка вернется.
Автор, подскажите - вы такое или похожее решение из leetcode/hackerranck взяли, из реальной жизни или из профильного образования?
да, тоже завидовал и завидую. Работаю в разработке уже чтобы не 10 лет, но каждый раз что-то спрограммировать - иду ищу референсы или методом перебора, не получается с нуля.
Как именно научиться программировать, именно так мыслить - без понятия, такое ощущение, что мне больше другие задачи подходят. Но какие они - я не знаю, а работаю как разработчик, так и живём)
собственно решайте задачки на leetcode, и смотрите решения (только самые лучшие порой такие упоротые)
на leetcode мне прям намного больше нравятся, чем платформа яши для спорт программирования, потому что там сигнатура метода указывается и дата класс (case class для scala) дают, не надо все из инпута текстом брать и в аутпут класть.
что касается решения, это в разговоре с интервьюером всплывает - ты говоришь 1ю версию "ну вот так", он отвечает "а мне надо быстрее" - ну тогда вот map c O(1).
Просто когда это надо сразу сказать, подвисает пауза, и ты начинаешь тупить - в IDE и с проверочными тестами а-ля Leetcode намного проще все было бы.
Такая же проблема) коллеги прям сходу могут решение подсказать, а я сижу иногда по пару дней и что-то выдумываю. Я вижу проблему так - я не хочу тратить своё личное время на развитие в этой сфере и собственно его и нет)
Есть мнение что спортивное программирование это плохо для прода. Чел вместо использования проверенной либы пишет свой велосипед. И даже если он без ошибок и написан быстро, поддерживать его будет дороже,.
самое забавное это когда на такие статьи (годная статья) начинают отвечать те, кто сидел(сидит) по другую сторону экрана - и при этом отчаянно поддерживая автора.
А хорошая идея, написать и продавать книгу "Подготовка к дурацким интервью"))
А то, что не пытали Кафками и остальными кликхаусами, мне понравилось больше, чем когда меня завернули с СД собеса в Авито, и одним из пунктов в фидбеке было, что не правильно выбрал БД, а на интервью я сказал, что нужно конкретно погрузиться в возможности существующих, потому что за свою, тоже немаленькую, 20+ летнюю карьеру, работал плотно с 2-3, да и то, не парясь особо, вообще, такие нагрузки, как им нужно, только в паре российских компаний да 4-5 зарубежных, и то, с этим горизонтальным масштабированием вообще хоть на пхп все пиши и не парься.
Мне современное IT все больше напоминает вырождение некоторых восточных боевых искусств. Вроде бы исходный смысл - профессионально бить морду а превратилось все в танцы и упражнения. Мастер, не тот кто победил определенное количество бойцов или выиграл сколько то там соревнований. Нет, мастер это тот кто правильно выполнил ката на экзамене. Ката - это набор формализированных упражнений изображающих бой.
Вот современные собеседования мне напоминают тоже самое. Сначала появился культ алгоритмов чтобы человек тратил на это свою жизнь чтобы потом работать на работе где это все никому не нужно. Потом появился идиотский культ system design. Причем, последний же может быть полезным и применимым. Но нет, сделаем из него ката: спроектируйте сокращатель ссылок, спроектируйте youtube, изобразитель из себя аналитика с умным видом задающего вопросы, учитесь делать бессмысленные упражнения с которыми вы никогда не столкнетесь а если и столкнетесь то эти знания вам никак не помогут.
Как итог интервью превращаются в набор дебильным ката-упражнений оторванных от реальности. А ведь можно было бы подключив голову делать и нормальные практичные алгоритмические секции и прикольные system design секции и еще что-нибудь. Но для этого нужно голову греть а современному it-элитарию ближе философия "обезьянка видит у западной компании - обезьянка повторяет".
Сначала появился культ алгоритмов чтобы человек тратил на это свою жизнь чтобы потом работать на работе где это все никому не нужно.
Самураю, не знающему алгоритмы,
Не нужны алгоритмы.
По меркам собесов яндекса я - самурай, не знающий алгоритмы. Но при этом осмелюсь предположить что на одном из бывших мест работы я реализовал больше уникальных алгоритмов, чем реализует среднестатистический работник современного яндекса.
Алгоритм - это шаблон. И для него скорее всего давно написана библиотека, на любом доступном языке.
Так потом и появляются идеи "давайте программы нам будет писать ИИ?" - потому что ИИ лучше всех знает алгоритмы, и скорее всего даже перечислит все языки, на которых они реализованы.
Во времена популярности Delphi на форумах регулярно появлялись новички с вопросами вида «с помощью какой библиотеки можно сделать свой 3ds Max?».
То, что ответом было «никакой», я надеюсь, понятно.
Сейчас аналогичная картина, но вместо начинающих дельфистов у нас адепты сект «всё уже написано» и «Святого Всемогущего ИИ».
Чтобы взять готовую реализацию алгоритма, нужно понимать, какой алгоритм тебе примерно нужен. А для этого нужен кругозор в том, какие алгоритмы есть. И именно с этим у сторонников точки зрения «алгоритмы знать не надо, уже есть готовые реализации» могут быть проблемы.
Поиск решения задачи - это не то же самое что знание алгоритмов.
Чтобы взять готовую реализацию алгоритма, нужно понимать, какой алгоритм тебе примерно нужен.
Достаточно знать, что такое complexity, и какие complexity внутри у тех методов из либ/API, которые и делают всю "магию". Если пишешь какой-нибудь NodelistJ - уметь считать complexity, и при необходимости поправить код на более оптимальный. И вот тогда иногда и понадобиться копнуть вглубь во всю эту "магию".
раскрываю секретный секрет, как выбирать алгоритмы, например, сортировки
1) пишешь library_name.sort()
2) в тот момент, когда тебе не хватает п.1 - идешь гуглишь "sorting algorythm for X"
3) пишешь library_name2.stalin_sort()
Очень похоже. Аналогично БИ, появляются ИТ "школы", замороченные определенной архитектурой ("школа микросервисов") или даже определенным сценарием взаимодействия сотрудников ("школа аджайл"). У этих школ есть свое "писание", в виде известных книг или "манифестов". Есть уверенность во всемогуществе принципов школы, и в том, что вне школы все криворукие дураки.
А если что-то пошло не так - "школа" не может быть виновата. Просто конкретный адепт недостаточно хорошо упражнялся, и еще не постиг сути школы. Надо больше ката делать.
Вообще‑то он параллельно занимался своими делами
Он там вроде бы в процессе комментарии пишет.
Типа: завис на таком-то моменте, не может найти ошибку в граничных условиях, нашел ошибку после наводящего вопроса и т.д.
Не знаю наверняка, но подозреваю, что этот блокнот (почему не IDE?) синхронизирует по времени написание кода и этих комментариев, чтобы при желании можно было прокрутить запись процесса.
Надо еще током бить допрашиваемого, и реакции на самописец писать :)
Потому что не должно быть зависимости от IDE.
Что за программист, который не может написать программу в Блокноте/VIMе ?
Я такой в какой-то мере.
Простые вещи могу, конечно, но помнить все методы какого-нибудь String или Vec в Rust например я не хочу. Не говоря уже про типы из библиотек внешних.
Я примерно знаю какие методы там есть, но не их имена наизусть (они иногда не очень очевидны), и автокомплит с документацией позволяет мне быстро найти то, что нужно.
Обычно, при таких вводных никто не докапывается до названий методов. Не должны, во всяком случае.
Вот именно. Потому что смотрят не на то, какая хорошая у человека память, а на то, каким путём он проблему решает.
Это если адекватный интервьюер. А иногда требуют чтобы оно собралось, выполнилось, и выдало нужный результат.
Что за программист, который не может сразу написать код на перфокартах или скомпилировать его в уме в машинный код?
Чего уж, давайте идти дальше — без стандартных библиотек, без спецификации языка, без документации, без компьютера…
Как в школе на контрольной по информатике. Алгоритм на листочке из тетради на Паскале..
Кроме шуток, в 1998-м на первом курсе университета у меня не было компьютера. Так что задания по информатике так и делал, на большой простыне по шагам работал белковым интерпретатором. "Вечный календарь", помнится, всю ночь так отлаживал. Не умер, последствий для психики особых не просматривается. Повторять не хочу.
а, ну понятно теперь, зачем вам нужна IDE - и почему не нужны "рабочие столы" )
Так-то в нормальной обстановке (не экзаменационной) обычно ничего не мешает на соседнем рабочем столе раскрыть маны по любым возможным функциям, и не завязываться на возможности редактора кода.
"Что за программист, который не может написать программу без компьютера" (Ох, святые 90е, мы программировали как могли. Натурально писал на бумаге, чтобы на уроке информатики просто вбивать и отлаживать).
"Что за программист, который не может написать программу без IDE" (помню, помню: Notepad, порой даже тот самый роскошный с "++")
"Что за программист, который не может написать программу без гугла" (тогда я писал под винду, и имелся дистриб MSDN на двух, что ли, CD)
"Что за программист, который не может написать программу без StackOverflow" (Не, ну а я-то тут причём, если они проплатили гуглу первые позиции?! /sarcasm/)
.. мы находимся здесь ..
"Что за программист, который не может написать программу без LLM" ("Этот год был трудным" (с) и всё такое. "С новым 2026-м годом Вас, дорогие россияне!")
"Что за LLM, которая не может..." А не, пока не буду.
В общем, я про что. Давайте не будем брюзжать :)
Что за столяр, который не может без станков и проф. инструмента сделать качественную мебель/дверь/оконную раму. Вот тебе ручная дрель, кривая пила, ржавая тупая стамеска и молоток, иди делай. Можно, но очень долго? А ты быстро сделай, как будто станками пользуешься, медленно любой дурак может.
IDE - это профессиональный инструмент профессионального программиста, в котором он профессионально работает. Он потом на работе тоже будет в notepad код писать?
Тут как разница между устным экзаменом и письменым с учебником. Во втором случае надо гораздо более детальный и полный ответ давать. Если сделал ошибку нельзя заметить округляющиеся глаза преподавателя и быстро исправиться. Поэтому я бы предпочел устный экзамен - если хоть немного подготовиться, то он на порядки легче.
Так и тут: от вас не требуют компилируемого кода. Опечатки, пропущенные точки с запятой и перепутанные параметры у функции из стандартной библиотеки вообще никак не понижают бал. Главное - выбрать правильный алгоритм и записать его в коде.
Да вроде для этого достаточно писать экран двух людей, нет?
Опять эти программисты чего-то там напридумывали, вечно всё не как у людей </sarcasm>
в процессе комментарии пишет
Так и есть. Меня один даже об этом предупредил.
Автор, вы просто программировали, но программировали без уважения
Я сегодня не прошел алгосекцию к ним, собеседующий мега деликатный чел с которым было приятно общаться, остался доволен
Ну и по мне это самый быстрый способ выйти на работу, чем откликаться на тысячи вакансий месяцами, потом еще теребонить пяткой или делать тестовые
Сугубо мое мнение
Но вы не прошли секцию алгосов потому что до этого не тренировали их написание полгода или год. Так что не соглашуть что это самый быстрый способ.
Ктото решает судоку, ктото кроссворды
Для меня это литкод 200+ решенных задач, но за 3 года
Это в целом неплохо для студента, либо того, кто только что им перестал быть. Времени довольно много свободного, опять-же обучаться надо, есть время и мотивация на то что-бы зависать на литкоде. А вот для уже работающего специалиста.. После работы мало у кого будет желание еще и литкодовские задачки решать, разумеется если работа тебя нормально загружает, тут уж не до кодинга в свободное время. А без практики все эти задачки решаются очень туго, в обычной работе редко приходится что-то подобное делать.
Соглашался раз в н лет с ними поговорить и всегда фейспалм. Последний раз обе секции вел один человек, в том числе МЛ-секцию принимал бэкендер. Синьорская или лидовая МЛ позиция была. Записывать видео они не хотят, а зря.
Какой-то треккинг кандидатов у них появился, а то раньше ломились с разных аккаунтов массово. Но работает ещё странно, возможно не пишут или не читают. Так как через полгода опять пишет рекрутер, "предлагаем вам позицию бэкендер(!)"
проговаривается наполовину или меньше, а вторую половину кандидат должен клещами вытягивать из интервьюера
Без чёткого ТЗ, результат хз. Честно, это какой-то бред. Максимально абстрактная задача, которая так же решается максимально абстрактно исходя из фантазий интервьюера.
Причём, помню на одном проекте хотели использовать один из их продуктов. При ознакомительном звонке (у них есть такая бесплатная услуга), на объяснения заказчика из разряда (а вы решите нашу проблему, если купим?), что-то не применили архитектурные навыки, абстрактного проектирования (как у автора), а затребовали у тех. специалистов (т.е. у нас) подробную информацию с технической стороны проекта.
Ну так это же, похоже, задача "на опыт": если вы делали что-то подобное и задача знакома - вы зададите один вопрос: "это то, что я думаю?" - и сделаете.
Если незнакома, но вы работали с заказчиками и умеете "добывать" из них ТЗ - зададите несколько вопросов и сделаете.
Если просто кодер - ну да:
- вот, стол как вы заказывали
- но у него же две ножки, он падает?!
- как вы заказывали.
Звучит как типичное собеседования в гугл/фейсбук/амазон.
У этих ребят у самих "корона" которую не мешало бы сбить, для их же блага. Интервью не мешало бы записывать, и потом делать ревью хотябы одним-двумя людьми. А то может там самовлюбленный школьник сидит, натасканный на олимпиадных задачках, заворачивающий хороших кандидатов.
Очень сильно понимаю и поддерживаю, поделюсь своим видением собеседовании в яндекс.
Лично для меня все алгоритмические собеседования - это по идее проверка на базовые вещи, то есть отсев всех, кто опыт себе приписал. Но боже мой как они меня всё же бесят, просто потому что... Я хоть и инженер разработчик, но я сильно вырос и прошу много денег, а чтобы деньги мне платили я должен чем-то уникально сложным заниматься либо же решать непосредственно бизнес задачи а не просто задачи "напиши чтоб работало". И поскольку я ушёл куда-то в более масштабное, то я уже вряд-ли с ходу напишу тебе правильный условный SQL запрос с оконными функциями, group by, having, order и with CTE, параллельно рассказывая про primary key, foreign key и типы данных. Естественно, когда я ошибаюсь в таком, то проваливаю первый этап и не иду дальше 😅 и бесит не то, что я не прохожу, а то что задачи не моего уровня)) мне надо понимать значение для бизнеса и я тебе на словах расскажу как это должно работать, а для написания я найду / вспомню как именно это сделать. Но нет, на этом этапе важно именно как ты сделаешь чётко поставленную задачу (которых редкость). И будут сравнивать с олимпиадниками. надо отметить, что у некоторых возможно заполыхает, мол, типы данных и отличие ключей это ж база! Ну да, база, но блин, когда я работал с Oracle, MS SQL и PostgreSQL я открыл для себя удивительный мир разность данных и какие значения может хранить primary key в зависимости от БД. Так что да, на такие вопросы ты ответишь легко если постоянно занимаешься ими, но когда ты уже думаешь о том как сбор данных может повлиять на бизнес процесс и что можно сделать для user friendly интерфейса / experience, то тут ты не думаешь о типе данных и физическом join таблиц.
Так вот, продолжу. Да, бывает, что тебя валят (хз зачем), и как отметил автор - ставят задачи оторванные от реальности. На моей практике было что-то вроде "богатый айтишник купил всю деревню и захотел подравнять все заборы. Напишите программу, которая сделает это". Что? Богатый айтишник купил всю деревню? Вы считаете себя богатыми настолько, чтоб купить всю деревню и ещё заняться тем, чтоб подравнять заборы? А вам нужна для этого программа?
После такой постановки сразу хочется выйти из созвона. Они вообще думают что пишут? Если вам не кажется постановка задачи выше чем-то странным, давайте я предложу другое. Богатый айтишник купил еврейскую деревню и понял, что жителей чо-то слишком много. Напишите программу, которая будет запускать газовую камеру, только если в ней будет как минимум 1 человек отличной от вашей национальности. Ничего не полыхает? Тоже хочется просто кодингом заниматься?
Короче я так понимаю яндекс хочет нанять только удобных и исполнительных, но не тех, кто головой думает масштабнее. Мне так кажется. Со временем возможно что-то изменится и вы найдёте меня в числе сотрудников яндекса и припомните мне этот комментарий))
Не писал на Хабре 7 лет на данную тему, а оказывается все еще есть желающие работать в Яше и проходить унижения их собеседований... Чудны дела твои Господи...
Ну давай по честному - кто-то, как я, не знал про унижения их собеседований и думал что "ну наверное это норма" или вообще ничего не думал а только знал про раскрученный бренд яндекса, в котором захотелось работать (прикоснуться к чему-то большому). Получается таким образом всегда будут желающие, пока этот прекрасный розовый мир яндекса не будет разбит массовой оглаской всех их нюансов и им нечего будет ответить)
не понял про заборы, если честно.
Там план плоский? Перепады высот, рельеф не учитывается? Выравнивание по рельефу или по горизонту? Заборы вокруг всех участков или только по периметру?
И что конкретно должна делать программа: составить список вызова специалистов, расчитать стоимость материала или управлять через Ардуино лазерной головкой, спиливающей заборы в радиусе километра?
А, и главное: автор подобного теста деревню вживую видел?
В общем-то похожий опыт. В weekend offer успел сделать только половину задания, второе провалиось, потому что пошёл ты. Отдельно зад горел от того что как проверка результатов сделана - была какая-то проблема с переносами в конце и половина валидных кейсов валилась. То ли вывод надо было чаще flushить то ли наоборот не флашить. пока newline не появится. Тупо минут 15 потратил на то чтобы понять в каком формате вывод предоставить.
Теперь регулряно HR что с яндекса, что внешние заспамливают почту предложением пойти в какой-нибудь отдел яндекса.
Судя по приведенному в статье коду, вам стоило бы таки по-серъезнее подготовиться к интервью. Там у вас в половине задач O(N^2) вместо O(N) понаделано. Если собственно решения задачи на интервью такие же, то я полностью согласен с интервьювером.
Можно прийти через пол года, подтянув теорию. Ограничения по времени делаются против брутфорса. Представьте себе экзамен, который можно пересдавать каждые пол-часа. Студент троешник выучит один билет и будет пересдавать, пока искомый билет не попадется. Вот тут примерно так же, только компания тратит кучу ресурсов на таких троешников, которые надеются, что рано или поздно им повезет.
С чем-то соглашусь, но и вам стоило бы посерьезней относиться к чтению текста, уважаемый отличник.
"а часок до собеса я спохватился и прорешал несколько задачек, что смог найти ". То есть речь вообще не о решениях на интервью, это не причина провала.
Это всего-то 4й абзац, а у вас уже внимание расфокусировано.
Представьте производственный процесс (допустим разработки ПО), где исполнитель ТЗ дочитал до 3 абзаца и пошел делать, что за шлак у него получится, и как его потом переделывать придется каждые пол-часа, вот и тут примерно также.
И да, там может быть неоптимальный код, но поскольку вы не указали конкретное место - ваше сообщение бессмысленно. Почему я писал, что мне больше нравится Leetcode, там рейтингуется решение по памяти и производительности, и можно все исправить (но отличники, несомненно, от ошибок и неэффективности кода застрахованы РЕСО).
Я код и выложил-то потому, что возможно кто-то готовится, и захочет пообсуждать, попереставлять байтики, улучшить сложность в О нотации, и в ходе этого процесса повысит свои шансы.
Далее по тексту - АЛГОСЕКЦИИ ПРОЙДЕНЫ УСПЕШНО (надеюсь хотя бы сейчас прочтете).
Кстати, там где интервьюеру не нравилась сложность, есть возможность улучшить, там все-таки не звери работают.
А проблема в интервью по архитектуре, к которой я готовился тщательно, внимательно перечитав несколько сотен страниц толковых книжек, что никак не помогло.
Вторая задача ОК, но вот первую вы решили явно не лучшим способом. Третью, подозреваю, тоже (впрочем совсем точно не скажу, т.к. не знаю детально как в Kotlin устроены массивы). Четвертую сам сильно не разбирал, но генерация лексикографически упорядоченных последовательностей это очень типовая в комбинаторике задача и, обычно, более эффективно решается без рекурсии (как у вас).
да, пробовал в tailrec переделать, сходу не получилось. но, наверное, как-то можно перебрать варианты и без рекурсии, усложнив алгоритм.
Там в постановке - нельзя сначала их все сгенерить, а потом отобрать корректные, считается ошибкой.
Есть итеративный алгоритм. Вроде алгоритма Нарайаны для генерации перестановок. Берем самую правую '(', правее которой больше закрывающих, чем открывающих и заменяем ее на ')'. Потом пишем все оставшиеся '(' и потом все оставшиеся ')'. Но это не будет быстрее или короче рекурсивного алгоритма, если количества уже поставленных скобочек каждого типа передавать в рекурсию.
Хотя и с tailrec все-таки можно:
fun main() {
val n =4
val res = mutableListOf<String>()
tailrec fun add(startList:List<String>){
val l = mutableListOf<String>()
for (start in startList) {
val o = start.count { it == '(' }
val c = start.count { it == ')' }
if (o == c && start.length == 2 * n) {
res += start
} else {
if (o - c < 2 * n - start.length) {
l.add(start +'(')
}
if (o > c) {
l.add(start +')')
}
}
}
if (!l.isEmpty()) add(l)
}
add(listOf(""))
println("4. $res")
}
//4. [(((()))), ((()())), ((())()), ((()))(), (()(())), (()()()), (()())(), (())(()), (())()(), ()((())), ()(()()), ()(())(), ()()(()), ()()()()]
Декомпиляция из байткода, где рекурсия таки развернулась в цикл while:
public final class T1Kt {
public static final void main() {
final int n = 4;
boolean var2 = false;
final List res = (List)(new ArrayList());
<undefinedtype> $fun$add$1 = new Function1() {
// $FF: synthetic method
// $FF: bridge method
public Object invoke(Object var1) {
this.invoke((List)var1);
return Unit.INSTANCE;
}
public final void invoke(@NotNull List startList) {
while(true) {
Intrinsics.checkNotNullParameter(startList, "startList");
boolean var3 = false;
List l = (List)(new ArrayList());
Iterator var4 = startList.iterator();
while(true) {
while(var4.hasNext()) {
String start = (String)var4.next();
CharSequence $this$count$ivx = (CharSequence)start;
int $i$f$count = false;
int count$iv = 0;
CharSequence var9 = $this$count$ivx;
for(int var10 = 0; var10 < var9.length(); ++var10) {
char element$iv = var9.charAt(var10);
int var13 = false;
if (element$iv == '(') {
++count$iv;
}
}
CharSequence $this$count$iv = (CharSequence)start;
int $i$f$countx = false;
int count$ivx = 0;
CharSequence var20 = $this$count$iv;
for(int var21 = 0; var21 < var20.length(); ++var21) {
char element$ivx = var20.charAt(var21);
int var14 = false;
if (element$ivx == ')') {
++count$ivx;
}
}
if (count$iv == count$ivx && start.length() == 2 * n) {
Collection var17 = (Collection)res;
$i$f$countx = false;
var17.add(start);
} else {
if (count$iv - count$ivx < 2 * n - start.length()) {
l.add(start + '(');
}
if (count$iv > count$ivx) {
l.add(start + ')');
}
}
}
if (!l.isEmpty()) {
<undefinedtype> var10000 = (<undefinedtype>)this;
startList = l;
break;
}
return;
}
}
}
};
$fun$add$1.invoke(CollectionsKt.listOf(""));
String var3 = "4. " + res;
boolean var4 = false;
System.out.println(var3);
}
// $FF: synthetic method
public static void main(String[] var0) {
main();
}
}
У вас тут фактически происходит обход в ширину дерева рекурсии. Только, если вы захотите его сделать ассимтотически оптимальным, вам придется еще значения c, o в списке хранить вместе со всеми возможными началами валидных строк текущей длины.
Еще всегда можно написать свой собственный стек и превратить рекурсивный алгоритм в итеративный. Потом можно любой итеративный алгоритм (даже тот, что я описал выше), записать в виде хвостовой рекурсии.
Да пора бы уже начать отказываться от этого цирка. И ладно бы условия были стоящими, так нет, вся отрасль сейчас скатилась на дно в плане заработка, при этом подбор продолжают закручивать и уже не знают как извернуться и какую секцию запехать. Какие то софт скилы, архитектура, которую спрашивать у рядового разраба бессмысленно. Жалко времени на это все, не понимаю, зачем люди туда идут.
Cтатья про собеседования в Яшу (Yandex Weekend Offer)