fa
Feedback
Библиотека Go для собеса | вопросы с собеседований

Библиотека Go для собеса | вопросы с собеседований

رفتن به کانال در Telegram

Вопросы с собеседований по Go и ответы на них. Покажем, как запустить своего ии-агента: https://clc.to/tvpmD По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197

نمایش بیشتر
7 428
مشترکین
-324 ساعت
-167 روز
+930 روز
آرشیو پست ها
Какие метрики важно мониторить при использовании fan-in и fan-out • Количество активных горутин. • Задержки в обработке (latency). • Время выполнения горутин. • Использование CPU и памяти. • Ошибки и тайм-ауты. • Очередь ожидания в каналах. 🐸 Библиотека Go для собеса

В чем ключевые моменты организации сбора и агрегации ошибок от горутин в fan-in реализации Ошибки нужно передавать через отдельный канал или включать в структуру результата. В Go есть пакет errgroup, который объединяет синхронизацию горутин и агрегирует ошибки. 🐸 Библиотека Go для собеса

Как вам вопросы прошедшей недели Оцените их по шкале 🔥,❤️,👍,😢, 🥱, где 🔥 — это супер, а 🥱 — это скучно. Также приветствуется фидбек в комментах. 🐸 Библиотека Go для собеса

В чем состоит идея паттерна fan-in Fan-in — это паттерн обратный fan-out, когда результаты множества параллельных горутин собираются в один канал или поток для дальнейшей обработки. Реализация паттерна в Go часто использует каналы и sync.WaitGroup: каждая горутина пишет свои результаты в общий канал, а после завершения всех горутин канал закрывается основной горутиной. 🐸 Библиотека Go для собеса

Что такое паттерн fan-out Fan-out — это паттерн, при котором поток генерирует несколько горутин, чтобы повысить производительность и использовать многопоточность. Например, вместо того чтобы обрабатывать 100 запросов последовательно, мы распараллеливаем их и обрабатываем одновременно, что уменьшает общую задержку выполнения. 🐸 Библиотека Go для собеса

Влияет ли использование алиасов на производительность программы Нет, алиасы не влияют на производительность, так как они не создают новых типов и не меняют структуру данных. 🐸 Библиотека Go для собеса

🧑‍💻 Все еще пишешь типовой код вручную? Есть способ лучше. Кодогенерация в Go — это мощный инструмент, который автоматизиру
🧑‍💻 Все еще пишешь типовой код вручную? Есть способ лучше. Кодогенерация в Go — это мощный инструмент, который автоматизирует рутину и расширяет возможности языка. На открытом уроке «Кодогенерация в Go: код, который не пришлось писать» разберем, как это работает. Поговорим о том, когда кодогенерация уместна, какие механизмы Go ее позволяют и как это применяется в реальных проектах. Это тот случай, когда нейросети не заменят глубокого понимания механизмов языка. Практикующий разработчик с опытом в продакшене покажет, как избежать подводных камней и применять кодогенерацию в рабочих проектах. Ваш шанс научиться создавать более эффективные и лаконичные решения. Перестаньте тратить время на шаблонные задачи и начните генерировать код, который работает за вас. 🗓 Урок пройдет 19 ноября в 20:00 в преддверии старта курса «Golang Developer. Professional». Все участники вебинара получат скидку на обучение. Регистрируйтесь по ссылке, чтобы освоить один из самых перспективных навыков в Go: https://clc.to/pXNfCw Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Возможно ли использовать алиасы для встроенных типов, таких как int, string Да, алиасы можно создавать для любых типов, включая встроенные). Это делают для улучшения читаемости кода или для придания типам семантического смысла, например, type UserID = int. 🐸 Библиотека Go для собеса

Можно ли присвоить значение типа-алиаса значению оригинального типа Да, можно. Алиас в Go — это другое имя для того же типа, а не новый тип. Поэтому значения типа-алиаса и оригинального типа полностью совместимы и могут присваиваться друг другу без приведения. 🐸 Библиотека Go для собеса

Как использовать алиасы и какие кейсы использования знаете Алиасы создаются с помощью ключевого слова type и позволяют дать новое имя уже существующему типу. Они не создают новый тип, а лишь создают альтернативное имя для существующего типа. Основные кейсы использования алиасов: • Если имя пакета или типа слишком длинное, алиас позволяет использовать сокращённое имя для удобства и читаемости • При импорте двух пакетов с одинаковыми именами, алиасы используются для различия
import (
    sqlDB "project/sql/db"
    nosqlDB "project/nosql/db"
)
• Если в новой версии библиотеки типы были переименованы или перемещены, алиасы позволяют сохранить старые имена без изменения основного кода. 🐸 Библиотека Go для собеса

