Программерам, Специалистам в области RT/Embedded, и т.д (часть1)

Jul 12, 2005 16:44

Ниже представлены типичные вопросы, задаваемые на интервью потенциальными работодателями - в области embedded и real-time и не только....

Израиль Июль 2005.

Пример 1:

Дана функция
unsigned int GetID()
{
  static unsigned int i = 0 ( Read more... )

hi-tech, Работа

Leave a comment

Comments 24

dubrick July 18 2005, 11:46:17 UTC
Очень полезное начинание. Чуток позжее я и к тебе сюда допишу пару примеров и несколько твоих "стибрю" и размещу у себя параллельным постом, ежели ты не против, ок?

Reply

correlator July 18 2005, 20:55:34 UTC
Я не против :)
скоро к томуже будет вторая часть :)

Reply

correlator July 29 2005, 21:49:21 UTC
Я запостил вторую часть... Welcome...

Reply


henic August 15 2005, 16:52:08 UTC
Приятственно!

Reply

correlator August 15 2005, 17:59:30 UTC
Ну так старались :)

Reply

henic October 24 2005, 20:13:23 UTC
пользуясь случаем хотелось бы обратить ваше, Хеник, уважаемое внимание на тот факт, что в ведомом Вами коммьюнити rabota_il (в юзеринфо то есть и в ключевых постах) нет линка на коммьюнити hitech_tests.

Reply


brat_gregory August 15 2005, 19:14:51 UTC
Пример 2 давали на интервью в Nareos

Reply

correlator August 15 2005, 19:22:56 UTC
Пример 2 - очень часто дают...

Reply

brat_gregory August 15 2005, 19:24:26 UTC
Еще бы! Смачный.

Reply


ex_ex_zhuzh August 15 2005, 20:20:34 UTC
В ответе к примеру 3 будет ошибка выравнивания.

Reply

correlator August 15 2005, 20:48:17 UTC
О какой строчке речь ?

Reply

ex_ex_zhuzh August 15 2005, 21:03:53 UTC
О методе вообще. Предположительно, spmalloc возвращает блок, годный по выравниванию для всех типов. Если (как обычно происходит) double выравнивается по границе 8 байт, а int по границе 4 байт, обращение к выделенной памяти через указатель на double приводит к ошибке выравнивания. (А если на 80х86 она не фатальна и сходит с рук, так я не виноват.) Нужно выделить в начале блока столько места, чтобы возвращаемое значение опять подходило для всех типов. На C это довольно просто, нужно создать union всех примитивных типов и возвращать следующий за ним указатель.

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

Практически же достаточно взять union трёх типов: int, double и long double.

Reply

correlator August 15 2005, 21:41:57 UTC
Да вообшем ты прав...

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

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

Reply


ex_ex_zhuzh August 15 2005, 20:26:40 UTC
А, да. В примере 1 можно применить операцию типа InterlockedIncrement, которая обычно сильно быстрее, чем. Если ОС поддерживает, конечно.

Reply

correlator August 15 2005, 20:51:18 UTC
InterlockedIncrement далеко не везде есть...
универсальное решение через переменную "на стеке"...

Reply

ex_ex_zhuzh August 15 2005, 21:05:32 UTC
Ну так и enter_critical_Section() не везде есть. Понятно, что переносимого решения не может быть.

Reply


Leave a comment

Up