Golang Backend | YeaHub – Telegram
Golang Backend | YeaHub
838 subscribers
257 photos
21 videos
1 file
398 links
Теория, подготовка к интервью и курсы для Golang разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
Forwarded from YeaHub
[Версия 1.3.0] - Обновление платформы

Мы продолжаем развивать YeaHub, чтобы сделать обучение ещё удобнее, эффективнее и интереснее. В этом обновлении — важные и давно ожидаемые улучшения 👇

🔹 Навыки и ключевые слова из вакансий HH
Мы запустили сервис, который помогает прокачать резюме с помощью популярных навыков и ключевых слов, встречающихся в вакансиях. Это поможет вам выше ранжироваться в поиске среди кандидатов и увеличит конверсию откликов.
https://yeahub.ru/hh-analytics?page=1&mode=skills&specialization=11

🔹 Исправления и улучшения
Мы учли вашу обратную связь: исправили баги, улучшили интерфейс и сделали работу с платформой ещё комфортнее 🧠

🔥 Скоро
1. Сервис Лайвкодинга с реальными задачами с собеседований

👉 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru

#release #news #update #yeahub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
#Собес #mutex #synchronization #unlock
🤔 Что такое mutex, какие они бывают и как их использовать?

💬 Кратко:

Mutex — это механизм синхронизации, который предотвращает одновременный доступ к разделяемым ресурсам несколькими горутинами. В Go есть два типа мьютексов: sync.Mutex (блокирует доступ) и sync.RWMutex (разделяет доступ для чтения и записи). Для работы с мьютексами нужно использовать методы Lock и Unlock.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍21
Кэширование в Go-приложениях: стратегии и инструменты

Кэширование — ключевой метод повышения производительности приложений. В Go есть несколько подходов для его реализации.

Локальное кэширование в памяти

Простейший вариант — использование map с синхронизацией через sync.RWMutex. Подходит для небольших объемов данных с простой инвалидацией.

sync.Map рекомендуется для высококонкурентных read-heavy сценариев, когда ключи редко меняются. Не требует явной синхронизации.

Библиотека groupcache от Google создавалась для распределенного кэширования, но работает и локально. Автоматически управляет памятью и имеет эффективные механизмы обновления.

Внешние системы кэширования

Redis — наиболее популярное решение. Поддерживает различные структуры данных, транзакции, публикацию/подписку. Из Go работают через библиотеки go-redis или rueidis.

Memcached проще Redis, но эффективен для простых ключ-значение структур. Имеет меньше возможностей, но высокую производительность.

Стратегии инвалидации

TTL (Time to Live) — данные удаляются автоматически по истечении времени. Удобно, но может приводить к cache stampede при одновременном обновлении.

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

Write-through и write-behind стратегии. Данные записываются одновременно в кэш и основное хранилище или с небольшой задержкой.

Кэширование в Go-приложениях: стратегии и инструменты

Кэширование — ключевой метод повышения производительности приложений. В Go есть несколько подходов для его реализации.

Локальное кэширование в памяти

Простейший вариант — использование map с синхронизацией через sync.RWMutex. Подходит для небольших объемов данных с простой инвалидацией.

sync.Map рекомендуется для высококонкурентных read-heavy сценариев, когда ключи редко меняются. Не требует явной синхронизации.

Библиотека groupcache от Google создавалась для распределенного кэширования, но работает и локально. Автоматически управляет памятью и имеет эффективные механизмы обновления.

Внешние системы кэширования

Redis — наиболее популярное решение. Поддерживает различные структуры данных, транзакции, публикацию/подписку. Из Go работают через библиотеки go-redis или rueidis.

Memcached проще Redis, но эффективен для простых ключ-значение структур. Имеет меньше возможностей, но высокую производительность.

Стратегии инвалидации

TTL (Time to Live) — данные удаляются автоматически по истечении времени. Удобно, но может приводить к cache stampede при одновременном обновлении.

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

Write-through и write-behind стратегии. Данные записываются одновременно в кэш и основное хранилище или с небольшой задержкой.

Практические рекомендации

Всегда реализуйте graceful degradation. При недоступности кэша приложение должно продолжать работать, обращаясь к основному источнику данных.

