После 2-х лет разработчиком на С# в небольшой английской компании в сфере строительства, я решил выяснить свою стоимость как специалиста на рынке труда Великобритании. Несмотря на то, что большинство вакансий представляют собой примерно одно и то же: «Требуется человек-оркестр с 10+ лет опыта для очень интересной работы», — я специально выбирал позиции исключительно младшего разработчика, не содержащих цифр 5+, 10+ и 15+ в описании. Как это было — читайте дальше.

1. Дисклеймер

Эта статья два года лежала у меня в набросках, и я сомневался, стоит ли ее вообще публиковать. За это время некоторые детали историй были утрачены, но неадекват на интервью-допросах я помню хорошо. Описанные события происходили до пандемии, примерно в 2019-м. Поэтому в статье есть отличия от современных реалий. Например, очное собеседование, в котором сегодня практически нет необходимости.

2. Деревья

Холодным весенним утром я ехал на такси в аэропорт, чтобы отправиться в Лондон на собеседование на должность Junior C++ Developer. Небольшая компания, занимающаяся сетями и безопасностью, пригласила меня на личное интервью, после того как я потратил все выходные на выполнение их домашнего задания. Мне сообщили, что разработчики похвалили мои решения, однако у них были и некоторые замечания, которые они мне не скажут, чтобы их решения не слили в сеть. Это был предварительный тест, состоящий из десятка задач по массивам, указателям в C/C++, массивам указателей, числам Фибоначчи, а также статистике и одному теоретическому вопросу про метод finalize() в Java.

Никаких конкретных инструкций по подготовке к интервью мне не дали. Более того, сообщили, что никакой особой подготовки и не требуется. И вот я в самолете, сижу — читаю длинный список различий между Java и C#, просто так, на всякий случай. К чести компании стоит отнести то, что мне забронировали гостиницу на ночь перед интервью. Поэтому утром, хорошенько выспавшись, я отправился по назначенному адресу.

Встретил меня один из разработчиков, очень дружелюбно, и пригласил в стеклянную комнату, откуда был виден почти весь оупенспейс. Он расспросил, нормально ли я доехал, и рассказал, что делает компания. Потом я рассказал о себе. Он задал мне несколько технических вопросов и попросил решить пару несложных задач на доске. Потом он пригласил другого разработчика, с которым мы в деталях обсудили как я реализовывал проект научных вычислений на кластере с использованием С++. Он задавал исключительно осмысленные вопросы по моей теме, чем оставил хорошее впечатление.

После перерыва меня пришел собеседовать еще один товарищ, которого мне представили как высококлассного специалиста, который у них на полставки «решает проблемы бизнеса». Вероятно, увидев в моем лице очередную проблему для бизнеса, он решил сразу озадачить меня обходом бинарного дерева. К этому, признаться, я был не очень готов. И если простой обход я кое-как вспомнил, то какой-то хитрый подсчет суммы в дереве, где надо было использовать какой-то метод скользящего окна (попробуй придумать это, стоя у доски), я конкретно запорол. На этом интервью закончилось. Весь процесс занял примерно 4 часа.

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

В 2021-м я снова подал резюме в эту же контору, т. к. мне интересна данная сфера деятельности. Меня ожидали те же задачки и обычное, не изнурительное, в отличие от предыдущего, собеседование. И отказ без конкретики. Вероятно, в этот раз мои финансовые ожидания в £60K (среднее по рынку) показались им слишком большими. Мне говорили, что вчерашние студенты у них работают за «up to £40K», видимо намекая, какую зарплату стоит просить. Спасибо, но я уже давно не студент.

3. Сборщик мусора

Возвращаемся в 2019-й. Очередная компания, вакансия C# разработчика и снова тестовое задание. В этот раз мне предстоял онлайн тест по алгоритмам и структурам данных на сайте Codility. Суть теста — написать функцию, которая решает строго заданную задачу на любом из доступных языков программирования. Затем решение проходит несколько unit-тестов на скрытых наборах данных и, исходя из количества успешных тестов, формируется итоговая оценка.

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

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

Задан массив целых чисел из диапазона [-100; 100]. Максимальный размер — миллион элементов (или миллиард — точно не помню). Реализуйте эффективный алгоритм подсчета количества всех возможных непрерывных подмассивов, сумма элементов которых равна нулю. Если таковых больше миллиарда — вернуть -1.

Время выполнения программы ограничено, поэтому ни о каком O(n^2) или тем более O(n^3) не может быть и речи. Здесь пришлось изрядно попотеть, чтобы найти приемлемое решение, которое бы работало достаточно быстро для прохождения теста на время. Сложность своего решения я не прикинул, но предполагаю, что там было чуть хуже чем O(n*log(n)). В итоге я получил максимальную оценку 100 баллов из 100 по каждой из трех задач. Наверняка, в этой конторе не каждый день видели такой результат, и мне оперативно выслали приглашение на телефонное интервью.

Беседовал я с сеньором всех сеньоров (да, примерно так он и представился). Разумеется, ни одного общего вопроса или обсуждения решенных мною задач не было — это все пустая трата времени. Самым первым его вопросом было «Как работает сборщик мусора в .NET?» — да, вот так сходу. Ни здрасьте, ни наводящей дискуссии, которая обычно призвана подтолкнуть к ответу. Вынь да полож выдержку из runtime specification. Естественно, специфики .NET в этом вопросе я не знал, и прямо об этом сказал, но попробовал все-таки ответить по существу. Я рассказал, по каким принципам обычно устроены сборщики мусора — построение дерева ссылок, перепаковка объектов в памяти и т. п. банальные вещи. В ответ на это он мне процитировал спеку о трех поколениях объектов. С точки зрения интервьюера, знание конкретной реализации GC было особенно важно и моих общих представлений о нем было явно недостаточно.

Следующим вопросом было как устроено разрешение коллизий в Hashset. Я подумал, что он прикалывается, задавая настолько случайные вопросы. Вспоминая университетские лекции, я попытался рассказать о построении дерева хэшей и помещении коллизий в отдельную структуру, но я никогда не знал и не знаю, как именно это реализовано в C#.

Вероятно, какой-нибудь проницательный сеньор с 10+ лет опыта, читающий данную статью, уже испытывает негодование от недостатка квалификации автора. Действительно, как можно претендовать на работу программистом без должных знаний по деревьям, хэш-таблицам и сборщикам мусора?! Удивительно, как его вообще кто-то нанял разработчиком, а не листовки раздавать!

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

4. Вместо заключения

Здесь я планировал описать еще как минимум одно интервью, но все происходящее в нем было очень похожим: устранение пробелов в теории, тестовые задачки, странные вопросы на собеседовании, отказ.

Обобщив свой опыт, я могу сказать следующее — усиленная подготовка к интервью и проработка предыдущих ошибок ничего не гарантируют. Джуна можно спрашивать все, что угодно, и он вряд ли легко отвертится. Соискателей на младшие позиции валят на собеседованиях пачками, и для этого в компаниях, видимо, есть специальные «сеньоры».

Хорошо, скажет читатель, допустим, мы долго готовились и вызубрили спецификацию языка и всей его экосистемы. В таком случае, как насчет телефонного экзамена по математике? Или стресс-тестирования вопросами типа «кем вы себя видите через N лет» и «как быть, если ваш коллега — аутист»? Ах да, мы с вами еще забыли выяснить поведение случайного куска говнокода вне контекста и без метода Main().

Личное присутствие на интервью только усложняло ситуацию. Дело в том, что в 2021-м, с популяризацией удаленки, искать новую работу стало на порядок проще, чем в 2019-м. Сегодня не обязательно отпрашиваться у начальства и заранее получать разрешение на каждый чих. В те времена, до поездки на интервью, нужно было предварительно взять выходной, изучить расписание транспорта и спланировать маршрут в незнакомом городе, отчего многие собеседования превращались в сложный квест, и без того требующий плотной подготовки. Халатное отношение к соискателю впоследствии воспринималось как издевательство.

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

(Картинка с мусоровозом из этого блога.)

