// день 1 из 7 · бесплатно
Ядро Go
Типы, строки, слайсы, map, интерфейсы, ошибки, память.
Утро — вопросы по ядру языка. День — «что выведет». Вечер — блиц-мок 15 минут.
Пока пусто. Ответь на первые вопросы — здесь появится готовность по этапам.
Вечером — мок: Тех-скрининг: ядро Go
График в роли интервьюера, один вопрос за раз, в конце — отчёт и вердикт для Middle.
Один пробный мок — бесплатно, дальше — Pro или Спринт.
Вопросы
0/60- Что такое map в Go и как она устроена внутри?free
- Что такое слайс? Как он устроен внутри (указатель на массив, len, cap)?free
- В чём отличие слайса от массива?free
- Что такое интерфейс в Go, для чего он используется?free
- Расскажи, как работает сборщик мусора (GC) в Go?free
- Как работает append под капотом? Как растёт capacity слайса?free
- Что такое defer, зачем он нужен, всегда ли выполняется?free
- Как устроен интерфейс в Go внутри (itable / указатель на тип + значение)? Чем платим в рантайме за использование интерфейса?free
- Что такое строки в Go? Как они устроены, в какой кодировке хранятся?free
- Что такое стек и куча? Чем они отличаются?free
- Можно ли взять указатель на элемент map? Гарантирован ли порядок элементов?free
- Что такое sync.Map и когда использовать её, а когда обычную map с мьютексом?free
- Что такое указатель и сколько он весит (памяти)?free
- В чём разница между nil-интерфейсом и nil-значением интерфейса? Что будет, если интерфейс сравнить с nil?free
- Где лучше объявлять интерфейс — на стороне потребителя или на стороне реализации? Что такое «контракты» в Go?free
- Если в горутине выскочит паника — что будет? Можно ли перехватить панику в горутине, в том числе из другой горутины?free
- Потокобезопасна ли map? Что будет при конкурентном доступе?free
- Как работают приватные интерфейсы / приватные методы в интерфейсе? Может ли структура реализовывать сразу несколько интерфейсов?free
- В какой очерёдности выполняются defer-вызовы? Когда вычисляются аргументы defer — inline или при вызове функции? Инициализируется на стеке или в куче?free
- Расскажи про escape-анализ: как Go определяет, куда (стек или куча) отправить переменную?free
- Какие типы данных есть в Go? Перечисли основные типыfree
- Если изменить слайс внутри функции (по индексу или через append без переприсваивания), видны ли изменения снаружи?free
- Как происходит итерация по строке через `for range`: что в key, что в value? Что будет, если в строке битый UTF-8?free
- В чём отличия ООП/языка Go в сравнении с C++ (или другими языками)?free
- Как происходит эвакуация данных в map при росте? Что при этом создаётся, а что нет?free
- Как растёт map? Сколько максимум может быть бакетов?free
- Что такое аллокация? Где и как она происходит (куча/стек)? Что к ней приводит?free
- Что такое виртуальная память? Кто переводит адреса из виртуального адресного пространства в физические адреса в RAM? Может ли система выделить процессу виртуальной памяти больше, чем есть физической?free
- Как создать кастомную ошибку, реализующую интерфейс error? Как работают errors.Is и errors.As, зачем нужен wrapping? Как обогащать ошибку и проверять, что получена конкретная ошибка?free
- Как эффективно собрать слайс из миллиона строк в одну большую строку (`strings.Builder`)? Строка — массив или слайс, какая у слайса структура?free
- Когда выгоднее передавать данные в функцию по указателю, а когда по значению? Что такое передача по ссылке?free
- Как поля структуры располагаются в памяти (выравнивание, memory alignment)?free
- Расскажи про обобщённое программирование (generics) в Go: что это, с чем едят, как применялfree
- Что такое reflection в Go? Какие плюсы и минусы?free
- Назови случаи, когда defer гарантированно не выполнитсяfree
- Когда могут быть утечки памяти (стек/куча)? Как их искали на практике?free
- Какие есть способы оптимизации при частых аллокациях памяти в Go? Как можно оптимизировать память в написанном коде?free
- Изменяемы ли строки в Go? Почему они неизменяемы (immutable)?free
- Какие плюсы и минусы у Go? Нравится ли язык?free
- Что такое пустой интерфейс `interface{}`, зачем он нужен и как используется?free
- Что такое паника? Чем отличается от error и от fatal? Где что использовать и как?free
- Можно ли динамически создавать новые типы — структуры, мапы, слайсы?free
- Какие объекты в Go являются comparable (структура, интерфейс)?free
- Как через unsafe получить string из []byte без копирования и чем это опасно?free
- Как сконвертировать `[]byte` в `string` без лишних аллокаций?free
- Какой пакет подходит для работы с нетипизированными указателями (`unsafe.Pointer`)?free
- В каком формате лучше хранить денежные средства?free
- Каким образом можно сериализовать данные в последовательность байт?free
- Что такое big-endian и little-endian?free
- В каком стандартном пакете находится функция для вызова системных вызовов?free
- Какие killer-фичи выходили в разных версиях Go?free
- Что нового в Go начиная с версии 1.22?free
- В чём разница между `__new__` и `__init__` в Python, когда нужен `__new__`?free
- Что такое GIL в CPython, как влияет на CPU-bound/I-O-bound параллелизм?free
- Что такое срез с явным указанием capacity (three-index slice), например `subSlice[0:2:3]`? В чём его особенность?free
- Как защитить slice или map от изменений?free
- Если слайс уже не нужен, как очистить его из памяти? В какой момент GC поймёт, что слайс нужно подчистить?free
- Как устроен бакет map: что в нём лежит?free
- Почему слайс при append расширяется быстро, а map — медленно?free
- Как реализовать конкурентную запись в хеш-таблицу в Go?free
Ещё 93 · вопрос — если осталось время или хочешь глубже
- Мы удалили ключи из map — как сделать, чтобы она освободила память?free
- Если ключ map — строка, хеш тоже считается за O(1)? Как получить хеш строки за O(1)?free
- Можно ли перехватить Fatal error?free
- Какие области памяти использует Go-программа (стек горутины, куча, статические данные) и что в каждой хранится?free
- Где хранятся данные, передаваемые в канал — в куче или в стеке?free
- Какая структура данных используется для организации кучи (heap) в памяти?free
- Пример: массив, лежащий в основе среза, возвращаемого из функции — в стеке или в куче, и почему?free
- Строка в Go — где хранится, в стеке или в куче?free
- `i := new(int)`. В какой области памяти окажется переменная — на стеке или в куче?free
- В каком случае указатель не уйдёт в кучу?free
- С какой памятью (стек/куча) работает garbage collector?free
- Как указатели влияют на производительность?free
- Интегрируем API, который возвращает сырой JSON объёмом в 1 ГБ. На машине 256 МБ RAM. Что будешь делать?free
- Что такое copy-on-write (COW)? (вопрос был задан в контексте PHP, не Go)free
- Какие нулевые (zero value) значения у базовых типов, интерфейса, map и slice в Go?free
- Почему `len("тест")` и `len("test")` отличаются? Почему кириллица занимает больше байт? Чем руны отличаются от байтов?free
- Какие типы могут быть ключом map?free
- Как из интерфейса получить конкретный тип (type assertion)? Какой вариант безопасный — `m, ok := val.(T)` или `m := val.(T)`?free
- Как посмотреть/посчитать длину строки в символах (рунах), а не в байтах?free
- Как преобразовать строку в число в Go?free
- Есть ли в Go встроенный тип set? Как реализовать множество?free
- Зачем нужен recover? Как с его помощью поймать panic?free
- Есть ли нюансы у типа `int`, связанные с разрядностью системы (32/64 бит)?free
- В чём разница между `int()`, `int32`, `int64` и т. д.?free
- Какие значения/элементы в Go могут быть nil, а какие — никогда?free
- Какая разница между `make` и `new`? Какой функцией можно выделить память?free
- Какой из типов данных является ссылочным в Go? Какие в Go есть ссылочные типы?free
- Что можно делать со строкой в Go, а что нельзя (какие операции доступны)?free
- Чем указатели в Go отличаются от указателей в C++?free
- Зачем нужна пустая структура? Когда и зачем используют `struct{}`?free
- Что такое встраивание (embedding) в Go?free
- Что такое вариативные функции в Go (с `...`) и когда они нужны?free
- Как работает наследование в Go? Какой механизм есть — наследование или композиция?free
- В пакете несколько функций `init()` — так можно? Что делает `init()` и что не рекомендуется внутри неё?free
- Что такое глобальная переменная в Go, зачем нужна?free
- Можно ли сравнить два слайса напрямую (==)? Как проверить равенство слайсов?free
- Как использовать слайс в качестве ключа map и как потом проверить наличие такого ключа?free
- Как устроен обход map и когда определяется случайный порядок — при компиляции или в рантайме?free
- Что произойдёт при обращении к map по отсутствующему ключу (в том числе если значение — структура)?free
- Привести пару примеров, как используются интерфейсы, какие методы использовал бы, и написать ихfree
- Есть ли в Go аналог try/catch? Есть ли исключения в Go?free
- Есть ли ограничения, где объявлять переменную через `var` или через `:=`?free
- Чем `var` отличается от `const`?free
- Сколько памяти занимает тип `bool`?free
- Что делает встроенная функция new и что она возвращает?free
- Как в Go происходит объявление переменной?free
- Какие уровни области видимости переменных есть в Go (блок, функция, пакет) и как работает экспорт через заглавную букву?free
- Если интерпретировать строку "Привет" как массив байт — какая у неё длина, и что будет при обращении к нулевому элементу этого массива?free
- Разница между ссылкой (reference) и указателем (pointer) в Gofree
- Когда делать ресивер метода указателем, а когда значением?free
- Структура передаётся в функцию по указателю — как сделать, чтобы изменения внутри функции отражались на оригинале, а как — чтобы не отражались?free
- Как объявить новую структуру в Go?free
- Почему вызов метода с value-ресивером (`func (c Counter) Inc() { c.n++ }`) не изменит поле исходной переменной?free
- `for range`: по каким типам и сущностям можно его использовать?free
- Какие формы цикла for есть в Go и что изменилось в семантике переменной цикла в Go 1.22?free
- Как быстро и правильно сравнить два числа float?free
- Расскажи про анонимные функцииfree
- Можно ли передать функцию как параметр в другую функцию (функции высшего порядка)?free
- Всё ли в Go передаётся в функцию по значению? Что копируется при передаче слайса, мапы, структуры и указателя?free
- Что такое чистая функция (pure function)?free
- Чем метод отличается от функции?free
- Как преобразовать поле структуры в JSON?free
- Какая функция в Go используется для создания файла?free
- Какую функцию используют для получения текущей рабочей директории?free
- Какие функции пакета `os` доступны для работы с правами на файлы?free
- Какую функцию используют для создания символической ссылки на файл/директорию?free
- Какие структуры для взаимодействия с ОС существуют в пакете `os`?free
- С какой самой ранней версией Go работали?free
- Где был разработан язык Go?free
- Что в Python означает «объект хэшируемый»?free
- Чем отличается поверхностное копирование от глубокого?free
- Ты участвуешь в гонке, обгоняешь второго. Какое теперь у тебя место?free
- Хочу импортировать пакет, но ничего из него не использую — так можно? Как это называется?free
- Что возвращает функция `len`?free
- Подбрасываем монетку — какая вероятность, что она упадёт нужной стороной?free
- Какие ключевые слова используются для управления потоком выполнения в Go?free
- Для каких задач используют слайсы и массивы?free
- В чём отличие слайса от Python-списка (list)?free
- Что такое массив?free
- Как вывести все элементы слайса (slice) в Go?free
- Как в Go можно объявить пустой срез целых чисел?free
- Что будет, если передать слайс из 30 тысяч элементов в функцию?free
- Для чего может понадобиться конструкция `a = a[:0]`?free
- Что представляет собой nil-слайс?free
- Какая сложность поиска элемента внутри слайса?free
- Что произойдёт, если положить в map указатель на неинициализированные данные (nil-указатель)?free
- Что такое nil-map и чем она отличается от пустой?free
- Безопасно ли удалять элемент из nil-map?free
- Какая алгоритмическая сложность доступа по ключу в map?free
- Для каких задач используют map?free
- Как понять, есть ли ключ в map?free
- Как вызывается defer? Как отловить панику через defer? Какое поведение у defer при panic и при os.Exit()?free
- Чем отличаются ёмкость (cap) от размера (len) в slice и map? Как происходит выделение памяти, если в slice не хватает места?free
Что выведет
0/15- Слайс указателей на переменную rangefree
- nil-указатель в пустом интерфейсеfree
- Правка элемента после двух appendfree
- Подслайс длины 1 и три варианта appendfree
- error из typed-nil *os.PathErrorfree
- append к подслайсу внутри функцииfree
- Один подслайс, два разных appendfree
- Два append от одного слайсаfree
- Новый объект в указатель-параметрfree
- range по строке с «ö» и txt[i]free
- unsafe.Sizeof и порядок полейfree
- Указатель на переменную цикла в обёрткеfree
- Method set именованного слайсаfree
- removeAt через append и исходный слайсfree
- len и cap после append и подсрезаfree
Ещё 61 · что выведет — если осталось время или хочешь глубже
- Вставка в середину через head и tailfree
- Указатель на элемент и append с реаллокациейfree
- Общий массив у копий слайсаfree
- Замыкание: append и правка результатаfree
- Подслайс с хвоста, append и правкаfree
- append в функции при запасе capacityfree
- Слайс и map, изменённые в функцияхfree
- append и правка по индексу в функцииfree
- append и перезапись в цикле внутри функцииfree
- Анонимная функция: append и правка строкfree
- По значению, через append и по указателюfree
- Чтение за len после append в функцииfree
- 10 000 горутин пишут в одну mapfree
- Два конструктора интерфейсаfree
- defer меняет локальную переменную после returnfree
- defer с аргументом против defer-замыканияfree
- recover в main и паника в горутинеfree
- Именованный результат: параметр defer и чтение по имениfree
- defer report(e) против defer-замыканияfree
- defer метода с pointer-ресивером и return поляfree
- recover во вложенной функцииfree
- Как растёт cap при бесконечном appendfree
- Горутины в цикле без ожиданияfree
- Копия строки и запись по индексуfree
- Запись байта в строку по индексуfree
- iota в трёх формах объявленияfree
- defer Println и инкрементfree
- Increment с value-ресиверомfree
- WaitGroup и переменная C-style циклаfree
- Числа от 0 до 4: range по intfree
- Перезапись элементов слайса в функцииfree
- defer метода с value-ресиверомfree
- rune("W") в слайсе рунfree
- string([]byte) и последующая правка слайсаfree
- JSON и неэкспортируемое полеfree
- Изменение элемента в range по слайсу структурfree
- range-копии и JSON с неэкспортируемым полемfree
- Строка, []rune и запись по индексуfree
- Адрес в переменную типа intfree
- Переполнение int32: в рантайме и в константеfree
- switch без выражения с двумя case truefree
- float64 ноль делить на нольfree
- Value- и pointer-ресивер у Tallyfree
- nil-указатель и zero value структурыfree
- Замыкание со случайной задержкойfree
- Литерал &[int]{1,2,3}free
- Поле `int B` и fmt.Sprintf в циклеfree
- Конкатенация через Sprintf в циклеfree
- Изменить первый байт строки через []bytefree
- Срез с границами за длиной слайсаfree
- Три append внутри функцииfree
- make с запасом и append сверх capacityfree
- Сравнение слайсов через ==free
- Печать внутри и снаружи после appendfree
- Адрес значения в mapfree
- Отсутствующий ключ и форма v, okfree
- Указатель на структуру из mapfree
- Интерфейс со значением и пустой интерфейсfree
- Два defer и переприсвоенияfree
- Два defer между обычными Printlnfree
- Выход за границы слайса в горутинеfree
Лайвкодинг
0/1Открытые задачи
0/2- Embedding, фабрика и упорядоченный асинхронный генератор45 минfree
- Increment, Decrement и String() на разных ресиверах5 минfree
Ещё 8 · задача — если осталось время или хочешь глубже
- Горутины пишут в общую map без синхронизации5 минfree
- Время работы двух функций с defer и Sleep7 минfree
- Структура с большим массивом гоняется по значению10 минfree
- Порядок обхода map в range3 минfree
- Счётчик частот в nil-map5 минfree
- Обход map и адрес скопированного значения3 минfree
- Хранить последнее сообщение каждого типа15 минfree
- defer, горутины и выход из main3 минfree