Настройте мониторинг hit/miss ratio. Низкий процент попаданий указывает на неэффективную стратегию кэширования.

Используйте multi-level кэширование: L1 — локальная память, L2 — Redis. Это снижает нагрузку на внешние системы.

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

Кэширование требует баланса между производительностью и актуальностью данных. Правильно выбранная стратегия значительно улучшает отзывчивость приложения при сохранении консистентности данных.
👍21
#Собес #scope #heap #stack

🤔 Middle Golang Backend-разработчик в Газпром.

Техническое собеседование. Осень 2024. Вилка 150к+. Опыт в резюме: 3 года. Были вопросы про текущее место работы.

💬 Вопросы:

- Что произойдёт при попытке записи в неинициализированный канал?

- В чём разница между буферизированным и небуферизированным каналом? Какой из них быстрее передаст значение?

- Как повлияет тип получателя (по значению или по ссылке) на реализацию интерфейса двумя структурами?

- Какие бывают типы интерфейсов?

- Есть ли в Go полиморфизм как принцип ООП?

👉 Все вопросы из этого собеседования (25)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
1
#Собес #distinct #group_by
🤔 Как еще, кроме DISTINCT, можно добиться уникальности записей в выборке?

💬 Кратко:

Кроме DISTINCT, уникальности записей можно добиться с помощью GROUP BY по всем нужным столбцам, использованием оконных функций (например, ROW_NUMBER()) с фильтрацией, или путем агрегации и последующего разворачивания данных. Каждый метод имеет свои применения в зависимости от контекста.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#course #ооп #case
📚 Практический анализ ПО с моделированием на UML

