IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Вопросы по Golang

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

— рефлексия

— дженерики