Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 06.11.23 07:24
Оценка:
Добрый день, дорогие форумчане!
Подоспел быстрый квиз, взятый из собеседования на лида в крупную компанию.
Как бы вы ответили?

Для каждого вопроса лишь один(!) правильный ответ.
1. Процесс открывает файл, вызывает fork(). Файл в child доступен на чтение?
A. Да
B. Нет
C. Перед вызовом fork() необходимо закрывать все открытые файлы
D. Нет, файл автоматически будет закрыт системой в дочернем процессе
E. Зависит от реализации, поведение не определено

2. Участки памяти создаются при создании потока?
A. heap
B. stack
C. data segment
D. code segment

3. Можно ли заблокировать cигналы SIGHUP(1), SIGKILL(9), SIGTERM(15)?
A. да все
B. только SIGHUP
C. только SIGKILL
D. только SIGTERM
E. только SIGHUP и SIGKILL
F. только SIGHUP и SIGTERM
G. только SIGKILL и SIGTERTM

4. В программе не установлен обработчик на сигнал SIGUSR1. Что будет, если такой сигнал пришёл?
A. Будет проигнорирован
B. Будет вызван обработчик по умолчанию, созданный операционной системой
C. Программа завершит свою работу
D. Программа перейдёт в состояние "ожидание"

5. Процесс выделяет память и вызывает функцию fork(). child модифицирует память. Корректна ли такая операция и если да, то будут ли доступны изменения памяти дочернего процесса в родительском процессе?
A. Такая операция некорректна, дочерний процесс завершит своё выполнение
B. Такая операция некорректна, поведение системы не определено
C. Допустимая операция, данные из дочернего процесса будут доступны в родительском
D. Допустимая операция, данные из дочернего процесса не будут доступны в родительском
E. Допустимая операция. Родительский процесс при изменении данных получит сигнал SIGMEM

6. Почему для многих функций, например таких как readdir и strtok, существуют аналоги (readdir_r и strtok_r)?
A. Ресурсы выделенные такими функциями не освобождаются корректно при прерывании потока.
B. Эти функции не безопасны при возникновении асинхронных сигналов.
C. Эти функции не потокобезопасные.
D. Эти функции могут блокировать выполнение всех потоков процесса если они будут заблокированы до выделения запрошенных ресурсов.
E. Ресурсы выделенные такими функциями не освобождаются корректно при нормальном завершении потока.

7. Вызов select() иногда используется вместо вызова sleep() для приостановки выполнения программы на заданный период времени. Почему?
A. на select() не может оказать влияние операции ввода-вывода.
B. вызов select() не прерывает асинхронные операции ввода вывода во время паузы.
C. select() не может быть прерван сигналами.
D. вызову select() можно указать паузу с точность до микросекунд.
E. select() позволяет процессу перехватывать сигналы, позволя при этом дождаться окончания установленной паузы.

8. Что из нижеперечисленного нельзя использовать для предотвращения одновременного доступа к общему объекту из разных потоков?
A. mutex
B. posix semaphore
C. flock
D. rwlock

9. При использовании схемы producer and consumer (производитель и потребитель) какой механизм синхронизации можно использовать?
A. mutex
B. condition variable
C. mutex и condition variable

10. Какая функция создаёт объект разделяемой памяти?
A. CreateFileMapping
B. shm_open
C. mmap
D. fcntl

11. Ограничения при использовании разделяемой памяти (shared memory)?
A. Ограничений нет
B. Разделяемую память нельзя использовать в потоках
C. Нельзя изменить размер созданного объекта разделяемой памяти
D. Объект разделяемой памяти нельзя использовать совместно между не дочерними процессами

12. Синхронизация доступа к данным между двумя процессами. Необходимо обеспечить наилучшую переносимость между различными Unix. Какие функции вы бы использовали для обеспечениния поставленной задачи?
A. pthread_mutex_lock
B. flock
C. semop
D. pthread_mutex_lock, flock
E. flock, semop

13. Для того, чтобы работать с дескриптором в неблокирующем режиме надо:
A. передать специальные параметры вызову socket/open
B. использовать select
C. использовать fcntl
Re: Quiz для проф. Pay attention, please.
От: landerhigh Пират  
Дата: 06.11.23 07:53
Оценка: +1 :))
Здравствуйте, avovana, Вы писали:

A>Для каждого вопроса лишь один(!) правильный ответ.


Причем, один и тот же.

A>
A>Синхронизация доступа к данным между двумя процессами. Необходимо обеспечить наилучшую переносимость между различными Unix. Какие функции вы бы использовали для обеспечениния поставленной задачи?
A>