Целью курса является обучение слушателей теоретическим основам объектно-ориентированного подхода, практическим методам визуального проектирования и технологии разработки программного обеспечения с использованием компьютеризированных систем разработки (CASE

Перейти к материалу

👉 База вопросов 👉 Новости
👍2
#Собес #go #workerpool #goroutine
🤔 Как реализовать worker pool с ограничением по concurrency в Go?

💬 Кратко:

Worker pool — это набор фиксированных воркеров, которые получают задачи из канала и обрабатывают их параллельно. Ограничение по concurrency достигается размером пула.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
Graceful Shutdown в Go: основы

Graceful Shutdown обеспечивает корректное завершение работы приложения без потери данных и обрыва операций.

Механизм работы

При получении SIGINT/SIGTERM приложение начинает плавную остановку: прекращает принимать новые запросы, завершает текущие операции, освобождает ресурсы.

Реализация

Используйте context.WithCancel для создания отменяемого контекста. При сигнале вызывайте cancel() и передавайте контекст во все долгие операции.

Для HTTP серверов вызовите Shutdown() с таймаутом. Сервер перестанет принимать новые соединения, но завершит обработку текущих.

Координация компонентов

Используйте sync.WaitGroup для отслеживания рабочих горутин. Закрытие канала может служить универсальным сигналом остановки.

Закрывайте все внешние соединения: БД, кэши, брокеры сообщений. Используйте встроенные методы Close/Shutdown библиотек.

Практические советы

Настройте обработку SIGINT (Ctrl+C) и SIGTERM через os/signal. Установите разумные таймауты на каждый этап завершения.

Логируйте процесс shutdown для диагностики. При превышении таймаутов продолжайте завершение, фиксируя проблемные компоненты.

В микросервисных архитектурах снимите инстанс с балансировки нагрузки до начала shutdown. В Kubernetes используйте preStop hooks.

Правильная реализация Graceful Shutdown предотвращает потерю данных и улучшает пользовательский опыт при обновлениях и масштабировании.
2👍2🔥1
#Собес #interface #slice #map

🤔 Middle Golang Backend-разработчик в Digital Spirit.

Техническое собеседование. Лето 2024. Опыт в резюме: 3 года. Вилка 200к+. Аутсорс. Были вопросы про текущее место работы, большая теоретическая часть, секция лайвкодинга.

💬 Вопросы:

- Как ООП реализовано в Go?

- Что будет, если попытаться писать в закрытом канале?

- Что такое транзакции в PostgreSQL?

- Что такое индекс в базе данных?

- Что такое type switch в Go?

👉 Все вопросы из этого собеседования (34)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_хуки
🤔 Из чего состоят “хуки” в Git?

💬 Кратко:

Хуки в Git — это скрипты, которые выполняются автоматически при определённых действиях в репозитории, таких как коммиты, слияния или пуши. Они находятся в директории .git/hooks и могут быть настроены для выполнения различных задач.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#documentation #http
📚 Все про HTTP

Тут собрано всё, что нужно знать про самый популярный протокол интернета

✓ Все статус-коды с понятными объяснениями
✓ Методы и заголовки
✓ Подборка инструментов для тестирования HTTP
✓ Чёткая инфа про HTTP/3

Перейти к материалу

👉 База вопросов 👉 Новости
🔥1
#Собес #set #map #struct
🤔 Есть ли в Go тип Set?



💬 Кратко:

В Go нет встроенного типа Set, но можно легко реализовать множество с помощью map[T]struct{}. Такой подход эффективен и компактен.

 

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1👍1
Оптимизация работы с памятью в Go: практические техники

Эффективное управление памятью критически важно для производительности Go-приложений. Вот ключевые подходы.

Снижение аллокаций

Основной источник аллокаций — создание объектов в куче. Используйте stack allocation где возможно: локальные переменные, небольшие структуры.

Преаллокация слайсов и мап через make с указанием capacity уменьшает количество переаллокаций при росте.

sync.Pool для переиспользования объектов, которые дорого создавать. Эффективно для временных буферов, структур парсинга, encoder/decoder.

Профилирование памяти

Используйте pprof для анализа аллокаций. heap profile показывает распределения в куче, allocs — общее количество аллокаций.

Flame graphs помогают визуализировать цепочки вызовов, создающих аллокации. Ищите горячие пути с большим количеством распределений.

Оптимизация структур данных

Выравнивание полей структур уменьшает размер памяти и повышает производительность. Используйте fieldalignment для автоматической оптимизации.

Рассмотрите использование массивов вместо слайсов для небольших фиксированных коллекций. Массивы выделяются на стеке.

Для строковых операций используйте strings.Builder вместо конкатенации через +. Это минимизирует аллокации.

GC тонкой настройки

Переменная GOGC контролирует агрессивность сборщика мусора. Увеличение значения уменьшает частность GC, но увеличивает потребление памяти.

Для latency-sensitive приложений рассмотрите использование GOGC=off с ручным управлением памятью через debug.FreeOSMemory.

Паттерны кодирования

При работе с JSON избегайте частого создания encoder/decoder. Используйте пул или создавайте один экземпляр.

Для бинарных протоколов используйте заранее аллоцированные буферы и реиспользуйте их через sync.Pool.

Мониторинг в продакшене

Отслеживайте показатели runtime.MemStats: HeapAlloc, StackInuse, NumGC, PauseTotalNs.

Настройте алерты на рост потребления памяти и увеличение пауз GC.

Оптимизация памяти — баланс между производительностью, сложностью кода и временем разработки. Начинайте с профилирования, оптимизируйте только горячие участки, измеряйте эффект после каждой оптимизации.
👍2
#Собес #golang #profiling #pprof

🤔 Middle+ Golang Backend-разработчик в «Яндекс»

Техническое собеседование. Осень 2025. Вилка 290к+.
Проект: аналитическая платформа и система событийной обработки для сервисов Яндекса.
Опыт в резюме — 3.5 года.

💬 Вопросы:

- Что делает sync.Cond и в каких случаях его предпочтительнее использовать вместо каналов?

- В чём отличие runtime.Goexit() от os.Exit() и когда их применяют?

- Когда использовать context.WithTimeout, а когда context.WithDeadline?

- Что такое transactional outbox и зачем он нужен?

- Как работает планировщик горутин (роль GOMAXPROCS, зависимость от ядер ОС)?

👉 Все вопросы из этого собеседования (13)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
1🔥1🤯1
#Собес #ipv6 #docker #daemon
🤔 Поддерживает ли Docker IPV6?

💬 Кратко:

Да, Docker поддерживает IPv6, но только на Linux-серверах. Чтобы включить поддержку IPv6, необходимо настроить Docker daemon, изменив параметр ipv6 в конфигурационном файле /etc/docker/daemon.json.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал