Программисты, ходите на собеседования +60





Картинка взята из видеоролика с канала «Воинствующие Аметисты»

Около 10 лет я работал системным программистом под Linux. Это модули ядра (kernel space), различные демоны и работа с железом из пространства пользователя (user space), различные загрузчики (u-boot и др.), прошивки контроллеров и многое другое. Даже иной раз случалось пилить web-интерфейс. Но чаще бывало, что приходилось и с паяльником посидеть, да с проектировщиками печатных плат взаимодействовать. Одна из проблем такой работы это то, что достаточно сложно оценить уровень своей компетенции, поскольку одну задачу ты можешь знать очень глубоко, а рядом можешь не знать совсем. Единственный адекватный способ понять куда идти, и какие течения сейчас есть – это ходить на собеседования.

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

В статье будет небольшой конкурс с призами.

Особенности профессии


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


Типичное рабочее место системного программиста.

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

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

Ещё особенность разработки на уровне драйверов и железа заключается в том, что гугл не помогает. Часто приходится искать информацию по своей проблеме, а там три ссылки, из которых две — это твои же вопросы на каком-то форуме. Или ещё хуже, когда встречаешь вопрос такого же бедолаги, который задавал его 5 лет назад в списке рассылки ядра, да так и не получил на него ответа. В этой работе, кроме ошибок в проектировании как аппаратной части, так и программной, сплошь и рядом встречаются ошибки документации — это наверное самые лютые и неприятные проблемы. Бывает некорректно описаны регистры, либо вообще отсутствует описание на таковые. Такие проблемы решаются только методом научного тыка случайных чисел в определённые регистры (этакий реверс). Часто бывает ещё такое, что в процессоре заложен какой-то функционал, а кроме тебя этот функционал никто не реализовывал (особенно, если процессор новый). И это хождение по полю с граблями, из которых 70% детские. Но когда есть документация, даже с ошибками — это уже прогресс. Достаточно часто бывает, что документации вообще нет, и вот там начинается хождение уже по минным полям, когда горит железо. И да, такие задачи тоже с успехом решал.

Собеседования


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

Ещё одна интересная особенность — это качество собеседований. Это моё наблюдение, и оно не является истиной, допускаю, что мне просто так везло. Если собеседование проходит по сценарию:

  • расскажите о себе;
  • у нас такие задачи;
  • вам нравится?

И если после этого диалога вы друг другу понравились, ты выходишь на работу, то как правило компания и задачи оказываются весьма приятными и адекватными. Если собеседование напоминает прохождение 12 кругов ада: первое собеседование с HR, потом собеседование с группой программистов, потом директор, ещё домашние задания и т.д., то как правило это были провальные организации в которых я работал не очень долго. Опять же — это личное наблюдение, но как правило слишком большая бюрократия и затянутый процесс принятия на работу показывает что такие же точно процессы протекают внутри компании. Решения принимаются медленно и неэффективно. Были и обратные ситуации, когда были круги ада собеседований, а компания оказывалась шикарной, и когда после хлопка по рукам компания оказалась болотом, но это редкости.

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

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

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

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

Задачи на собеседованиях


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

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

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

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

Вопросы №1
I. На знание СИ. Что означают следующие записи:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Все ли записи корректны?

II. Почему эта программа выдаст ошибку сегментации?

int main ()
{
       fprintf(0,"hello\n");
       fork();
       return(0);
}

III. На сообразительность.

Имеется палка длиной в один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачивается и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.

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

Вопросы собеседования №2

Аппаратные вопросы.

  • Как устроены системные вызовы linux на языке ассемблера на ARM-процессоре, на х86. В чём отличие?
  • Какие средства синхронизации бывают? Какие средства синхронизации можно использовать внутри контекста прерывания, какие нет и почему?
  • Чем отличается шина i2c от spi?
  • Для чего на шине i2c стоят терминаторы и какой их номинал?
  • Может ли интерфейс RS-232 работает ТОЛЬКО по двум проводам: RX и TX? Тут дам ответ: Оказывается, что плохонько, на 9600, но может!!!
  • А теперь второй вопрос: почему?
  • Как лучше располагать сигнальные линии и питание в многослойных платах и почему? Питание внутри слоёв, или сигнальные линии внутри слоёв? (Вопрос вообще сугубо по схемотехнике).
  • Для чего у дифференциальных линий дорожки идут везде вместе?
  • Шина RS-485. Обычно на такой линии есть терминаторы. Однако, у нас схема звезда, с переменным количеством подключаемых модулей. Какие средства избежания коллизий и помех нужно использовать?
  • Что такое красное и бинарное дерево?
  • Как работать с cmake?
  • Вопросы о сборке yocto linux.

Задачи на этом собеседовании:

1. Написать функцию, которая инвертирует в uint32_t все биты. (работу с битами очень любят на собеседованиях, рекомендую)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Что вернёт данная функция? (решение на бумаге, без ЭВМ)

3. Функция расчёта среднего арифметического двух чисел int32_t.

4. Какие способы вывода в программах, в т.ч. в поток ошибок.

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

Вопросы собеседования №3
  1. Приводится пример кода обхода дерева, необходимо рассказать что делается в данном коде и указать на ошибки.
  2. Написать пример утилиты ls. С простейшей опцией “-l”.
  3. Привести пример как сделать статическую и динамическую линковку. В чём разница?
  4. Как работает RS-232? Чем отличается RS-485 от RS-232? В чём отличие RS-232 от RS-485 с точки зрения программиста?
  5. Как работает USB (с точки зрения программиста)?
  6. Перевод технического текста с русского на английский язык.

Успешное собеседование — не залог успешной работы


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

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

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

Есть и ещё один вариант собеседований: когда ты его с успехом проходишь, но по результатам собеседования понимаешь что работодатель полный неадекват. Я сразу отказываюсь от работы, если мне предлагают работать как ИП, суля большие доходы. Это форма ухода от налогов действующей организации, и почему проблемы работодателя должны волновать меня, как программиста? Другой вариант, это различные госструктуры. У меня было собеседование, по результатам которого мне предложили хорошую зарплату, но сказали что предыдущий программист уволился, заболел, умер, ушёл в запой из-за нагрузки и ваш рабочий день начинается в 8 утра. С такого места тоже бежал так, что пятки сверкали. Да, HR обратите внимание, что программисты готовы отказаться даже от самой вкусной вакансии, если рабочий день должен начинаться рано утром.

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


Выводы


Программисты, ходите на собеседования! Причём старайтесь идти всегда на повышение. Допустим, если вы получаете N денег, то идите на собеседование минимум на оплату N*1,2, а лучше N*1,5. Даже если вы не возьмёте эту вакансию сразу, то поймёте что же нужно для этого уровня оплаты.
Мои наблюдения, показали что решает хорошее знание английского языка, достаточно богатый опыт работы в отрасли и уверенность в себе. Последнее — это главное качество, как и везде в жизни. Как правило, более уверенный кандидат может успешнее пройти собеседование, даже при наличии большего количества ошибок, чем отличный, но более стеснительный и инициативный соискатель. Удачи на собеседованиях!

P/S Конкурс


Если у вас есть интересные примеры задачек, которыми вас загрузил HR, то welcome в комментарии. Мы подготовили небольшой конкурс — условия просты: вы пишете самое необычное задание которое у вас было на интервью, читатели проводят его оценку (плюсом), а мы через неделю подводим итоги и награждаем победителя весёлыми ништяками.