Спасибо за интерес к моей кандидатуре, я вам перезвоню.
www.blinnov.com
Re: Quiz для проф. Pay attention, please.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.11.23 17:01
Оценка: +3
Здравствуйте, avovana, Вы писали:

A>Для каждого вопроса лишь один(!) правильный ответ.


Для некоторых — нет правильного ответа. Для некоторых — более одного.
Автору квиза предлагается пойти покурить в сторонке.

Расписывать подробнее — за деньги.
The God is real, unless declared integer.
Re[2]: Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 06.11.23 19:02
Оценка:
Здравствуйте, netch80, Вы писали:

N>Для некоторых — нет правильного ответа. Для некоторых — более одного.


Можно пример где более одного? Если ещё не за деньги)
Re[2]: Quiz для проф. Pay attention, please.
От: gyraboo  
Дата: 06.11.23 19:14
Оценка:
Здравствуйте, landerhigh, Вы писали:

A>>Для каждого вопроса лишь один(!) правильный ответ.

L>Причем, один и тот же.

И этот ответ — Java.
Re: Quiz для проф. Pay attention, please.
От: reversecode google
Дата: 09.11.23 03:08
Оценка:
A>Добрый день, дорогие форумчане!
A>Подоспел быстрый квиз, взятый из собеседования на лида в крупную компанию.

да ну, для синьера трешевые вопросы
скорее просто срининг

A>Как бы вы ответили?

A>Для каждого вопроса лишь один(!) правильный ответ.

ну так не интересно
а как же пофлудить

A>
A>1. Процесс открывает файл, вызывает fork(). Файл в child доступен на чтение?
A>A. Да
A>B. Нет
A>C. Перед вызовом fork() необходимо закрывать все открытые файлы
A>D. Нет, файл автоматически будет закрыт системой в дочернем процессе
A>E. Зависит от реализации, поведение не определено
A>

  Скрытый текст
A


A>
A>2. Участки памяти создаются при создании потока?
A>A. heap
A>B. stack
A>C. data segment
A>D. code segment
A>

  Скрытый текст
B



A>
A>3. Можно ли заблокировать cигналы SIGHUP(1), SIGKILL(9), SIGTERM(15)?
A>A. да все
A>B. только SIGHUP
A>C. только SIGKILL
A>D. только SIGTERM
A>E. только SIGHUP и SIGKILL
A>F. только SIGHUP и SIGTERM
A>G. только SIGKILL и SIGTERTM
A>

  Скрытый текст
F


A>
A>4. В программе не установлен обработчик на сигнал SIGUSR1. Что будет, если такой сигнал пришёл?
A>A. Будет проигнорирован
A>B. Будет вызван обработчик по умолчанию, созданный операционной системой
A>C. Программа завершит свою работу
A>D. Программа перейдёт в состояние "ожидание"
A>

  Скрытый текст
C


A>
A>5. Процесс выделяет память и вызывает функцию fork(). child модифицирует память. Корректна ли такая операция и если да, то будут ли доступны изменения памяти дочернего процесса в родительском процессе?
A>A. Такая операция некорректна, дочерний процесс завершит своё выполнение
A>B. Такая операция некорректна, поведение системы не определено
A>C. Допустимая операция, данные из дочернего процесса будут доступны в родительском
A>D. Допустимая операция, данные из дочернего процесса не будут доступны в родительском
A>E. Допустимая операция. Родительский процесс при изменении данных получит сигнал SIGMEM
A>

  Скрытый текст
D


A>
A>6. Почему для многих функций, например таких как readdir и strtok, существуют аналоги (readdir_r и strtok_r)?
A>A. Ресурсы выделенные такими функциями не освобождаются корректно при прерывании потока.
A>B. Эти функции не безопасны при возникновении асинхронных сигналов.
A>C. Эти функции не потокобезопасные.
A>D. Эти функции могут блокировать выполнение всех потоков процесса если они будут заблокированы до выделения запрошенных ресурсов.
A>E. Ресурсы выделенные такими функциями не освобождаются корректно при нормальном завершении потока.
A>

  Скрытый текст
C


A>
A>7. Вызов select() иногда используется вместо вызова sleep() для приостановки выполнения программы на заданный период времени. Почему?
A>A. на select() не может оказать влияние операции ввода-вывода.
A>B. вызов select() не прерывает асинхронные операции ввода вывода во время паузы.
A>C. select() не может быть прерван сигналами.
A>D. вызову select() можно указать паузу с точность до микросекунд.
A>E. select() позволяет процессу перехватывать сигналы, позволя при этом дождаться окончания установленной паузы.
A>

  Скрытый текст
D


A>
A>8. Что из нижеперечисленного нельзя использовать для предотвращения одновременного доступа к общему объекту из разных потоков?
A>A. mutex
A>B. posix semaphore
A>C. flock
A>D. rwlock
A>

  Скрытый текст
С


A>
A>9. При использовании схемы producer and consumer (производитель и потребитель) какой механизм синхронизации можно использовать?
A>A. mutex
A>B. condition variable
A>C. mutex и condition variable
A>

  Скрытый текст
C


A>
A>10. Какая функция создаёт объект разделяемой памяти?
A>A. CreateFileMapping
A>B. shm_open
A>C. mmap
A>D. fcntl
A>

  Скрытый текст
B


A>
A>11. Ограничения при использовании разделяемой памяти (shared memory)?
A>A. Ограничений нет
A>B. Разделяемую память нельзя использовать в потоках
A>C. Нельзя изменить размер созданного объекта разделяемой памяти
A>D. Объект разделяемой памяти нельзя использовать совместно между не дочерними процессами
A>

  Скрытый текст
C


A>
A>12. Синхронизация доступа к данным между двумя процессами. Необходимо обеспечить наилучшую переносимость между различными Unix. Какие функции вы бы использовали для обеспечениния поставленной задачи?
A>A. pthread_mutex_lock
A>B. flock
A>C. semop
A>D. pthread_mutex_lock, flock
A>E. flock, semop
A>

  Скрытый текст
C или E


A>
A>13. Для того, чтобы работать с дескриптором в неблокирующем режиме надо:
A>A. передать специальные параметры вызову socket/open
A>B. использовать select
A>C. использовать fcntl
A>

  Скрытый текст
A
Re[2]: Quiz для проф. Pay attention, please.
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.11.23 04:48
Оценка: +1
Здравствуйте, netch80, Вы писали:

A>>Для каждого вопроса лишь один(!) правильный ответ.


N>Для некоторых — нет правильного ответа. Для некоторых — более одного.

N>Автору квиза предлагается пойти покурить в сторонке.

+100500

И к тому же, полно глупых вопросов.

Что значит, "участки памяти создаются при..."? Участки памяти "создаются" при втыкании DIMM-а в соответствующий слот. А где и какая память выделяется про создании потока — подробности реализации.

Действительно ли кому-то необходимо знать, каков дефолтовый обработчик для SIGUSR1, или это мелкая частная подробность, которую кому надо, тот посмотрит?

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

Ну и т.д. Написание полной рецензии не входит в мои планы.

Сам по себе формат, когда надо просто выбирать из нескольких вариантов ответов, сомнителен.
Re: Quiz для проф. Pay attention, please.
От: reversecode google
Дата: 09.11.23 04:59
Оценка:
давали бы уже и остальное
https://www.linux.org.ru/forum/development/17405457?cid=17405856
Re[3]: Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 09.11.23 07:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>К чему этот вопрос, о том, чего нельзя использовать для реализации межпоточных блокировок? Чтобы проверить, знает ли человек, что flock() работает на процесс, а не на поток? Показать, как всё равно можно использовать, несмотря на эту особенность? Как вообще такие вопросы сочинаются? Небось, попросили команду помочь, кто-нибудь из разрабов, кто недавно наткнулся на особенности поведения файловых блокировок в многопоточных программая, вставил свои два слова...


Pzz>Ну и т.д. Написание полной рецензии не входит в мои планы.


Pzz>Сам по себе формат, когда надо просто выбирать из нескольких вариантов ответов, сомнителен.


Ну вот да. Не просто было. Собеседование было по С++. Часа 2. Потом когда думал, что уже всё, дали такой опросник(на самом деле, он ещё больше) для быстрых проставлений ответов. Без обсуждений, рассуждений вслух. Просто надо проставить. Идея узнать "как реально правильно" с тех пор осталась. Вот, решил спросить мнения форумчан) Интересно порассуждать что возможно имели ввиду. Посмотреть вопрос, так сказать, с разных, возможных сторон. Как и бывает в программирование.
Re[2]: Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 09.11.23 07:19
Оценка:
Здравствуйте, reversecode, Вы писали:

R>ну так не интересно

R>а как же пофлудить

Спасибо за ответы!
Классно заметили, что я в т.ч. на форуме Линукса спросил. Там мнения разнятся.
Хотелось бы узнать Ваше мнение насчёт такого высказывания по 2 вопросу, что получил с cpplang.slack:
2. Участки памяти создаются при создании потока?
A. heap
B. stack
C. data segment
D. code segment


"strictly speaking, the act of creating a thread doesn’t create the arena; it gets created by the first malloc in that thread. But since the arena pointer is a thread_local information and that will have reset to null, effectively that creates a new heap too."
Re[2]: Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 09.11.23 07:21
Оценка:
Здравствуйте, reversecode, Вы писали:

R>давали бы уже и остальное

R>https://www.linux.org.ru/forum/development/17405457?cid=17405856

Погнали)

Sockets, files, poll & …
16. Вы разрабатываете приложение обрабатывающее большое число соединений в одном процессе, у которого один поток выполнения. Код должен работать без изменений на различных unix подобных системах. Какой системный вызов вы будете использовать? A. select B. pselect C. poll D. epoll E. kqueue

17. Каким образом можно создать файл только если его нет? A. open B. lstat потом open C. readdir потом open

18. Что произойдет если процесс А производит чтение из файла, а при этом процесс Б пытается его удалить? A. файл будет удален. Дальнейшая запись в него не удастся. B. произойдёт ошибка при удалении файла. C. файл продолжит существовать до момента закрытия дескриптора процессом А. При этом его можно будет открыть из другого процесса. D. файл продолжит существовать до момента закрытия дескриптора процессом А. При этом его нельзя будет открыть из другого процесса.

19. Чем Berkeley socket() отличается от POSIX pipe()? A. отличий нет B. дескриптор, созданный функцией pipe(), доступен либо для записи, либо для чтения C. только socket() можно использовать для обмена данными между дочерними процессами D. через pipe() по умолчанию неблокирующий ввод/вывод E. pipe() нельзя использовать для обмена большим объёмом данных

20. Если у вас есть файловый дескриптор открытого файла, какую из перечисленных функций вы будете использовать при определении позиции в файле, на которую указывает этот дескриптор? A. leof B. lrange C. lpos D. lptr E. lseek

21. Какую функцию надо вызвать для символьного линка на файл, чтобы определить размер самого файла? A. symstat B. stat C. lstat D. sizeof E. statfs

22. Причины использования неблокирующих операций ввода-вывода? A. Нет других способов организовать ввод-вывод в программах с GUI. B. Некоторое оборудование, например принтеры, требуют использования неблокирующего ввода-вывода. C. Неблокирующий ввод-вывод обеспечивает выполнение операций ввода-вывода без возникновения ошибок. D. Использование неблокирующего ввода-вывода обеспечивает более лёгкую разработку програмного обеспечения и позволяет писать более компактный код. E. Операция записи может потенциально никогда не завершиться, если записываемые данные не принимаются.

Какую из следующих команд вы будете использовать при выводе списка семафоров в Linux? A. ipcs B. sessreg C. ipcrm

System
23. Какое из следующих описаний справедливо для файла ‘CMakeLists.txt’?
A. Это пользовательская инструкция, описывающая последовательность действий для сборки проекта B. Список зависимостей, необходимых для сборки проекта C. Список правил, используемых для создания Makefile.in D. Список правил, используемых для создания сборочных скриптов E. Файл, используемый командой «make» для сборки программы

Networks
24. Происходят ли повторные попытки переслать потерянный пакет при использовании протоков UDP и TCP? A. да B. нет C. только для UDP D. только для TCP

25. Какой адрес может быть использован для широковещательной передачи запросов(IP Multicast)? A. 192.168.1.0 B. 150.12.23.1 C. 0.23.45.123 D. 10.34.23.255 E. 224.10.23.10

26. Процесс и его дочерний процесс используют один и тот же сокет. Вам нужно из дочернего процесса «закрыть» сокет так, чтоб он "закрылся"и в родительском процессе. Какую функцию вы станете использовать? A. close B. shutdown C. использование одного сокета в нескольких процессах невозможно D. невозможно закрыть сокет сразу в нескольких процессах
Re[4]: Quiz для проф. Pay attention, please.
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.11.23 08:02
Оценка:
Здравствуйте, avovana, Вы писали:

Pzz>>Сам по себе формат, когда надо просто выбирать из нескольких вариантов ответов, сомнителен.


A>Ну вот да. Не просто было. Собеседование было по С++. Часа 2. Потом когда думал, что уже всё, дали такой опросник(на самом деле, он ещё больше) для быстрых проставлений ответов. Без обсуждений, рассуждений вслух. Просто надо проставить. Идея узнать "как реально правильно" с тех пор осталась. Вот, решил спросить мнения форумчан) Интересно порассуждать что возможно имели ввиду. Посмотреть вопрос, так сказать, с разных, возможных сторон. Как и бывает в программирование.


Это ты собеседуешь или тебя собеседуют?

Опросник составлен плохо. Это может говорить о том, что в организации нет хорошего опыта проведения собеседований (при чем тут C++, кстати? опросник, он на тему технических подробностей POSIX API с некоторыми вкраплениями WIN32; оно одинаковым всё будет, хоть в C++, хоть в Go, хоть в Питоне).

Это не говорит само по себе об организации, что в нек всё плохо. Но может получиться так, что команда окажется слабой. А может и не.
Re[5]: Quiz для проф. Pay attention, please.
От: landerhigh Пират  
Дата: 09.11.23 08:07
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Опросник составлен плохо.


"Опросник" составлен тем, кто в вопросах разработки ПО ничего не понимает.
www.blinnov.com
Re[6]: Quiz для проф. Pay attention, please.
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.11.23 08:09
Оценка:
Здравствуйте, landerhigh, Вы писали:

Pzz>>Опросник составлен плохо.


L>"Опросник" составлен тем, кто в вопросах разработки ПО ничего не понимает.


Например, девочкой из HR. Которая пришла к разрабам с просьбой, "ребят, накидайде вопросов". Ну вот они и накидали, как смогли...

Девочке ведь 1) трудно отказать 2) никто особо всерьез ее не воспринимает.
Re[3]: Quiz для проф. Pay attention, please.
От: reversecode google
Дата: 09.11.23 08:12
Оценка:
так вы определитесь один ответ или два
во всех учебниках написано насколько я знаю, новый треид — новый стек
а откуда тот стек они возьмут дело такое
но допустим новый хип — от части общего процесса отщипнут и закинут указатель на стек для нового потока

или о чем речь?
Re[4]: Quiz для проф. Pay attention, please.
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.11.23 10:43
Оценка:
Здравствуйте, reversecode, Вы писали:

R>или о чем речь?


Да в том-то все и дело, что непонятно, о чем речь. Как по мне, так новая память на заводе создается, который DIMM-ы делает (вернее, микросхемы для них). А дальше только распределяется.

Ну я уж и не говорю, что в разных ОС по-разному может быть это реализовано. Линуксоиды просто рассказали о глубоких технических деталях сегодняшней реализации этого хозяйства в ихней оси.
Re[5]: Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 09.11.23 11:53
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Это ты собеседуешь или тебя собеседуют?


Собеседовали меня. Где-то 3 С++сника.
И в конце дали этот список, чтобы я быстро пробежался выставляя ответы.

То есть, не девушка hr, как была здесь гипотеза, это предложила.

Я думаю, что по такому опроснику просто набираются баллы. И потом в том числе по нему сравниваются кандидаты.
Где-то вот алгоритмы решают за время набирая в глазах интервьюера баллы за:
+самостоятельность решения
+размышление вслух
+умение слушать подсказки
+укладывание во время
А где-то вот так, получается, опросники заполнять в режиме on-line.
Re[4]: Quiz для проф. Pay attention, please.
От: avovana Россия  
Дата: 09.11.23 11:55
Оценка:
Здравствуйте, reversecode, Вы писали:

R>или о чем речь?


Идея, мол, что есть указатель на арену в malloc'е. И он thread_local. И начинает указывать на зануленную выделенную память(какой там ОС вначале даст сегмент). Мол, вот тебе и выделение heap'a. Же.
Re[5]: Quiz для проф. Pay attention, please.
От: reversecode google
Дата: 09.11.23 12:29
Оценка:
ну если я понял то что понял
то в мусл имплементации оно не совсем так
https://git.musl-libc.org/cgit/musl/tree/src/thread/pthread_create.c

но в целом да
стек же не с воздуха берется
а с хипа процесса, вон там анонимный mmap
так что сначала хип а потом на него стек корректируют
а не в так как в том комментарии про тлс
тлс вообще до космоса(пример мюсла)
Re[6]: Quiz для проф. Pay attention, please.
От: landerhigh Пират  
Дата: 09.11.23 14:47
Оценка: :)
Здравствуйте, avovana, Вы писали:

A>И в конце дали этот список, чтобы я быстро пробежался выставляя ответы.


Ну считай, повезло.
Если, конечно, мечтой твоей жизни не было работать в команде, где будут заниматься "оптимизацией" путем "отказа" от виртуальных функций, при этом "не замечая" жирного такого O(N^2) в соседнем файле.
www.blinnov.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.