# Вопросы к собеседованию Rust разработчика (senior) ## Rust 1. Рассказать про статическую и динамическую диспетчеризации. 1. Что такое мономорфизация? 1. Какие гарантии даёт safe код? 1. Как устроена обработка ошибок? 1. Как rust помогает писать многопоточный код? 1. Почему `RwLock` требует `T: Send + Sync`, а `Mutex` только `T: Send`? 1. Что даёт `repr(C)` атрибут структуры? А enum? 1. Зачем нужны ZST? 1. Ковариантность и контравариантность? 1. Как устроен Trait Object? Отличие от устройства объектов в С++. 1. Как устроен Box? Vec? Rc/Arc? 1. Плюсы и минусы типажей в сравнении с классами/интерфейсами в ООП языках. 1. Associated types vs generic types? 1. Что означает 'static в разных контекстах? (например, thread::spawn) 1. Для любого ли типажа можно создать trait object? Object safety. 1. Orphan rules. 1. Что такое move semantics? 1. Как устроен async await? 1. Буферизация I/O. 1. Чем отличается указатель от ссылки? ## Алгоритмы и структуры данных 1. Что такое big-O нотация? 1. Что такое двоичная куча? 1. Как устроены хеш-таблицы? Требования к ключам в hashmap. 1. Как устроены B-деревья? Требования к ключам в btreemap. 1. Что такое фильтр Блума? (как вариант: cuckoo фильтр) 1. Что такое LRU кеш и как его сделать? 1. Какие сортировки знаешь, как они работает, какая сложность? 1. Обход графов в глубину / в ширину. 1. Нахождение кратчайшего пути в графе, алгоритм Дейкстры. 1. Lock-free, wait-free структуры данных. Skipmap. 1. Устройство spsc, spmc, mpsc, mpmc очередей. ## Многозадачность 1. Что такое многозадачность? 1. Чем кооперативная многозадачность отличается от вытесняющей? 1. Что такое зелёные потоки? Чем отличаются stackful и stakless корутины? 1. Какая разница между параллельностью и concurrency? 1. Когда использовать потоки, а когда событийный цикл? 1. Что такое мультиплексирование? 1. Как устроены событийные циклы (libuv, tokio)? 1. Примитивы синхронизации: mutex, семафоры. ## Linux 1. Что такое виртуальная память? 1. Чем стек отличается от кучи? 1. Чем процесс отличается от потока? 1. Что такое load average? LA=8 это много или мало? 1. Что такое своп и зачем он нужен? 1. Что такое прерывание? Верхняя и нижняя половины прерывания. 1. Когда и как работает планировщик задач? 1. Какие способы организовать IPC ты знаешь? ## Процессоры 1. Что такое кэш процессора, зачем нужен? 1. Механизмы когерентности кэшей. 1. Что такое вычислительный конвейер? 1. Что такое суперскалярность? 1. Что такое TLB? ## Сеть 1. Разница между моделью TCP/IP и моделью OSI. 1. В чем разница между TCP и UDP? 1. Что такое MTU? 1. Как сделать UDP надёжным (убрать дубликаты, гарантировать доставку)? 1. Какая разница между балансированием на L3, L4 и L7? 1. Что такое RPC? Что такое REST? RPC vs REST. 1. Long-polling vs streaming? (как вариант: pull vs push). ## Базы данных 1. OLAP vs OLTP. 1. Колоночные vs строковые. 1. SQL vs NoSQL. 1. Что такое индексы и как они реализуются? 1. Что такое LSM-дерево? 1. Что такое транзакция? 1. Что такое ACID? 1. Что такое теорема CAP? 1. Разница между at (least|most|exactly) once семантиками доставки сообщений? 1. Разница между 0, 1, 5 и 10 рейдами? Что такое диск четности? ## Трансляторы 1. Разница между компилятором и интерпретатором? 1. Что такое ABI? 1. Что такое AST? 1. Что такое JIT компиляция? 1. Из чего состоит компилятор? (лексер, парсер, семантер, генератор) 1. Что такое IR? ## Криптография 1. Что такое симметричное шифрование и где применяется? 1. Что такое асимметричное шифрование и где применяется? 1. Что такое хэширование и коллизии? 1. Как устроен блокчейн? Биткоин? Эфир? ## В растовую секцию 1. Что означает 'static в разных контекстах? (например, thread::spawn) 1. Можно ли создать trait object для любого трейта? (object safety) 1. Orphan rules 1. Cargo features 1. Move semantics 1. Vec vs String vs OsString vs CString 1. Futures, async fn 1. IO buffering 1. Reference vs pointer