Библиотека Go для собеса | вопросы с собеседований
6.87K subscribers
248 photos
9 videos
1 file
540 links
Вопросы с собеседований по Go и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/0b524a15

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
Зачем нужен канал с размером 1

Канал с размером буфера 1 — это своего рода «промежуточный» вариант между небуферизованным и традиционно буферизованным каналом. Он позволяет одному элементу находиться в канале без блокировки отправителя, то есть:

Если буфер пуст, то отправитель записывает значение в буфер и сразу продолжает работу, не блокируясь. Это даёт асинхронность, в отличие от небуферизованного канала, где send блокирует до приёма значения.

Если буфер заполнен этим одним элементом, дальнейшая отправка заблокируется до тех пор, пока получатель не прочитает элемент из канала, тем самым освободив буфер.

Получатель, если буфер пуст, будет блокироваться, ожидая новый элемент, как и в любом буферизованном канале.

Это часто используется для случаев, когда нужен небольшой буфер для минимизации блокировок, но при этом важна почти синхронная коммуникация без накопления большого количества элементов и связанных с этим задержек.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Какова алгоритмическая сложность обращения к мапе

Обращение к элементу в мапе работает за константное время, потому что Go использует хеш-таблицу. Ключ хешируется, и по значению хеша система сразу указывает на нужный бакет в памяти.

При переаллокации данных сложность может деградировать до O(n).

Это происходит, когда количество элементов в мапе превышает load factor, примерно 6,125 элементов на баккет в среднем, или около 81% заполненности. Тогда Go выделяет новую память под бакеты в два раза больше и постепенно переносит данные из старых бакетов в новые.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
На что действует load factor — на всю мапу или на отдельные бакеты

На всю маппу в целом. Load factor — это среднее значение заполненности всех бакетов. Некоторые бакеты могут быть заполнены меньше, другие больше, но когда в среднем количество элементов на бакет превышает примерно 6,125 элементов, запускается эвакуация. Это не локальное свойство одного бакета, а глобальное состояние всей мапы.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
6
😱 Хаос из REST, gRPC и Swagger в проекте? Пора навести порядок. На открытом уроке от OTUS вы узнаете, как построить микросервисную архитектуру, где всё работает согласованно — на основе единой схемы proto3.

👨‍💻 Эксперт покажет, как из одной proto-схемы автоматически генерировать gRPC, API-Gateway и Swagger — без ручных правок и бесконечных конфликтов версий. Вы разберётесь, как правильно структурировать проект, настраивать protoc и плагины, подключать HTTP-аннотации и создавать понятную документацию.

❗️ После урока вы сможете собрать рабочий шаблон микросервиса на Go, где gRPC обслуживает внутренние вызовы, REST — внешние, а Swagger — интеграцию и тестирование. Всё из одной схемы.

📅 12 ноября в 20:00 МСК. Открытый вебинар проходит в преддверии старта курса «Микросервисы на Go». Регистрируйтесь и узнайте, как превратить сложную архитектуру в управляемую систему: https://clc.to/6aBGQA

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🤩2🌚1
Какое максимальное значение элементов в бакете у мапы

Максимума нет — бакет может расти бесконечно. Каждый бакет состоит из восьми слотов, но если в одном бакете происходит коллизия, элементы образуют цепочку. Эта цепочка может расти сколько угодно. Однако когда общий load factor превышает лимит, вся мапа переалоцируется, чтобы уменьшить количество коллизий.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3