LINUX.ORG.RU

Embedded C: вопросы на собеседованиях

 , ,


4

5

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

Так вот, уважаемые отбиральщики мужей у жен специалистов на должность embedded C developer, что вы обычно на собесах спрашиваете?

Особенно интересны вопросы по Сишке с намеком на завалить кандидата — неочевидные или на хорошее знание стандарта.

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



Последнее исправление: untitl3d (всего исправлений: 3)

Ответ на: комментарий от Kogrom

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

Понятно. Диванный теоретик пришел в тред. Ты вообще с промкой хотя бы отдаленно знаком? Я тебя удивлю, но в промке древние как дерьмо мамонта 4-битники до сих пор используются.

Oberstserj ★★
()
Ответ на: комментарий от BceM_IIpuBeT

Ну конкретно этот знает стандартную библиотеку, Qt, хорошо разбирается в программировании под Linux, его не смущает работа с сетью. Кроме того, может поддерживать проекты на других языках программирования, типа C# или Java.

Собеседовал его не я. Поэтому не знаю что его спрашивали.

Kogrom
()
Ответ на: комментарий от pinus_nigra

Там же два действия всего: сложить и выстрелить в ногу

Ну когда ты обезьяна, то да, именно это тебе и остается.

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

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

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

Kogrom
()

А есть здесь кто из многоуважаемых сэров в сфере телекома занятых? 5G там, вот это вот всё.

untitl3d
() автор топика
Ответ на: комментарий от Kogrom

Сложность во времени отладки, в настройке, в строках кода.

Бред

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

Кому очевидно? Ты в байтиках путаешься, если их больше двух? Бедняжка…

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

Еще один бред.

Oberstserj ★★
()
Ответ на: комментарий от BceM_IIpuBeT

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

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

Чипы с MMU и линуксом — это не микроконтроллеры.

Да, я говорю про STM32 без ОС, или с какой-нибудь RTOS.

Kogrom
()
Ответ на: комментарий от Kogrom

я вот как-то написал на ассемблере взаимодействие с I2C микросхемой в несколько десятков строчек, битбэнгом, и оно заработало с первого раза

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

Harald ★★★★★
()
Ответ на: комментарий от Harald

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

Oberstserj ★★
()
Ответ на: комментарий от Harald

На работе. Около 60 устройств на шине у коллег, если я не ошибаюсь. Уже год не могут настроить стабильную работу.

Kogrom
()
Ответ на: комментарий от Harald

А они не задумывались, что 60 устройств на одной шине — это как-то неправильно?

Еще один…

Протокол не накладывает ограничений. Скорее вопрос по нагрузочной способности железки. Протокол за это не отвечает.

Oberstserj ★★
()
Ответ на: комментарий от Kogrom

Пробуют заменить I2C на CAN. Но вроде и это не сильно помогло.

Логично. Не смогли настроить одно, хватаются за другое. А потом рассуждают чем один интерфейс сложнее другого. Коротко о том в какое дно скатился мир IT.

Oberstserj ★★
()
Ответ на: комментарий от Kogrom

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

Harald ★★★★★
()
Ответ на: комментарий от Oberstserj

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

Вы там это, слюной не захлебнитесь. Я переживаю.

bugfixer ★★★★★
()
Ответ на: комментарий от Oberstserj

Во-вторых, не ты ли сам виноват в падении уровня соискателей

Хотите обсудить? Вопросы моего отношения к подготовке соискателей в частности. У вас номерок лечащего врача под рукой, я надеюсь… вам помогут.

bugfixer ★★★★★
()
Ответ на: комментарий от Harald

Зато реальные устройства накладывают

man нагрузочная способность. Иметь более 1000 устройств на шине сегодня не проблема.

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

а то в дверь скоро не пройдешь.

У меня всё хорошо. За вас реально переживаю.

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

Хотите обсудить?

Нет, с тобой все понятно. Хотябы по фразе про врача школотронный уровень заметен.