Комментарии (214)


  1. lamerok
    17.12.2021 19:10
    +25

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

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


    1. khim
      17.12.2021 19:57
      -21

      В общем, джун, это как стволовая клетка.

      А почему? Чем он 4 года в колледже занимался?

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

      Чтобы убедиться что материал всех 4х лет хорошо усвоен.

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

      Понимаете: вы, как и все соискатели, пишущие 100500ю статью на тему “почему у известных контор такие безумные собеседования” — смотрите на задачу со своей стороны (хотя иногда проблески встречаются, например соискателей на младшие позиции валят на собеседованиях пачками и для этого в компаниях, видимо, есть специальные «сеньоры» — это уже теплее).

      А смотреть нужно со стороны работодателя. Вы ж к нему идёте, а не он к вам.

      Не те книги вы читали, ох не те. Какой смысл вообще идти на собеседование, забыв знаменитое Паркинсоновкое:

      "Требуется премьер-министр Руритании. Рабочие часы - с 4 утра до 11:59 вечера. Соискатель должен выдержать три раунда с чемпионом в тяжелом весе (в перчатках). По достижении пенсионного возраста (65 лет) - мучительная смерть во имя родной страны. Если соискатель знает парламентскую процедуру лишь на 95%, он будет физически уничтожен. Если он соберет меньше 75% голосов при проверке популярности по методу Гэллапа, он также будет уничтожен. Кроме того, соискатель должен обратиться с речью к съезду баптистов и склонить их к изучению рок-н-ролла. В случае провала будет уничтожен.

      Явиться в спортклуб (с черного хода) 19 сентября в 11:15. Перчатки предоставляются; кеды, майка и шорты - свои".

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

      Что вас удивляет? Что у вас спросили задачку с LeetCode или кусочек спецификации языка, на котором вы уже не один год работаете? А почему нет, собственно? Это же улучшит качество не отсеянных кандидатов? Значит — годится.

      И да, если кандидатов не хватает требования приходится снижать. Об этом Паркинсон тоже пишет…

      А если не придет никто?

      Значит, в чем-то мы завысили требования.

      То же самое небольшое объявление предложим в измененном виде. Например, 95% заменим на 85, 75 -на 65, а три раунда - на два. И так далее, пока соискатель не придет. Предположим, однако, что придут двое или трое.

      Это покажет, что мы допустили промах в научных расчетах. Быть может, мы слишком занизили проценты - их должно быть 87 и 66. Как бы то ни было, дело плохо. В приемной два, а то и три соискателя. Надо выбирать, а мы не вправе тратить на это все утро. Можно, конечно, начать испытания и отсеять менее достойных. Но есть и более быстрый путь.

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

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

      А вы, не усвоив азов технологии собеседований, лезете в какие-то технические детали…


      1. Insty Автор
        17.12.2021 20:40
        +29

        Что вас удивляет? Что у вас спросили задачку с LeetCode...

        Ни в коем случае! Я обеими руками за LeetCode, и особенно за многочасовой LeetCode. Мне это очень помогает разобраться с вакансией и минимизировать затраты времени, связанные с ней.


        1. senglory
          17.12.2021 21:21
          -7

          Сарказм в отношении многочасовых собеседований выдает в Вас человека, не знавшего на своей шкуре что такое 2008, увольнения сотнями в NYC и виза H1B. Сейчас Вы просто наслаждаетесь рынком, который к Вам повернут лицом. Там получить приглашение на 3 интервью, каждое по 2 часа было за половину счастья и неделю радости.


          1. Insty Автор
            17.12.2021 22:06
            +44

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

            Что касается сокращений работников с визами в 2008-м. Эти люди когда-то приняли осознанное решение ехать за рубеж на жестких условиях с минимальными гарантиями. Отсутствие "плана Б" на случай непредвиденных обстоятельств называется халатная беспечность.


          1. v_sapronov
            18.12.2021 07:28
            +10

            А что было в 2008? Я начал ездить в NYC в 2009 и был настолько востребован, что в 2010 меня перевезли в NYC по L1 (а не по рабской H1B).

            Давайте предположу, может быть так: лишилась работы кучка бесполезных разрабов живущих на крошки со стола строителей пирамид Credit Default Swap (aka Lehman Brothers, Bears Sterns вместе с AIG). А разрабы в компаниях производящих реальную пользу (то есть в нормальных бизнесах - без признаков мошенничества) продолжила жить как и раньше.
            Расскажите мне, как важно учиться в колледже О-большому, чтобы не вляпываться в пирамиды из которых вас вышвырнут при первом удобном случае...


            1. Mox
              18.12.2021 18:34

              Это индивидуальный опыт, сокращения были по всей индустрии, даже в полупроводниках, сокращали целыми отделами.


              1. pkashtanov
                18.12.2021 23:53

                Было, было.


            1. ymishta
              18.12.2021 22:08
              +2

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

              У компаний, "производящих реальную пользу" вполне себе мог быть клиент, закредитованный по самую МакКинли. И не производящий столько "реальной пользы", но дающий ей основной cas flow. Он дохнет, а следом на улицу через пару дней идет вся компания "производящая реальную пользу". Скажете, нереальный сценарий? И кстати, да, к лету 2009 попустило, стали на интервью приглашать даже в другие штаты. А вот с августа 2008 по где-то апрель 2009 - писец...


              1. v_sapronov
                18.12.2021 22:20

                Я больше о том, что строить какие-то теории о том какие разработчики "должны быть" на рынке на основе историй, происходивших с программистами работающих тесно на нерыночные организации (которые и "упали" в 2008) - странное занятие. Подавляющее количество оказавшихся на улице программистов тогда - никчемные бездельники, которые существовали только за счет нерыночных механизмов, а не за счет знания большого-O. Но им, конечно, приятнее думать, что это все из-за их уникального ума и образования...

                Да, зацепило, наверное кого-то кто и был не при делах, но они спокойно отдохнули 3-6 месяцев, получили unemployment, и пошли дальше продуктивно работать (о чем ярко говорят данные уже 2009). Вообще, если нет буфера на 3-6 месяцев, то проблемы с финансовой грамотностью - не верен, опять же, что поиск в глубину поможет таким людям...


      1. lamerok
        17.12.2021 21:28
        +7

        А почему? Чем он 4 года в колледже занимался?

        А всегда ли в коледже дают, то что надо конторе? Ведь даже процессы разработки в конторах разные, по-моему, достаточно увидеть, что человек имеет базу и может самостоятельно разобраться в чем то. Что он обучаем. Вот зачем спрашивать обход деревьев, если в 99℅ это не нужно?

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

        Чтобы убедиться что материал всех 4х лет хорошо усвоен

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

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

        Не стоит ожидать от Джуна ответов на все алгоритмы и тонкости работы фреймворков.


        1. khim
          17.12.2021 21:39
          -18

          А всегда ли в коледже дают, то что надо конторе?

          Разумеется нет.

          Вот зачем спрашивать обход деревьев, если в 90℅ это не нужно?

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

          Если он в колледже, вместо того, чтобы учиться, водил романы с барышнями — где гарантия, что он у вас будет чем-то другим заниматься?

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

          Бред какой. Послдний раз я Кормана открывал больше 10 лет назад, но это не мешает мне спокойно решать все эти задачки с собеседования.

          Они ж простенькие все, никто не будет вас просить писать что-то, что потребует больше 100 строк кода.

          Не стоит ожидать от Джуна ответов на все алгоритмы и тонкости работы фреймворков.

          А чего, извините, от него ещё ожидать? Самое же главное ведь даже не то, сможет ли он чем-то там обучиться. Куда важнее другой вопрос: а захочет ли?

          И задавая вопрос про деревья вы, одновременно, отвечаете на оба этих вопроса.

          Да, только у тех, кто учился в колледже, но в чём проблема-то? Отсевом остальных можно просто пренебречь. Читаем Паркинсона ещё раз.

          Но сейчас мне это не надо, у меня есть 1 ассемблерная команда, которая это делает. И я их все забыл.

          Но сейчас вы же и не будете на позицию джуниора устаиваться.


          1. OldCold
            18.12.2021 14:53
            +8

            Но сейчас вы же и не будете на позицию джуниора устаиваться.

            Т.е. джун должен быть умнее мидла?


            1. Areso
              19.12.2021 23:35
              -1

              Таки да.

              А миддл должен быть опытнее джуна.


          1. michael_v89
            19.12.2021 09:47
            +4

            Если он в колледже, вместо того, чтобы учиться, водил романы с барышнями — где гарантия, что он у вас будет чем-то другим заниматься?

            Если он в колледже учился и не водил романы с барышнями — где гарантия, что он у вас будет этим же заниматься?


      1. HaxeZ
        17.12.2021 22:08
        +32

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

        Во-вторых, Вы в корне не правы касательно взгляда на процесс труда. Не я ищу помощи, а компания. Я чудесно смогу кодить и без работы в компании (думаю у большинства разработчиков есть pet-project или даже несколько), а на поприще фриланса, по крайней мере в области front-end'а, достаточно работы, чтобы деньги на жизнь были, от простой вёрстки до SPA с возможностью выбора фреймворка. Развиваться я прекрасно могу самостоятельно, мои знания от компании тоже зависят в меньшей степени. Так что мне не нужна компания для постоянно работы. А вот разработчики ей нужны, без разработчиков компания не сможет создавать и поддерживать свои IT-продукты, получать прибыль, расти и развиваться. Открывая вакансию работодатель просит помощи у соискателя, предлагая обменивать время жизни человека на деньги во благо организации, выполняя поставленные задачи. Да компании и работники взаимозаменяемы. Но вот беда, без работников компания умрет, но без компании работник жить сможет. Я не должен вставать на место работодателя, это его дело и его проблемы, я выполняю задачи и получаю за это оплату, интересны компании и мои не пересекутся, и уж точно мои не станут ниже по приоритету. Я откликаюсь на просьбу о помощи, так что это не мне нужен работодатель, это мы его необходимы.

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


        1. werpo
          17.12.2021 23:09
          +3

          но без компании работник жить сможет.

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


          1. Areso
            19.12.2021 23:02

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

            Понятно, что последний айфон с таким lifestyle не купить, но у меня вот тоже нет айфона или аналогичного флагмана на Андроиде, хотя вроде работаю, и работаю немало.


      1. KvadratnyiKoren
        17.12.2021 23:59
        +3

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


      1. xJAYx
        18.12.2021 05:12
        +7

        Ваше ЧСВ не соответствует вашим знаниям, вы мне написали в ЛС такой бред и еще и оскорбили меня.

        Советую почитать статью:

        main.dvi (cmu.edu)

        Чтобы не позорится в будущем.


        1. khim
          18.12.2021 14:12
          -7

          Почитал. Тот факт, что до 1997го года проблема не существовала и, соответственно, в тех книжках по которым я учился, упоминаться не могла, оправданием являться не может, как и то, что проявляемые симптомы ровно такие же, как у проблем с кешами (ровно потому что речь идёт, фактически, о кеше внутри планки памяти).

          Самое обидное, что о том факте, что SDRAM, в отличие от более ранних DRAM, может выдавать более одного бита после “открытия” строки я когда-то даже читал (да, собственно, на этом все эти DDR/DDR2/DDR3/DDR4/DDR5 основаны, иначе в них бы особого смысла бы не было). Но вот о том, что контроллеры SDRAM могут тупо не закрывать строку и продолжать её держать открытой после забора строки в кеш… даже не думал как-то. Интересно, что будет, если банально ничего не “оптимизировать” и передав столько байт, сколько нужно по протоколу, (для DDR5 это, соотвественно, 256 байт), закрывать строку? Точно потери в производительности будут настолько существенными, что это станет проблемой?

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

          Если вашей задачей явлеяется устройство на работу, то никакого троллинга собеседующих вы себе позволить не можете. Даже же вы хотите просто потратить их время… троллинг всё равно контрпродуктивен: обычно отказать таким кандидатам гораздо быстрее и проще, чем тем, кто чего-то не знает. Так что, в конечном счёте, вы своего времени потратите больше, чем рекрутерского.


          1. michael_v89
            19.12.2021 10:09
            +2

            Потому что что во время собеседования опции “я потроллю собеседующего, он “проникнется” и предложит мне работу его начальником” у вас просто нет.

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


      1. Forthright
        18.12.2021 13:55
        +4

        К чему все эти сложности? Я для вас придумал революционный способ, сокращающий расходы на найм и экономящий кучу времени и сил. Просто давать всем пришедшим на собеседование задачу подкинуть монетку 10 раз так, чтобы на ней выпадал только орёл. В среднем отсеивается 1023 кандидата из 1024. Добавляем броски если ожидается большее количество людей и отбавляем если меньшее. Идеальное собеседование готово (с поправкой на то, что может отсеяться больше или меньше нужного, но там уже если несколько человек справится, например, то можно им устроить бег на короткую дистанцию по офису, победителя принимают на работу), не благодарите.


  1. rdo
    17.12.2021 19:11
    -14

    А про что надо спрашивать джуниоров? Если я попрошу его рассказать этапы инициализации спрингового контекста, это будет вопрос хуже или лучше сборщика мусора?


    1. BasicWolf
      17.12.2021 19:26
      +22

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


      1. khim
        17.12.2021 21:23
        +1

        А зачем? Я понимаю, если бы джунов не хватало и за ними охотились бы… но ведь нет этого. Их на любую вакансию толпы приходят, задача же как-то из этой толпы выбрать двух-трёх.


        1. dimoff66
          17.12.2021 23:21
          +20

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


          1. khim
            17.12.2021 23:26
            +2

            Почему же бессмысленно? Умение реализовать обход дерева показывает, что собеседуемый:

            • Учился таки тому, чему должен был учиться на соотвествующем направлении

            • Способен обучаться в приципе и имеет желание это делать

            • Ну и умеет написать-таки какой-то код.

            Вполне себе пользительные качества, я бы сказал.

            А считалочка… да, веселее, но улучшить качество кандидатов она же неспособна.


            1. K36
              18.12.2021 15:58
              -3

              Умение реализовать обход дерева показывает

              Что голова у него забита бесполезными вещами.

              "Теперь забудьте, все, чему вас учили" (с)


              1. Alexandroppolus
                18.12.2021 17:38
                +4

                У нас на фронте задачи, связанные с обходом дерева, возникают регулярно.


          1. Fen1kz
            18.12.2021 01:12
            +3

            Сначала целиком был за ваше мнение, дескать "совсем офигели, джунов про бинарные деревья спрашивать", а потом понял что обход бинарного дерева это же тривиальщина. Ну типа visit(cb, node) {cb(node); visit(cb, node.left); visit(cb, node.right);}


            1. dimoff66
              18.12.2021 01:49

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


              1. dakuan
                18.12.2021 05:19
                +4

                Так а чем вам деревья не угодили? Если соискатель раньше сталкивался с ними, то набросает алгоритм обхода за пару минут. Если не сталкивался, то это как раз будет для него задачкой, проверяющей умение мыслить.


                1. N-Cube
                  18.12.2021 08:20
                  +8

                  Почитайте про индексные структуры автора базы данных SQLite Ричарда Хиппа. Который с командой таких же топовых спецов два десятилетия все еще оптимизирует "обход дерева":) Очень много нюансов с оптимизацией кэша, находится ли дерево на диске или в памяти или и там и там, и еще много всего. В PostgreSQL тоже регулярно оптимизации добавляют в обработку "обхода дерева".


                  1. dakuan
                    18.12.2021 09:59
                    +3

                    Читал :) Но вы серьезно от джуна это собираетесь требовать?


                    1. N-Cube
                      18.12.2021 10:48
                      +6

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


                1. sshikov
                  18.12.2021 13:13

                  Именно так. Мы знаем, что задача простая. Ну, если не углубляться, во всяком случае. Если он ее уже видел — он ответит сразу, и мы пойдем беседовать дальше. А если не видел — это и есть хорошая задачка на умение мыслить.


                  1. michael_v89
                    18.12.2021 15:47

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


                    1. sshikov
                      18.12.2021 16:09

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

                      А тем более, весь код обхода, по сути, уже выше написан, это однострочник. Хотите код поразбирать? Не вопрос, покажите ему вот это, и спросите, в каком порядке обход дерева в этом примере, и как модифицировать, чтобы порядок стал другим. К этой задаче можно подойти с десяти разных сторон, и видоизменять ее, меняя сложность на пару порядков.


                      1. N-Cube
                        18.12.2021 22:18

                        Если подразумевается реальная реализация - это, скорее, мультидерево с кэшем незакоммиченных изменений в многопоточном приложении, и поиск оптимальной структуры данных и порядка обхода это предмет исследований. Если вопрос теоретический - сейчас исследования ведутся в отношении методов создания конфигурируемых би-, квадро- и так далее деревьев и именно они представляют теоретический и практический интерес, пространственные индексы в PostgreSQL и SQLite посмотрите. А про чисто бинарные деревья новых публикаций уж с полвека как нет, ибо незачем - это сразу уточнять нужно, если спрашивающий полвека в анабиозе провел и задает чисто исторические вопросы :)


                      1. sshikov
                        19.12.2021 10:28

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

                        И не забудьте, что тут про джуна говорили.


                      1. N-Cube
                        19.12.2021 13:23

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


                      1. sshikov
                        19.12.2021 13:33

                        Я не очень понял, к чему вы клоните?

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

                        >Многие
                        По-моему выпускники ВУЗов по большей части новички в коммерческом программировании. Тупо потому, что они не программировали за деньги во время обучения, а все-таки учились. Это нормально, и я бы не ждал от них, что они как раз это хорошо понимают.


                      1. N-Cube
                        19.12.2021 19:22

                        знает пределы применимости своих знаний

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


                      1. sshikov
                        19.12.2021 19:24

                        >Так что слушать надо на интервью, что кандидат может интересного рассказать
                        Конечно. Я вообще считаю, что любые задаваемые вопросы — в первую очередь повод поговорить. Потому что далеко не каждый способен внятно о себе рассказать сам — иногда разговаривать приходится.


            1. amarao
              18.12.2021 10:35

              Зависит от языка программирования. Игрища с указателями в Rust, например, это отдельная дисциплина.


              1. Fen1kz
                18.12.2021 11:49

                В статье речь про C# ¯\_(ツ)_/¯


            1. Korobei
              18.12.2021 23:37

              Надо проходить интервью

              как Траволта в фильме Феномен


              Поговорить о том что в дереве могут быть циклы, как эту проблему решить. Нужно ли обходить дубликаты (если они возможны). Спросить про направление обхода дерева. Как оптимизировать производительность если структура дерева не помещается в памяти, а подгружается блоками с диска. Упомянуть «вот у Кнута было, но сегодня я не согласен, так как с появением SSD ...»

              Наверное после такого код и не придётся писать.

              Я кстати сейчас собеседования прохожу на мидл- (хотя скорее даже джун+), в 90% всё очень адекватно, ну а большего и грех хотеть.


              1. random1st
                18.12.2021 23:49

                Это Траволта


              1. Fen1kz
                19.12.2021 02:03
                +2

                Не согласен. Если я прохожу собеседование, и я, и работодатель оба хотим, чтобы я начал поскорее получать задачи и денежки. В идеально честном мире собеседование вообще не нужно — я просто говорю свои знания, они — свои требования, всё:


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


                Поговорить о том что в дереве могут быть циклы, как эту проблему решить. Нужно ли обходить дубликаты (если они возможны). Спросить про направление обхода дерева. Как оптимизировать производительность если структура дерева не помещается в памяти, а подгружается блоками с диска. Упомянуть «вот у Кнута было, но сегодня я не согласен, так как с появением SSD ...»

                И вот это, как правило, уже лишнее. В 99% случаев, про деревья вспоминается только на собеседовании. Зачем? И уж точно джуну не надо знать, как оптимизировать насколько большое дерево, что его ещё надо на диск писать. Ещё и привязываться к SSD/HHD. Да и большинству сеньоров оно не надо. Не, правда, ЧТО вы разрабатываете для таких вопросов?


                Перечитал статью:


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

                Нет, всё таки офигели у джуна спрашивать подсчет суммы через скользящее окно.


                Я бы ответил — это преждевременная оптимизация, так делать не нужно.


                1. Korobei
                  19.12.2021 02:22

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

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


              1. Juninho
                19.12.2021 10:35

                Ну про время уже издевательство :)

                Хотя если вопрос "How old are you?" имеет ввиду сколько тебе лет, месяцев, дней, часов, минут, секунд в текущей часовой зоне, то ОК.


              1. stu5002
                19.12.2021 13:13
                +1

                В дереве не может быть циклов. Оно по определению ациклично.


                1. Korobei
                  19.12.2021 19:13
                  -1

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

                  Назначьте следующему элементу ссылку на родителя и получите цикл. Или ещё интереснее, ссылку на самого себя.

                  В SQL встречался с подобной прооблемой, когда использовал иерархические запросы через CTE.


                  1. sshikov
                    19.12.2021 19:40

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


                    1. Korobei
                      19.12.2021 20:40

                      Разницу я понимаю, но есть теоретия, а есть практика.

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

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


            1. fkafka
              19.12.2021 21:19

              а потом понял что обход бинарного дерева это же тривиальщина

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


        1. Politura
          18.12.2021 00:27
          +3

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

          Хотя в целом к алгоритмическим задачкам отношусь очень хорошо: мне кажется их решение развивает мозги, кроме того, дает более глубокое понимание кода, который ты пишешь, особенно касаемо алгоритмической сложности как самого алгоритма, так и используемых струкрур. Не очень приятно, когда UI тормозит потому-что там жабоскрип с 4-мя вложенными циклами написанных сеньером. Зато, наверное, все знает о поколениях сборщика мусора в C#


          1. khim
            18.12.2021 00:44
            -4

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

            Это в мире розовых поней так.

            Ваш же подход практически не отличается от подкидывания монетки.

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

            Какова вероятность того, что такой, с позволения сказать, работник, вообще согласится проходить ваше собеседование и какова вероятность того, что у него окажутся нужные для этого знания?

            Правильно: примерно где-то в районе нуля. Что снижает затраты на общение с ним как у инженеров, так и у HR.

            А вот как раз про разные “самые увлекательные для него проекты” он может много чего нарассказывать.

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

            Джунов нанимают для того, чтобы они делали что им скажут. Точка.

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

            И да, в принципе, ваши разговоры по душам тоже могут прояснить эту ситуацию, но они требуют гораздо больше усилий по интерпретации.


      1. rdo
        18.12.2021 10:37
        +2

        Какие вопросы? Если джун сказал, что работал со спрингом, тогда можно спрашивать про этапы инициализации контекста или все еще нельзя? А если он скажет, что работал с хибернейтом, можно спрашивать про про основные типы отношений, про требования к сущностям и вообще про внутрянку?
        Или если джуниор, то спрашивать можно только про метод save и findById, а остальное он знать не обязан, научите его сами?


        1. BasicWolf
          18.12.2021 15:59

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

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

          Задача-то не в том, чтобы узнать как хорошо джун умеет обходить бинарное дерево. Задача в том, чтобы понять, как быстро окупятся (и окупятся ли вообще) вложения копании в обучение джуна. Не так важно, что джун сможет сделать в течении следующих пол-года. Гораздо важнее, что он сможет сделать и кем он будет в вашей компании через год, два, пять лет.


          1. Zzzabiyaka
            18.12.2021 23:15
            +1

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


            1. BasicWolf
              18.12.2021 23:34

              Я бы сказал, что зависит от игры. Скажем если бы это были "крестики-нолики", "змейка" или "пинг-понг" - можно ли считать такое задание достаточным и не выходящем за рамки тестового?


              1. b237
                19.12.2021 14:19

                Смотря что ожидается в результате. Реализовать двумерный массив с поочередным вводом позиций крестиков и ноликов и проверку правил после каждого ввода можно быстро. Но для пользователя это выглядеть может по разному, от консольной программы, которая считывает позиции крестиков и ноликов из stdin и выводит получившееся поле в виде текста, до полноценной игры с графикой, сделанной на Unity например


              1. Zzzabiyaka
                20.12.2021 01:38

                Там просили полноценную игру на графическом движке с обработкой коллизий объектов и тд


        1. michael_v89
          18.12.2021 16:26
          +6

          Или если джуниор, то спрашивать можно только про метод save и findById, а остальное он знать не обязан, научите его сами?

          Если джуниор, то остальное он может не знать не потому что он фиговый программист, а потому что еще об этом не узнал в силу небольшого времени получения опыта.


          1. rdo
            18.12.2021 19:22

            Если джуниор прочитал только первую главу книги, а дальше не стал читать, "и так сойдет", то из него ничего хорошего не выйдет.


            1. michael_v89
              18.12.2021 21:01

              Возможно. А как это связано с тем, что я сказал?


              1. rdo
                19.12.2021 15:41

                Потому что условно говоря методы методы save и findById это первая глава книги, а то, о чем я писал это середина, даже не приложение. В любой книжке по хибернейту подробно разжевывают все внутренности фреймворка, а книжка про спринг всегда содержит разъяснение того, как работает вся "магия" аннотаций.

                И вот это "первоглавство" как раз часто характеризует выпускников курсов, которые сасм ничего не читали, а которым разжевали простейшие юзкейсы библиотеки/фреймворка.


                1. michael_v89
                  19.12.2021 17:17

                  подробно разжевывают все внутренности фреймворка, а книжка про спринг всегда содержит разъяснение того, как работает вся "магия" аннотаций.

                  Зачем джуниору подробное знание внутренностей фреймворка и принципы работы магии аннотаций? Если он хорошо в этом разбирается, значит сможет и сам такое написать, а если может сам написать фреймворк, то он уже не джуниор, а миддл. Умеет уверенно пользоваться, этого достаточно, остальное приходит с опытом.


    1. michael_v89
      17.12.2021 23:42
      +2

      А про что надо спрашивать джуниоров?

      Что в универе на лабах делал, что сам писал, как это работает.


    1. rjhdby
      18.12.2021 01:19
      +1

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


      1. rdo
        18.12.2021 15:05
        -2

        А вы часто используете в жизни знание, что Земля — неправильный сфероид?


        1. Fen1kz
          19.12.2021 08:03
          +4

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


        1. N-Cube
          19.12.2021 09:54
          +2

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


  1. duke_alba
    17.12.2021 20:23
    +33

    Я много собеседовал джунов и подход был совсем другим.

    1. Попросить описать "так, чтобы дурак понял" наиболее интересную задачу из тех, что он решал

    2. Ковырнуть поглубже именно в той области, где он считает себя спецом.

    Всегда исходил из того, что джун должен быть умным и готовым учиться. А знаний, нужных мне, у него априори нет.


    1. VitGo
      17.12.2021 20:43
      +6

      везло вашим испытуемым... :-)


    1. Arz66
      18.12.2021 08:16
      +1

      Поддерживаю. Аналогично делаю. Кандидаты в джуны - тоже люди. 8-)))


  1. xJAYx
    17.12.2021 20:43
    +4

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


    1. khim
      17.12.2021 21:14
      +2

      Как будто бы есть какая то разница, где они хранятся.

      Конечно есть. Важно же, на самом деле не где конкретно они хранятся, а что для обращения к ним не нужно ходить через указатель.

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

      Как будто их зазубривание кому-то помогает в работе.


      1. xJAYx
        17.12.2021 22:03
        +7

        Я обычно подтралливаю таких собеседующих (именно тех, кто проводит собеседование) вопросом про row buffer denial of service (формально вроде так называется, но не суть - просто про row буфер). Ведь там реально может производительность просесть в 100 раз при неудачном стечении обстоятельств. В ответ обычно от этих "синьеров помидоров" слышу бульканье и что оно и "ненужоно" такое знание. По итогу то, что они знают - это очень важно и нужно для разработки, а то чего они не знают то "ненужоно".


        1. xJAYx
          17.12.2021 22:08

          @khimя вам ответ могу в ЛС скинуть - его загуглить нереально. Пусть здешние "разоблачители" немного подгорят =)


          1. xJAYx
            18.12.2021 04:19

            @khimСкинул в ЛС ответ на задачу, можете попробовать реализовать данный эффект на вашем любимом языке программирования. Благо, разницы это не несет никакой.


            1. khim
              18.12.2021 05:13
              +1

              Прочитал. Офигел. И теперь такой офигевший и сижу.

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

              С другой стороны — найти по словосочетанию “row buffer” что-то имеющее отношение к описанным проблемам так же легко как по словам “вёсла”, “проливы” и “гребной винт” — что-то, имеющее отношение к высшему пилотажу.

              Вот по ключевым словам starvation, cache coherency, false sharing и так далее — легко.

              А row buffer… ну вот тут на картинке можете посмотреть что это такое и понять почему к быстродействию это всё не имеет ни малейшего отношения (а вот к безопасности — таки да).

              А так-то да. “Троллить сеньоров”, рассказывая им, что они понятия не имеют о том, как летать на самолётах, потому мало чего знают о том, как течения влияют на морские грузоперевозки… ну, такое.


          1. postback
            18.12.2021 10:18

            и можно мне тоже?


          1. RedCatX
            19.12.2021 00:55

            И мне, если не затруднит) Интересно все таки…


            1. xJAYx
              19.12.2021 02:55

              @postback@RedCatX хорошо, я тогда в виде статьи pdf оформлю. Я скидывал EN статью описанной проблемы, но там тяжело читать очень. Загуглить тоже нереально, потому что каждая группа автора описывает проблему на свой лад:

              И т.д. и т.п.


              1. Kroid
                19.12.2021 19:11

                Пишите тогда уж на хабр статью :)

                Думаю, не только тем двоим будет интересно её почитать.


        1. khim
          17.12.2021 22:10
          +1

          но не суть - просто про row буфер

          Я про row buffer только в контексте RAM знаю.

          Ведь там реально может производительность просесть в 100 раз при неудачном стечении обстоятельств

          Если вы про row hammer, то это вообще не производительность, а про безопасность.

          Или вы о чём-то другом вообще?


          1. xJAYx
            17.12.2021 23:23

            Да, row hammer про безопасность. Я, кстати, clflush-free смог сделать, но оно не всегда работает (в основном оно не работает, если совсем честно). Я о row buffer в контексте контроллера памяти. Весь вопрос состоит в том, могут ли две параллельно работающие программы нарушить работу друг друга из за особенностей обращения к памяти (где тот самый row buffer участвует).


            1. Devd
              18.12.2021 11:11
              +1

              Могут конечно, есть вероятность бит-флипа если строки физически близко :)


      1. JBird
        17.12.2021 22:26
        +2

        Частично согласен, в 9 случаях из 10 - это просто повод формально докопаться и не взять кандидата. Но, вроде как в том же Deutsche Bank практиковалось ручное насилие над GC, так что с их стороны вопрос про понимание what's under the hood вполне оправдано.


        1. xJAYx
          17.12.2021 23:30
          +3

          Тут дело даже не в том надо или не надо в общем смысле. Просто идет несоответствие знаний и практике в большинстве контор. Deutsche Bank да, там я могу представить, что люди реально занимаются памятью и оптимизациями, профессионально. Но когда такое задают в компании, которая Json'ы гоняет из одного место в другое и делает не совсем качественные продукты - это вызвает вопросы.


    1. PerseforeComplete
      17.12.2021 22:02
      +3

      Ответ джуна - структуры в шарпе, будучи типом значения, хранятся по месту объявления. Если это переменные в методе, то в контексте метода на стеке вызовов. Если это поля класса, то вместе с классом в куче. А где они ещё могут храниться, если не там и не там? Мне правдо интересно, вдруг когда-нибудь спросят. Ещё можно заодно - всегда ли классы хранятся в куче?


      1. xJAYx
        17.12.2021 22:22
        +2

        "Если это переменные в методе, то в контексте метода на стеке вызовов." потом кто нибудь добавит какое-нибудь замыкание, к примеру, и вот уже структура хранится в куче.

        Такие вопросы ничего не решают. Вот пример - всегда ли параметры (рассматриваем параметр value type) с ключевым словом ref передаются в метод без копирования данных ?

        А вот и нет! Иногда происходит копирование (палится по movdqu/movdqa/vmovdqu в коде)

        И если вы этого не знаете, а узнать это по спецификации невозможно, то вы не ответите.


        1. PerseforeComplete
          17.12.2021 22:56
          -1

          Такие вопросы иногда задают. И, рас задают, хотелось бы быть способным на них ответить


        1. xJAYx
          17.12.2021 23:05
          +10

          @PerseforeComplete

          Представьте, что вы синьер помидор (это просто), разоблачаете всех на собеседованиях, а потом вас просят ПОЯСНИТЬ за vmovdqu:

          <sarcasm> Ой, что такоэ ? Вы не знаете ? Так вы же ДАЖЕ НЕ ДЖУНИОР. Как вы можете претендовать на позицию программиста за 50 тыщь которая только убогие сайты делает не зная таких БАЗОВЫХ ВЕЩЕЙ! Уходи из нашего офиса в Мурино! </sarcasm>

          p.s. В сектор 4 вызываются СЕНЬЕРЫ из епамов для пояснения, необходимо больше сеньеров, разоблачителей мидлов, из епамов для пояснения в сектор 4! Ситуация критическая!


          1. andreyverbin
            18.12.2021 02:48
            +1

            >Такие вопросы ничего не решают. Вот пример - всегда ли параметры (рассматриваем параметр value type) с ключевым словом ref передаются в метод без копирования данных ?

            Насколько я понял в вашем примере копирования при передаче ref параметра нет. Меня смущает два call в CalculateSalary, хотелось бы понять, что за процедуры вызываются. Возможно первый call это конструктор object. Последнии call, наверное, вызывает WriteLine(object), а vmovdqu используется чтобы сделать box для структуры на стеке.


            1. xJAYx
              18.12.2021 03:37
              +1

              А вот оно:

              1. Тут происходит передача фактических параметров - ничего интересного.

              2. Тут происходит копирование ValueType'а, который, тем не менее передается по ref ???

              А вот более корректная реализация:

              Тут уже копирования нет. Эмм... да шарп лаб не отобразил названия методов. Хотя вроде в предыдущий раз, когда я делал пример - он все отображал.

              Попробую в Linqpad'е прописать. Там, где идет передача объекта в Console.WriteLine - там да, абсолютно "легальное" копирование, как и ожидается и вы тут ответили правильно.


              1. michael_v89
                18.12.2021 10:22
                +1

                Тут происходит передача фактических параметров — ничего интересного.

                Нет, это присваивание свойств структуры.


                Payment<long> payment = new Payment<long>()
                {
                  amount = 1,
                  currencyId = 2,
                  ...
                };

                В этом коде вызывается конструктор без параметров, а потом выполняется инициализатор свойств, фактически просто присваивание по очереди. Ваш конструктор с параметрами тут не вызывается.


                Это вызов метода CalculateTax():


                lea rcx, [rsp+0x50]
                call 0x00007ffcbcf90470

                Значит payment находится в rsp+0x50. Он занимает 40 байт (0x28).


                Сначала инициализируется временная переменная со значением {1, 2, 3, 4, 5}, потом она копируется в payment, потом payment передается по ссылке.
                Копирования при ref тут нет.


                xor ecx, ecx
                vxorps xmm0, xmm0, xmm0
                
                // обнуление временной переменной
                vmovdqu [rsp+0x28], xmm0
                vmovdqu [rsp+0x38], xmm0
                mov [rsp+0x48], rcx
                
                // инициализация временной переменной
                mov qword ptr [rsp+0x28], 1
                mov qword ptr [rsp+0x30], 2
                mov qword ptr [rsp+0x38], 3
                mov qword ptr [rsp+0x40], 4
                mov qword ptr [rsp+0x48], 5
                
                // копирование 0x28 байт в payment
                vmovdqu xmm0, [rsp+0x28]
                vmovdqu [rsp+0x50], xmm0
                vmovdqu xmm0, [rsp+0x38]
                vmovdqu [rsp+0x60], xmm0
                mov rcx, [rsp+0x48]
                mov [rsp+0x70], rcx
                
                cmp edx, 0x4bd          // if ()
                jne short L007f
                
                lea rcx, [rsp+0x50]     // ref payment
                call 0x00007ffcbcf90470 // CalculateTax()


              1. andreyverbin
                18.12.2021 14:07
                +1

                Уже ответили, но могу подтвердить, что тут нет копирования ref параметра. Есть вызов конструктора и последующее копирование созданного объекта в переменную payment. Это выглядит странно, второе копирование не нужно. Но это все же не копирование ref параметра.

                Edit: копирование вообще 3, сначала память на стеке запивается нулями, затем туда записываются свойства 1,2,3,4,5, затем все это копируется в переменную.


                1. xJAYx
                  18.12.2021 21:15

                  Чуть чуть дожать до ответа. Вот смотрите, тут у меня передача по значению.

                  Как корректно указал @michael_v89 1 - это не передача параметров это присваивание, ну тут я ошибся с терминологией, как обычно.

                  Вот тут у меня передача по ref:

                  Тут все тоже корректно:

                  Но в моем методе ведь передача по ref...

                  Почему же он добавил это дурацкое копирование. @andreyverbin ваши предположения ?


                  1. andreyverbin
                    18.12.2021 23:59

                    Думаю дело в способе инициализации структуры. В случае byref() компилятор догадался обьединить создание и присваивание, в CalculatePayment нет. Другая гипотеза - компилятор заинлайнил метод, увидел вызов WriteLine(object) и заранее создал box вне if.


                  1. michael_v89
                    19.12.2021 09:07

                    Если вы про копирование через vmovdq после mov с константами, то возможно потому что в CalculatePayment() вызывается конструктор без параметров и инициализатор, а в BYREF() конструктор с параметрами. Представьте например, что в пустом конструкторе присваивается значение по умолчанию в еще одно свойство, которого нет в инициализаторе, тогда по-другому и не сделать. Тут конечно пустой конструктор ничего не делает, но возможно компилятор не настолько умный, чтобы отследить эквивалентность 2 этих ситуаций.


            1. vkni
              18.12.2021 04:11
              +1

              Насколько я понимаю, там 4 штуки потому, что mov не может перемещать из регистра в регистр.


              1. khim
                18.12.2021 06:16
                +4

                Вам бы какую-нибудь книжку про то, как устроены компиляторы купить, что ли?

                Последнее дело пытаться что-то обсуждать, глядя на ассемблерный код.

                Вот, например, встречный вопрос: а где находятся объекты, размещённые с помощью malloc и освобождённые с помощью free? В куче, да?

                Чёрта с два: они тоже могут вообще не существовать. Получите, распишитесь.

                И Java так умеет. И C#. Это вообще не о размещении объектов, а о банальном as if правиле: компилятор может сделать с вашей программой и с вашими объектами и структурами что угодно, пока это невозможно заметить “снаружи” иначе, как с помощью дизассемблера.

                Когда обсуждается вопрос “а где хранятся структуры (или не структуры)” всегда обсуждается семантика в рамках C-машины, C#-машины, Java-машины.

                Нафига сюда тащить то, что к делу отношния не имеет?

                P.S. А вообще я с подобными троллями на собеседованиях иногда сталкиваюсь. Отзыв обычно такой: “кандидат очень крутой, очень много знает, действительно вау… не брать ни в коем случае”. Потому что кроме умения решать те или иные задачи и чего-то там знать нужно ещё понимать: будет ли этот человек применять знания во благо или во вред. Ну и, как бы, после такого… вывод однозначен. Ещё троллей мне на работе не хватало.


                1. xJAYx
                  18.12.2021 08:18

                  Вы небось в контуре работаете, да ?


                  1. PerseforeComplete
                    18.12.2021 10:26
                    -2

                    Интересно к чему вы это спросили? У вас какая-то обида или презрение к этой компании?


                    1. xJAYx
                      18.12.2021 19:28
                      +2

                      В этой компании много выпусников иннополиса, а они такие токсики - это просто невозможно. Видите, вы даже вроде комментарий против моего написали, а вас всеравно заминусили. Плевать на скиллы, терпеть не могу токсичных людей.

                      Сразу для троллей ответ:

                      1. З.п. в контуре нищенская по сравнению с моей, так что заработной платой не манипулируйте.

                      2. Я даже резюме туда не подавал ни разу в жизни, а все предложения конрута отпраляются в корзину. Вот, например:

                      Игнорю их с 2016 года. Я серьезно - там токсичность на уровне Барс групп.


                      1. PerseforeComplete
                        18.12.2021 21:25

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

                        Другое дело, что компания большая, у меня был опыт только в одном городе, одном офисе и всего с несколькими людьми. Я у них не работал, по зарплате ничего сказать не могу. Менторы, кстати, тоже там уже не работают, хотя проработали по 3-5 лет. И меня это удивляет, потому что я, наверное, впервые слышу что бы в компании была токсичность. Вы говорите про выпускников Иннополиса. Может быть дело в том, что офис был далеко от Иннополиса и Казани


                      1. xJAYx
                        19.12.2021 00:00

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

                        Если не повезет и попадете к товарищам, как неторые из здешних нулевых, которые архитектуру современных ПК не осилили, то лучше сразу уходить. Главное не думать, что это норма.

                        Из того, как я общался с разрабами я ничего плохого не могу сказать только про EMAP. Да, личный опыт, но вроде все работают и все довольны, даже не смотря на то что я тут подтралливаю ЕПАМ, по факту это одна из лучших компаний.

                        Там есть такая фишка - можно записаться к ним на обучение на три месяца или пол года, бесплатное само собой, но надо знать английский язык.

                        Затем сдаете какой то там дурацкий тест (вроде именно тест, напомните, если не прав по поводу теста) и идете джуниором на удаленку. Тим лиды вроде адекватные, з.п. тоже.


                      1. PerseforeComplete
                        19.12.2021 10:46

                        У ЕПАМ нет офиса и курсов в моём городе-милионнике. Пошёл к тем, у кого были и не пожалел


                1. xJAYx
                  18.12.2021 08:31
                  +3

                  не брать ни в коем случае

                  Тоесть Конрада Кокосу вы бы тоже не взяли, а то мы с ним обсуждали данный момент, как из

                  Сделать

                  В одну строку. Очень просто, если работать не в контуре и знать как ValueType'ы могут передаваться в методы, конечно же.


                  1. khim
                    18.12.2021 15:40
                    -1

                    Тоесть Конрада Кокосу вы бы тоже не взяли, а то мы с ним обсуждали данный момент

                    Если бы Конрад начал чушь пороть про то, где структуры хранятся и мешать в одну кучу C#-машину из спеков и реальный компилиятор? Нет, не взяли бы.

                    Но вот чегой-то я сомневаюсь, что он бы начал всё рассказывать в таком тоне.

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

                    Условно:

                    Кстати в большинстве случаев собеседующие сами не знают корректного ответа, так как структура может хранится и не в куче и не на стеке

                    “Умён… крут… не брать

                    Да, структура хранится в стеке, а обычные объекты — в куче, но так как любые абстракции протекают, то в случае реального компилятора всё может быть не совсем так… а давайте об этом поговорим поподробнее…

                    И, скорее всего: “умён… крут… брать”.

                    Видите разницу?

                    В одну строку. Очень просто, если работать не в контуре и знать как ValueType'ы могут передаваться в методы, конечно же.

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

                    Самый феереичный пример у нас был, когда кандидату, который ответил на все вопросы все пять интервьюеров выставили оценку “не брать”. Вот именно за это.

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

                    P.S. И да, подобные эффекты иногда можно и пообсуждать, почему нет. Но, как правило, не на собеседовании и уж точно не когда интервьеруемый считает, что это ему кто-то там чем-то обязан, а не наоборот.


                1. vkni
                  18.12.2021 20:36
                  +1

                  Вам бы какую-нибудь книжку про то, как устроены компиляторы купить, что ли?

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


    1. tekdel
      17.12.2021 22:09

      @xJAYx Я не силен в C#, но из любопытства был бы рад, если бы вы разжевали мне свое утверждение. Вы сказали, что структура может храниться и не в куче и не на стеке, а где тогда?


      1. xJAYx
        17.12.2021 23:41
        +1

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


        1. marshinov
          18.12.2021 02:52
          +2

          Но в спеке, кажется, вообще про это ничего нет. Там семантика передачи по значению или по ссылке... так что к чему этот вопрос вообще


          1. xJAYx
            18.12.2021 03:44

            Да, вот и я о том же - зачем это все спрашивать на собеседованиях ? Как вы верно заметили, главное - это семантика. Хранится оно на стеке, в куче, в регистрах - это не имеет никакого значения в 99.99% случаях. Я всегда говорил - нужно чтобы вот прямо на стеке хранилось - используйте ref struct, но все мучают бедные struct и стек.


  1. UncleJo
    17.12.2021 20:43
    +1

    Какие зажравшиеся империалисты. Видел кучу претендентов на мидла в РФ, которые не могут рассказать чем кластерный от не кластерного индекса отличаются.


    1. Insty Автор
      17.12.2021 20:59

      К сожалению, у меня есть опыт собеседований только с бывшими "империалистами" :)

      Не смотря на это, надеюсь, что моя информация кому-нибудь пригодится.


    1. Norgorn
      18.12.2021 01:28
      +10

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


      1. xJAYx
        18.12.2021 07:37

        Толстый все правильно сказал по данному поводу:

        https://youtu.be/1bzWccO-18s?t=2081


        1. WASD1
          20.12.2021 16:07

          Я посмотрел "пример собеседования" - за 15 минут до вашего таймстампа.
          Это получается, что человек, который пишет статьи на Хабре "что в IT неправильно и как нам IT обустроить" - просто некомпетентен в базовых вопросах. Жесть.

          ПС
          Вопрос про "мьютекс-семафор" - ок не его стек.
          Но вопрос про HashCode - всё-таки вопрос из +/- его стека. Плюс когда он даёт ответ (неверный) он просто говорит "самый вероятный сценарий вытекающий из его занний" и не валидирует его "к каким последствиям приведёт решение, сделанное так, как я сказал".

          В общем ужас. Одни разбираются в IT. Другие пишут: что же такое IT на самом деле ((


  1. Alexandroppolus
    17.12.2021 20:46
    +6

    Беседовал я с сеньором всех сеньоров

    Крутой титул ) по средневековым европейским обычаям он был бы не сеньор над джунами и мидлами)

    В целом да, иногда слишком упарываются в литкод или какие-то тонкие и малопрактичные вопросы. Чувство меры - не то свойство, которое присуще только лишь всем.

    Задача про [-100....100] вроде несложная - пройтись по массиву, составить карту (S, C), где S - сумма подмассива от 0 до i (только отрицательные), C - количество таких сумм. Потом снова пройтись, и для каждой суммы S (которая больше 0) подмассива от 0 до i добавить в результат количество для -S. Для нулевых сумм S, если такие будут, просто добавить в копилку C(C+1)/2


    1. khim
      17.12.2021 21:03
      +7

      Задачка действительно несложная, но только для того, кто какое-то количество таких задачек прорешал. То есть, внезапно, джуна после колледжа.

      А учиться сейчас народ не очень любит, хотят пройти курсы “как научиться проходить собеседование в FAANG” за 21 день и после этого устроиться на работу на зарплату в верхних 10%.

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


      1. Vlad2027
        18.12.2021 23:15
        +3

        Какие-то у вас завышенные ожидания для студента колледжа. Там такому просто не учат. В лучше случае студенту дадут графы и алгоритмы сортировки. И это в вузе.


        1. Alexandroppolus
          19.12.2021 09:20
          -1

          В лучшем случае студенту дадут графы и алгоритмы сортировки. И это в вузе.

          Это "средний" случай. А в лучшем случае вузовская программа выглядит примерно так


          1. WheatTail
            19.12.2021 13:14

            А "лучший случай" - это сколько процентов от всех случаев? 1? 2? 10?


          1. Vlad2027
            19.12.2021 15:32
            -1

            В топовых столичных вузах мб и так, но мне "повезло" учится в провинциальном вузе считающимся хорошим техническим вузом.


    1. Sdima1357
      17.12.2021 21:55
      +1

      Мне кажется что ещё проще первым проходом записать интегральную сумму в каждую позицию ( сумма всех элементов до данной позиции) а потом подсчитать количество одинаковых чисел через хеш мап. Получится О(n)


      1. Alexandroppolus
        17.12.2021 23:22

        интегральную сумму в каждую позицию ( сумма всех элементов до данной позиции) а потом подсчитать количество одинаковых чисел через хеш мап.

        это и есть "карта (S, C)" из моего коммента.


        1. Sdima1357
          17.12.2021 23:43
          +1

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


          1. Alexandroppolus
            18.12.2021 01:39
            +2

            Что-то я там с положительными и отрицательными протупил. Всё действительно проще, за один обход.

            код
            var subarraySum = function(nums, k) {
                const map = new Map();
                let result = 0;
                for (let i = 0, sum = 0; i < nums.length; ++i) {
                    sum += nums[i];
                    const countSum = map.get(sum) || 0;
                    const countSumMinusK = map.get(sum - k) || 0;
                    map.set(sum, countSum + 1);
                    result += countSumMinusK;
                }
                return result + (map.get(k) || 0);
            };


            1. HollowPoint
              18.12.2021 23:15

              Не очень понятно, что за параметр К. И ещё я не очень уверен, но мне кажется подсчет интегральных сумм не будет работать, так как для вот такого массива [0, 0, 0] ответ должен быть 6:

              [0][0][0][0, 0][0, 0][0,0,0]

              ну или по индексам элементов:

              [0][1][2][3][1,2][2,3][0,1,2]

              Так как в условии ничего не говорится про уникальности или непересекаемость

              Заранее извиняюсь, но в алгоритмах я крайне плох, поэтому пытаюсь разобраться в любом, который попадается на пути


              1. HollowPoint
                19.12.2021 03:28

                Налажал с индексами [0][1][2][0,1][1,2][0,1,2]


              1. Alexandroppolus
                19.12.2021 09:15

                Параметр K - это для более общей задачи, выше в комментах на неё кидали ссылку: сколько найдется подмассивов, сумма которых равна K. В нашем случае K = 0.

                Функцию можно проверить в консоли браузера. Для вашего примера, subarraySum([0, 0, 0], 0) вернет 6


      1. DistortNeo
        18.12.2021 13:49
        +1

        Да, я бы тоже делал именно так.


  1. djamali
    17.12.2021 21:00
    +6

    Честное слово, такое ощущение что автор устраивался в какой то НИИ.


    1. Insty Автор
      17.12.2021 21:07
      +1

      Если бы! Я подавался в компании следующих направлений:

      • видеонаблюдение и безопасность;

      • инвестиционные компании, банки и quantitative trading;

      • разработка приближённая к железу (OpenCL и Embedded C);

      • машинное обучение и data science (здесь Вы, пожалуй, правы).

      CV отправлял как напрямую, так и через рекрутеров. Везде отношение ко мне было аналогичным описанному выше.


      1. ymishta
        17.12.2021 21:28
        +7

        Ну, им всем по профилю положено в rocket science копать и нестандартные алгоритмы придумывать. Чай, не CRUDная опердень, прости господи...


  1. TimeCoder
    17.12.2021 22:34
    +3

    Странно, в росийских вакансиях цифр 10 лет опыта можно редко найти. Даже обидно, присылает в линкедине очередной hr вакансию, опыт требуется от 3 лет. А если 15 лет опыта - то что? Что я вообще делаю в разработке, почему я не менеджер-лид-директор департамента?

    И второе, про СДиА. Забавно получается, вы удивляетесь, как это у джуна, недавно выпущенного из вуза, можно такое спрашивать. А сеньоры на собеседование говорят, что уже всё забыли, эту вашу математику не нужную. Кто тогда её помнит?)


    1. karon
      18.12.2021 00:41
      +1

      Те кто занимается ей по профилю.

      За 10 лет, единственный раз это было в компании, которая работала с радио сигналами .

      И внезапно там был спец, который занимался именно алгоритмами.

      Но добавлять его код в прод было нельзя)


  1. S-trace
    18.12.2021 03:06

    Очень интересно, а какой правильный ответ на вопрос "«как быть, если ваш коллега — аутист»"?


    Я вижу два:


    1. "I will give it detailed answer if it will ask me" — максимально лояльный.
    2. "I will ignore it because talking to special people is dangerous" — максимально честный.


    1. Goupil
      18.12.2021 04:02

      Ответить «рыбак рыбака».


    1. vindy123
      18.12.2021 09:41
      +2

      А почему вы о нем в среднем роде говорите?


      1. usa_habro_user
        18.12.2021 09:46
        +1

        Ну, он же с "оно" - "It" - общается :D

        P.S.

        -Хау мач воч?-Сикс воч.-Сач мач?!-Хум хау.-МГИМО финишт ту?-Аск?


  1. usa_habro_user
    18.12.2021 07:52
    +10

    Знакомая тема; в последнее время, благодаря HackerRank и LeetCode, любители "почесать ЧСВ" на интервью получили новый мощный стимул.

    Вы забыли написать об одном: если/когда вы все-таки попадаете в компанию, где на интервью над вами измывались вовсю "our highly trained and talanted professionals", вы обнаруживаете такое количество унылого "говнокода", такой уровень некомпетенции, такие глупые "баги", что вам, в один момент, становится не по себе (а особенно, глядя в глаза авторам "говнокода", которые вас так третировали на интервью - а глаза у них дружелюбные, "тиммейтовские", но ровным счетом, правда, нихрена не выражающие - как там бессмертный Венечка Ерофеев писал?). Но потом, впрочем, привыкаете к этому: подобная "игра" и постоянная ложь - просто часть бизнеса и даже жизни...

    P.S. А "правдолюбцев" и "правдоборцев", к сожалению, везде не любят - проще лгать и быть, "как все" :(


    1. Alexandroppolus
      18.12.2021 17:53

      в последнее время, благодаря HackerRank и LeetCode, любители "почесать ЧСВ" на интервью получили новый мощный стимул.

      Это, кстати, про кого? Про кандидатов, или собеседующих?

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


  1. postback
    18.12.2021 11:18
    +14

    Во первых, с 2 годами опыта уже не принято записывать себя в джуны.

    Во вторых, это не только для джунов, это на всех уровнях.

    Вот позавчера было у меня собеседование с Майкрософт в Сиэттле. Опыта 10+ лет.

    Решил на Leetcode порядка 400 задач средней и высокой сложности на протяжении последних 3 лет.

    Было 4 разных алогритмические задачи. Я не прошел, потому что собеседующий (русский эмигрант оказавшийся кстати) решил проверить как я за 15 минут напишу функцию Eval для арифметических выражений, да еще перебирающая все варианты как будто приоритет операций не известен. Я расказал принцип, но писать даже и не собирался начинать.

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

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

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

    Раньше был тренд еще спрашивать об участии в каком нибудь опенсорс проекте и твоем программировании после работы. Это какой-то просто маразм ожидать например от бухгалтера, что вот после работы она как хобби берет заниматься учетом финансами своих друзей или какого то другого может быть вымышленного предприятия. Или от врача практикующем вырезание аппендицита как хобби в свободное время. Но это норма в нашей индустрии, из-за скорее всего психотипа людей работающей в нашей области. Многие не имеют жизни вне IT и настолько бесхребетные, что готовы тратить сутки/недели просто на то чтобы твою кандидатуру рассмотрели при приеме на работу. Есть ли какие то другие сферы с подобными практиками? И мы не говорим о первой работе, а вообще для всех.


    1. Goupil
      18.12.2021 15:45
      +4

      "Или от врача практикующем вырезание аппендицита как хобби в свободное время. " У хирургов, особенно молодых, обычно все свободное время быстро превращается в ту же работу - дежурства, консультации и тп. Тот, кто скажет что отработав 50 часов с понедельника по пятницу едет на рыбалку с друзьями вызовет недоверие приверженности профессии.


    1. khim
      18.12.2021 16:43
      -3

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

      Раньше — это когда? Я много раз слышал об этом в стиле “одна бабка сказала, что так делают”, но никогда не видел этого воочью.

      Ну разве что у совсем “зелёного” кандидата, у которого в CV вообще ни одного места работы и институт какой-то непонятный, так что уж совсем нет никаких сигналов об адекватности.

      Забавно, кстати, что предложения о том, чтобы такое поспрашивать скорее исходят от самих кандидатов. Типа это полезнее, чем деревья обходить.

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

      Тот факт, что огромный процент хороших кандидатов связаны NDA и никакого кода вам показать не смогут (а индусы, наоборот, покажут вам код написанный, хорошим знакомым и набросают вам кучу лапши на уши) — не учитывается совершенно.

      Было 4 разных алогритмические задачи. Я не прошел, потому что собеседующий (русский эмигрант оказавшийся кстати) решил проверить как я за 15 минут напишу функцию Eval для арифметических выражений, да еще перебирающая все варианты как будто приоритет операций не известен. Я расказал принцип, но писать даже и не собирался начинать.

      Это вам так сказали, что вы из-за этого не прошли? Вообще странно: я не думал, что в Microsoft разрешено кандидатам такие вещи говорить. Хотя если от них начали требовать писать официальную причину отказа, то могли и так написать, возможно.

      Вообще поражает вот именно эта уверенность кандидатов в том, что их “отсеивают” из-за того, что они чего-то там не сделали, какую-то задачу не решили.

      Ну не “отсеивают” за это! Разве что в совершенно диком, паталогическом, случае, когда вы не решили вообще ни одной задачи и не ответили ни на один вопрос.

      А вот за “кривляния” (в духе @xJAYx ) — “отсеивают” легко. Потому что, внезапно, если вы устраиваетесь в компанию, то людям интересно, чтобы вы делали то, что нужно компании, а не то, что интересно вам.

      Помните Джоела? Умный человек, способный решать проблемы — вот именно это то, чего хотят увидеть. Только Джоел важное слово пропустил (хотя из последующего текста видно, что он его подразумевал): нужен не просто умный человек, способный решать проблемы, но умный человек, способный решать поставленные перед ним проблемы (а не те, которые захочется).

      И “отсеивают” вас не за то, что вы чего-то там не знаете, а за то, что вы “на блох” переехать пытаетесь. Вот если бы у рыбы была шерсть, то в ней были бы блохи… — вот это вот то, чего категорически не хочет видеть интервьюер.

      Он хочет увидеть как вы будете решать вот конкретно эту, конкретно данную вам данную, проблему (а не что-то ещё). И самая ужасное, что вы можете сделать — это, вместо того, чтобы решать ту проблему, которую вам дали, попытаться как-то “переехать” на ту тему, которая вам знакома.

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

      Ну дык интервьюер тоже так же, резонно, считает. Вам дали простую проблему, а “в позу” становитесь.

      И да, интервьер, если у него есть опыт, прекрасно знает, что некоторые простые проблемы для каких-то людей оказываются сложными. Это не страшно. Всегда можно дать вместо 15 минут на задачу 30. Или, наоборот, увидеть, что и за 30 минут ничего не решится и попросить решить что-нибудь другое.

      И даже если вас реально отсеяли из-за той задачи с приоритетами, то не за то, что вы её не решили, а за то что, что посчитали себя “имеющим право решать” — стоит там код писать или нет.

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


      1. postback
        18.12.2021 16:56
        +3

        Это вам так сказали, что вы из-за этого не прошли? 

        А мне нужно на каждую очевидную вещь официальное письмо с подписью?

        а за то что, что посчитали себя “имеющим право решать” — стоит там код писать или нет.

        я сказал прямо что я не успею за оставшееся время, особенно когда на коленке в блокноте такое писать. Вы видели решение? Я видел в более простой вариации. За 15-20 минут можно писать если ты выучил наизусть до этого.

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

        Похоже на этом интервью вы явно были, а не я. Так как явно лучше знаете что там было .


        1. khim
          18.12.2021 18:22
          -1

          Похоже на этом интервью вы явно были, а не я. Так как явно лучше знаете что там было .

          На этом интервью меня, конечно, не было, зато я был на нескольких сотнях других интервью.

          И очень хорошо запомнил урок, преподанный одной снежинкой.

          Которой я прямо сказал, почему я не могу эту нежную душу (с уровнем знаний о программировании примерно как после прочтений одной клавы в книге “как изучить Java за 21 деньс и, буквально, без представления о разнице между if и while) рекомендовать.

          Ну есть же какой-то предел, после которой абсолютно безнадёжному кандитату можно прямо сказать, что он безнадёжен?

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

          Далее — изрядный втык, разбор полётов и спасло меня только то, что я был единственным, кто рекомендовал через годик позволить проинтервьюироваться ещё раз.

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

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

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

          Ну не умеют русские так! Сначала изображать “искреннее восхищение”, а потом повернуться и написать рекомендацию в течении пяти лет даже не приглашать вас на интервью.

          А мне нужно на каждую очевидную вещь официальное письмо с подписью?

          Нет, не нужно, но тут нет “очевидных вещей”.

          Русских не учат в школе, в течении десяти с лишним лет, что главное — чтобы, не дай бог, “творческая натура“ не ощутила себя обиженной и не потеряла веру в себя (а для того, чтобы её не взяли в команду, не рекомендовали в сильный класс, не приняли на работу и так далее есть объективная оценка, которая “творческой натуре“ никогда и ни при каких условиях не сообщается).

          Американце учат и они умеют это делать в совершенстве.

          Потому из вашего описания истории я и делаю совсем-совсем другой вывод, чем вы.


          1. Goupil
            18.12.2021 18:58
            +2

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


          1. michael_v89
            19.12.2021 10:24
            +5

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

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


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


            Причем можно сказать, что вы из этой ситуации извлекли не тот урок, который нужно, а потому обучаемость у вас никакая. Ситуация, когда у кандидата недостаточно знаний, обозначается термином "недостаточно знаний". Если после описанного случая вы это не поняли, может быть вы… безнадёжны?


          1. Arecgos
            19.12.2021 13:15
            +3

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


          1. Wan-Derer
            20.12.2021 15:25
            -1

            чтобы, не дай бог, “творческая натура“ не ощутила себя обиженной и не потеряла веру в себя

            Может оно и к лучшему, а? Типа, опасение потерять даже один талант из тысячи, даже если он выглядит совсем не как талант? Ну разве нормальный человек назовёт серьёзную фирму Яблоком, а современный компьютер Плащом? А тут, глядишь ты, компы/смартфоны по всему миру и мощный пинок всей индустрии в правильную сторону.

            А если б его тюкали всю дорогу "правдой" о нём, может и не стал бы рыпаться, а просидел бы как все - куда взяли или куда родители пристроили. М?


      1. svr_91
        19.12.2021 10:52
        +1

        присвоил себе право решать: нужно ту или иную работу делать или нет

        Удивительно, но до 30% времени на любой работе у меня и моих коллег уходит именно на это


    1. ads83
      18.12.2021 20:29
      +1

      Во первых, с 2 годами опыта уже не принято записывать себя в джуны.

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


      1. Insty Автор
        18.12.2021 23:33

        А на какую позицию автор собеседовался?

        На позиции уровня Junior Developer. На Linkedin, например, об этом часто пишут прямо в вакансии.

        Двухлетний опыт в моем представлении предполагает позицию мидла.

        На мидла я тоже отсылал резюме, но на интервью почему-то не звали.

        ... какую квалификацию ждали собеседуюшие?

        Сложно сказать. Как уже отметили в комментариях, причины отказа не обязательно связаны с задачками. Здесь мы скорее упираемся в посредственное отношение нанимателей к джунам в целом.


        1. ads83
          19.12.2021 16:44
          +1

          Спасибо за ответ.


          В очередной раз реальность разошлась с моими представлениям о ней :-)


  1. GospodinKolhoznik
    18.12.2021 11:24
    +4

    Я знал одного кренделя, который когда набирал людей себе в отдел первым вопросом спрашивал - знаете ли вы формулу Тейлора, а вторым вопросом - можете ли доказать её. Вот так вот, на собеседовании, у доски или на бумажке доказать формулу Тейлора...

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


    1. GospodinKolhoznik
      18.12.2021 13:44
      +1

      Я наверное не очень удачно выразился. Шах и мат означает не то, что тестировщики мануальщики всех круче, это я так пытался выразить то, что считаю ситуацию совершенно абсурдной.


      1. tundrawolf_kiba
        20.12.2021 17:53

        Я сталкивался с собеседование, когда на ручного тестировщика зачем-то давали тесты IQ вперемешку с вопросами о теории тестирования.


    1. Goupil
      18.12.2021 15:45
      +1

      Ну и много набрал?


      1. GospodinKolhoznik
        18.12.2021 21:47
        +2

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


  1. D1abloRUS
    18.12.2021 11:25
    +2

    Оказывается синдром вахтера можно экстраполировать


  1. Shiny2
    18.12.2021 12:45
    +2

    Всегда поражали вопросы на собеседованиях про сборщик мусора, или подсчёт ссылок. Обычно идёт первым в списке. Более бесполезного знания на боевых проектых сложно представить


    1. ads83
      18.12.2021 14:38
      +2

      ЕМНИП, про сборщик мусора учат например в УЦ ЭПАМа — выпускники УЦ идут работать джунами.


      1. Мне поэтому неудивительно, что об этом спрашивают на собеседованиях: ведь это есть в программах обучения (понятно, что не везде — но ведь не везде и спрашивают).
      2. Раз этому уделяют время на учебе, значит считают что это важно знать. Конкретную мотивацию ЭПАМа не знаю, но рискну предположить что это одна из базовых вещей (наряду с идеями ООП), без которых более сложные концепции становятся непонятными.

      Более бесполезного знания на боевых проектых сложно представить

      А как вы объясните джуну, что складывать строки в цикле — это плохо, и как будете настраивать параметры GC, если не знаете про сборщик мусора?


      1. PerseforeComplete
        18.12.2021 16:05
        +1

        А как вы объясните джуну, что складывать строки в цикле — это плохо

        А как знание GC поможет ответить на вопрос про иммутабельность строк? GC там будет много работать уже как следствие


        1. ads83
          18.12.2021 20:04
          +1

          ок, значит придется рассказать и про иммутабельность строк, и про GC.
          Без истории про GC совсем неочевидно, когда это плохо, а когда — пойдет, нельзя понять почему тормозит локально, а на проде — нет, но случаются завалы иногда система зависает, и кучу других нюансов.


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


      1. michael_v89
        18.12.2021 21:09

        А как вы объясните джуну, что складывать строки в цикле — это плохо

        Как ни странно, так и объяснять — в C# объекты можно создавать и не удалять, потому что есть такая штука сборщик мусора, которая их удаляет потом, а когда строки складываются в цикле, на каждую новую строку создается отдельный объект, что потом создает лишнюю нагрузку при их удалении, поэтому складывать строки в цикле это плохо. В таком объяснении нет совершенно ничего сложного.


        1. DistortNeo
          19.12.2021 01:45

          И, что интересно, это объяснение не совсем верное. Основная причина, что строки нельзя складывать — это асимптотика, не а GC memory pressure.


        1. Alexandroppolus
          19.12.2021 09:28

          А вот такое в Сишарп не завезли?


      1. rvm1975
        19.12.2021 02:14

        после УЦ trainee -> junior -> middle ... сразу джуна в большинстве аутсорсинговых компаниях не дают


        1. ads83
          19.12.2021 16:49

          ~10 лет назад после УЦ ЭПАМа сразу давали джуна. И на "выпускном" из УЦ тесте/экзамене про GC спрашивали (на промежуточном, впрочем, тоже).
          Это не совсем мой опыт, я джавист, но много общался с людьми которые через УЦ прошли. Сейчас, возможно, все иначе — времени-то прошло немало.


    1. rdo
      18.12.2021 14:54
      +1

      Первым вопросом на собеседованиях спрашиваю про сборщик мусора, вторым — про иерархию коллекций, когда собеседование идет на позицию джуниора/миддла.


  1. Kroid
    18.12.2021 13:20
    +7

    Глупо, конечно. Это ведь то самое overqualified. Другое дело, что у больших компаний денег много, и они об этом не задумываются.

    На собеседовании вы (компании) изображаете из себя по меньшей мере Илона Маска, ракеты в космос запускаете, ищете лучшего из лучших. Но что вы будете делать, когда найдёте такого ниндзю среди программистов - об этом хоть кто-то думает? Человек, который спокойно проходит подобные интервью, начинает работать и видит, что задания по сложности "пятиклассник справится", и, соответственно, интерес от этих заданий на том же уровне. Что он будет делать? Я вижу два основных варианта:

    1. Поплюёт в потолок месяц-другой. Походит по интервью в это время, поищет более адекватную своим скилам компанию. А потом с этой свалит. А вы, как работодатель, потратите на него время (эти два месяца), деньги, и в ответ не получите ничего. Такое вот своеобразное "наказание" за обман на собеседовании.

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

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

    А всё почему? Потому что выпендриться хотят. Если ты не гугл - не отбирай людей так, как это делает гугл. Если всего делов - сделать очередной сайт на популярном фреймворке, не нужно искать тех, кто деревья в уме вращают. Спрашивать про деревья и внутренности языка нужно тем, кто разрабатывает, например, базу данных, операционную систему, или, к примеру, занимается высокочастотной торговлей. То есть там, где человек, обладающий этими навыками, сможет их использовать в повседневной работе, а не там, где он будет скучать, и от скуки придумывать себе интересные занятия.


    1. DistortNeo
      18.12.2021 17:09

      Есть ещё третий вариант: насчёт всё оптимизировать, потому что ему скучно.


      1. ignat99
        18.12.2021 22:51

        Четвертый вариант делать наиболее полный охват стека. Начиная от перепрошивки контроллеров на материнских платах и закачивая ИИ в анализе логов на гибридной виртуальной независимой от поставщика услуг архитектуре.


    1. bogolt
      18.12.2021 22:45

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


      1. JustDont
        19.12.2021 00:28
        +1

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


        И причем в приложении к джунам — более хороших выходов из такого процесса обычно нет, это человек с длинным послужным списком еще (иногда) может чисто на авторитете смочь протащить в проект скругление колес. А ценных советов джуна обычно никто слушать не хочет.


  1. Lure_of_Chaos
    18.12.2021 14:03
    +1

    Ещё хуже, когда сеньоров собеседуют так же.

    И такое бывает.


  1. DoubleBY
    18.12.2021 14:55
    +1

    Ну, не знаю, не знаю. Ваше сочинение как то слабо корелирует с моим опытом. Прям так и хочется возопить "не верю"... Так то: не верю, что качества джуна не выяснят без всяких тестов за пару минут. Даже не нужны разговоры про какие то никому сортировки или натягивание женского органа на уши с доступом по хэшу. Разве что этим "специалистам" заняться нечем, кроме как людям голову дурить. Гыыы. Вы пришли собеседоваться C# кодером? Зачем мне скользящее окно от джуна, пусть лучше он мне объяснит что такое есть фрэймворк и чем он отличается от библиотеки. Или что такое пространство имен, ну и т.п. Вот такие пустячки на понимание - вполне достаточно. Нахрена мне кодер C# который не понимает что есть фрэймворк, но знает как обойти в дереве листья. Мда... И для работы будет гораздо более полезно, если любого уровня программер сможет просто сделать грамотную декомпозицию и будет уметь думать абстракциями архитектуры, чем самоудовлетворяться пытаясь шаблонизировать грядущее собеседование, пытаясь угадать возможные вопросы. По этому - не верю.

    Знаете вы или нет, но в подавляющем большинстве случае, проработав программером пол жизни, профессионалы так ни разу и не сталкиваются с необходимостью создавать свою хэш функцию, не говоря уже о реализациях алгоритмов по разрешению коллизий. 85% рынка это вообще сплошной WEB - фронт, бэк, БД - и я вас заверяю, что там о таких вещах обычно и не вспоминают, хотя исполюзуют постоянно не зная что это такое. Тот же алгоритм работы браузеров наверное совокупность кучи хеш функций гыыыы)))))))) По этому - не верю.

    И много еще во что не верю. А верю вот во что:

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

    Да и вааще. Нужно бы помнить, что основная масса народа вас собеседующего - лохи. Просто лохи, которые силою обстоятельств оказались на месте собеседующего. И все. Что делает лох в случае нестандартной задачи, например необходимости проводить собеседование? Правильно. Он лезет в инет и пишет "гугл помоги". И скармливает вам первое, что Гугл (Бог) подаст. Вот и все. Редко встречаются истинно знающие люди, и вот они как раз не станут изголяться. Во первых им не интересно, ибо они решают проблему кадров, а не ищут реализатора алгоритма быстрой сортировки. Разницу чувствуете? А во вторых на глупости нет времени. Жизнь конечна.

    А клоунов хватает.


    1. rdo
      18.12.2021 15:24
      +2

      Что это за «фирмы» такие, где найм одного программиста это финансовая смерть другого? Вы точно в ИТ, а не в госучереждение устраиваетесь?


      1. LARII
        18.12.2021 16:46

        Встречал такое. Теплое место. Белая ЗП. Должность Ведущего. А у руководства свои планы. Новое направление, новый проект. Тогда они ищут лоха, потому как первопроходцами быть не хотят.


      1. DoubleBY
        18.12.2021 17:29
        -3

        Нет. Просто я уже достаточно не молод для отрасли и порядком подустал от многого. Я пятидесятилетний глупый программист с устаревшими понятиями и знаниями 20-30 летней давности. Что я там могу понимать - сущую безделицу. Какое нибудь говно, вроде того как работает весь этот железный фуфел, и в сравнении с тобою я устаревшая модель. Меня скоро просто спишут в утиль. Поэтому мне приходится конкурировать за место под солнцем. А ты царь горы и конечно же ничего не слышал о конкуренции, ибо стоишь на несравненно более высоком профессиональном уровне, чем все потенциальные претенденты на твою должность и знания твои впечатляющи. Ты шутя выдержишь любое сравнение. Твоя фамилие случаем не Гейтс? Нет, вроде RDO это технология принадлежащая Гейтсу. Или у тебя включен Режим Бога? Ну да ладно, мне в принципе пополам. Живи себе в своей параллельной реальности,ник RDO . Remte Data Object. Написал пару join-ов и считаешь, что тебе нечего волноваться о своей мягкой подушечке не кресле? Это вряд ли парень. Бритва Оккама слышал? Так вот, эта самая бритва скажет тебе (если ты снизойдешь что бы ее услышать), что скорее всего ты просто сидишь на никому не интересном месте, поэтому тебе никто на пятки никогда не наступал. Вот только если ты сидишь на таком не интересном месте, это не значит, что жизнь изменила свои принцыпы.


        1. rdo
          18.12.2021 19:30
          +4

          Товарищ ДВОЙНОЙ БЕЛОРУС , примите таблетки и не переходите на личности.

          "Никому не интересное место" - прямо запахло госструктурками, шашлычком с прокуроскими и подскоками по вопросикам.


  1. fenikolay
    18.12.2021 14:55
    +1

    Предлагаю вопрос для обсуждающих:

    "Что нужно экономить при разработке ПО время разработчиков или время конечных пользователей?"

    Предлагаю высказать желающим с обоснованием. Вообще вопрос имеет косвенное отношение к подбору разработчиков и вообще индустрии разработки.


  1. Tsiren
    18.12.2021 14:56

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


  1. Vlad-zorro
    18.12.2021 14:56
    +1

    Вопрос подборки джунов в компанию на вырост в миддла или сеньёра, достаточно прост и тривиален и содержит 3 этапа.

    Первый - оценить социальную аддекватность - 5 - 10 минут разговоров о себе, о компании, о том о сём.

    Второй - беседа о компетенциях вакансии и более общая профессиональная компетенция - 30 минут максимум.

    Третий - тестовое задание.

    Если человек адекватен, если он разбирается хотя бы в одном сложном вопросе, ВАЖНО - не во всех, а хотя бы в одном, то это уже показывает что человек сможет разобраться и в остальных нужных для данной вакансии.

    Ну, если человек написал тестовое - можно брать.

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

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


  1. RalphMirebs
    18.12.2021 15:33
    +3

    Много же лет говорят, что программисту не обязательно знать, но обязательно уметь искать решение. Зачем вообще спрашивать новичка по памяти всякие нюансовые штуки выше уровня вузовской программы? Можно просто попросить найти решение в интернете за ограниченое время и объяснить. Найдёт одно, найдёт и второе. Главное, чтоб был обучаем и самообучаем. А к нюансам придут уже на рабочем месте от старших товарищей или сам, в процессе. Или бы если соискатель бы заходил как стажер "без опыта" его бы не гоняли так?


    1. C15H22N6O5S
      18.12.2021 16:36
      -6

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


      1. DistortNeo
        18.12.2021 16:55
        +2

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


        1. C15H22N6O5S
          19.12.2021 17:04

          Если бы оно было насыщено специалистами, то не было бы у джунов настолько высоких зарплат.

          Нет у джунов никаких высоких зарплат, не надо выдумывать. Зато у них есть конкурс в две-три сотни человек на позицию.

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

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


      1. GrakovNe
        18.12.2021 21:11

        не уверен, что ситуация на рынке такая, как вы ее описываете

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

        https://habr.com/ru/company/headzio/blog/578792/

        https://vc.ru/flood/244370-deficit-programmistov-k-chemu-eto-vedet

        https://lenta.ru/articles/2021/07/27/golod/

        https://www.cnews.ru/news/top/2021-02-17_v_rossii_katastroficheskij

        https://www.kommersant.ru/doc/5006253


      1. Bringoff
        19.12.2021 14:02

        Сейчас работодатель это принцесса, а кандидат это лошадь на базаре.

        По факту все ровно наоборот. Только не для джунов, конечно.


  1. Interreto
    18.12.2021 19:01

    Я у джунов спрашиваю про жизненный цикл HTTP запроса, что бы увидеть понимает вообще он как все это работает. Уровень знаний ООП показывает насколько интересно программирование. Если профильное образование то что-то из программы универа, вроде того как представить граф программно, или как программно интеграл вычислить, и т.п., все то что недавно должен был учить, к сожалению многие сыпались на этом, потому что 5 лет только протирали штаны в универе, что говорит об отношении к обучению.


    1. DistortNeo
      18.12.2021 20:19

      Достаточно ли знания на уровне HTTP/1.1 и GET/POST-запросов?


      1. Interreto
        18.12.2021 22:46

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


    1. michael_v89
      18.12.2021 21:36
      +1

      многие сыпались на этом, потому что 5 лет только протирали штаны в универе

      Или потому что занимались нормальным интересным для них программированием, а не какие-то циферки туда-сюда гоняли.


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

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


      1. Interreto
        18.12.2021 22:49
        +2

        Сильные джуны спокойной отвечали на эти вопросы, а вот посредственные так же отмахивались как Вы! Это же элементарно сказать как запрограммировать интеграл, даже когда изучал это 20 лет назад.


        1. michael_v89
          19.12.2021 09:46
          +1

          Элементарно, и я наверно мог бы сказать про это пару предложений вида "ну вроде как-то так, интеграл это сумма отдельных частей", но уж точно не написать на собеседовании работающий код или предусмотреть все нюансы при разговоре. Но дело в том, что и без этого знания я мог бы написать весь код, который написал за несколько лет опыта. И я рассматриваю это знание не как следствие того, что я хорошо учил всю теорию, а как случайное стечение обстоятельств — был на этой лекции, преподаватель понятно объяснил, давали лабы на эту тему (причем на производные точно были, а вот на интегралы не припомню, хотя вроде логично что должны быть), не забылось за N лет неиспользования на практике. Ваш вывод на основании этого факта о личных и профессиональных качествах кандидата некорректен.


          Хотите проверить умение программировать — проверяйте умение программировать. У любого сильного джуна есть программы, которые он писал сам помимо университетской программы, вот их и можно обсуждать. Или дать тестовое задание до собеседования.


          1. Interreto
            19.12.2021 12:35
            +1

            Во первых я не требую написать рабочий код, достаточно объяснить как сделать. Во вторых у джуна который недавно закончил универ единственный опыт это учебный, и если человек не может представить математические абстракции ввиде программного решения, то это о каких профессиональных качествах может идти речь? Понабирают таких "профессионалов", а потом ужасаешься что смена состояний у сущьности описана ввиде сотни вложенных if/else, вместо лаконичной и гибкой к изменениям матрицы переходов, потому что видетели мы "не помним" ничего с теории графов.


            1. michael_v89
              19.12.2021 14:04
              +2

              если человек не может представить математические абстракции ввиде программного решения

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


              смена состояний у сущьности описана ввиде сотни вложенных if/else, вместо лаконичной и гибкой к изменениям матрицы переходов

              Я не знаю, что у вас за предметная область, и матрица конечно лучше кучи вложенных if/else, но мне за все время работы понадобилось описать смену состояний сущности в виде матрицы переходов примерно ни разу. Конечные автоматы это довольно специфичный кейс, и такой код сложно поддерживать. Если в технических областях типа написания компилятора такой подход оправдан, то в "обычной" бизнес-логике таких случаев практически нет.


              Не расскажете подробности, что это за сущность? Может быть можно сделать по-другому.


  1. pkashtanov
    18.12.2021 23:14
    +1

    Статья не так хороша, как жаркие комментарии к ней.


    1. xJAYx
      19.12.2021 06:14
      -3

      Понятное дело, что у всех тут горит. Что вы кто то решил писать программы на C# и не может рассказать о (условно) MIP* = RE на уровне Henry Yuen'а ? Да как он посмел! Ведь делать проги сжирающие 100500 гигов памяти и хранить пароли в общем доступе открытым текстом - это надо 20 лет учиться и окончить MIT.

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


  1. syusifov
    19.12.2021 14:53
    -2

    Какой то шакал сидит в конторе по расчету з/п и тестирет претендентов на знание теории устойчивости неустойчивых стульев на плывущих лъдах.

    Программирование - if, go to и все, остальное временные знания до следущего фреймворка, ос, супервизора и т.д фигни.

    Любой человек по рождению программист, так как он планирует свои и чужие действия, находит решение миллионов задач в онлайне, без подготовки. Каждый следующий шаг - это сотни if в несколько вложениях.

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


    1. xJAYx
      19.12.2021 19:15

      Какой то шакал сидит в конторе по расчету з/п и тестирет претендентов на знание теории устойчивости

      В точку.

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

      Позорище, уровень школы, чел сидит в своей конторке и еще людей нанимает. А вы представьте, что вы к нему на собеседование пришли ? Архитектуру современных ПК даже не знает, а просто заучил какие то слова про кеш. Удали IDE и иди на пенсию.

      Все, всего доброго. Можете тешить себя тем что вы все тут синьеры, а по факту вас ими назначили чтобы дяде Joe продать подороже.

      И еще на последок оставлю список контор\галер, которые ЛИЧНО я не рекомендую:

      Барс-Групп

      Контур (спорно, но к сожалению, такой опыт у моих товарищей)

      ETNA

      И которые я очень рекомендую и всем советую, тоже личное:

      EPAM

      DataArt

      Ozon

      Во всех трех данных компаниях есть стажировки.


  1. anonymous
    00.00.0000 00:00


  1. nickbeljaev
    19.12.2021 21:30

    Возможно суть была в тестовых заданиях - что то изоморфное задачке поставившей в тупик всех "синьЁров" фирмы. А тут тысячи новых людей изо всех сил предлагают (за бесплатно!) свои решения (лучшее что могут), ктонибудь обязательно предложит что то годное.


  1. Cobalt747
    19.12.2021 22:55

    Самое интересное-то тут и не раскрыто - как распознавать такие "звоночки" неадекватности-то?!


    1. Insty Автор
      20.12.2021 17:54

      Здесь нет единого рецепта, и многое зависит от опыта. Например, чтобы научиться распознавать подозрительные обстоятельства нужно посетить хотя бы одно собеседование с хорошим отношением. Иначе не с чем будет сравнивать. Среди "звоночков" я бы выделил следующие:

      • плохие отзывы от клиенов, сотрудников или кандидатов, например, на Glassdoor;

      • зарплаты ниже рынка, в т. ч. и у младших разработчиков, и, как следствие — текучка кадров;

      • много этапов собеседования и, особенно, неопределённое количество этих этапов;

      • растягивание процесса найма на несколько недель и дольше без очевидных на то причин;

      • объёмные домашние задания и тесты на время дольше 60 минут;

      • странные, не технические вопросы, как попытка спровоцировать раздражение и оценить реакцию.

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