Как вам вопросы прошедшей недели Оцените их по шкале 🔥,❤️,👍,😢, 🥱, где 🔥 — это супер, а 🥱 — это скучно. Также приветствуется фидбек в комментах. 🐸 Библиотека Go для собеса

🌐 HTTP уже не тянет? В микросервисной архитектуре запросы множатся, скорость падает, а код превращается в клубок зависимосте
🌐 HTTP уже не тянет? В микросервисной архитектуре запросы множатся, скорость падает, а код превращается в клубок зависимостей. Настало время познакомиться с инструментом, который решает эти проблемы изящно — gRPC. 📗 На открытом уроке вы разберёте, как работает этот фреймворк, почему он вытесняет REST и как описывать API с помощью Protobuf. Вы узнаете, как обеспечить обратную совместимость между сервисами, повысить производительность и упростить взаимодействие микросервисов. ❗️После вебинара вы сможете строить быстрые и надёжные коммуникации между сервисами на Go — с чистой архитектурой и минимумом боли. ➡️ 12 ноября в 20:00 МСК. Открытый вебинар проходит в преддверии старта курса «Golang Developer. Professional». Регистрируйтесь и узнайте, почему gRPC становится стандартом нового поколения для Go-разработчиков: https://clc.to/qOyH8Q Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

От чего зависит размерность int Go автоматически выбирает размерность в зависимости от платформы, на которой компилируется программа. Если нужен строго определённый размер, используйте явные типы: int32, int64, uint32, uint64. 🐸 Библиотека Go для собеса

За что отвечает второй аргумент в make при создании мапы Это подсказка на желаемое количество элементов.
myMap := make(map[string]int, 3)
Второй параметр говорит Go, сколько элементов вы планируете хранить. Это не резервирует точное количество памяти и не ограничивает мапу. Go использует эту подсказку для предварительного выделения бакетов, чтобы избежать лишних переалокаций на начальном этапе. 🐸 Библиотека Go для собеса

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

😱 Хаос из REST, gRPC и Swagger в проекте? Пора навести порядок. На открытом уроке от OTUS вы узнаете, как построить микросер
😱 Хаос из 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

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

Какова алгоритмическая сложность обращения к мапе Обращение к элементу в мапе работает за константное время, потому что Go использует хеш-таблицу. Ключ хешируется, и по значению хеша система сразу указывает на нужный бакет в памяти. При переаллокации данных сложность может деградировать до O(n). Это происходит, когда количество элементов в мапе превышает load factor, примерно 6,125 элементов на баккет в среднем, или около 81% заполненности. Тогда Go выделяет новую память под бакеты в два раза больше и постепенно переносит данные из старых бакетов в новые. 🐸 Библиотека Go для собеса

Зачем нужен канал с размером 1 Канал с размером буфера 1 — это своего рода «промежуточный» вариант между небуферизованным и традиционно буферизованным каналом. Он позволяет одному элементу находиться в канале без блокировки отправителя, то есть: Если буфер пуст, то отправитель записывает значение в буфер и сразу продолжает работу, не блокируясь. Это даёт асинхронность, в отличие от небуферизованного канала, где send блокирует до приёма значения. Если буфер заполнен этим одним элементом, дальнейшая отправка заблокируется до тех пор, пока получатель не прочитает элемент из канала, тем самым освободив буфер. Получатель, если буфер пуст, будет блокироваться, ожидая новый элемент, как и в любом буферизованном канале. Это часто используется для случаев, когда нужен небольшой буфер для минимизации блокировок, но при этом важна почти синхронная коммуникация без накопления большого количества элементов и связанных с этим задержек. 🐸 Библиотека Go для собеса

В чем практические и внутренние различия между буферизованными и небуферизованными каналами Небуферизованный канал — строгий. Отправка и прием завершаются одновременно и образуют отношение happens-before между записью и чтением значения. Буферизованный канал хранит элементы в кольцевом буфере внутри структуры до выборки получателем. Отправитель блокируется лишь при полном буфере. При небуферизованном обмене с ожидающим получателем значение копируется напрямую из стека отправителя в стек получателя, минуя промежуточный буфер. При буферизованном — сначала в буфер канала, затем из буфера в стек получателя. 🐸 Библиотека Go для собеса