Комментарии 360
самое необычное задание которое у вас было на интервью
и самое идиотское одновременно:
нарисуйте дерево
Самое идиотское — пояснять, почему он любимый. Я бы не осилил
( Про любимый мем было забавнее. С деревом просто непонятно и незабавно)
А если я иву нарисую, это будет кривой успеха моих проектов?
Может, она просто красивой кажется. Может, меня вдохновение вело,
а не практичность или эффективность?
Камыш, осока, деревня…

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

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

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


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

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


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


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

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

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

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

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

Первые три индекса обрабатываются отдельно — stdin, stdout, stderr, которые суть #define STDIN ((FILE *)0) // etc Поэтому обрушится он не от разыменования, а от попытки записи в stdin.
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, потому что передаете невалидный указатель
Ну было бы глупо пытаться с пеной у рта доказывать свою точку зрения, особенно с учетом того, что я скачал исходники glibc, прогрепал их и убедился, что вы правы:
./libio/stdio.c:FILE *stdin = (FILE *) &_IO_2_1_stdin_;

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

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

Неинициализированные константы разрешены в C, но запрещены в C++.
Подробнее: stackoverflow.com/questions/31003713
Можно не отражать муравьев а пропускать их друг сквозь друга?
Хотя в условии задачи указано отражение муравьёв, индивидуальность муравья не имеет значения для решения. С тем же успехом муравьи могут проползать мимо и продолжать путь. Тогда решение видно сразу
Добавим каждому муравью бусинку своего цвета.
При столкновении будем не только отражать муравья, но и менять бусинки у муравьев.
Тогда у каждого муравья всегда есть ровно одна бусинка.
Каждая бусинка двигается равномерно и прямолинейно (никуда не отражается).
Все бусинки упадут за 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, что невозможно.
Все муравьи могут упасть на край и поползти в сторону выхода не успев столкнуться друг с другом. Тут даже меньше секунды.
Мне кажется решение должно быть каким то таким:
Муравьи падают рандомно, как по направлению, так и расстоянию до конца палки.
В лучшем случае если направление движения у муравьев будет в одну сторону, то все муравьи упадут с палки за 1с.Теперь если муравей упадет на самый край палки на значение 0см а выход у нас на 100см, и мы пренебрегаем размерами самого муравья, то по окончанию 1 секунды, он будет на 100 см, и все еще будет находиться на палке. при начале 2 секунды он вылетит с палки. Тоесть в лучшем случае у нас получается чуть больше секунды.
Теперь обратный случай. Тут интереснее. Муравьи падают на концы палки и смотрят в центр. За пол секнуды они достигают центра, после дружно разворачиваются и за пол секунды выходят с палки. Тоесть тоже получается одна секунда плюс минус.
1 секунда?
Да, но только если в условие задачи добавить, что муравьи ползают лишь вдоль палки, что муравей при достижении конца палки обязательно падает с нее, что муравей не падает в любом другом случае. И если пренебречь временем на разворот. Сейчас же в ответе может быть и бесконечность:
Имеется палка длинной в один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачивается и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.
что муравей не падает в любом другом случае

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

Если вспомнить, что обсуждалось собеседование программиста, и рассмотреть соответствующие рабочие задачи, то обычный поиск бага — это на задача подвох, внимательность или логику?
Имхо, решая логические задачи, про рабочие можно не вспоминать (обратно тоже верно). А помнить нужно то, что умение не переусложнять задачу, а мыслить максимально простыми полными абстракциями является одним из ключевых для хорошего программиста. Принцип KISS.
Где тут переусложнение? В рабочих задачах нужно понимать предметную область, а чтобы решить, что по палке муравьи будут ползти строго вдоль, да ещё и одной дорожкой, мне кажется, нужно ни разу в жизни не видеть ни палки, ни муравьёв. Тем более, что в условии чётко сказано, что все 10 муравьёв ползут в разные стороны. Если сторон всего две, то как минимум 5 из них ползут в одну и ту же (а другие 5 в другую).
Серьёзно, я пока ответы не почитал, мне и в голову такое не пришло.
(потом вспомнил, что уже встречал эту задачу в школьные годы среди олимпиадных по математике, и точно так же не понял этого странного допущения).
Кстати, поискал это задачку в олимпиадных, и там формулировка намного более однозначна:
По палке бегают муравьи с одинаковой постоянной скоростью. Всю палку муравей пробегает за минуту, а когда добегает до края, падает. Но когда два муравья встречаются, они разворачиваются и бегут в противоположном направлении. Докажите, что через минуту все муравьи упадут с палки.
То есть в данной формулировке у вас не возникли вопросы про то, ползут ли муравьи строго вдоль да еще и по одной дорожке? И не появилось предположений, что автор никогда в жизни не видел ни палок, ни муравьев?
Нет, потому что в этой формулировке муравей может хоть кругами, хоть зигзагами бегать. Главное — что за 1 секунду он добирается из конца в конец.

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


задача

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?

(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 он и будет алисой.

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

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

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

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

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

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

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

Возможно, но минимальное время никого не интересует.
Строго говоря, на шине I2C нет терминаторов — только подтягивающие резисторы. :)
Для формирования высокого логического уровня. Линии шины I2C управляются выходами с открытым коллектором/стоком, которые требуют подтяжки к питанию.
за «железки» столько не платят :)
Сам сижу в разработке под мобилки и отправляю комментарии по IOT разработчикам
К сожалению в нашу компанию требуются специалисты, которые не строят гипотезы, а готовы разбираться в вопросе и решать задачи.
я тоже)
А пример кода обхода дерева не покажете? оно там в задании 3 есть
return *(uint32_t * (&a)) > b — тут вернет 1, т.к. из отрицательного числа делаем большое положительное
Гораздо интереснее получилась бы задачка, если бы a и b были разных размерностей. В этом случае результат зависел бы от типа процессора, точнее, от endianess :)
Если бы было сформулировано «какое минимальное время нужно прождать», тогда можно было бы рассуждать, 1 сек или 20 сек. А так правильный ответ — бесконечность.
Дадим каждому муравью секунду на реакцию — итого 19 секунд.
В задаче не указано что делает муравей достигнув края палки. Может падает, может вверх головой по нижней стороне ползет, может просто обратно ползет, а может в ступоре замирает.

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

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

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

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


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

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

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

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

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

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

Саму эту палку пусть и едят.
Тогда будут по ней ползать, пока она не прекратит существовать.
Самое необычное… Мне показали программный код другого человека, не знаю был ли он специально так написан или нет, но программа явно была внутренней корпоративной, и смотрю я этот уровок кода из программы и понимаю, что здесь было бы не плохо сделать иначе, а тут место тонкое и прочие-прочие такие моменты и так увлекся всем этим, что параллельно на листке начал писать исправления, а когда обрывок кода начал заканчиваться, я начал мыслить абстрактно(ведь суть программы понял), что тут должен быть такой класс, а тут такой, связь такая и т.д. и т.п., и вот я заканчиваю данный поток мыслей, и понимаю, что человек, который здесь ведущий программист, и собеседует меня на обычного программиста — автор кода.
Именно так с формулировкой: У Вас хорошие знания и навыки, но этого недостаточно для работы у нас. Мы Вас внесли в архив кандидатов и как только откроется менее требовательная должность, с Вами свяжутся.
Никто не перезвонил, несколько лет прошло, сильно видимо обиделись.
return *(uint32_t * (&a)) > b

Я мысль понял, а компилятор — нет. Надо
return *((uint32_t *) &a) > b;
Ну это прям опечатка, которая была в процессе набора статьи :).
для инвертации битов можно воспользоваться операцией ~
Обычно имеют в виду «развернуть задом наперёд», т.е. 0b1101 <-> 0b1011
Ну, не знаю, на сколько интересное, но абсолютно глупое задание:«Написать „Hellow, World!“ без единой ';' ». На Си.
Давайте дадим людям подумать! Подсказка. Именно в Вашем main.c не должно быть ';'.
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);
Только return нет и нормальный компилятор должен бросить critical предупреждение.
так лучше?)
int main()
{
    if(printf("Hello world!")) {}
    while(true) {}
}

хотя не уверен что на отсутствие return в main компилятор ругается, по краней мере gcc, который у меня под рукой, для main такого предупреждения не генерит.
Так хуже, потому что вечный цикл без побочных эффектов — это UB, и компилятор имеет право не напечатать ничего, или напечатать что-нибудь другое.
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.

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

Нет, не должен.
C99 n1256, 5.1.2.2.3: «reaching the } that terminates the main function returns a value of 0.»
*нормальный* компилятор должен. Стандарт, к сожалению, адекватно не объясняет, почему:
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.
*нормальный* компилятор должен

gcc не жалуется. А какой компилятор «нормальный» и жалуется, хотя бы один?
А никто и не сказал, что он есть. Отсутствие return в main — это признак овнокода или какой-то неадекватности. Даже на совместимость со старым кодом это не списать, потому что C89/90 заявляет, что это *обязательное* действие. Поэтому в стандарте на C99 это выглядит глупо. Компилятор не-курильща должен предупредить что там такая лажа и собрать код.
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, по поводу корректности программы ничего не поменялось.

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

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

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

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

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

