Программисты - ходите на собеседования!
Jun. 1st, 2018 10:24 pmОбязательно ходите на собеседования, даже если вы влюблены в свою работу. Никто не заставляет вас её менять. При чём, если вы получаете 50 000 рублей - идите на собеседование на 100 000, а если 100 000, то на 150 000 и т.д. Только повышайте планку. Ходить не реже раз в три месяца! В крайнем случае - пол года. Иначе вы покроетесь плесенью, и не будете знать где у вас провалы.
Самые ценные собеседования - это провальные, те, после которых вы чувствуете себя ничтожеством, которое ничего не смыслит в программировании - это то, что поможет вам расти дальше!
Сегодня было самое провальное собеседование в моей жизни. Провальное от слова совсем, я обосрался везде. Какие были вопросы:
- Как устроен системные вызовы linux на языке ассемблера на ARM-процессоре (специфический вопрос, не спорю).
На х86 я более-менее помню, на арме не знаю - провал. Хотя логику работы системных вызовов смог объяснить. Меня умыли, что я чмо и не знаю арм-ассемблера.
- Какие средства синхронизации бывают? Какие средства синхронизации можно использовать внутри контекста прерывания, какие нет и почему?
Рассказал про мьютексы, семафоры. Мне напомнили про спин-блокировки. Про синхронизацию в контексте прерывания я слышал, и даже рассказывал на своих лекциях, но забыл.
- Чем отличается шина i2c от spi. (тут я обосрался конкретно, и ответил что количеством проводов). Сразу был задан вопрос, зачем в i2c стоят терминаторы и какой их номинал. Тут я тоже облажался, и сказал что для согласования линии. А мне напомнили, что там тупо открытый коллектор...
- Может ли интерфейс RS-232 работает ТОЛЬКО по двум проводам: RX и TX? Ну-ка, скажите мне? Эй
di_halt ? Оказывается, что плохенько, на 9600, но МОЖЕТ!!! А почему?
- Как лучше располагать сигнальные линии и питание в многослойных платах и почему? Питание внутри слоёв, или сигнальные линии внутри слоёв. Тут вообще вопрос спорный, и я готов выслушать варианты ответов. Но я сказал, что питание следует располагать внутри слоёв (на четырёхслойке внутри бутера), а сигнальные линии на топе и ботоме, чтобы меньше были наводки. Снова промах.
- Для его у дифференциальных линий дорожки идут везде вместе? Тут было полное попадание, т.к. активно сейчас с ними работаю - для эквивалентности наводки.
- Шина RS-485. Обычно на такой линии есть терминаторы. Но у нас схема звезда, с переменным количеством подключаемых модулей. Какие средства избежания коллизий и помех есть? Не знал - изменение фронта сигнала.
- Что такое красное и бинарное дерево? - не знаю.
- Как работать с cmake. Работал крайне мало, не знаю.
- yocto linux - не использовал, не знаю.
Был ещё ряд вопросов, на которые я не смог найти ответы.
После такого обтекания, мне предложили решить ряд задач, на которых я окончательно запоролся.
Задачи:
1. Написать функцию, которая инвертирует в uint32_t все биты.
Суть задачи ясна, как решать - более-менее понятно. Но я не помню бинарные операторы, плюс от волнения налажал - провал.
2.
Что вернёт данная функция? Задача - блестящая. Я провалился процентов на 30.
3. Функция расчёта среднего арифметического двух чисел int32_t.
4. Способы вывода в программе, в т.ч. в поток ошибок. После стольких провалов я и тут облажался, хотя ответ знал.
Вопросов по электронике, линуксу, ассемблеру и программированию было очень много. Собеседование было достаточно грубым, и где-то даже унизительным. Мне намекнули, что я гожусь только чтобы подметать помещение. Я чуть там стол не опрокинул и хотел уйти хлопнув дверью. Формат беседы был построен, на самом деле чтобы меня унизить. Но, господа, я им так благодарен! Эти люди показали явный уровень моих навыков: куча дилетанских разрозненных знаний, имение представление о различных областях, но нигде не глубоко. Кроме разве что пространства пользователя и разработки в нём. Это очень ценно!
Самые ценные собеседования - это провальные, те, после которых вы чувствуете себя ничтожеством, которое ничего не смыслит в программировании - это то, что поможет вам расти дальше!
Сегодня было самое провальное собеседование в моей жизни. Провальное от слова совсем, я обосрался везде. Какие были вопросы:
- Как устроен системные вызовы linux на языке ассемблера на ARM-процессоре (специфический вопрос, не спорю).
На х86 я более-менее помню, на арме не знаю - провал. Хотя логику работы системных вызовов смог объяснить. Меня умыли, что я чмо и не знаю арм-ассемблера.
- Какие средства синхронизации бывают? Какие средства синхронизации можно использовать внутри контекста прерывания, какие нет и почему?
Рассказал про мьютексы, семафоры. Мне напомнили про спин-блокировки. Про синхронизацию в контексте прерывания я слышал, и даже рассказывал на своих лекциях, но забыл.
- Чем отличается шина i2c от spi. (тут я обосрался конкретно, и ответил что количеством проводов). Сразу был задан вопрос, зачем в i2c стоят терминаторы и какой их номинал. Тут я тоже облажался, и сказал что для согласования линии. А мне напомнили, что там тупо открытый коллектор...
- Может ли интерфейс RS-232 работает ТОЛЬКО по двум проводам: RX и TX? Ну-ка, скажите мне? Эй
- Как лучше располагать сигнальные линии и питание в многослойных платах и почему? Питание внутри слоёв, или сигнальные линии внутри слоёв. Тут вообще вопрос спорный, и я готов выслушать варианты ответов. Но я сказал, что питание следует располагать внутри слоёв (на четырёхслойке внутри бутера), а сигнальные линии на топе и ботоме, чтобы меньше были наводки. Снова промах.
- Для его у дифференциальных линий дорожки идут везде вместе? Тут было полное попадание, т.к. активно сейчас с ними работаю - для эквивалентности наводки.
- Шина RS-485. Обычно на такой линии есть терминаторы. Но у нас схема звезда, с переменным количеством подключаемых модулей. Какие средства избежания коллизий и помех есть? Не знал - изменение фронта сигнала.
- Что такое красное и бинарное дерево? - не знаю.
- Как работать с cmake. Работал крайне мало, не знаю.
- yocto linux - не использовал, не знаю.
Был ещё ряд вопросов, на которые я не смог найти ответы.
После такого обтекания, мне предложили решить ряд задач, на которых я окончательно запоролся.
Задачи:
1. Написать функцию, которая инвертирует в uint32_t все биты.
Суть задачи ясна, как решать - более-менее понятно. Но я не помню бинарные операторы, плюс от волнения налажал - провал.
2.
int32_t a = -200; uint32_t b = 200; return *(uint32_t * (&a)) > b
Что вернёт данная функция? Задача - блестящая. Я провалился процентов на 30.
3. Функция расчёта среднего арифметического двух чисел int32_t.
4. Способы вывода в программе, в т.ч. в поток ошибок. После стольких провалов я и тут облажался, хотя ответ знал.
Вопросов по электронике, линуксу, ассемблеру и программированию было очень много. Собеседование было достаточно грубым, и где-то даже унизительным. Мне намекнули, что я гожусь только чтобы подметать помещение. Я чуть там стол не опрокинул и хотел уйти хлопнув дверью. Формат беседы был построен, на самом деле чтобы меня унизить. Но, господа, я им так благодарен! Эти люди показали явный уровень моих навыков: куча дилетанских разрозненных знаний, имение представление о различных областях, но нигде не глубоко. Кроме разве что пространства пользователя и разработки в нём. Это очень ценно!
no subject
Date: 2018-06-01 07:32 pm (UTC)no subject
Date: 2018-06-01 07:33 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-06-01 07:40 pm (UTC)no subject
Date: 2018-06-01 08:12 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-06-01 08:23 pm (UTC)no subject
Date: 2018-06-02 09:22 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-06-01 09:24 pm (UTC)- Как устроен системные вызовы linux на языке ассемблера на ARM-процессоре (специфический вопрос, не спорю).
Не знаю с армом не работал, думаю 5-ти минутное чтение MAN поможет %)
- Какие средства синхронизации бывают? Какие средства синхронизации можно использовать внутри контекста прерывания, какие нет и почему?
Много разных, зависит от системы. Ограничения контекста прерывания также зависят от системы. Вон под дос надо было кое что в порт 20 писать чтоб клавиатура работала в обработчике.
- Чем отличается шина i2c от spi.
Не работал, надо в доки смотреть или хотя бы в англо-вики.
- Может ли интерфейс RS-232 работает ТОЛЬКО по двум проводам: RX и TX?
Возможно может, там ведь практически переменка. Но думаю что сильно зависит от аппаратной реализации. Так то в свое время на ес-1841 и 5-ти дюймовые дискеты на 800кб(и больше) форматировали. Правда они потом только там и читались %))
- Как лучше располагать сигнальные линии и питание в многослойных платах и почему? Питание внутри слоёв, или сигнальные линии внутри слоёв.
Я хз, платы не разводил и не собираюсь - я программист. Но вопрос странный. Если электронщики достигли консенсуса в этом вопросе - ответ гуглится за пару секунд, если же нет и возможны варианты - разводить плату должен профи который знает нюансы. По любому меня это не касается.
- Что такое красное и бинарное дерево?
Это как раз из программирования. Только не "красное" а "красно-черное".
- Как работать с cmake.
Лучше всего - никак. Выкинуть нахер эту пионерскую поделку и использовать нормальные autotools.
Задачи тоже странные, на каком языке/платформе их надо сделать?
1) тупо бинарное НЕ, либо вычесть uint_max
2) не знаю как на арме, а на х86 у отрицательных чисел старший бит =1 а у положительных =0. Ответ очевиден.
3) сложить и поделить на два, если после сложения был выставлен флаг переноса - прибавить max_int32/2
4) система/платформа? std(in/out/err), файлы, логи, сокеты, порты, сериал консоль, интернет ресурсы?
Тащемто на такие вопросы следовало бы задать кучу встречных вопросов на тему "а с какой целью вы этим интересуетесь???" %)))
no subject
Date: 2018-06-02 01:26 am (UTC)другими словами, что бы ни случилось, на собеседовании надо держаться молодцевато, с удалью, показывая, что можешь думать и решать
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-06-02 09:21 am (UTC)По задачам я просто протупил... Домой пришёл, и понял что на собеседования нельзя ходить в пятницу вечером.
1. Логично, ступил.
2. И чем будет равен ретурн?
3. А как проверить флаг переноса?
4. Говорим только о линукс.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-06-02 06:23 am (UTC)(a+b)/2 можно заменить на a/2 + b/2?
no subject
Date: 2018-06-02 09:22 am (UTC)no subject
Date: 2018-06-02 01:21 pm (UTC)Ну или сначала поинтересоваться, чему равно "среднее арифметическое" 3 и 4.
no subject
Date: 2018-06-02 07:40 am (UTC)А еще лучше дать им Tiny с 2Гб ОЗУ и 8Гб flash... Так, для ВижуалВасика :)
no subject
Date: 2018-06-02 04:22 pm (UTC)no subject
Date: 2018-06-02 08:27 am (UTC)no subject
Date: 2018-06-02 12:54 pm (UTC)Но по сути странное желание собеседовать "по площадям", и тем более странное желание взять "универсала" с улицы, и уж явно настоящий "универсал" стоит дороже.
Но эпизодически падать моськой в совсем не шоколад очень даже полезно. Чтоб не зазнаваться и ценить то, что имеешь. Ну и, конечно, адекватно оценивать собственные знания и силы. Мне уже очень сложно будет сменить работу. Слишком "заточен" под привычные задачи, а схкмотехнику практически забросил - ибо некогда. Так, консультантом...
no subject
Date: 2018-06-02 02:26 pm (UTC)no subject
Date: 2018-06-02 04:09 pm (UTC)no subject
Date: 2018-06-02 06:31 pm (UTC)А почему не АВЛ?
(no subject)
From:(no subject)
From:no subject
Date: 2018-06-02 07:44 pm (UTC)no subject
Date: 2018-06-02 08:01 pm (UTC)А какие должны быть?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-06-02 10:32 pm (UTC)И если даже он все завалил, но думал в правильном направлении, то он пройдет интервью.
Любой интервьюер может завалить кандидата, просто нужно копать глубже, пока не дойдешь до уровня некомпетентности. И хорошо, когда человек сам честно говорит - я не знаю, дальше нужно читать\гуглить и т.д.
no subject
Date: 2018-06-03 12:05 am (UTC)no subject
Date: 2018-06-03 06:47 am (UTC)no subject
Date: 2018-06-04 08:31 am (UTC)no subject
Date: 2018-06-06 12:55 pm (UTC)Там было принято принимать на работу по результатам устного испытания, напоминающего институтский экзамен, перед соответственно комиссией из начальства. Вот ко мне пристал отдел кадров на предмет "придумай нам пару-тройку каверзных вопросов по государственному заказу, чтобы соискатели соответствующей должности раскрыли свой недюжинный потенциал". Ну я подошел к вопросу ответственно, надергал всяких спорных вопросов и из собственной практики и из практики коллег из других богаделен. На каждом можно было по полтора часа перечислять возможные варианты решений и их последствия. На это мне отдел кадров сказал: "вопросы отличные, только нам нужны и ответы, а то начальство не поймет, правильно ли отвечает соискатель". Тут я в сердцах забрал у них практические вопросы и "родил" вместо них совершенно формальные и не имеющие практического значения, зато с ответами типа "15 рабочих дней", "запрещено" и "не более 100 тысяч рублей".
no subject
Date: 2018-06-06 02:29 pm (UTC)(no subject)
From:no subject
Date: 2018-06-20 09:31 am (UTC)