Transactional Outbox: что нужно знать для собеседования
Transactional Outbox — критически важный паттерн для надежных распределенных систем. Вот ключевые аспекты.
Почему паттерн так важен?
- Гарантирует доставку сообщений при работе с БД
- Решает проблему двойного списания
- Обеспечивает консистентность данных
- Критичен для микросервисной архитектуры
Основные компоненты паттерна:
1. Принцип работы
Сохранение сообщений в той же транзакции, что и бизнес-данные
Отправка сообщений после коммита транзакции
Гарантия exactly-once доставки
Отслеживание статуса отправки
2. Реализация в БД
Отдельная таблица для исходящих сообщений
Использование транзакций БД
Индексы для эффективной выборки
Очистка обработанных сообщений
3. Процесс отправки
Фоновая горутина для отправки
Периодический опрос таблицы
Обработка дубликатов и повторов
Управление таймаутами и ошибками
4. Гарантии доставки
Идемпотентность обработки на стороне получателя
Подтверждение доставки
Dead letter queue для проблемных сообщений
Мониторинг задержек и ошибок
5. Интеграция с Go
Использование context для отмены
Транзакции на уровне репозитория
Интеграция с брокерами (Kafka, RabbitMQ)
Graceful shutdown обработчика
Что практиковать:
- Реализацию таблицы исходящих сообщений
- Написание фонового обработчика
- Обработку ошибок и повторов
- Интеграцию с существующим кодом
- Написание тестов для паттерна
Понимание Transactional Outbox показывает, что вы можете проектировать надежные распределенные системы. Умение гарантировать доставку сообщений без потерь и дубликатов — ключевой навык для backend-разработчика.
Transactional Outbox — критически важный паттерн для надежных распределенных систем. Вот ключевые аспекты.
Почему паттерн так важен?
- Гарантирует доставку сообщений при работе с БД
- Решает проблему двойного списания
- Обеспечивает консистентность данных
- Критичен для микросервисной архитектуры
Основные компоненты паттерна:
1. Принцип работы
Сохранение сообщений в той же транзакции, что и бизнес-данные
Отправка сообщений после коммита транзакции
Гарантия exactly-once доставки
Отслеживание статуса отправки
2. Реализация в БД
Отдельная таблица для исходящих сообщений
Использование транзакций БД
Индексы для эффективной выборки
Очистка обработанных сообщений
3. Процесс отправки
Фоновая горутина для отправки
Периодический опрос таблицы
Обработка дубликатов и повторов
Управление таймаутами и ошибками
4. Гарантии доставки
Идемпотентность обработки на стороне получателя
Подтверждение доставки
Dead letter queue для проблемных сообщений
Мониторинг задержек и ошибок
5. Интеграция с Go
Использование context для отмены
Транзакции на уровне репозитория
Интеграция с брокерами (Kafka, RabbitMQ)
Graceful shutdown обработчика
Что практиковать:
- Реализацию таблицы исходящих сообщений
- Написание фонового обработчика
- Обработку ошибок и повторов
- Интеграцию с существующим кодом
- Написание тестов для паттерна
Понимание Transactional Outbox показывает, что вы можете проектировать надежные распределенные системы. Умение гарантировать доставку сообщений без потерь и дубликатов — ключевой навык для backend-разработчика.
🔥3👍1😁1
#Собес #golang
🤔 Что такое строковые литералы?
💬 Кратко:
Строковые литералы в Go - это текстовые данные, представленные в виде последовательности символов. Они бывают двух типов: интерпретированные (в двойных кавычках) и необработанные (в косых кавычках), причем последние сохраняют форматирование текста, включая переносы строк.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Строковые литералы в Go - это текстовые данные, представленные в виде последовательности символов. Они бывают двух типов: интерпретированные (в двойных кавычках) и необработанные (в косых кавычках), причем последние сохраняют форматирование текста, включая переносы строк.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
#полезное
👋 «Memory Allocation in Go»
В этой статье подробно разберём аллокатор памяти в Go. Посмотрим на его основные компоненты, на то, как они взаимодействуют при обслуживании аллокаций разного размера, а также как вместе с объектами в куче управляются стеки
👉 Новости 👉 База вопросов
В этой статье подробно разберём аллокатор памяти в Go. Посмотрим на его основные компоненты, на то, как они взаимодействуют при обслуживании аллокаций разного размера, а также как вместе с объектами в куче управляются стеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Wireshark на Go для ваших Docker-контейнеров. Позволяет разработчикам видеть все входящие и исходящие запросы на их бэкенд-сервере, чтобы быстрее решать проблемы в продакшене
GitHub: subtrace
👉 Новости 👉 База вопросов
GitHub: subtrace
Please open Telegram to view this post
VIEW IN TELEGRAM
SSH-туннели без лишней боли: поднимай и мониторь SSH-туннели из одного YAML-конфига, используя текущую настройку OpenSSH
GitHub: tunn
👉 Новости 👉 База вопросов
GitHub: tunn
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from YeaHub
🚀 Прокачиваем подготовку к собеседованиям на максимум!
Если ты ещё не заглядывал(а) в👍 «Авось Прорвёмся» — самое время.
Это проект Ани для самостоятельной подготовки, где есть:
- 1000+ записей реальных собеседований с разбором задач и вопросов;
- контакты рекрутеров;
- гайды по резюме, трудоустройству и стратегиям поиска работы.
- задачи и вопросы с собеседований
Мы в YeaHub продолжаем добавлять собеседования из этих чатов — теперь их можно проходить в тренажёре, тренируя ответы на реальные вопросы работодателей.
🎧 Сначала слушай, как проходят настоящие собесы,
💡 потом — разбирай и практикуй те же кейсы в тренажёре.
Направления: iOS, Android, Frontend, Python, Go, Java, C#, QA, Analytics.
👉 Обучайтесь, общайтесь, растите вместе с YeaHub и Авось Прорвемся
Если ты ещё не заглядывал(а) в
Это проект Ани для самостоятельной подготовки, где есть:
- 1000+ записей реальных собеседований с разбором задач и вопросов;
- контакты рекрутеров;
- гайды по резюме, трудоустройству и стратегиям поиска работы.
- задачи и вопросы с собеседований
Мы в YeaHub продолжаем добавлять собеседования из этих чатов — теперь их можно проходить в тренажёре, тренируя ответы на реальные вопросы работодателей.
🎧 Сначала слушай, как проходят настоящие собесы,
💡 потом — разбирай и практикуй те же кейсы в тренажёре.
Направления: iOS, Android, Frontend, Python, Go, Java, C#, QA, Analytics.
👉 Обучайтесь, общайтесь, растите вместе с YeaHub и Авось Прорвемся
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥3
#Собес #kubernetes
🤔 Каковы лучшие практики безопасности Kubernetes-кластера?
💬 Кратко:
Для обеспечения безопасности в Kubernetes следует:
- Ограничить доступ с помощью RBAC.
- Использовать NetworkPolicy для контроля сетевого трафика.
- Защитить API-сервер и внутренние компоненты от несанкционированного
доступа.
- Настроить безопасное соединение между узлами.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Для обеспечения безопасности в Kubernetes следует:
- Ограничить доступ с помощью RBAC.
- Использовать NetworkPolicy для контроля сетевого трафика.
- Защитить API-сервер и внутренние компоненты от несанкционированного
доступа.
- Настроить безопасное соединение между узлами.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
❤2
#полезное
😬 Библиотека Go для создания таблиц с форматированным текстом в ASCII, Unicode, Markdown, HTML и раскрашенных терминалах. Отлично подходит для CLI-утилит, логов и веб-приложений.
GitHub: tablewriter
👉 Новости 👉 База вопросов
GitHub: tablewriter
Please open Telegram to view this post
VIEW IN TELEGRAM
Контекст в Go: что нужно знать для собеседования
Контекст — один из фундаментальных типов в Go. Вот ключевые аспекты для понимания.
Почему контекст так важен?
- Стандартизированный способ передачи метаданных
- Управление временем жизни запросов
- Координирование работы горутин
- Обязателен для использования в большинстве библиотек
Основные аспекты контекста:
1. Базовые операции
Создание фонового контекста
Наследование и создание дочерних контекстов
Передача значений между горутинами
Отмена выполнения операций
2. Виды контекстов
Background для корневых операций
TODO для временных решений
WithCancel для ручного управления
WithTimeout и WithDeadline для временных ограничений
WithValue для передачи метаданных
3. Практическое применение
HTTP запросы и серверы
Базы данных и внешние API
Долгие вычисления
Параллельная обработка
4. Распространенные ошибки
Использование контекста для передачи обязательных параметров
Неправильное время жизни контекста
Утечки горутин из-за неотслеживания отмены
Чрезмерное использование WithValue
5. Паттерны использования
Передача контекста как первого аргумента
Прослушивание Done канала
Обработка дедлайнов в цепочке вызовов
Правильное завершение работы
Что практиковать:
- Реализацию HTTP middleware с контекстом
- Создание сервиса с graceful shutdown
- Обработку таймаутов в цепочке вызовов
- Передачу данных через контекст
- Написание тестов для отменяемых операций
Понимание контекста показывает, что вы умеете писать корректный concurrent код. Умение правильно управлять временем жизни операций и координировать горутины — обязательный навык для профессионального Go-разработчика.
Контекст — один из фундаментальных типов в Go. Вот ключевые аспекты для понимания.
Почему контекст так важен?
- Стандартизированный способ передачи метаданных
- Управление временем жизни запросов
- Координирование работы горутин
- Обязателен для использования в большинстве библиотек
Основные аспекты контекста:
1. Базовые операции
Создание фонового контекста
Наследование и создание дочерних контекстов
Передача значений между горутинами
Отмена выполнения операций
2. Виды контекстов
Background для корневых операций
TODO для временных решений
WithCancel для ручного управления
WithTimeout и WithDeadline для временных ограничений
WithValue для передачи метаданных
3. Практическое применение
HTTP запросы и серверы
Базы данных и внешние API
Долгие вычисления
Параллельная обработка
4. Распространенные ошибки
Использование контекста для передачи обязательных параметров
Неправильное время жизни контекста
Утечки горутин из-за неотслеживания отмены
Чрезмерное использование WithValue
5. Паттерны использования
Передача контекста как первого аргумента
Прослушивание Done канала
Обработка дедлайнов в цепочке вызовов
Правильное завершение работы
Что практиковать:
- Реализацию HTTP middleware с контекстом
- Создание сервиса с graceful shutdown
- Обработку таймаутов в цепочке вызовов
- Передачу данных через контекст
- Написание тестов для отменяемых операций
Понимание контекста показывает, что вы умеете писать корректный concurrent код. Умение правильно управлять временем жизни операций и координировать горутины — обязательный навык для профессионального Go-разработчика.
🤔3🔥2❤1👍1
#Собес #golang
🤔 Какие типы данных используются в Go?
💬 Кратко:
Go поддерживает широкий спектр типов данных, включая числовые (целые и с плавающей запятой), строковые, булевы, массивы, срезы, структуры, карты, указатели, интерфейсы и каналы. Это позволяет эффективно решать разнообразные задачи, используя строгую типизацию.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Go поддерживает широкий спектр типов данных, включая числовые (целые и с плавающей запятой), строковые, булевы, массивы, срезы, структуры, карты, указатели, интерфейсы и каналы. Это позволяет эффективно решать разнообразные задачи, используя строгую типизацию.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
#полезное
🤯 Хотели ли вы когда-нибудь одновременно сохранить вывод команды и при этом стримить его в stdout/err текущего процесса в Go?
Для этого идеально подходит утилита
Подробнее о приёме тут
👉 Новости 👉 База вопросов
Для этого идеально подходит утилита
io.MultiWriter()! Очень полезная штука для CLI и системного программирования.Подробнее о приёме тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Техническое собеседование. Лето 2025. Вилка 290к+ Проект: система для операторов связи. Опыт в резюме - 3.5 года. Было много вопросов по: Go, concurrency, Kafka и RabbitMQ, сетевым протоколам, базам данных, профилированию и управлению памятью.
Вопросы:
- Какие сложности бывают при интеграции с Kafka?
- Какие протоколы прикладного уровня вы знаете и использовали?
- Что такое профилирование и как его использовать в Go?
- Как обрабатываются ошибки и паники в Go?
Все вопросы можно посмотреть на нашей платформе
#собес #коллекции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #golang
🤔 Что такое замыкания функций в контексте Go?
💬 Кратко:
Замыкание функции - это функция, которая захватывает и использует переменные из окружающего контекста. Эти функции могут сохранять состояние между вызовами.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Замыкание функции - это функция, которая захватывает и использует переменные из окружающего контекста. Эти функции могут сохранять состояние между вызовами.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Архитектурный паттерн для централизованной обработки ошибок в хендлерах на Go
Статья предлагает архитектурный паттерн для централизованной обработки ошибок в HTTP-хендлерах на Go: вводится кастомный тип HTTPError и обёртка (middleware), которая перехватывает ошибки, логирует их и унифицированно формирует HTTP-ответы
Читайте здесь
👉 Новости 👉 База вопросов
Статья предлагает архитектурный паттерн для централизованной обработки ошибок в HTTP-хендлерах на Go: вводится кастомный тип HTTPError и обёртка (middleware), которая перехватывает ошибки, логирует их и унифицированно формирует HTTP-ответы
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
🥄 Redis 101: взгляд новичка
Вводный обзор того, что такое Redis, почему он так быстр (за счёт работы в памяти, однопоточного исполнения и оптимальных структур данных) и как его можно использовать не только как кэш, но и как базу данных, брокер сообщений и rate-лимитер
https://mrinalxdev.github.io/mrinalxblogs/blogs/redis.html
👉 Новости 👉 База вопросов
Вводный обзор того, что такое Redis, почему он так быстр (за счёт работы в памяти, однопоточного исполнения и оптимальных структур данных) и как его можно использовать не только как кэш, но и как базу данных, брокер сообщений и rate-лимитер
https://mrinalxdev.github.io/mrinalxblogs/blogs/redis.html
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
#Собес #closure #function #scope
🤔 Что такое замыкания функций в контексте Go?
💬 Кратко:
Замыкание функции — это функция, которая захватывает и использует переменные из окружающего контекста. Эти функции могут сохранять состояние между вызовами.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое замыкания функций в контексте Go?
💬 Кратко:
Замыкание функции — это функция, которая захватывает и использует переменные из окружающего контекста. Эти функции могут сохранять состояние между вызовами.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#видео
🛞 Пошаговый разбор реверс-инжиниринга Golang! Задачу решаем тремя разными подходами: (1) статический анализ в IDA, (2) динамический анализ в дебаггере и (3) патчинг бинарника с переключением на нужный путь выполнения кода
YouTube
👉 Новости 👉 База вопросов
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
Интерфейсы в Go: что нужно знать для собеседования
Интерфейсы — фундаментальная концепция Go. Вот что нужно понимать для успешного собеседования.
Почему интерфейсы важны в Go?
- Обеспечивают полиморфизм без наследования
- Позволяют писать тестируемый код
- Уменьшают связанность компонентов
- Являются основой многих стандартных библиотек
Ключевые аспекты интерфейсов:
1. Базовые принципы
Неявная реализация интерфейсов
Композиция интерфейсов
Пустой interface{} и его применение
Утверждение типа (type assertion)
2. Практическое применение
Dependency Injection
Мокирование в тестах
Плагинная архитектура
Абстракция над различными реализациями
3. Стандартные интерфейсы
io.Reader и io.Writer
error interface
Stringer и fmt.Stringer
sort.Interface
4. Производительность
Динамическая диспетчеризация методов
Использование указателей и значений
Влияние на аллокации памяти
Оптимизации компилятора
5. Паттерны проектирования
Strategy через интерфейсы
Decorator для добавления функциональности
Adapter для совместимости
Factory для создания объектов
Что практиковать:
- Написание кастомных интерфейсов
- Создание моков для тестирования
- Реализация стандартных интерфейсов
- Использование type switches
- Оптимизацию производительности
Выводы:
Понимание интерфейсов показывает, что вы можете проектировать гибкие и поддерживаемые системы. Умение правильно применять интерфейсы отличает опытного Go-разработчика от новичка.
Интерфейсы — фундаментальная концепция Go. Вот что нужно понимать для успешного собеседования.
Почему интерфейсы важны в Go?
- Обеспечивают полиморфизм без наследования
- Позволяют писать тестируемый код
- Уменьшают связанность компонентов
- Являются основой многих стандартных библиотек
Ключевые аспекты интерфейсов:
1. Базовые принципы
Неявная реализация интерфейсов
Композиция интерфейсов
Пустой interface{} и его применение
Утверждение типа (type assertion)
2. Практическое применение
Dependency Injection
Мокирование в тестах
Плагинная архитектура
Абстракция над различными реализациями
3. Стандартные интерфейсы
io.Reader и io.Writer
error interface
Stringer и fmt.Stringer
sort.Interface
4. Производительность
Динамическая диспетчеризация методов
Использование указателей и значений
Влияние на аллокации памяти
Оптимизации компилятора
5. Паттерны проектирования
Strategy через интерфейсы
Decorator для добавления функциональности
Adapter для совместимости
Factory для создания объектов
Что практиковать:
- Написание кастомных интерфейсов
- Создание моков для тестирования
- Реализация стандартных интерфейсов
- Использование type switches
- Оптимизацию производительности
Выводы:
Понимание интерфейсов показывает, что вы можете проектировать гибкие и поддерживаемые системы. Умение правильно применять интерфейсы отличает опытного Go-разработчика от новичка.
❤2👍2🔥1