Yadro / Ядро - Рекомендованные вопросы
Общие вопросы про Go
Заголовок раздела «Общие вопросы про Go»- Какие технологические преимущества экосистемы Go вы можете назвать?
go/stdlib-tooling - Какие технологические недостатки языка Go вы можете назвать?
go/stdlib-tooling - Что вас огорчает в системе типов Go?
go/basics - Почему на Go практически не пишут расширений для других языков и динамических библиотек?
go/stdlib-tooling - Go - императивный или декларативный? А в чем разница?
go/stdlib-tooling - Что такое thread pool, какого он размера и зачем он нужен?
go/concurrency - Каковы функции шедулера?
go/runtime - Что происходит, когда вы отправляете данные из горутины в сетевое соединение?
go/concurrency - Почему треды в Go - легковесные?
go/stdlib-tooling - Какие средства обобщенного программирования есть в Go?
go/basics - Почему встраивание - не наследование?
go/interfaces - Что такое тип-сумма и как ее реализовать на Go?
go/basics - Как соблюдать SOLID при программировании на Go?
architecture/principles - Что значит «A little copying is better than a little dependency»?
go/basics - Главная проблема производительности современной компьютерной системы?
misc/general
Вопросы по конструкциям языка
Заголовок раздела «Вопросы по конструкциям языка»- Как сообщить компилятору, что наш тип реализует интерфейс?
go/interfaces - Что такое type switch?
go/interfaces - Почему иногда говорят, что в Go nil имеет тип?
go/stdlib-tooling - Как получить переменную, которая не-nil, но nil?
go/interfaces
Про defer
Заголовок раздела «Про defer»- Что такое defer, как работет, зачем нужен?
go/errors-panic - Что выведет и почему? https://go.dev/play/p/YXgNXPbskDN
go/puzzles - Что выведет и почему? https://go.dev/play/p/MVU0qXfUAYt
go/puzzles
Про slice
Заголовок раздела «Про slice»- Что такое слайс? Внутренняя структура его?
go/slices-arrays - В чем разница между new и make вызовами? А для слайсов?
go/slices-arrays - Какое у slice zero value? какие операции над ним возможны?
go/slices-arrays - Как работает append?
go/slices-arrays - Что выведет и почему? https://go.dev/play/p/sUzxcWdZJEb
go/puzzles - Арифметический вопрос: в пустой слайс последовательно добавили 10 элементов. Какие у него len и cap?
go/slices-arrays - Что выведет и почему? https://go.dev/play/p/iWX16upQNLP
go/puzzles - Что такое копия слайса и append()?
go/slices-arrays - Как сделать из слайса массив?
go/slices-arrays
Про map
Заголовок раздела «Про map»- Как устроен тип map?
go/maps - Какая функция используется для хеширования в map?
go/maps - Что может быть ключем в map?
go/maps - Каков порядок перебора map?
go/maps - Модификация значений мапы в цикле for range - что будет?
go/maps - Что выведет и почему? https://go.dev/play/p/xGfhfL2QwOW
go/puzzles - Что такое sync.Map?
go/sync - Как устроена map в смысле computer science? сложность? как достигается константная скорость? как разложить хеши в ограничьенном пространстве? что с коллизиями и какая получится скорость в худшем случае?
algorithms/complexity
Про channel
Заголовок раздела «Про channel»- Что такое канал?
go/channels - zero-value канала?
go/channels - Что будет, если читать/писать nil-канал?
go/channels - Что будет, если читать из закрытого канала?
go/channels - Что будет, если писать в закрытый канал?
go/channels - Как читать из канала и не блокироваться?
go/channels - Какая разница между небуферизованным каналом и буфер.каналом емкостью 1
go/channels - За счет чего обеспечивается потокобезопасность каналов?
linux-os/processes
Про select
Заголовок раздела «Про select»- Как читать из несколько каналов и не блокироваться, пока хоть в одном есть данные?
go/channels - В каком порядке отрабатывают case?
go/channels - Что произойдет в select, если один из каналов закроется?
go/channels - Как отбросить закрытые каналы?
go/channels - Написать код слияния данных из двух каналов в третий (возможны два варианта: с селектом или с отдельными го-рутинами)
go/channels - Написать код слияния данных из N каналов в (N+1)-ый (возможны два варианта: с селектом или с отдельными го-рутинами)
go/channels
Про примитивы синхронизации
Заголовок раздела «Про примитивы синхронизации»- Какие типы мьютексов предоставляет stdlib?
go/sync - Что именно защищает мьютекс?
go/sync - сколько R и W локов можно взять от sync.RWMutex одновременно?
go/sync - Что будет, если попытаться взять Lock, не отпустив RUnlock?
sql/transactions - Зачем нужны atomic?
go/sync - Почему интенсивная конкурентная модификация atomic приводит к заметному снижению производительности на многопроцессорных системах?
go/sync - Какие еще примитивы синхронизации знаете?
go/sync
Про concurrency
Заголовок раздела «Про concurrency»- Что такое рейс-кондишн?
go/concurrency - Как бороться?
go/concurrency - Что такое дедлок? Как бороться со случившимся дедлоком? Как не допустить дедлок?
go/sync - Как запустить N задач в параллель в Go?
go/concurrency - В какой момент запустится горутина?
go/concurrency - Как подождать их выполнения?
go/sync - С помощью wait group - что произойдет, если сделать wg.Add(1) внутри каждой горутины, а не перед их запуском?
go/concurrency - Как получить результаты из горутин?
go/concurrency - Как поймать их ошибки выполнения, если есть?
go/errors-panic
Про context
Заголовок раздела «Про context»- Что такое контекст? Для чего используется?
go/context
Про Inter-service communication
Заголовок раздела «Про Inter-service communication»- С какими способами взаимодействия между сервисами вы сталкивались?
architecture/microservices - Что такое protobuf?
network/grpc - Какой инструментарий для работы с протобуфами вы использовали?
network/grpc - Что такое GRPC, OpenAPI? Их особенности. Ваши критерии выбора между ними.
network/grpc
Про OpenAPI
Заголовок раздела «Про OpenAPI»- Что такое OpenAPI, REST, Swagger?
network/http - Как решать проблемы backward compatibility openAPI?
network/http - Какие REST-овые методы знаете? В чем между ними разница? Можно ли сделать так, что GET будет делать DELETE, а POST будет делать PUT?
network/http
Про gRPC
Заголовок раздела «Про gRPC»- Что такое gRPC?
network/grpc - Коммитить или не коммитить код в репозиторий?
git/general - Как решать проблемы backward comptibility gRPC API?
network/grpc
Про Error handling
Заголовок раздела «Про Error handling»- Что такое ошибки в Go, как обрабатывать ошибки в Go?
go/errors-panic - Как писать свои ошибки в Go
go/errors-panic - Предположим, ваша функция должна возвращать детализированные Recoverable и Fatal ошибки. как это реализовано в пакете net? как это надо делать в современном Go?
go/errors-panic
Про Testing
Заголовок раздела «Про Testing»- Как тестируете свой код
testing/general - Что такое mock
testing/unit-mocks - Знакомы с Benchmarks?
go/perf-profiling - Знакомы с Fuzzing?
testing/general
Про debuggability, observability, logging
Заголовок раздела «Про debuggability, observability, logging»- Какой у вас любимый логгер?
go/stdlib-tooling - Способы поиска проблем производительности на проде?
devops/observability - Достоинства и недостатки метрик?
devops/observability - Типы метрик prometheus?
devops/observability - Стандартный набор метрик prometheus в Go программе?
devops/observability
Про metrics and profiling
Заголовок раздела «Про metrics and profiling»- Как встроить стандартный профайлер в свое приложение?
go/perf-profiling - Overhead от стандартного профайлера?
go/perf-profiling - Какие-то стандарты знаете для метрик?
devops/observability
Про best practices
Заголовок раздела «Про best practices»- Какова идеальная структура проекта на Go по вашему опыту
hr-behavioral/about-you - Как вы применяете пакеты internal?
go/stdlib-tooling - Где следует поместить описание интерфейса и почему?
go/interfaces - Ваш любимый способ делать dependency injection?
architecture/principles - Какой у вас любимый линтер?
go/stdlib-tooling
Другое про Go
Заголовок раздела «Другое про Go»- Что такое lock-frее структуры данных, и есть ли в Go такие?
algorithms/data-structures - Как вы реализуете LRU cache на Go?
algorithms/data-structures - Как вы отсортируете массив структур по алфавиту по полю Name?
go/slices-arrays - Удалить дубликаты из массива без переаллокации - можно ли?
go/slices-arrays - У нас есть таблица с bigint primary key. Мы добавляем записи в таблицу и удаляем их оттуда случайным образом. Вопрос: как найти первый незанятый индекс в этой таблице?
sql/indexes - Что такое сериализация? Зачем она нужна?
go/stdlib-tooling - У вас есть кривой json с плавающим типом полей. Как написать десериализатор?
go/stdlib-tooling - В чем польза от sync.Pool?
go/sync - Если сериализация медленная, то что делать?
go/perf-profiling
Вопросы про рабочие инструменты
Заголовок раздела «Вопросы про рабочие инструменты»- Какими пользовался GIT сервисами?
git/general - Что такое Git?
git/general - Как пользовался Git-ом? (через IDE, с помощью UI, с помощью CLI)
git/general - Чем отличаются коммит, ветка, тэг?
git/general - Какие бывают тэги?
go/structs-methods - Что значит «fast-forward merge»?
git/general - Что такое конфликт, когда он образуется, что делать, если он возник?
hr-behavioral/teamwork - Что такое rebase? Чем отличается от merge? Зачем нужен rebase и какие подводные камни?
git/general - Что такое submodule? Зачем нужны, как с ними работать?
git/general - Какой любимый flow разработки? Структура веток, правила, соглашения …Личный опыт.
go/structs-methods - Пользовался Jira или аналогами? Насколько активно?
hr-behavioral/general - Пользовался Jenkins или аналогами? Насколько глубоко?
devops/ci-cd
Вопросы про Linux
Заголовок раздела «Вопросы про Linux»- Назовите 10 трехбуквенных команд в Linux.
linux-os/shell - Как отлистать процессы?
linux-os/processes - Как посмотреть потребление каких-нибудь ресуров?
linux-os/processes - Что такое proc-fs? sys-fs?
linux-os/filesystem - Что такое initrd?
linux-os/general - Как устроена в общих чертах файловая система в Linux? Что такое inode?
linux-os/filesystem - Чем отличается hard link от symbolic link? Что будет с файлом, если удалить hard link? symlink?
linux-os/filesystem - Что можете рассказать о file permissions в Linux? (chmod, suid, sgid, sticky bit, ACL, etc.)
linux-os/filesystem - Что означают разрешения 0764 для файла?
linux-os/filesystem - Можно ли удалить файл с разрешениями 0644, которым владeeт root, от имени другого пользователя (естественно без sudo/su)?
linux-os/filesystem - Как убить сервис? что делает команда kill?
linux-os/processes - Чем отличаются сигналы, какие можно перехватить?
linux-os/processes - Когда процесс может не реагировать на SIGKILL?
linux-os/processes - Что такое zombie и orphan?
linux-os/processes - Зачем может понадобиться вызвать fork два раза подряд?
linux-os/processes - Как дебажить зависшую программу (в топе висит, на вызовы не рeaгирует, CPU потребляет)?
linux-os/processes - Причины высокого потребление памяти?
go/memory-gc - Что можете сказать про perf, eBPF, tcpdump?
devops/observability - Как запустить сервис (при старте, периодически, вместе с другим сервисом)
linux-os/general - Как посмотреть что-то про сетку в Linux?
linux-os/general - Что выводит команда ip?
network/general - Какие бывают сетевые девайсы в Linux?
network/general