В любом случае, это в стандарте исправили 21 год назад.
Раньше у WatcomC это была ошибка, сейчас проверил OpenWatcom 1.9 — только варнинг.
А теперь давай без фигурных скобок, чтобы уж совсем наркоманство :)
В том посте испоьзуются фигурные скобки. Я имел в виду триграфы :D
В том посте испоьзуются фигурные скобки.

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

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

Их удалили в C++17
Понял, вместо {...} можно будет "..." написать. Тогда да, было уже.
Жаль, что удалили. Теперь рекрутерам даже спросить нечего на собеседовании…
int32_t a = -200;
uint32_t b = 200;
return *(uint32_t * (&a)) > b


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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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


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

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

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

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

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

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

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

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


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

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

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

Сергей Брин эмигрировал с родителями в США в возрасте шести лет. Поэтому фраза «простой советский ребёнок» подошла бы, а вот «парень» — уже нет. И тогда для корректности комментарий, начавший ветку, должен звучать так:
Основан советскими детьми
:D
Ну, на мой взгляд, вопросы, которые автор привел, на 100% соответствуют его специальности. Но, кроме муравьев, наверное. Меня самого такие задачки бесят. Я, в принципе, на 80% вопросов сразу ответ дал. Единственное, не являюсь именно Linux системным программистом, на голом железе, по этому вещи, касательные ядра — не в курсе…
Задачка с собеседования. Что выведет программа? Решить без запуска. В тексте незначительные ошибки, чтобы сразу не скомпилировалось.
Самая наркоманская задачка такого рода из тех, что я видел :)
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;
}
Получилось вручную посчитать? Круто! Я во время собеседования третье число не угадал, но провалился не из-за этого :)

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

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

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

А на счёт воровства бумаги, это не так, ибо это работа HR искать и собеседовать, и если им что-то не нравится, то работу надо менять. И я собеседовал сам, такое количество фарша насмотрелся, уууу. Поэтому эффективный способ сначала смотреть код, а потом остальное.
Берешь высокую планку, находишь вакансии под нее, смотришь требования, открываешь молескин, выписываешь дифф от того, что сегодня имеешь, идешь забрить не достающее.
Находишь человека, работающего на интересующей должности, если ты увлекающийся и вообще тру профи, не составит труда, кстати все эти митапы, выставки, конференции и кружки по интересам, в 2020 социалки и даже боюсь этого слова- чатики- как раз инструменты для этого, а не обивание порогов HR, далее по тексту, ткнут носом и еще помогут подтянуть, а потом мимо HR проведут.
Сам собеседовался и собеседовал, был бы рад, если меньше народу бродило за волшебным пинком и был бы рад, не тратить часы на таких, из-за этого и возникают все эти веселые вопросы про круглые люки и деревья.
Это всё херня. Всё работает для популярных направлений. Системное программирование, достаточно узкая область и вот понять что там реально нужно возможно либо работая, либо сходив на собеседование.
Вот реально, даже не представлял как это выглядит до.
Вы тут указали почти все возможные места трения в социальных трансакциях. А некто не только их указал но и вывел институциональный подход из подобного наблюдения.
А по сути Вы не совсем правы. Ходя на собеседования можно легко обнаружить, что уже не помнишь как маску сети посчитать.
Я пытаюсь донести, что обнаружить, что не помнишь, как посчитать маску сети можно другими, менее затратными способами и более для этого предназначенными, чем хождением по собеседованиям, перекладывая по сути свои проблемы на других, пока бесплатно.
Идейка для hh — надо давать работодателям (за отдельную, конечно плату) статистику прохождения соискателем собеседований за последние 5-10 лет.
Ну кто бы спорил. Человек такое существо — множество вещей делает неоптимально. Просто Ваш посыл противоположен замыслу статьи. Или «программисты, не ходите на собеседования».
Это есть и соискатель попадает в чёрный список. Но я не злоупотребляю, обычно устраиваюсь.
> уже не помнишь как маску сети посчитать

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

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

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

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


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


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

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


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

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

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


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

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

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

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


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

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

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


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

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


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

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

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

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

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


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

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

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

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

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

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


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

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


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


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

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

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

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


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


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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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


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


Так лучше?

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


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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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


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

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

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


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

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

Никто не гарантирует, что ваш код не будет использоваться в оборонке. Особенно, если вы OpenSource разработчик.
Ну и так же, как верно заметили, если вы платите налоги, то уже финансируете изготовление средств убийства.
Интересно, а есть какая-нибудь OpenSource-лицензия, запрещающая использование кода в оборонке?
Нет, эти лицензии обычно не относят к open source. Например, Open Source Definition by Open Source Initiative содержит п. 6 «No Discrimination Against Fields of Endeavor», прямо указывающий на то, что лицензии, ограничивающие области применения ПО, нельзя назвать open source. Это логично, ведь иначе можно так сузить разрешенную сферу применения, что де-факто использовать ПО будет невозможно.

