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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
Оптимизация работы с памятью в 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🔥1
#Собес #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.

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

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

Репозиторий посвящён инструментам и библиотекам для языка программирования Go (Golang). В нём собраны различные решения, сгруппированные по категориям

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

👉 База вопросов 👉 Новости
#Собес #timeout #http_client #request_deadline
🤔 Зачем нужны таймауты HTTP-запроса?



💬 Кратко:

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

 

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

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

Современная веб-разработка требует четкого взаимодействия между backend на Go и frontend на JavaScript/TypeScript.

API дизайн

RESTful API остается стандартом для большинства проектов. Используйте семантичные HTTP методы: GET для чтения, POST для создания, PUT/PATCH для обновления, DELETE для удаления.

Определяйте четкие контракты через OpenAPI/Swagger спецификации. Генерируйте типы для TypeScript из этих спецификаций, обеспечивая типобезопасность на обеих сторонах.

gRPC-web позволяет использовать gRPC протокол непосредственно из браузера. Подходит для сложных сервисов с большим количеством методов.

Формат данных

JSON — стандарт для REST API. Используйте правильные статус-коды и структурированные сообщения об ошибках.

Для бинарных данных используйте Protocol Buffers или MessagePack. Они эффективнее JSON по размеру и скорости парсинга.

WebSockets для реального времени: уведомления, чаты, live-обновления. В Go используйте gorilla/websocket или стандартный net/http.

Аутентификация и авторизация

JWT токены для stateless аутентификации. Храните в localStorage или HttpOnly cookies.

CORS настройки критически важны. На backend явно указывайте разрешенные origin, методы и заголовки.

Сессии через cookies с защитой от CSRF. Используйте secure, httpOnly флаги для защиты.

Оптимизация производительности

Сжатие ответов (gzip, brotli). На Go используйте middleware для автоматического сжатия.

Кэширование статических ресурсов. Устанавливайте Cache-Control заголовки для CSS, JS, изображений.

Пагинация и ограничение данных. Не возвращайте полные коллекции, используйте limit/offset или курсоры.

Инструменты разработки

Swagger UI или ReDoc для документации API. Автоматически генерируйте из аннотаций Go кода.

Моки API для фронтенд-разработчиков. Используйте инструменты вроде prism для создания mock-сервера из OpenAPI спецификации.

Общие репозитории для прототипов и контрактов. Храните .proto файлы и OpenAPI спецификации в отдельных пакетах.

Обработка ошибок

Единый формат ошибок для всех API. Включайте код ошибки, сообщение и дополнительные данные.

Глобальная обработка ошибок на фронтенде. Перехватывайте HTTP ошибки и показывайте пользователю понятные сообщения.

Валидация данных на обеих сторонах. Дублируйте базовые проверки на фронтенде для UX, но всегда проверяйте на бекенде для безопасности.

DevOps аспекты

Единая система логирования. Используйте correlation ID для отслеживания запроса через весь стек.

Мониторинг производительности API. Отслеживайте время ответа, частоту ошибок, использование ресурсов.

Canary релизы и feature flags. Постепенное развертывание изменений API с возможностью отката.

Эффективное взаимодействие backend и frontend — это не только техническая интеграция, но и организационные процессы: общее понимание требований, синхронизация релизов, совместное решение проблем.
👍1
#Собес #golang #rest #redis

🤔 Middle Golang Developer в компанию Sisoft

Техническое собеседование. Лето 2024. Вилка: 200к+. Опыт в резюме: 3+ года. Много говорили о базах данных, REST и т.д.

💬 Вопросы:

- Как обеспечить безопасность данных при передаче через API (HTTPS, шифрование, JWT)?

- Какие альтернативные технологии клиент-серверного взаимодействия вы знаете (gRPC, GraphQL)?

- Чем сокеты отличаются от брокеров сообщений (например, Kafka)?

- Что такое сокеты?

- Чем SQL отличается от NoSQL? Когда выбрать каждое решение?

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

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #sql #optimization #index
🤔 Как оптимизировать SQL-запрос, выбирающий все посты пользователей с >500 подписчиков (с джойнами и проверкой NULL)?

💬 Кратко:

- Добавить индексы на subscribers_count и user_id.
- Использовать INNER JOIN вместо LEFT JOIN, если NULL не нужны.
- Заменить подзапросы на JOIN.
- Применить покрывающий индекс.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Forwarded from YeaHub
💼 Как реально подготовиться к собеседованию в IT

Подготовка к собеседованиям в IT — это не только заучивание вопросов, но и работа с системой: понимание того, что реально спрашивают, как повторять материал и как не тратить время впустую.

В этом видео разбираем:
- как готовиться к IT-собеседованиям без хаоса
- какие вопросы чаще всего задают на технических интервью
- как выстроить регулярную подготовку и отслеживать прогресс
- где брать реальные вопросы с собеседований
- как повторять материал эффективно, а не «по кругу»
- какие ресурсы использовать для изучения тем
- как аналитика по вопросам помогает готовиться точнее

Показываю подход к подготовке с использованием YeaHub: база реальных вопросов с собеседований, тренажёр для повторения, статистика по популярным и сложным темам, а также подборка полезных материалов.

Видео будет полезно тем, кто:
- готовится к собеседованиям в IT
- ищет первую работу или планирует смену компании
- устал от бесконечных списков вопросов без структуры

https://yeahub.ru - платформа для подготовки к собесам

https://news.1rj.ru/str/yeahub - основной канал

Ссылка на видео: клик
#course #курсы #тренажер
📚 Code Basics — старт в IT с нуля

Code Basics — бесплатная образовательная платформа для тех, кто хочет начать путь в IT. Проект создан командой и сообществом Хекслета, чтобы помочь новичкам понять принципы программирования, а не просто запомнить детали. В основе обучения — практический тренажёр, который помогает освоить базу и почувствовать логику кода.

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