Oberstserj ★★
()
Ответ на: комментарий от bugfixer

Вот и починяй. На своём месте, однозначно.

Ути, мой маленький. Тыжсмари как задело-то, штанишки потеплели, бегать начал :)

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

Вот и починяй. На своём месте, однозначно.

Ути, мой маленький. Тыжсмари как задело-то, штанишки потеплели, бегать начал :)

Угомонись, «понаехавший». Редко так говорю - но пнах. Иди в песочницу к своим школьным сотоварищам.

bugfixer ★★★★★
()
Ответ на: комментарий от BceM_IIpuBeT

Скорее всего, что-то криво подключенно и при работе просаживает линию по напряжению.

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

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

Сегодня строить ту же сеть на 485 интерфейсе с сотней устройств на шине не проблема. Но как правило сети строят из разношерстного оборудования или того что подешевле. Впихивают какую-нибудь ADM1485 и наивно ждут, что в сети на 20 устройств будет что-то работать. Хотя взять буквально соседнюю линейку ADM2483 и спокойно можно вешать 200-230 устройств. Но и цена у чипа вчетверо дороже.

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

@Harald

Oberstserj ★★
()
Последнее исправление: Oberstserj (всего исправлений: 2)
Ответ на: комментарий от bugfixer

Ой, как разгорячился. Уже на исконно-родную лексику перешел. Горжусь))

Дырочка на месте заднего шва уже прожглась?))

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

зачем верхнему плечу моста бутсрап схема нужна

а что такое бутстрап верхнего плеча? (в целях понижения безграмотности) тапа раскачивающий транзюк(и) чтоб главный открывался-зарывался пошустрее?

pihter ★★★★★
()
Ответ на: комментарий от fsb4000

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

Не проще.

Ну это так, просто мысли, я не провожу собеседования…

Попытаюсь объяснить как оно выглядит с точки зрения работодателя:

  1. у любого, даже очень опытного программера, будет learning curve связанный с тем что он не знает конкретно Ваш code-base etc. Это investment. Как минимум времени того кто будет его поначалу вести. С juniors всё сложнее так как их ещё и программировать учить приходится. С другой стороны seniors переучивать (ломать?) зачастую бывает сложнее.

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

  3. Вы хотя бы в перспективе рассчитываете на то что Ваш совместный с новобранцем performance будет выше, чем у Вас одного. И тут Вас уже интересует насколько быстро это произойдёт (мы помним, что поначалу он Вас будет только замедлять, и производить по минимуму, правда?), и не сбежит ли от Вас новобранец раньше этого, в худшем случае к конкурентам унеся с собой часть know-how.

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

bugfixer ★★★★★
()
Последнее исправление: bugfixer (всего исправлений: 1)
Ответ на: комментарий от Oberstserj

Впихивают какую-нибудь ADM1485 и наивно ждут, что в сети на 20 устройств будет что-то работать. Хотя взять буквально соседнюю линейку ADM2483 и спокойно можно вешать 200-230 устройств. Но и цена у чипа вчетверо дороже.

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

Kogrom
()
Ответ на: комментарий от fsb4000

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

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

Kogrom
()
Ответ на: комментарий от Kogrom

Но тут вопросы не к программисту, а к электронщику

Проблема в том, что погромисты уж больно самоуверенные сейчас. Лезут во все подряд, думают, что для всего создали адекватный уровень абстракции. Я каждый второй объект, если попадается ретрофит, нарываюсь на плоды творения таких специалистов. Смотришь в исходник прошивки, а таааам…я тут как-то рассказывал про одного знакомого, который под 8-битные контролеры пытался писать на питоне. И ооп во все поля тащит. Мрак короче. Также и здесь: взяли первый попавшийся чип под 485 интерфейс, построили сеть, а потом, вместо того, чтобы хотя б осциллографом/анализатором тыкнуться в шину и глянуть что там происходит, грешат на протокол. За свою деятельность я лишь пару раз сталкивался с тем, что неподходящий протокол выбран. В остальных случаях косяки либо в железяке, либо (что чаще) в кривом коде.

Oberstserj ★★
()
Ответ на: комментарий от pihter

а что такое бутстрап верхнего плеча?

Ну ты схему моста/полумоста представляешь? У тебя исток верхнего ключа оказывается отвязан от земли и на затвор надо подавать управляющее напряжение не относительно земли, а увеличенное на некоторую величину. Проблема в том, что эта разница еще и от нагрузки зависит. Поэтому приходится городить локальное подобие земли, чтобы адекватно ключом управлять. Есть разные способы, а сам принцип называют bootstrap.

чтоб главный открывался-зарывался пошустрее?

Чтоб верхнее плечо полумоста вообще открывалось-закрывалось, а не жило своей жизнью)

Oberstserj ★★
()
Ответ на: комментарий от Kogrom

Да там типичная менеджерская каша в голове. Сам посуди, вот он пишет:

у любого, даже очень опытного программера, будет learning curve связанный с тем что он не знает конкретно Ваш code-base etc.

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

Далее он пишет:

С другой стороны seniors переучивать (ломать?) зачастую бывает сложнее.

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

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

А это как раз то, на что он так агриться начал на меня, потому что я в точку попал со своим примером: набирает новичка и кидает его на амбразуру. А потом искренне не понимает, почему тот все наломал. А что может быть по-другому он не догадывается. Или догадывается, но там типичная отмазка «мне некогда его учить». Хотя опять же проблема в том, что он отбирает людей по принципу «этого надо учить, а этого не надо», но ни разу не пробовал искать людей, которые могут научить его самого.

Смотрим дальше его перлы:

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

и не сбежит ли от Вас новобранец раньше этого, в худшем случае к конкурентам унеся с собой часть know-how.

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

Т.е. мы уже поняли, что наш танцор по граблям сам себе героически создает тотальное болото, отсеяв адекватных кандидатов и оставив только тех, на которых надо тратить время, а потом героически из этого болота выбирается, пописывая на ЛОРе комментарии, о том, как упал уровень сосискателей. Что характерно, о том, что перед ним живой специалист, которому помимо зп еще и комфортные условия труда создавать надо, чтобы он работал с отдачей и не сбегал, наш танцор тоже не догадывается. Но уперто продолжает брать на работу мешок то ли с котами, то ли с навозом, потому как ни на что другое профессионального нюха нет. Ну а виноват конечно же я, кто тыкает его мордой в его же дерьмо, ога :)))

Oberstserj ★★
()
Ответ на: комментарий от Kogrom

Имхо те, кто предпочитает С, профнепригодны как программисты. С это подмножество С++. Отказываться от С++ это значит отказываться от дополнительных возможностей. В этом смысла ровно ноль. Кроме боязни сложного.

Раньше ещё были отмазки мол компилятора нет. Но в 2021 году это уже не аргумент.

Вот ограничить разрешённые возможности в коде может быть разумно.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Oberstserj

Ну ты схему моста/полумоста представляешь?

да, когда деревья были большими – изобретал свои драйвера, мне казалось что так проще )

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

Когда я сгородил свой первый на полевиках, то долго не мог понять почему оно от 12 вольт работает (на управление), а от 5 нет, хотя транзистор ТТЛ-овский был. Долго думал, но до недостатка земли сам додумался, оказывается у этой проблемы даже название есть!

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

понял, спасибо за ответ!

pihter ★★★★★
()
Ответ на: комментарий от Kogrom

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

А ты быстро умеешь объяснять :)

pihter ★★★★★
()
Ответ на: комментарий от Legioner

Имхо те, кто предпочитает С, профнепригодны как программисты. С это подмножество С++. Отказываться от С++ это значит отказываться от дополнительных возможностей. В этом смысла ровно ноль. Кроме боязни сложного.

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

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

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

pihter ★★★★★
()
Ответ на: комментарий от pihter

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

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

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

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

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

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Legioner

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

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

Kogrom
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.