Задачки на собеседованиях
Aug. 10th, 2012 01:23 amПоскольку в ближайшее время мне вряд ли представится возможность сесть за комп, по сему по просьбам трудящихся сразу напишу пост о вопросах на собеседовании в Samsung
На собеседовании задавались множество вопросов, кто я, откуда что я знаю и т.п. Но на мой взгляд наиболее интересные были вопросы задачки.
I. На знание СИ. Что означают следующие записи:
(скажу сразу, что я мог уже что-то подзабыть и от общей усталости что-то напутать, но было как-то так).
Скажу сразу что с задачей этой я слажал по крупному, максимально как можно было слажать. Хотя указатели хоть как-то да и понимаю.
II.На знание многозадачного си под linux Следующий вопрос меня поставил в тупик.
Почему эта программа выдаст ошибку сегментации? Я до сих пор честно говоря не знаю, но и пока не было времени и возможности это узнать.
III. На сообразительность.
Имеется палка длинной один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья - 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачиватся и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.
Честно говоря моя логика подсказывает это число равно двум секундам. Но меня смущает броуновское движение на палке...
Приветствуются ваши варианты ответов.
На собеседовании задавались множество вопросов, кто я, откуда что я знаю и т.п. Но на мой взгляд наиболее интересные были вопросы задачки.
I. На знание СИ. Что означают следующие записи:
- const char * str;
- char const * str;
- const * char str;
- char * const str;
- const char const * str;
(скажу сразу, что я мог уже что-то подзабыть и от общей усталости что-то напутать, но было как-то так).
Скажу сразу что с задачей этой я слажал по крупному, максимально как можно было слажать. Хотя указатели хоть как-то да и понимаю.
II.На знание многозадачного си под linux Следующий вопрос меня поставил в тупик.
...
int main ()
{
fprintf(0,"hello\n");
fork();
return(0);
}
Почему эта программа выдаст ошибку сегментации? Я до сих пор честно говоря не знаю, но и пока не было времени и возможности это узнать.
III. На сообразительность.
Имеется палка длинной один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья - 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачиватся и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.
Честно говоря моя логика подсказывает это число равно двум секундам. Но меня смущает броуновское движение на палке...
Приветствуются ваши варианты ответов.
no subject
Date: 2012-08-09 09:32 pm (UTC)no subject
Date: 2012-08-09 09:33 pm (UTC)no subject
Date: 2012-08-09 09:36 pm (UTC)При чём тут fork не знаю, упасть должно сразу на fprintf.
no subject
Date: 2012-08-09 09:37 pm (UTC)no subject
Date: 2012-08-09 09:39 pm (UTC)Стандартный ввод
Поток номер 0 (stdin) зарезервирован для чтения команд пользователя или входных данных.
При интерактивном запуске программы по умолчанию нацелен на чтение с устройства текстового интерфейса пользователя (клавиатуры). Командная оболочка UNIX (и оболочки других систем) позволяют изменять цель этого потока с помощью символа «<». Системные программы (демоны и т. п.), как правило, не пользуются этим потоком.
no subject
Date: 2012-08-09 09:44 pm (UTC)no subject
Date: 2012-08-09 10:02 pm (UTC)fprintf(0, "blabla) это тоже самое, что fprintf(NULL, "blabla"), что бессмысленно. А вот заранее определенные переменные stdin, stdout и stderr как раз являются валидными указателями на FILE и их можно было бы использовать.
no subject
Date: 2012-08-09 10:10 pm (UTC)Есть функция fdopen, которая создает стрим на основе существующего дескриптор, который может быть стандартным вводом/выводом/потоком ошибок, пайпом, файлов, открытым функцией open (а не fopen!), а может быть, например, сокетом. В полученный стрим уже можно писать fprintf'ом по шаблону, например, и этот поток уже может, например, построчно буферизироваться. То есть на 10 fprintf'ов будет вызван один write. Но это уже тонкости.
no subject
Date: 2012-08-10 05:48 am (UTC)no subject
Date: 2012-08-10 06:53 am (UTC)0 синтаксически эквивалентно NULL (пустой указатель), который и определен где-то как 0. Ну, то есть 0 — это не только лексема целого, но и лексема нулевого указателя.
1 — это целое число, оно не может быть неявно преобразовано в указатель.
no subject
Date: 2012-08-10 06:55 am (UTC)no subject
Date: 2012-08-09 09:45 pm (UTC)no subject
Date: 2012-08-10 05:47 am (UTC)no subject
Date: 2012-08-09 10:44 pm (UTC)само собой они все попадают за одну секунду, а почему - предлагаю решить твоим читателям)
no subject
Date: 2012-08-10 12:48 am (UTC)no subject
Date: 2012-08-10 05:14 am (UTC)no subject
Date: 2012-08-10 05:23 am (UTC)no subject
Date: 2012-08-10 05:32 am (UTC)Немного развив тему, он может "зависнуть" в процессе поиска пути и тыкаться поперек нее чувствуя угрозу свалиться.
Ну это я так, развиваю тему :)
no subject
Date: 2012-08-10 05:16 am (UTC)3 - одна секунда - я начинал считать от 2 муравьев, стартующих с разных концов палки. Хотя, идея с переползанием, безусловно, проще :)
no subject
Date: 2012-08-10 05:48 am (UTC)С переползанием гениально!
no subject
Date: 2012-08-10 06:29 am (UTC)no subject
Date: 2012-08-10 06:39 am (UTC)no subject
Date: 2012-08-10 07:06 pm (UTC)no subject
Date: 2012-08-10 07:33 pm (UTC)no subject
Date: 2015-02-26 11:29 pm (UTC)no subject
Date: 2015-03-03 08:40 am (UTC)