👉 База вопросов 👉 Новости
2
#Собес #golang #panic #error_handling
🤔 Когда и как стоит использовать panic в Go?

💬 Кратко:

panic используют для критических ошибок, когда продолжение работы программы невозможно. В обычных случаях применяют error.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1👍1
Forwarded from YeaHub
🚀 Новый год с YeaHub: готовимся к 2026 году вместе!

Дорогие айтишники, коллеги, друзья!

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

На горизонте 2026 года есть позитивные сигналы:
— Ключевая ставка снижается, найм постепенно размораживается.
— Оптимизации и сокращения будут уходить в прошлое.
— Рынок станет более прозрачным и предсказуемым, но конкуренция останется высокой.

Что это значит для нас с вами:
— Адаптация и постоянное развитие становятся ключом к успеху.
— Тесты, резюме, навыки и нетворкинг — важнее, чем когда-либо.

YeaHub в 2026 году будет помогать вам побеждать рынок:
— 100+ новых собеседований уже в январе, с регулярным добавлением новых.
— Сервис лайвкодинга — решайте реальные задачи с собеседований.
— Новые сервисы и продукты: тесты с вариантами ответов, статьи, роадмапы и курсы.

К команде YeaHub присоединились новые бекендеры, аналитики, а также AQA и QA-специалисты. Мы выходим из бета-режима, выстроили основные процессы разработки и контроля качества и теперь фокусируемся на стабильности, масштабировании и высоком качестве платформы.


Поддержите нас и зафиксируйте текущие тарифы:
— Новые выгодные тарифы на 3 и 12 месяцев уже доступны.
— Цены вырастут в 2 раза к запуску лайвкодинга — зафиксируйте их заранее.

👉 Членство YeaHub

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

Всем офферов ✊🏻💪
Please open Telegram to view this post
VIEW IN TELEGRAM
Написание чистого и поддерживаемого кода на Go

Чистый код на Go — это не только рабочее, но и понятное, тестируемое и легко изменяемое решение.

Именование и структура

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

Соблюдайте принцип единственной ответственности. Функция должна делать одну вещь, но делать её хорошо.

Длинные функции — признак проблемы. Разбивайте их на логические части с четкими названиями.

Обработка ошибок

Обрабатывайте ошибки сразу, не откладывая. Каждая функция, возвращающая ошибку, должна быть проверена.

Создавайте информативные сообщения об ошибках. Ошибка должна объяснять, что пошло не так и в каком контексте.

Используйте обертывание ошибок с помощью fmt.Errorf и %w для сохранения контекста.

Тестируемость

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

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

Тесты должны быть простыми и понятными. Каждый тест проверяет одну конкретную вещь.

Документация и комментарии

Комментируйте "почему", а не "что". Код должен говорить сам за себя, а комментарии объяснять сложные решения.

Используйте godoc для документирования публичных API. Каждая экспортируемая сущность должна иметь комментарий.

Поддерживайте актуальность комментариев. Устаревшие комментарии хуже, чем их отсутствие.

Работа с зависимостями

Минимизируйте зависимости. Каждая новая зависимость — это потенциальные проблемы с обновлениями и безопасностью.

Фиксируйте версии зависимостей. Используйте Go modules и точные версии в go.mod.

Регулярно обновляйте зависимости. Устаревшие библиотеки могут содержать уязвимости.

Code review практики

Делайте небольшие изменения. Большие пулл-реквесты сложно ревьюить.

Проверяйте свой собственный код перед отправкой. Запускайте тесты, линтеры, проверяйте форматирование.

Принимайте обратную связь конструктивно. Code review — это процесс улучшения кода, а не критика.

Чистый код экономит время и нервы всей команды. Инвестиции в качество кода окупаются на этапах поддержки и развития проекта.
👍2
#Собес #scope #heap #stack

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

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

💬 Вопросы:

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

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

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

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

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

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

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #hash_index #unique #btree
🤔 Можно ли сделать хэш-индекс уникальным?

💬 Кратко:

В PostgreSQL хэш-индексы не поддерживают уникальность: нельзя объявить CREATE UNIQUE INDEX с USING HASH. Хэш-индексы служат лишь для ускорения точных поисков, а уникальность обеспечивается только B-tree-индексами.

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

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

Здесь вы найдете разнообразный IT-контент: от глубоких технических обсуждений до увлекательных и расслабляющих бесед. Наши эпизоды охватывают широкий спектр тем, связанных с разработкой и новейшими технологиями, чтобы каждый разработчик нашел что-то для себя. Присоединяйтесь к нам, чтобы углубить свои знания, оставаться в тренде и вдохновляться новыми идеями!

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

👉 База вопросов 👉 Новости
#Собес #unwrap #errors #golang
🤔 В чём разница между errors.Is, errors.As и errors.Join?

💬 Кратко:

errors.Is — проверяет, является ли ошибка конкретной ошибкой в цепочке.

errors.As — достаёт конкретный тип ошибки.

errors.Join — объединяет несколько ошибок в одну.

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

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

🤔 Middle Golang Backend разработчик в VK

Опыт в резюме: 3+ года. Вилка: до 300к. На этом этапе собеседования в основном был лайвкодинг - преобразование int32 в строку.

💬 Вопросы:

- Почему использование []rune эффективнее конкатенации строк?

- Как минимизировать аллокации при работе с рунами и слайсами?

- Как оптимизировать преобразование числа в строку за один проход?

- Как извлечь отдельные цифры из числа?

- Почему конкатенация строк в цикле неэффективна (создание новых массивов байт)?

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

📣 Хочешь больше собесов?
Подпишись на наш главный канал
🔥1