Комментарии (356):

  1. Bruce_Robertson
    /#22120508 / +1

    самое необычное задание которое у вас было на интервью
    и самое идиотское одновременно:
    нарисуйте дерево

    • Aushilfskraft
      /#22120536 / +1

      Самое идиотское — пояснять, почему он любимый. Я бы не осилил
      ( Про любимый мем было забавнее. С деревом просто непонятно и незабавно)

      • VtaliyVasilyevich
        /#22121300 / +1

        Есть в этом логика: если корень сверху, ты — пингвин, если снизу, ботаник.

        • Aushilfskraft
          /#22121474 / +1

          А если я иву нарисую, это будет кривой успеха моих проектов?
          Может, она просто красивой кажется. Может, меня вдохновение вело,
          а не практичность или эффективность?
          Камыш, осока, деревня…

          если корень сверху, ты — пингвин

          Фанат AC\DC уж тогда, чтобы солиднее выглядеть)

    • Stalker_RED
      /#22121430 / +1

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

    • 0xd34df00d
      /#22122960 / +1

      Меня как-то попросили просто написать объявление бинарного дерева. Обсуждали эту задачу где-то полчаса.


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

      • wataru
        /#22123052

        Ого, а так можно вообще?

        • 0xd34df00d
          /#22123164

          Если типы зависимые, то да.


          С балансировкой чуть сложнее (особенно когда нужно гарантировать не прямое равенство глубины поддеревьев, что просто, а, скажем, отличие не более чем в два раза между наикратчайшим и наидлиннейшим путем), но гарантировать «поисковость» дерева, например, можно, если вы напишете что-то в духе


          data Tree : Nat -> Nat -> Type where
            Leaf : (n : Nat) -> Tree n n
            Node : (n : Nat)
                -> Tree leftLower leftUpper
                -> Tree rightLower lightUpper
                -> (leftUpper `LT` n)
                -> (n `LT` rightLower)
                -> Tree leftLower rightUpper

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

    • Format-X22
      /#22123830

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

      В общем очень сомнительно. Но запомнилось, да.

  2. ubob74
    /#22120670 / +1

    const * char str — что то неправильное, а для char * const str надо сразу делать присвоение при объявлении, иначе ошибка компиляции может быть

    SIGSEGV будет потому что 0 будет разыменован в fprintf, у нее первым параметром идет указатель FILE *

    • staticmain
      /#22121410 / +2

      SIGSEGV будет потому что 0 будет разыменован в fprintf, у нее первым параметром идет указатель FILE *

      Первые три индекса обрабатываются отдельно — stdin, stdout, stderr, которые суть #define STDIN ((FILE *)0) // etc Поэтому обрушится он не от разыменования, а от попытки записи в stdin.

      • ubob74
        /#22121998 / +2

        stdin, stdout, stderr — это не индексы, это стандартные потоки ввода/вывода, по сути указатели из <stdio.h>
        extern FILE *stdin; /* Standard input stream. */
        extern FILE *stdout; /* Standard output stream. */
        extern FILE *stderr; /* Standard error output stream. */
        И они не NULL.
        Стандартные индексы тоже есть, это
        #define STDIN_FILENO 0 /* Standard input. */
        #define STDOUT_FILENO 1 /* Standard output. */
        #define STDERR_FILENO 2 /* Standard error output. */
        из unistd.h
        Связаны эти сущности между собой через fileno, т.е. STDOUT_FILENO = fileno(stdout) и т.д.
        Попробуйте fprintf(1, «hello») — точно так же получите SIGSEGV, потому что передаете невалидный указатель

        • staticmain
          /#22122016 / +1

          Да, вы правы, посыпаю голову пеплом.

          • ubob74
            /#22122048 / +1

            да ладно, зачем так драматизировать)

            • staticmain
              /#22122080

              Ну было бы глупо пытаться с пеной у рта доказывать свою точку зрения, особенно с учетом того, что я скачал исходники glibc, прогрепал их и убедился, что вы правы:
              ./libio/stdio.c:FILE *stdin = (FILE *) &_IO_2_1_stdin_;

      • mwizard
        /#22122912

        Кстати, даже если бы это было так, то из-за того, что очень часто stdin в интерактивных окружениях является просто dup() от /dev/ttyN, наряду с stdout и stderr, запись в stdin приведет к печати текста в терминал.

    • tyomitch
      /#22122178 / +1

      для char * const str надо сразу делать присвоение при объявлении, иначе ошибка компиляции может быть

      Неинициализированные константы разрешены в C, но запрещены в C++.
      Подробнее: stackoverflow.com/questions/31003713

  3. ksgr
    /#22120688

    1 секунда?

    • dlinyj
      /#22120690

      Почему не 20?

      • /#22120992

        Можно не отражать муравьев а пропускать их друг сквозь друга?

        • dlinyj
          /#22120998

          А разница в чём? Условия задачи отражение.

          • tyomitch
            /#22121122 / +1

            Нет никакой разницы, все муравьи идентичны.

          • markety
            /#22121152 / +1

            Хотя в условии задачи указано отражение муравьёв, индивидуальность муравья не имеет значения для решения. С тем же успехом муравьи могут проползать мимо и продолжать путь. Тогда решение видно сразу

          • /#22121464

            Добавим каждому муравью бусинку своего цвета.
            При столкновении будем не только отражать муравья, но и менять бусинки у муравьев.
            Тогда у каждого муравья всегда есть ровно одна бусинка.
            Каждая бусинка двигается равномерно и прямолинейно (никуда не отражается).
            Все бусинки упадут за 1 секунду, значит и все муравьи тоже.

      • agmt
        /#22121100 / +1

        Надо доказать невозможность существования муравьёв, идущих к центру, находящихся от края далее чем vt в любой момент [0, len/2v] = [0, 0.5].
        Появиться он там мог только двигаясь от центра и столкнувшись в месте X в момент T с муравьём, двигавшимся в центр, (T < 0.5) && (X < Tv). Для этого его отражатель должен был (двигаясь от центра) столкнуться в t=T-dT x=X-vdT. Суммируя много раз и доходя до t=0, x<0, что невозможно.

      • saboteur_kiev
        /#22124448

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

      • DDwrt100
        /#22125976

        Мне кажется решение должно быть каким то таким:
        Муравьи падают рандомно, как по направлению, так и расстоянию до конца палки.
        В лучшем случае если направление движения у муравьев будет в одну сторону, то все муравьи упадут с палки за 1с.Теперь если муравей упадет на самый край палки на значение 0см а выход у нас на 100см, и мы пренебрегаем размерами самого муравья, то по окончанию 1 секунды, он будет на 100 см, и все еще будет находиться на палке. при начале 2 секунды он вылетит с палки. Тоесть в лучшем случае у нас получается чуть больше секунды.
        Теперь обратный случай. Тут интереснее. Муравьи падают на концы палки и смотрят в центр. За пол секнуды они достигают центра, после дружно разворачиваются и за пол секунды выходят с палки. Тоесть тоже получается одна секунда плюс минус.

    • dolovar
      /#22121704

      1 секунда?
      Да, но только если в условие задачи добавить, что муравьи ползают лишь вдоль палки, что муравей при достижении конца палки обязательно падает с нее, что муравей не падает в любом другом случае. И если пренебречь временем на разворот. Сейчас же в ответе может быть и бесконечность:
      Имеется палка длинной в один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачивается и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.

      • tyomitch
        /#22122124 / +1

        что муравей не падает в любом другом случае

        Это как раз необязательно добавлять.

        • dolovar
          /#22122554 / +1

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

          • static_cast
            /#22123262

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

            • Chamie
              /#22124512

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

              • static_cast
                /#22126986

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

                • dolovar
                  /#22128114 / +1

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

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

                  • static_cast
                    /#22128728

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

                    • Chamie
                      /#22128768

                      Где тут переусложнение? В рабочих задачах нужно понимать предметную область, а чтобы решить, что по палке муравьи будут ползти строго вдоль, да ещё и одной дорожкой, мне кажется, нужно ни разу в жизни не видеть ни палки, ни муравьёв. Тем более, что в условии чётко сказано, что все 10 муравьёв ползут в разные стороны. Если сторон всего две, то как минимум 5 из них ползут в одну и ту же (а другие 5 в другую).
                      Серьёзно, я пока ответы не почитал, мне и в голову такое не пришло.
                      (потом вспомнил, что уже встречал эту задачу в школьные годы среди олимпиадных по математике, и точно так же не понял этого странного допущения).

                      • Chamie
                        /#22128982

                        Кстати, поискал это задачку в олимпиадных, и там формулировка намного более однозначна:

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

                        • static_cast
                          /#22130408

                          То есть в данной формулировке у вас не возникли вопросы про то, ползут ли муравьи строго вдоль да еще и по одной дорожке? И не появилось предположений, что автор никогда в жизни не видел ни палок, ни муравьев?

                          • Chamie
                            /#22130680 / +1

                            Нет, потому что в этой формулировке муравей может хоть кругами, хоть зигзагами бегать. Главное — что за 1 секунду он добирается из конца в конец.

                        • MaXIVetrov
                          /#22137150

                          Нашел немного усложненную.


                          задача

                          This is from one of my favorite puzzle books, "Mathematical Mind-Benders". The first is a standard interview puzzle. The rest are variations on it, each requiring a unique insight.


                          The set up for all puzzles is: drop 25 ants randomly on a 1 meter rod. Each ant faces left or right with probability 50/50. Ants walk with speed 1cm/s. Whenever two ants colide they reverse direction. When ants reach the end of the rod, they fall off. The middle ant is called Alice.


                          (A) How long until Alice is guaranteed to fall off?


                          (B) What's the probability that Alice falls off the end she was originally facing?


                          © What's the probability that Alice is the last ant to fall off the rod?


                          (D) What's the expected number of collisions between ants?


                          (E) What's the expected number of collisions with Alice?


                          (F) What's the probability that Alice has more collisions than any other ant?


                          (G) Suppose Alice has a cold, which is transmitted when ants colide. How many ants will get sick?


                          (H) Suppose there's now only 24 ants and they are on a 1 meter long circle. What's the probability that Alice is back where she started after 100 seconds?

                          • wataru
                            /#22139178

                            (A) 100 секунд. Модель муравьев с бусинками-именами. У Алисы единственной есть бусинка. При столкновении двух муравьев они мгновенно проходят друг против друга но передают бусинку. Можно однозначно построить траекторию бусинки от того муравья, который ее уронит в самом конце до начального муравья. Понятно, что Алиса может быть любым из упавших муравьев, а значит может быть и последней.


                            (B) Вероятность — (n+1)/2n = 26/(225) = 52%. Допустим алиса k-ая по порядку и изначально и смотрит влево. Она упадет слева только если k или больше муравьев всего смотрит влево. Ведь, слева упадет ровно столько муравьев, сколько смотрит влево изначально. Но раз они не проходят друг сквозь друга, сколько-то первых упадет слева, а остальные справа. Осталось просуммировать по всем позициям и возможному количеству муравьев смотрящих влево.
                            Т.е. суммируем 1/(n*2^(n-1))*sum_{k=1..n} sum_{j=k-1..n-1} C(n-1, j-1). Меняем порядок суммы и там нужна будет формула суммы (i+1)
                            C(n,i).


                            © 1/n. Алиса упадет последней, если последний упавший обезличенный муравей будет держать бусинку. Это будет если один конкретный из n муравьев держал бусинку в самом начале. С вероятностью 1/n он и будет алисой.

                          • Chamie
                            /#22143120

                            Each ant faces left or right with probability 50/50.
                            Отлично, отлично

                      • tyomitch
                        /#22130182

                        Если сторон всего две, то как минимум 5 из них ползут в одну и ту же (а другие 5 в другую).

                        То, что как минимум 5 из них ползут в одну и ту же сторону — верно.
                        То, что другие 5 ползут в другую сторону — неверно.

                        • Chamie
                          /#22130664

                          То, что как минимум 5 из них ползут в одну и ту же сторону — верно.
                          То, что другие 5 ползут в другую сторону — неверно.
                          А в какую же сторону тогда ползут другие, если в эту — только 5? Варианта «стоят на месте» в задаче не описывалось.

                          • VolCh
                            /#22130824 / +1

                            Не только, а минимум. Все 10 могут ползти в первую сторону

                            • Chamie
                              /#22131454

                              О минимуме чего вы тогда говорите? Я писал про минимальный размер группы, движущейся в одном направлении. При нём 5 будут двигаться в одну сторону, а другие 5 — в другую. Во всех остальных вариантах одна из групп будет состоять более, чем из 5 муравьёв, и это уже не минимум.

            • dolovar
              /#22125180

              В логических задачах всегда есть основа для применения здравого смысла
              Среди задач также встречаются задачи на внимательность.

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

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

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

              • static_cast
                /#22130440

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

                • dolovar
                  /#22134546 / +1

                  Вы могли потребовать определения…
                  вы не смогли решить простую задачку, и сейчас, досадуя, занимаетесь софистикой...
                  Есть две крайности — молча принимать ТЗ с пробелами или бесконечно уточнять ТЗ. Мое мнение — обе крайности плохи, полезно выдержать баланс, заполнить ключевые пробелы и выдать решение.
                  Что лично я и сделал выше — 1 секунда при таких-то допущениях.
                  Почему Вы свели это к «не смог простое, досадует, софистика» — не знаю, но мне не интересно обсуждать меня или Вас, поэтому предлагаю закончить диалог.

          • Daemonis
            /#22127902 / +1

            Если не добавить, то минимальное время — меньше секунды

            Возможно, но минимальное время никого не интересует.

  4. Engenigger
    /#22120742

    Строго говоря, на шине I2C нет терминаторов — только подтягивающие резисторы. :)

    • dlinyj
      /#22120758

      Тут скорее опечатка. Но для чего они нужны?

      • Engenigger
        /#22120800 / +1

        Для формирования высокого логического уровня. Линии шины I2C управляются выходами с открытым коллектором/стоком, которые требуют подтяжки к питанию.

        • dlinyj
          /#22120852

          Всё верно, вы приняты. Когда сможете выйти на работу?

          • Calc
            /#22126256

            за «железки» столько не платят :)
            Сам сижу в разработке под мобилки и отправляю комментарии по IOT разработчикам

      • ubob74
        /#22120808

        может чтоб длину увеличить?

        • dlinyj
          /#22120866

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

          • ubob74
            /#22120902

            так у вас кастинг?)

            • dlinyj
              /#22120952

              Нет, я просто иронизирую :)

              • ubob74
                /#22121048

                я тоже)
                А пример кода обхода дерева не покажете? оно там в задании 3 есть

                • dlinyj
                  /#22121090 / +1

                  не покажу, так как могу подставить компанию.

  5. ubob74
    /#22120822 / +1

    return *(uint32_t * (&a)) > b — тут вернет 1, т.к. из отрицательного числа делаем большое положительное

    • hard_sign
      /#22125692

      Гораздо интереснее получилась бы задачка, если бы a и b были разных размерностей. В этом случае результат зависел бы от типа процессора, точнее, от endianess :)

  6. KapasMordorov
    /#22120832 / +1

    Если бы было сформулировано «какое минимальное время нужно прождать», тогда можно было бы рассуждать, 1 сек или 20 сек. А так правильный ответ — бесконечность.

    • dlinyj
      /#22120834

      Почему? Это всё пальцем в небо.

      • dvserg
        /#22121040 / +1

        Дадим каждому муравью секунду на реакцию — итого 19 секунд.

      • ITurchenko
        /#22121582

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

        Итого имеем задачу на сообразительность при нечетко поставленном ТЗ. Вы точно всё ещё хотите работать в нашей компании?

        • dlinyj
          /#22121626

          То есть вы как соискатель начали собеседовать HR? Блестяще, вам скажу :)

          Итого имеем задачу на сообразительность при нечетко поставленном ТЗ.

          Интервью очное и ТЗ можно уточнить.

          • ITurchenko
            /#22121738 / +1

            Моё мнение, что на собеседования стоит ходить где-то не реже, чем раз в пол года, даже если вы обожаете свою работу, и не хотите её менять.
            Соответственно при таком подходе идёт знакомство с тараканами «и на той стороне», чтобы знать куда не обращаться при поиске работы.

        • 0xd34df00d
          /#22123000 / +1

          Условие как компромисс.


          ТЗ вы тоже будете согласовывать формально, начиная с определений, что для счёта используется стандартное определение натуральных чисел, удовлетворяющее аксиомам Пеано?

      • Stecenko
        /#22121706 / +2

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

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

        • dvserg
          /#22122374

          Скорость муравья 1 м/с. Какой траектории вы от него ожидаете на этом расстоянии, учитывая, что палка прямая?

          • Stecenko
            /#22122524

            Палка — объект, а не абстракция. Хорошая модель палки — цилиндр. Соответственно, ожидаю, что в худшем случае муравей будет двигаться по окружности, в типичном- по спирали

        • Chamie
          /#22124516

          А плоскость так вообще бесконечна во всех 4 направлениях.

          • tyomitch
            /#22125610

            во всех ? направлениях, я бы сказал

            • Chamie
              /#22128712

              Я имел в виду 2 оси координат.

      • KapasMordorov
        /#22121912 / +1

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

        • nick758
          /#22122402

          Или «максимальное время падения последнего муравья с палки».

          Это зависит от того с какой высоты он будет падать.

          • VolCh
            /#22123152

            И какая сила тяжести в месте падения :)

            • nick758
              /#22123224

              Ага: g, сопротивление атмосферы (если есть), модель муравья для вычисление этого сопротивления…

      • Chamie
        /#22124500

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

      • sa1ntik
        /#22130218

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

        • tyomitch
          /#22130916

          пока не помрут с голоду

          Саму эту палку пусть и едят.
          Тогда будут по ней ползать, пока она не прекратит существовать.

  7. MadNick92
    /#22120846 / +2

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

    • TerraV
      /#22121518 / +1

      Разумеется техническое интервью вы не прошли )

      • MadNick92
        /#22121554

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

  8. dmitryrf
    /#22120964 / +1

    return *(uint32_t * (&a)) > b

    Я мысль понял, а компилятор — нет. Надо
    return *((uint32_t *) &a) > b;

    • dlinyj
      /#22120990

      Ну это прям опечатка, которая была в процессе набора статьи :).

  9. ubob74
    /#22121026 / +1

    для инвертации битов можно воспользоваться операцией ~

    • tyomitch
      /#22121138 / +1

      Обычно имеют в виду «развернуть задом наперёд», т.е. 0b1101 <-> 0b1011

  10. jakushev
    /#22121164

    Ну, не знаю, на сколько интересное, но абсолютно глупое задание:«Написать „Hellow, World!“ без единой ';' ». На Си.

    • dlinyj
      /#22121200

      Тут я подзавис, это как?

      • jakushev
        /#22121226 / +1

        Давайте дадим людям подумать! Подсказка. Именно в Вашем main.c не должно быть ';'.

        • EDA
          /#22131710

          hello.c:
          /* Hellow, World! */
          #include «hello.h»
          int main () {
          PRINT
          RETURN0
          }

          hello.h:
          #include <stdio.h>
          #define PRINT printf(«Hellow, World\n»);
          #define RETURN0 return(0);

    • acesn
      /#22121282 / +2

      int main()
      {
          if(printf("Hello world!")) {}
      }
      

      • staticmain
        /#22121420 / +1

        Только return нет и нормальный компилятор должен бросить critical предупреждение.

        • acesn
          /#22121696 / +2

          так лучше?)

          int main()
          {
              if(printf("Hello world!")) {}
              while(true) {}
          }
          

          хотя не уверен что на отсутствие return в main компилятор ругается, по краней мере gcc, который у меня под рукой, для main такого предупреждения не генерит.

          • staticmain
            /#22121906 / +3

            Откуда вы взяли true без инклудов? :D

          • tyomitch
            /#22122012

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

        • jakushev
          /#22121752 / +2

          void main(void)
          {

          }

          В принципе, это и было мое решение.

          • 0xd34df00d
            /#22123022 / +1

            Возврат void из main не соответствует стандарту, ЕМНИП.

            • tyomitch
              /#22123158

              C++ его запрещает прямым текстом, но C допускает:

              It shall be defined with a return type of int and with no parameters:
              int main(void) { /* ... */ }
              or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
              int main(int argc, char *argv[]) { /* ... */ }
              or equivalent; or in some other implementation-defined manner.

              • 0xd34df00d
                /#22123166

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

        • tyomitch
          /#22122052

          Нет, не должен.
          C99 n1256, 5.1.2.2.3: «reaching the } that terminates the main function returns a value of 0.»

          • staticmain
            /#22122156

            *нормальный* компилятор должен. Стандарт, к сожалению, адекватно не объясняет, почему:

            I looked it up. I believe this was introduced with C99, and apparently the C99 rationale is defect. It has comments for 5.1.2.2.1 Program startup, then labels the next chapter 5.1.2.3 Program execution. It should have been 5.1.2.2. As a consequence of this, the rationale for Program termination that should have been in the real chapter 5.1.2.3, has gone missing in action. Thus, main allows no return code in C99 and there exists no rational reason why. – Lundin Oct 10 '13 at 11:03


            main без return не просто выглядит странно, он нарушает работу парсеров и анализаторов, которые видят int f(), но не видят ret.

            • tyomitch
              /#22122216

              *нормальный* компилятор должен

              gcc не жалуется. А какой компилятор «нормальный» и жалуется, хотя бы один?

              • staticmain
                /#22122240 / -1

                А никто и не сказал, что он есть. Отсутствие return в main — это признак овнокода или какой-то неадекватности. Даже на совместимость со старым кодом это не списать, потому что C89/90 заявляет, что это *обязательное* действие. Поэтому в стандарте на C99 это выглядит глупо. Компилятор не-курильща должен предупредить что там такая лажа и собрать код.

                • tyomitch
                  /#22122312

                  C89/90 заявляет, что это *обязательное* действие.

                  Нет, не заявляет. Там было «If the main function executes a return that specifies no value, the termination status returned to the host environment is undefined.» — т.е. C99 только изменил undefined на 0, по поводу корректности программы ничего не поменялось.

                  Ну а ваши фантазии по поводу «компиляторов не-курильща» не имеют никакого отношения к реальности. Стандарт такой, какой есть, и компиляторы такие, какие есть. Если вам не нравится Си, пользуйтесь другими языками.

                  • staticmain
                    /#22122956 / -1

                    status returned to the host environment is undefined.

                    заявляет, что это *обязательное* действие.

                    Нет, не заявляет.

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

                    • tyomitch
                      /#22123110

                      Undefined behaviour возникает при чтении undefined value, т.е. вне рассматриваемой программы, если её код возврата кем-то читается. На корректность самой программы это не влияет.

                      (В качестве поясняющего примера: неинициализированная переменная имеет undefined value, но если неинициализированную переменную не читать, то undefined behaviour не происходит, и программа полностью корректна.)

                      В любом случае, это в стандарте исправили 21 год назад.

              • nick758
                /#22122290

                Раньше у WatcomC это была ошибка, сейчас проверил OpenWatcom 1.9 — только варнинг.

      • maaGames
        /#22123008

        А теперь давай без фигурных скобок, чтобы уж совсем наркоманство :)

        • tyomitch
          /#22123136

          Уже было: habr.com/ru/post/275861
          (Надо только заменить int[] на char[])

          • maaGames
            /#22123234 / +1

            В том посте испоьзуются фигурные скобки. Я имел в виду триграфы :D

            • tyomitch
              /#22123286

              В том посте испоьзуются фигурные скобки.

              Именно поэтому надо заменить int[] на char[]

              Я имел в виду триграфы :D

              Их удалили в C++17

              • RenatSh
                /#22123318 / +1

                Триграфы в С ещё существуют, согласно википедии

              • maaGames
                /#22124682

                Понял, вместо {...} можно будет "..." написать. Тогда да, было уже.
                Жаль, что удалили. Теперь рекрутерам даже спросить нечего на собеседовании…

    • MaXIVetrov
      /#22135810

      int main () {
          switch(printf("Hello world!\n")){}
          while(printf("Hello world!\n") == 0){}
      }

  11. jakushev
    /#22121222 / +1

    int32_t a = -200;
    uint32_t b = 200;
    return *(uint32_t * (&a)) > b


    Тут прикол в том, что код написан неверно? Или что приведенный к uint -200 (0x FF FF FF 38) будет больше чем 200?

    • dlinyj
      /#22121272

      Надо дать ответ что будет в результате.

      • jakushev
        /#22121324

        Ну 1, конечно, если ошибку поправить.

        • Bladegreat
          /#22126422

          Для ответа на этот вопрос необходимо обратится к стандарту. Не могу уверенно говорить на C, но в C++ такая запись приводит к неопределенному поведению, так как формат записи знаковых чисел не задан. Предположения о "two's complement" знаковых чисел может привести к очень серьезным головным болям при отладке.


          Поэтому правильный ответ на этот вопрос — undefined behavior или зависит от платформы.


          http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2218.htm#c-sign

          • Bladegreat
            /#22126592

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

          • 0xd34df00d
            /#22127648

            Начиная с C++20, кстати, задан, и теперь это обязан быть two's complement.

  12. irbis_al
    /#22121242

    Про муравьёв 5 секунд(максимум 5.5)… каждую секунду с двух концов падает 2 муравья...(а тот движняк что между крайними нас не волнует)

    • dlinyj
      /#22121274

      Нет.

      • irbis_al
        /#22121354

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

        • Aushilfskraft
          /#22121532

          Муравьи бегают по палке пока не устанут. Или не сгорят от трения.
          ~70 шагов в секунду, сильно

        • ReynardTheFox
          /#22121566

          А чего муравьям вообще падать? Им ведь не важно положение, если поверхность достаточно не гладкая.

        • dlinyj
          /#22121568

          Выше есть готовое решение.

          • irbis_al
            /#22121642 / +1

            Это где про бусинки? Не согласен… в том варианте вообще вообще количество муравьев не важно… хоть миллиард их… всегда секунда будет

            • Aushilfskraft
              /#22121660 / +1

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

            • vladshulkevich
              /#22122222

              Вариация решения с бусинками: выберем наихудший случай, два ползут с двух разных концов палки и встречаются в середине, отразившись ползут к краям. Шестой «Б», кто пояснит, почему этот случай наихудший?

              • irbis_al
                /#22122242 / +1

                Я согласен с решением 1 секунда… просто мозг выносит, что не зависит от количества насекомых :-)

                • wataru
                  /#22122828

                  Дак они же параллельно все двигаются. Допустим, они все идут только в одну сторону изначально (никто ни с кем не столкнется). Понятно же, что тут время зависит только от длины палки, а не от количества муравьев? Или это тоже мозг выносит?

                • vassabi
                  /#22124088

                  а вы возьмите на листочке в клетку начертите горизонтальный отрезок (до 10 см — нормально) и постройте две ограничивающие вертикали по его краям,
                  и стройте на нем траектории муравьев (по оси ординат — время) в виде линий под углом 45 градусов. Отрезок — это «палка», пересечение траектории с вертикальными линиями — это «падение»
                  Сразу заметно, что
                  1) один муравей в самом максимальном случае сможет ползать 1 секунду
                  2) столкновения 2х муравьев — это пересечение траекторий, оно не удлиняет и не укорачивает суммарное время (т.е. максимум из их траекторий)
                  3) ну и по индукции таких столкновений может быть хоть 100 (можно для эксперимента почертить пяток прямых, а потом раскрасить — как там ползал каждый муравей)

                • /#22126992 / +1

                  Очень бородатая задача, но может кто не в курсе

                  Два поезда, находившиеся на расстоянии 200 км друг от друга, сближаются по одной колее, причем каждый развивает скорость 50 км/ч. С ветрового стекла одного локомотива в начальный момент движения взлетает муха и принимается летать со скоростью 75 км/ч вперед и назад между поездами, пока те, столкнувшись, не раздавят ее. Какое расстояние успевает пролететь муха до столкновения?

                  • Neikist
                    /#22127022

                    Ну эту я сразу решил, а вот с муравьями и правда как то взрыв мозга.

                    • Chamie
                      /#22128718

                      С муравьями напоминает интерференцию волн. Когда не важно, отталкиваются волны или проходят друг сквозь друга — картина одинаковая.

          • Aushilfskraft
            /#22123210

            Погодите, погодите, меня понесло. Какой ответ в итоге, 1 секунда?

            • wataru
              /#22123280

              Да. Максимум за одну секунду они все упадут.

          • Aushilfskraft
            /#22123310

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

            Идеальные условия для эксперимента — диаметральные векторы и равноудаленность
            муравьев друг от друга?

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

    • thesame
      /#22133218

      Нет. Там должна быть экспонента. По идее…
      Теперь рассуждаем:
      — муравьи, которые бегут от центра, если нет препятствий, упадут не позднее 0.5 секунды
      — муравей, который оказался между двумя муравьями, бегущими к центру, даст им центробежный :) импульс
      — а с чего я взял, что муравьи как-то взаимодействуют? максимальное время при описанных условиях — 10 секунд. Муравей падает на конец палки, проползает 1 метр и падает с другого конца. И так — 10 раз.

  13. jakushev
    /#22121508

    На «бареметалл» еще такое любят: Есть очень простой контроллер, с минимальным ОЗУ, допустим, PIC16F873, он «нюхает» RS-485. По интерфейсу передается пакет, состоящий из 32х битных чисел. Формат, начало и конец пакета известны, известно, что каждое число передается четное количество раз. Так же известно, что канал 100% надежен. А поток может быть ОЧЕНЬ длинный. Но 1 число из выборки передается нечетное количество раз. Как его найти?

    • eugeneyp
      /#22121948 / +1

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

      • jakushev
        /#22122050 / +1

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

      • AnthonyMikh
        /#22123408

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

        • tyomitch
          /#22123626

          Хм, неужели накапливать произведение всех (?? + ?v3 i) ^ x?

        • wataru
          /#22123974

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


          Логично сделать решение через обобщение xor на троичную систему счисления: тупо складываем все цифры в троичной системе счисления отдельно и берем по модулю 3. Останется только то единственное число. Переводим его назад.


          Можно делать с переводом в троичную систему счисления делением на 3. Хранить цифры в двух битах, например. Памяти будет требовать все то же O(log max_int) — ровно 2 переменные для хранения суммы в троичной системе счисления и еще 2 для текущего числа). И работать будет за линейную сложность (разрядов меньше log(max_int) — линейно от размера входных чисел).

          • AnthonyMikh
            /#22130024

            Вы, наверно, имели ввиду линейное время и константную (вернее, O(log max_int)) дополнительную память?

            Именно, это меня что-то переклинило.


            Логично сделать решение через обобщение xor на троичную систему счисления: тупо складываем все цифры в троичной системе счисления отдельно и берем по модулю 3. Останется только то единственное число. Переводим его назад.

            Ну вот я так и сделал, да. На битовых операциях.

    • termsl
      /#22123544 / +1

      Военка детект.

      • jakushev
        /#22125500

        Отнюдь. 100% «гражданка».

        • termsl
          /#22125980

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

          • jakushev
            /#22126074

            Я не про саму задачу, она — именно на XOR, а про подход. Буквально таким образом недавно искал пропавший пакет. Модули связаны по FIFO, мастер передает пакет слейву, слейв обрабатывает и возвращает респонз. И, блин, из нескольких тысяч — один респонз не прилетает. Да, все асинхронно. Слейв может тасовать пакеты, как ему удобнее. Вычленил пакет, ксоря индексы запросов и подтверждений на подготовленном наборе данных, дальше — отладка уже легче пошла. Да, аппаратно-программный дебаг — еще тот танец с бубном…

  14. unsignedchar
    /#22121576 / +1

    Как работать с cmake?


    Хороший вопрос. Правильный ответ есть? ;)

    • tzlom
      /#22121828 / +2

      sudo rm `which cmake`

      • unsignedchar
        /#22123568

        Хороший ответ. А вы точно программист? ;)

        Заголовок спойлера
        Удалять желательно так же как ставили.

        • powerman
          /#22133234

          Это да. Но, с другой стороны, в комментарии tzlom приведён единственный абсолютно портабельный способ работающий на любом *NIX. :)

          • nick758
            /#22133250

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

            • powerman
              /#22133264

              А ещё может не быть и самого cmake. Но как всё это относится к портабельности?

  15. Mariya888
    /#22121602

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

    • dlinyj
      /#22121610

      Хотя американские программисты на порядок слабее русских!


      Поэтому русские основали свой facebook, Microsoft, google и построили силиконовую долину.

      • Kopilov
        /#22122006 / +1

        построили силиконовую долину.

        которая на порядок круче кремниевой

      • VolCh
        /#22123194

        Не скажу насчёт программистов, но компании основывают предприниматели

      • eumorozov
        /#22124024 / -1

        google

        Основан русскими. Ну, или советскими.

        • murzilka
          /#22125984

          Простой советский парень из Саратова Ларри Пейдж?

          • gorgona45
            /#22133286 / +1

            + советский парень Сергей Брин

            • murzilka
              /#22133950 / +2

              Сергей Брин эмигрировал с родителями в США в возрасте шести лет. Поэтому фраза «простой советский ребёнок» подошла бы, а вот «парень» — уже нет. И тогда для корректности комментарий, начавший ветку, должен звучать так:

              Основан советскими детьми
              :D

    • jakushev
      /#22121664 / +1

      Ну, на мой взгляд, вопросы, которые автор привел, на 100% соответствуют его специальности. Но, кроме муравьев, наверное. Меня самого такие задачки бесят. Я, в принципе, на 80% вопросов сразу ответ дал. Единственное, не являюсь именно Linux системным программистом, на голом железе, по этому вещи, касательные ядра — не в курсе…

  16. nick758
    /#22121918 / +1

    Задачка с собеседования. Что выведет программа? Решить без запуска. В тексте незначительные ошибки, чтобы сразу не скомпилировалось.
    Самая наркоманская задачка такого рода из тех, что я видел :)

    float bon_jovi[4][4]=
     { {0,   2,    0.5,   2},
       {1,   3,    3 ,    0},
       {2,   0.5,  0,     1},
       {0,   0,    0,     0}
     }
    
    #define FIRST_SONG 3
    #define LAST_SONG 1
    #define CD 0
    #define ARTIST 1
    
    void f(float *p, int jazz, int hiphop)
    {
      int high_rating=0;
      int low_rating=high_rating
      int music;
      float sum=0.0;
    
      for (music = jazz; music <= hiphop; music++)
      {
          sum += *(p++)
          if ( p[music])
            high_rating++;
          else
            ++low_rating
      }
    
      p--;
      sum += *(--p)
    
      printf("%d %d %f", high_rating, low_rating, sum)
    }
    
    int main()
    {
      f(&bon_jovi[CD][ARTIST], LAST_SONG, FIRST_SONG)
    
      return 0;
    }
    

    • wataru
      /#22122848

      Спойлер

      "2 1 5"?

      • nick758
        /#22123002 / +1

        Получилось вручную посчитать? Круто! Я во время собеседования третье число не угадал, но провалился не из-за этого :)

        • wataru
          /#22123050

          В ручную, но сначала тоже не правильно подсчитал третье число. Проглядел второй декримент у p в конце.

  17. quaer
    /#22121960 / +1

    Единственный адекватный способ понять куда идти, и какие течения сейчас есть – это ходить на собеседования.

    Чтобы обойти или влиться?
    Пароход вы или плот?

  18. termsl
    /#22121968 / +1

    Какое-то хайповое поветрие — ходить по собеседованиям чтоб что-то и выходить из зоны комфорта чтобы еще что-то. Понимаю, кто-то, когда-то сказал, в мантру превратилось.
    Рандомно общаться с неадекватами, потратить свое и их время (твое ты потратил, фиг бы с ним, а вот чужое — это уже $$$), ради повышения твоего ЧСВ и возможно получения тебе же какого-то пинка, для саморазвития за чужой счет и увеличение процента неадекватов с точки зрения HR, HR звереет, руководители стонут во все стороны- «ну что вы хотите, адекватов не найти, только сегодня 1488 человек отсобеседовали», ну и прибыли владельцам hh.xx, job.xx и иже с ними?
    Если есть ощущение, что надо развиваться- надо развиваться, курсы, петы, хобби, если не устраивается работа, уровень оплаты, график- его надо менять.
    А вот такое хождение по собеседованиям- по мне сродни мелкой кражи, как тырить туалетную бумагу из общественного туалета, вроде мелочь, кто-то закрыл свою потребность, но в итоге кому-то от этого может стать не очень хорошо.

    • subcommande
      /#22122106 / +1

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

      • termsl
        /#22122244 / +1

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

    • dlinyj
      /#22122120 / +1

      Обычно, если ты берёшь высокую планку, то ты либо устраиваешься туда и работаешь, либо понимаешь что тебе не хватает и идёшь учиться. А вот рекомендации мол «учись» — лабуда, так как непонятно чему учиться. А после собеседования сразу понятно что нужно изучать. На одном собесе мне прямо так и сказали: иди и учи QT.

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

      • termsl
        /#22122202

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

        • dlinyj
          /#22122350

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

    • vladshulkevich
      /#22122268

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

      • termsl
        /#22122314 / +1

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

        • vladshulkevich
          /#22122358 / +1

          Ну кто бы спорил. Человек такое существо — множество вещей делает неоптимально. Просто Ваш посыл противоположен замыслу статьи. Или «программисты, не ходите на собеседования».

        • dlinyj
          /#22122382

          Это есть и соискатель попадает в чёрный список. Но я не злоупотребляю, обычно устраиваюсь.

      • /#22122696 / +1

        > уже не помнишь как маску сети посчитать

        Это почему? Потому что последний раз вам требовалось её считать в 2003 году? Тогда зачем вам собеседование с такими задачами, и возможно, работа с такими задачами?

    • 0xd34df00d
      /#22123064

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

      Как понять, в каком именно направлении надо развиваться и что востребовано на рынке?

      • termsl
        /#22123548

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

        • dlinyj
          /#22123648

          Это всё хорошо в популярных отрослях. Есть узкие отрасли, с большой ЗП, и есть шанс попасть туда только раз. И там будет круто, интересно и т.п. Но без хождения по собеседованиям о них не узнаешь. Более того, я сталкивался очень часто (примерно 30% вакансий), что крупные предприятия охотятся сами, но не выкладывают вакансии. Например Концерн «Калашников». А там задачи просто космос.

        • 0xd34df00d
          /#22123656

          Почитать вакансии

          Ну вот я — программист на C++, положим. Я работаю в HFT-фирме и пишу код, который помогает другим людям писать код, который торгует на бирже. Какие вакансии и как мне нужно смотреть, чтобы составить какое-то впечатление о том, что сейчас требуется в окрестности меня? Тем более, что в этих вакансиях (ну, тех, что мне попадались на глаза) написаны вещи типа «знание C++» (насколько глубоко? темплейтами упарываться надо, или достаточно ответить, зачем нужен виртуальный деструктор), «знание низкоуровневого программирования» (где-то от вас ждут умения пользоваться мьютексом, где-то требуют написать свою лок-фри-очередь), и так далее. Как по этим словам составить хоть какое-то впечатление?


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


          поработать фрилансом

          Рабочий контракт запрещает.


          участвовать в профильно движухе

          Это помогает совершенствовать свои навыки, но совершенно не помогает узнать, за какие из них платят.

          • Hydro
            /#22124890

            Рабочий контракт запрещает.


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

            • VolCh
              /#22124930

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

            • Alex_ME
              /#22125046

              0xd34df00d проживает в США, если память не изменяет.

          • tommyangelo27
            /#22125652

            Рабочий контракт запрещает.
            Регистрируешь ООО «Рога и Копыта», в учередители девушку/маму/кота. И пусть доказывают, что это ты работал.

            • 0xd34df00d
              /#22127676

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


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

    • Maccimo
      /#22125042

      твое ты потратил, фиг бы с ним, а вот чужое — это уже $$$

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


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

      В вакансии «опыт работы с системами контроля версий (CVS, MS VSS, SVN, Git)». Сразу побежите в антропологический музей с окаменелостями знакомиться или трезво рассудите, что знание одного Git из всего списка вполне достаточно?


      А вот такое хождение по собеседованиям- по мне сродни мелкой кражи

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

      • VolCh
        /#22126242

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

        Речь же о ситуациях, когда идешь на собеседование вообще работать у них не собираясь, даже если оффер сделают, нет?

        • gorgona45
          /#22133380

          Речь же о ситуациях, когда идешь на собеседование вообще работать у них не собираясь, даже если оффер сделают, нет?


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

  19. Amomum
    /#22122062 / +1

    Что такое красное и бинарное дерево?

    Наверное "красно-черное"? Или бывают и просто красные деревья?

    • dlinyj
      /#22122132

      Возможно я не точно запомнил, правда не сталкивался никогда.

    • 0xd34df00d
      /#22123132

      ИМХО плохой вопрос, кстати. По крайней мере, лично я честно читал книжку Окасаки (и писал свою реализацию красно-чёрных деревьев, и формально доказывал их свойства), но даже через неделю после этого бы не смог на него ответить лучше, чем «ну это там когда есть красные узлы, и есть чёрные, и, кажется, красные вроде как бывают только слева, и у чёрного может быть либо красный ребёнок слева, либо чёрный, а у красного только чёрный, и, типа, все пути из корня до вершин содержат одинаковое количество чёрных узлов, и так типа поддерживается балансировка, если правильно вставлять и перебалансировать»

      • AnthonyMikh
        /#22123444

        Меня в какой-то момент озарило, какова принципиальная структура красно-чёрного дерева: любой путь от корня до листа содержит одинаковое количество чёрных узлов, и между каждой парой последовательных чёрных узлов может быть (а может и не быть) один красный. Отсюда сразу ясно, что длина любого пути от корня до листа может быть от N до 2N-1 узлов, то есть, условно говоря, сделать красно-чёрное дерево несбалансированным более, чем вдвое, вы не сможете.


        К сожалению, понимания операциям, сохраняющим этот инвариант, это не особо помогает.

      • Amomum
        /#22123938

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


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


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

  20. Amomum
    /#22122252

    Может ли интерфейс RS-232 работает ТОЛЬКО по двум проводам: RX и TX? Тут дам ответ: Оказывается, что плохонько, на 9600, но может!!!
    А теперь второй вопрос: почему?

    А зачем вообще нужны все остальные провода в этом интерфейсе (в смысле, на практике зачем)? Или вы имеете в виду и без земли тоже?

    • dlinyj
      /#22122356

      Без земли

      • Amomum
        /#22122394

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


        (Я не электронщик, но мама всегда говорила земли соединять сначала, а только потом сигнальные провода)


        Будет работать или нет — это уже другой вопрос, но мне казалось, что это как неопределенное поведение — даже если сейчас работает не факт, что завтра не сгорит.

        • dlinyj
          /#22122418

          Незаконно, но встречается из-за обрыва земли, допустим. И приводит к куче проблем.

          • Amomum
            /#22122434

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

            • dlinyj
              /#22122470

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

              • Amomum
                /#22122512

                Просто я этот вопрос ошибочно интерпретировал как "можно ли так делать", а не "может ли он работать, если вдруг так сделать"; спасибо за уточнение.

    • acesn
      /#22129590

      А зачем вообще нужны все остальные провода в этом интерфейсе (в смысле, на практике зачем)?


      Они бывают полезны когда идёт большой поток данных. Мне они пригождались при работе с модемом.

      • Amomum
        /#22131430 / -1

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

        • DarkTiger
          /#22140754

          просто ни разу не сталкивался с потребностью в них — и не знаю никого, кто сталкивался бы
          Вот и выросло поколение, как говорится в известном анекдоте про тетрис.
          Например, есть старый девайс со старым драйвером RS232, оба сертифицированы. Этот старый драйвер работает, используя управление потоком. Данные оттуда надо как-то вытащить наверх, для анализа на более современном оборудовании.
          Из личного опыта — моим первым принтером был Robotron 6329 от ДВК, который использовал управление потоком в своем модуле последовательного интерфейса. В драйверах я тогда не разбирался от слова совсем, замыкая DTS сигналы управления потоком на нужный уровень. И принтер нормально печатал графику с Синклера после этого (для тех времен) хака.
          Потом, достав-таки мануал к принтеру, я понял, как переключателями на плате принтера это управление потоком отключить, но это было сильно потом.

          • Amomum
            /#22141260

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

  21. V1RuS
    /#22122400 / +1

    Шина RS-485. Обычно на такой линии есть терминаторы. Однако, у нас схема звезда, с переменным количеством подключаемых модулей. Какие средства избежания коллизий и помех нужно использовать?

    А что, так можно было? Я знаю только одно решение: переделать звезду на шину.

    • Amomum
      /#22123952

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

    • juray
      /#22128470

      Ну вот для довольно схожей CAN есть способ соединения звездой по патенту Daimler-Benz, используемый некоторыми производителями автомобилей (кажется, Deutz так делает, но не помню точно), а также в авионике — вместо двух терминаторов по 120 Ом на концах ставится один резистор 60 Ом в центре звезды (точке соединения лучей).

      Схема

  22. F0iL
    /#22122468 / +1

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

    Когда давным-давно набирали к себе в команду, набирали разработчиков под микроконтроллеры и ПЛК, давали им простую задачку (да, связанную с битовыми операциями), причем не выдуманную, а реальную функцию из реального продукта:
    Есть число, в двоичной форме которого единичные биты идут только подряд. Функция, получив на вход это число, должна вернуть 1) кол-во подряд идущих бит 2) смещение самого младшего бита от начала (т.е. сколько после него нулей).
    Поразительно, но куча людей даже с «системным» бэкграундам (по их заявлениям) не могла написать подобное (решение можно было дать на любом ЯП, хоть даже на выдуманном псевдоязыке). С кем-то был даже диалог вида
    "-- Вы что, тут же нужно цикл делать, это будет работать медленно!
    — Да без разницы, решите задачу так, как считаете правильным, главное чтоб работало
    — А я не знаю, как правильно..."
    Зато наш сокомандник Дима, который вообще был далек от этих всех низкоуровневых приблуд и занимался бэкендом и фронтендом на C#, не только написал обычную реализацию, но предложил еще и математическую (через логарифмы, если ничего не путаю) — проверили, работало :)

    А самую крутую задачу для собеседований мне показывал один приятель — это был реальный коммит от джуниора в их команде, имплементация одного класса с заданным функционалом. Код даже работал, но… короче, коммит, к счастью, поймали на ревью и объяснили что с ним не так и как переделать, так что в этом виде он в мастер не попал :). Собеседуемому давали код, в паре фраз объясняли что этот код делает и просили его поревьюить по-полной.
    По тому, что именно нашел или не нашел кандидат, можно было сделать выводы, как у соискателя с современным C++ и что он не Сишник, считающий себя плюсовиком, т.к. некоторые вещи там напоминали «Си с классами» или просто можно было сделать гораздо понятнее и красивее используя фишки нового стандарта (было сказано, что в проекте принят C++14), как у него с пониманием асинхронности и конкурентности в целом (код асинхронный, но реализация в одном месте надолго блочила поток, плюс в одном месте была потенциальная гонка состояний), внимательностью на ревью (при одном сочетании условий была логическая ошибка и код работал неправильно), с хорошими привычками (часть индентификаторов именовалась другим стилем и это бросалось в глаза), и в целом умением разбираться в коде и задавать правильные вопросы (вопросы задавать только поощрялось).

  23. cepera_ang
    /#22123186

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

    • hqarkx
      /#22123616

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

      • cepera_ang
        /#22124468

        Налоги я плачу не добровольно и с радостью, а по принуждению (в том числе теми самыми военными и полицейскими методами, ага)

        • hqarkx
          /#22124574

          Ну вас же никто насильно не держит в стране, которая производит и использует оружие?
          Следовательно вы соучастник, как и все.

          • tyomitch
            /#22125632

            А что, есть страна, которая не производит и не использует оружие?

            • Simplevolk
              /#22125756

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

          • cepera_ang
            /#22125640

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

          • 0xd34df00d
            /#22127682 / +1

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

            • VolCh
              /#22129260

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

              • 0xd34df00d
                /#22131606

                Вы всерьёз будете сравнивать смену страны с походом в туалет?

                • VolCh
                  /#22131744 / +1

                  И для того, и для того нужны ненулевые усилия. Вы же не описали насколько ненулевые.

                  • 0xd34df00d
                    /#22131804

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


                    А ещё я недостаточно формально описал, что значит «достаточно надолго». Удивительно, что это не вызвало вопросов.


                    Но, в любом случае, я не очень понимаю смысл такого буквоедства. Мне казалось, что очевидно (для человека плюс-минус нашего времени, плюс-минус средних интеллектуальных навыков, знакомого с концепцией стран и переездов, хотя, ИМХО, это всё не стоит уточнять при общении в интернете, но просто на всякий случай, а то вдруг у кого-нибудь из читающих это возникнут вопросы), что сменить страну (то есть, получить визу, разрешающую находиться на территории другой страны с последующей возможностью получить бессрочное разрешение на физическое нахождение на территории другой страны, или же сразу получить таковое бессрочное разрешение на физическое нахождение на территории другой страны, причём его наличие должно иметь формальную силу для соответствующих органов другой страны, то есть, бумажка от моего имени, разрешающая вам проживать в какой-нибудь Германии, не прокатит) является достаточно сложным. То есть, значимая часть (тут не могу определить формально, в любом таком определении будет изрядная доля произвольного выбора порога, чем и плохи параметрические методы) людей, желающих это сделать, оценивали потребные усилия (на всякий случай — именно для вышеупомянутой смены страны согласно вышеупомянутым пояснениям, которые я сюда копировать, то есть, набирать их ещё раз, не буду) как несоразмерные их возможностям или же не компенсирующиеся потенциальной выгодой.


                    Так лучше?

                    • VolCh
                      /#22134828

                      "Сходить в туалет" разве синоним "испражняться"?


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

                      • tyomitch
                        /#22134930

                        «Сходить в туалет» разве синоним «испражняться»?

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

                        • VolCh
                          /#22135002

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

                      • 0xd34df00d
                        /#22135838

                        Ну для меня тоже сам акт смены страны был довольно простым (хотя проживание на птичьих правах, если честно, весьма нервирует), но при этом:


                        1. Так, говорят, не у всех (вон аж статью написали про это сегодня).
                        2. Сюда надо как-то учесть годы, потраченные на плюсы и немножко вузик. Если бы их не было, то вряд ли бы мне сделали оффер.
                        3. Сюда тоже надо как-то учесть атмосферу на работе вместе с невозможностью её смены.

                        • cepera_ang
                          /#22136688

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

                          • VolCh
                            /#22141720

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

                        • VolCh
                          /#22141718

                          Вы же учили плюсы и вузик посещали не целенаправленно, чтобы уехать?

        • dlinyj
          /#22125352

          Вы живёте в этом мире, и должны играть по его законам, вне зависимости от того нравятся они вам или нет. Вы же не ругаетесь на гравитацию.

          • tundrawolf_kiba
            /#22127338

            Вы же не ругаетесь на гравитацию.

            Ну как сказать...
            image

          • 0xd34df00d
            /#22127688 / -2

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

            • 0xd34df00d
              /#22127906 / -3

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

            • VolCh
              /#22129270

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

              • 0xd34df00d
                /#22131610

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


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

                • VolCh
                  /#22131754

                  Так называемые законы природы — это и есть модели каких-то природных явлений.

                  • 0xd34df00d
                    /#22131766

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


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

                    • Kanut79
                      /#22132376

                      Проблема только в том что "физическое явление из-за которого яблоки падают на землю" и "то что люди называют гравитация" это не обязательно одно и тоже.

                      • 0xd34df00d
                        /#22135822

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


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

                    • VolCh
                      /#22134854 / +1

                      Яблоки падали, а закона не было.

                      • 0xd34df00d
                        /#22135812

                        И гравитации, может, не было, о которой был изначальный комментарий?

                        • VolCh
                          /#22141726

                          Явление было, понятия не было.

    • dlinyj
      /#22123632

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

      • tyomitch
        /#22124058

        Интересно, а есть какая-нибудь OpenSource-лицензия, запрещающая использование кода в оборонке?

      • cepera_ang
        /#22124482

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

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

        • unsignedchar
          /#22124786

          Хорошо быть пацифистом, когда лично тебе ничего не угрожает. В том числе и потому, что танк с офигенной системой наведения никогда не выстрелит, потому что другие парни запилили ПТРК с ИИ. А пока есть варианты решения нерешённых проблем через войну — без ВПК и армии не обойтись.

          • dlinyj
            /#22125380

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

          • tyomitch
            /#22125654

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

            • unsignedchar
              /#22128598

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

              • Chamie
                /#22128744

                Глупо, если они вреда не приносят. А если они наводят артиллерию или прямо уничтожают технику и «живую силу»?

                • unsignedchar
                  /#22129526

                  А если они наводят артиллерию или прямо уничтожают технику и «живую силу»?


                  Вот именно. Люди все равно продолжают стрелять в людей, только не стрелами из лука, а беспилотниками и РСЗО.

                  танки и беспилотники не подпустят противника к тёплому офису — затем они и нужны.


                  Всё равно цель — не беспилотник противника, а офис. Или весь город, если нет возможности пульнуть по офису.

                  • tyomitch
                    /#22130890

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

                    • unsignedchar
                      /#22131416 / -1

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


                      Не получается. Цель всё равно не беспилотники, а люди, техника, обьекты инфраструктуры. Просто защищать, подвесив над каждой целью персонального охранника, не получится: противник получит преимущество (перегруппируется, или изобретёт еще более сильную вундервафлю) и долбанёт.
                      Так что гонка вооружений — минимальное зло. Обратите внимание, производители оружия друг с другом не воюют.

            • VolCh
              /#22129276

              Зачем тогда воякам заставлять сови танки и беспилотники стрелять по вражеским, если можно стрелять по тёплому офису противника?

              • tyomitch
                /#22129494

                Потому что танки и беспилотники не подпустят противника к тёплому офису — затем они и нужны.

            • gorgona45
              /#22133394

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

              • cepera_ang
                /#22134670 / -1

                В наше время нужную территорию проще просто купить с потрохами («мягкая сила», всё такое)

          • cepera_ang
            /#22125668 / +1

            Я бы согласился со всеми этими аргументами, если бы жил в дружелюбной стране, у которой под боком оказались какие-то дикари и вот прям угрожают-угрожают. Но кто последний раз нападал на Россию? Этот вопрос закрылся с первой атомной бомбой. Увы, нельзя утверждать обратного и Россия (и раньше Советский Союз) активно чешет свои геополитические амбиции танками зарубежом.

            • dlinyj
              /#22126018

              Расскажите в каком количестве вооружённых конфликтов за пределами РФ участвовала Россия за последние 10 лет? А ещё с использованием танковой армии. И сравните эти числа, допустим с США.

              Пора выйти в реальность.

              • cepera_ang
                /#22126134 / -1

                Украина, Сирия, Грузия. Не десять лет, но 12, надеюсь небольшое округление не смущает, что такое лишние два года? Если взять время моей жизни (чуть больше 30 лет), то становится существенно больше — добавьте Приднестровье, Афганистан, Анголу.

                И сравните эти числа, допустим с Японией — держава сходная по численности населения, экономика чуть получше.

                Пора выйти в реальность.

                • dlinyj
                  /#22126150 / +1

                  Прошу пардона. Я вне политики не буду продолжать этот тред.

                • tyomitch
                  /#22126238 / -2

                  Ещё Ливия, ЦАР, Судан, Мозамбик, и всё за последние 10 лет. А если взять время вашей жизни, то ещё Карабах и Югославия.

                  • cepera_ang
                    /#22126250 / -2

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

        • dlinyj
          /#22125368 / -1

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

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

          • Kanut79
            /#22125494

            А то что там кого-то будет убивать мне всё равно. Тем более, что это оружие сдерживания.

            Россия перестала экспортировать оружие? Я что-то пропустил?

            • dlinyj
              /#22126022

              Мы экспортируем оружие стратегического назначения?

              • Kanut79
                /#22126036

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

                А называется это оружие «оружием стратегического назначения» или «оружием сдерживания» это вообще никакой роли не играет и скорее из области демагогии и лицемерия.

                • dlinyj
                  /#22126084

                  Ответьте на мой первый вопрос.

                  Если Россия перестанет производить и поставлять оружие, на Земле настанет мир и порядок? Райские сады расцветут и из крана польётся пиво?

                  • Kanut79
                    /#22126228 / +3

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

                    • dlinyj
                      /#22126302

                      Или нет, просто эту нишу займёт кто-то другой.

                      • Kanut79
                        /#22126326

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

                  • Neikist
                    /#22126362

                    Если только Россия то конечно нет. Это должны все страны сделать. Если люди будут больше осуждать ВПК во всех странах и с меньшим желанием туда идти — возможно когда нибудь к этому все и придет.

                    • tyomitch
                      /#22126892 / +1

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

                      • Simplevolk
                        /#22129368

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

          • tyomitch
            /#22125674 / +1

            Весь этот пацифисткий морализм очень хорош до того момента, пока мы не понимаем что весь прогресс до нас дошёл из-за ВПК.

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

            • dlinyj
              /#22126026

              Политики — это не люди с другой планеты. Они такие же как вы и я. Просто осознают цену таких вложений.

            • 0xd34df00d
              /#22127712

              Пардон, но главный (по мнению некоторых, по крайней мере) забияка на этом шарике, США, тратит на военку не очень много, где-то в районе 15%, остальное — социалка:



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


              Но что-то никто не предлагает SS/Medicare/Medicaid расформировать и вместо этого строить по Теватрону в год.

              • tyomitch
                /#22128016 / +1

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

                • 0xd34df00d
                  /#22128206

                  Она в США довольно частная. Если вы посмотрите бюджет какого-нибудь MIT, Stanford и прочих, то там госфинансирования меньше трети.


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


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

              • VolCh
                /#22129288

                Если не ошибаюсь, то это "не очень много" в 2-3 раза выше в абсолютных цифрах чем все остальные страны вместе взятые.

                • 0xd34df00d
                  /#22131628

                  Это неважно. Речь же шла о том, на что тратятся политики. Политики США имеют доступ к бюджету США и тратят его так, как на диаграмме выше. То, что политики других стран имеют доступ к другим бюджетам с другим объёмом — другой вопрос.

          • cepera_ang
            /#22125724

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

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

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

            • tyomitch
              /#22125944

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

              Да нет, всё то же самое: ВПК обеспечивает работой кучу предприятий, а те — кучу своих контрагентов, и так далее.

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

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

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

              То, что все первые компьютеры заказывались непосредственно министерствами обороны, показывает, что это были не «потенциально полезные в отдалённой перспективе» вещи, а остро необходимые во время войны.

              • Neikist
                /#22125992

                все вояки надеются не вести военных действий

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

              • Kanut79
                /#22126004

                Да нет, всё то же самое: ВПК обеспечивает работой кучу предприятий, а те — кучу своих контрагентов, и так далее.

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

                П.С. Естественно если мы не берём в расчёт экспорт вооружения.

                • tyomitch
                  /#22126198 / +1

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

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

                  • Kanut79
                    /#22126258 / -1

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

                    И дажe если забыть про это, то можно банально отправить весь ВПК за эти же деньги заборы красить и дороги ремонтировать.

                  • 0xd34df00d
                    /#22127720

                    Почти все, кого я видел и кто с этим соглашается, политики-популисты, а не экономисты.

                  • gorgona45
                    /#22133408

                    Простите, кто соглашается? Швейцария и Финляндия не особо соглашаются.

              • cepera_ang
                /#22126200 / -1

                Да нет, всё то же самое: ВПК обеспечивает работой кучу предприятий, а те — кучу своих контрагентов, и так далее.

                Увы, но нет. Куча предприятий и людей конечно обеспечивается работой, но если не учитывать «стратегический» фактор (то, что с армией на нас не нападут), то эти расходы идут всё же за счёт остальной, производительной части экономики. Проще говоря, сравните эволюцию какого-нибудь куска железной руды, который превратился в танк или танковые снаряды и другого, который превратился в газель — и там и там были подрядчики, контрагенты и т.д., но газель после начала своей жизни начала совершать полезно действие — возить грузы, людей, зарабатывать владельцу денег и т.д. и может делать это пару десятков лет. Танк же в лучшем случае катался по полигону, жрал солярку, требовал команду для обслуживания (много человеческого труда, который мог бы принести пользу в другом месте, opportunity cost в чистом виде), а в худшем просто ржавел под открытым небом на консервации. Отсюда и разница.

                • DarkTiger
                  /#22140886

                  Давайте немного отойдем от полюсов, и вспомним, для чего создавались Камаз, Хаммер и прочие Мицубиси. Да и Газель сделана не на чисто гражданском заводе, скорее, наоборот — это дитя конверсии. Количество невоенных, вспомогательных машин на 1 танк — 10 и более, если мне не изменяет память. И, если вспомнить совсем-совсем истоки, мы с Вами эти строчки пишем, находясь в сети, которая была изначально создана по военному проекту DARPA :)
                  В общем, нельзя одно отделить от другого, военная и гражданская продукция связаны тысячей незримых нитей.

          • cepera_ang
            /#22125744 / +1

            И в догонку перефразирую:
            «Мне нравятся сложные задачи, я вижу труд многих людей, когда вижу изделие фильтрующие терабайты трафика. То, что они заблокируют какие-нибудь полезные ресурсы — мне всё равно. Тем более, что это ради защиты детей от порнографии. Но я принимал участие и в эксплоитах, валящих энергосистемы. Так что тоже было дело».

            • dlinyj
              /#22126042

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

              «К бывшему офицеру приходит сын, он сына спрашивает: «Тут кортик был, где он? » – «Не ругайся, я поменял его на часы у мальчика с соседнего двора». Отец ему говорит: «Покажи часы, да, хорошие. А если завтра придут бандиты к нам, убьют меня, мать, братьев твоих, сестру изнасилуют. А ты им что скажешь? Добрый вечер, московское время 12 часов 30 минут?

              • cepera_ang
                /#22126276 / -2

                Простите, это я просто язвил над популярным здесь «кто все эти люди, которые идут разрабатывать системы DPI для государства, они что не понимают зачем их системы будут использоваться?!». Прекрасно понимают, просто уверены, что это необходимое зло, для обороны от врагов. Не мог не провести аналогий.

                • dlinyj
                  /#22126330 / +2

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

                  • cepera_ang
                    /#22126438 / -1

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

                    Спасибо за описание опыта, было интересно прочитать.

                    • /#22128062 / -1

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

    • 6095959
      /#22125918 / +1

      А не приходило в голову, что «оборонка» нужна еще и для того, чтобы вам на голову бомба не упала?

  24. VolCh
    /#22123282

    Из запомнившихся задач (все на сеньор веб-разработчика на php):


    • интерпретатор простого ЯП (подмножество паскаль кажется): переменные, арифметика,
    • задача на выявление рассинхронизации тактовых генераторов двух компьютеров с вымышленными(?) архитектурой и ассемблером с простейший одноранговой сеткой, скорее даже прямым соединением
    • удалённый лайвкодинг: написать и поднять простой CRUD на symfony без генераторов в докере (не помню Докер условием был или сам решил)
    • нарисовать грубую модель предметной области jira, нарисовать схему сервисов: серверы, сторы, очереди, СУБД и т. п.

    • vladshulkevich
      /#22125694

      Как-то прям очень не просто всё.

      • VolCh
        /#22126290

        Ну так не на джуна за минималку собеседовался.

  25. saboteur_kiev
    /#22124450

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

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

  26. Emelian
    /#22125058

    Попасть на борт — это ещё не самая сложная задача. Самое сложное — это удержаться на борту данной компании.

    Это как поступление на математику мехмата МГУ. Очень легко было поступить (абсолютно ничего сверх стандартной школьной программы), но очень трудно было удержаться. Излишне расслаблялись и вылетали за неуспеваемость даже призеры международной математической олимпиады. Но если ты позволяешь себе «отдохнуть» не более двух недель в семестр, а все остальное время пашешь, пашешь, пашешь, то можно удержаться в университете даже простому смертному, то бишь, не вундеркинду.

  27. event1
    /#22125328 / +2

    И с такими вопросами удаётся найти кого-то?! Завидую. Мы сначала просим три несложные программки написать за полтора часа, так там процентов 95% срезается. Если станем спрашивать, чем syscall'ы на arm и x86 отличаются, боюсь не наймём никого никогда вообще.

    • dlinyj
      /#22125390

      Если станем спрашивать, чем syscall'ы на arm и x86 отличаются, боюсь не наймём никого никогда вообще.


      Моё мнение, что они просто хотели посамоутверждаться.

      • a1ien_n3t
        /#22125572

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

        • event1
          /#22125840

          Инструкция, и там, и там, программное прерывание, так что, я бы предположил, что параметры по разному передаются: в arm много регистров, так что там параметры передаются через регистры. В х86 регистров мало, по-этому, наверное, там параметры собираются куда-нибудь в память и указатель на эту память передаётся через еах, например.

          • a1ien_n3t
            /#22125910

            В х86 тоже аргументы через регистры передаются. Там у всех ограничение на 4 аргумента. Поэтому даже интересно что под различиями хотели услышать.

  28. MaXIVetrov
    /#22125344

    Имеется палка длинной в один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачивается и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.

    +infinity
    Возьмем двух муравьев бегущих в одну сторону, но находящихся на противоположной стороне палки(хотя координата Х у них одинаковая, ось Х — вдоль длины палки), на конце палки они будут встречаться с друг другом… и разворачиваться и опять встречаться на другом конце.

  29. F0iL
    /#22125454

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

  30. Dolios
    /#22125506 / +1

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

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


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

    Все это, как правило, под NDA. Покажете мне ваши куски кода "боевых комплексов"?

  31. KonstantinSpb
    /#22125890

    I. На знание СИ. Что означают следующие записи:

    cdecl.org

  32. John_Nash
    /#22126046

    Слабо себе представляю муравьев, движущихся со скоростью 1 м/c. Это что за монстры такие?

  33. volchenkodmitriy
    /#22126048

    Спасибо за статью. Сам работаю системным администратором и несколько раз менял работу. Про то что надо ходить на собеседования — согласен. Но есть оговорки: во первых если работаешь в крупной компании — работодатель, а точнее HR отдел может узнать об этой активности, во вторых один поход ни о чем не говорит — это может оказаться конторка, живущая по правилам 10-ти летней давности. А так да, помню 10 лет назад активно искали системного администратора — программиста 1С, теперь смешно вспоминать. Все мои успешные устройства на работу как ни странно состояли из одного очного этапа с проверкой знаний и иногда предварительного телефонного собеседования. Все многоэтапки и домашние задания почему-то заканчивались ничем(либо не брали, либо мне контора не нравилась в итоге)

    • vladshulkevich
      /#22128052

      Вооот. Хороший критерий, хоть и не абсолютный. У меня практически так же, причем опыт участия в процессе с обоих сторон.

  34. iamdev95
    /#22126060

    Было как-то одно занимательное интервью, дали задачку на два с половиной часа. «Осенило» решением только под конец второго часа, но собес провалил по иным причинам.
    Собственно, задача:

    Есть два регистра: R1 и R2
    Есть две команды:
    C1: R1 := K*R2 — R1
    C2: R2 := K*R1 + R2
    Есть целевое число N
    На входе: K, N, R1, R2
    Нужно: распечатать минимальную последовательность из команд, позволяющую получить N в R1 или в R2 (в любом из двух регистров)
    Либо напечатать ничего
    Известно, что K != 0, R1 != R2, K, R1, R2 — натуральные, N — целое.

    • wataru
      /#22126274

      Точно опечаток в условии нет? Странные какие-то операции.

      • apachik
        /#22139712

        какая разница какие там операции? задача на обход в ширину по состояниям {R1, R2}

        • wataru
          /#22139788

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


          Обычно в таких задачах операции не абы какие, а имеют какой-то инвариант или структуру. И тогда можно, например, доказать, что достаточно рассматривать только состояния с R1 и R2 не больше N по модулю. Или, например, что можно получить все числа, делящиеся на GCD(R1,R2) и нужно не более N^2 операций.


          Вообще, условие "напечатать ничего", если ответа нет, позволяет считерить — пусть решение повиснет, съест бесконечное количество памяти и ничего не выведет, если пути нет. Но вряд ли такое решение подразумевалось.

          • apachik
            /#22140544

            Угу. я понимаю, о чем вы, все так.
            Но в такой формулировке (не идеально точной) кажется, что условие придумывалось каким-то подражателем и скорее всего она таки не про математику.

  35. vadim_bv
    /#22129552

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

    Задача из физтеховской шутки «решала вся кафедра, но к экзамену решила»: Отсортировать 8-терабайтный массив байтов.

    • unsignedchar
      /#22129584 / +3

      ;)
      За 1 проход сосчитать количество байтов 0х00 = n00,0х1 = n01, ..0xFF =nff
      За 2 проход заполнить массив значениями 0х00 — n00 шт, 0x01 — n01 шт…

      • vadim_bv
        /#22129596

        а я не осилил (((
        но мне правда сказали, что они думали над ней довольно долго

  36. ZakharS
    /#22129868

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

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

    Через 2 месяца удалось пройти собес в VDI (ныне EPAM). Задачка была прикольная — написать на MFC (надеюсь, кто-то еще помнит) MDI приложение с разными спецэффектами в меню: раскраска пунктов, картинки, еще какие-то украшательства. Справился и прошел, не жалею, что не повелся на зарплату.

  37. ainu
    /#22132566

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

    • dlinyj
      /#22132600

      Можно, можно было не спрашивать. Никто не узнает :)))

  38. Krashlab
    /#22133306

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