1. Что такое горутина?
— Рассказать что такое сопрограмма, корутины, файберы, гринд ряды.
— Преимущества использования горутин.
— Контекст горутины, контекст потока операционной системы.
— В чем разница контекст свитчинга у горутины и потока операционной системы.
2. Примитивы синхронизации.
— что такое мьютекс, как он работает, как он устроен
— что происходит с горутиной, когда она вызываем метод Lock?
— остальные примитивы синхронизации
— проблемы cuncurrency программирования: dead lock, life lock, data race, race condition
3. Планировщик
— модели многозадачности: кооперативная и вытесняющая
— внутреннее устройство планировщика: JMP модель
— очереди: локальная очередь, глобальная очередь, как и где горутины находятся и как они между этими очередями перемещаются.
— что такое work stealing и почему именно он используется там, а не work sharing
— в каком момент горутины переключаются
— что такое Net Poller
— что такое Sysmon
— какую роль играют Net Poller и Sysmon внутри планировщика
— что происходит с горутиной в тот момент когда она вызывает Syscall
4. Каналы
— устройство каналов
— как внутри устроен кольцевой буфер
— какие там есть очереди и какую роль они там играют
— в чем разница между буферизированным каналом и небуферизированным
— паттерны использования каналов: pipe, fan in, fan out. Как бы вы их реализовали
— невалидные операции с каналами. (Например что будет если я дважду закрою канал, запишу в закрытый канал)
5. Память
— стек горутин, с какого размера он начинается, как он динамически растет
— Contiguous Stack
— Segmented Stack
— где находится стек горутин
— аллокатор Го, как он выделяет память
— сборщик мусора, как устроен, по какой модели работает, какие у него есть основные фазы, на каких фазах происходит полная остановка программы
— как нам-программистам можно управлять сборщиком мусора
6. Слайсы и мапы
— отличие слайса и массива
— как устроен слайс
— какая стратегия у динамического расширения слайса
— ассимптотика работы со слайсами (большое O)
— что такое хеш-таблица, хеш-коллизия, load factor
— какие существуют способы по резолву этих коллизий
— особенности работы мапы в процессе эвакуации данных
— невалидные ситуации: чтение запись в nil мапу, в nil слайс
7. Строки
— внутреннее устройство строк
— почему строки иммутабельные, могу ли я изменить какой-то символ
— как происходит конкатенация этих строк
— как подсчитать кол-во символов в строке
— что такое руна
— разница в проходе range и по индексу
8. ООП в Го
— как оно в Го реализовано
— какие концепции в Го реализуются исходя из этой парадигмы
— что такое утиная типизация
— что такое интерфейсы и как они внутри устроены
— как привести тип одного интерфейса к другому
— как проверить тип интерфейса
— что такое type assertion
— что такое пустые интерфейсы
— кейсы по работа е nil интерфейсами
9. Дополнительные вопросы
— указатели на указатели
— контексты, что это, что такое graceful shutdown
— как бы вы реализовали context withCancel и context withTimeout
— рефлексия
— дженерики