Вы сами приводите пример нашумевшей JSON License («The Software shall be used for Good, not Evil»), которую не считают open source ни FSF, ни OSI, что уж говорить про более конкретные ограничения.
Вижу некоторую разницу всё же. Одно дело, если я вдруг через 100500 шагов косвенно поучаствовал (но в этом не было моего активного и осознанного участия и явного согласия), другое дело когда «уху, вон там едет классный танчик, в котором моя великолепная система наведения на тепловые сигнатуры мерзких вражеских солдат».

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

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

Абсолютно так. Очень хорошо быть пацифистом в тёплой квартире, значительно сложнее быть пацифистом под снарядами. ВПК наши деды разработали не просто так, а после Второй Мировой войны.
Добавлю, что прогресс в военке идёт как раз в сторону исключения людей из непосредственного участия в конфликтах. Пусть лучше автономные танки и беспилотники друг по другу стреляют, а вояки сидят в тёплых офисах и пишут для них сценарии.
Увы, нет. Война ведется не потому, что хочется пострелять. Все равно люди собираются стрелять в других людей, только расстояние между ними больше. По беспилотникам стрелять глупо; с тем же успехом можно в CS зарубиться.
Глупо, если они вреда не приносят. А если они наводят артиллерию или прямо уничтожают технику и «живую силу»?
А если они наводят артиллерию или прямо уничтожают технику и «живую силу»?


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

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


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


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

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

Потому что танки и беспилотники не подпустят противника к тёплому офису — затем они и нужны.
Я бы согласился со всеми этими аргументами, если бы жил в дружелюбной стране, у которой под боком оказались какие-то дикари и вот прям угрожают-угрожают. Но кто последний раз нападал на Россию? Этот вопрос закрылся с первой атомной бомбой. Увы, нельзя утверждать обратного и Россия (и раньше Советский Союз) активно чешет свои геополитические амбиции танками зарубежом.
Расскажите в каком количестве вооружённых конфликтов за пределами РФ участвовала Россия за последние 10 лет? А ещё с использованием танковой армии. И сравните эти числа, допустим с США.

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

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

Пора выйти в реальность.
Прошу пардона. Я вне политики не буду продолжать этот тред.
Ещё Ливия, ЦАР, Судан, Мозамбик, и всё за последние 10 лет. А если взять время вашей жизни, то ещё Карабах и Югославия.
Написал только те, что знал из памяти, навскидку, спасибо за уточнение.
Мне важно решение задачи. Мне нравится масштаб проекта и я вижу труд многих людей, когда вижу изделие на параде. А то что там кого-то будет убивать мне всё равно. Тем более, что это оружие сдерживания.
Но я принимал участие и с тепловизионными системами «зачистки». Так что тоже было дело.

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

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

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

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

Даже если эту нишу целиком займёт кто-то другой, то на мой взгляд мир всё равно сделает шажок в нужном направлении.
Если только Россия то конечно нет. Это должны все страны сделать. Если люди будут больше осуждать ВПК во всех странах и с меньшим желанием туда идти — возможно когда нибудь к этому все и придет.
Если с рынка уйдёт один игрок, значит цены подрастут, значит меньшему количеству банановых республик будет по карману импортное оружие, значит будут воевать палками и камнями. Всё вперёд.
Отлично. Согласен с Вами! Пусть первыми разоружаются и прекратят финансировать военку те, кто больше всего в это вкладывается- США.
Весь этот пацифисткий морализм очень хорош до того момента, пока мы не понимаем что весь прогресс до нас дошёл из-за ВПК.

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

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



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


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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


Моё мнение, что они просто хотели посамоутверждаться.
Кстати инетерсно, что под отличием имеется введу. Там в принципе все отличие это разная инструкция и регистры соответственно, а внутри вроде все также. Ну еще ид в таблицы разные, но я сейчас только обратил внимание. Есть еще что-то. А то даже нагуглить больше не получается
Инструкция, и там, и там, программное прерывание, так что, я бы предположил, что параметры по разному передаются: в arm много регистров, так что там параметры передаются через регистры. В х86 регистров мало, по-этому, наверное, там параметры собираются куда-нибудь в память и указатель на эту память передаётся через еах, например.
В х86 тоже аргументы через регистры передаются. Там у всех ограничение на 4 аргумента. Поэтому даже интересно что под различиями хотели услышать.
Имеется палка длинной в один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачивается и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.

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

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

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


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

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

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