«System Design — как темный лес. Go — вроде бы знаю, но знания поверхностные. А собеседование снова провавил на задаче по concurrency»
Знакомо?
Даже у разработчиков с 2-5 годами опыта остаются такие пробелы, которые мешают чувствовать уверенность:
– знаю много паттернов и приемов, но не знаю где и когда их применять;
– на System Design интервью не получается спроектировать систему за час;
– кажется, что понимаю Go, но только до тех пор, пока не столкнусь с задачами на собеседованиях.
🎓 В телеграм-канале Балун Владимир есть материалы, которые помогают прокачать Go и подготовиться к собеседованиям — без воды и пересказов статей из интернета.
1️⃣ Технические разборы:
– Итераторы в Golang
– Паттерны использования каналов в Go
– Внутреннее устройство аллокатора Go
– Внутреннее устройство мьютексов в Go и Linux
2️⃣ Подготовка к собеседованиям:
– Concurrency задачи с Go собеседований
– Решение сложных задач с Go собеседований
– Как подготовиться к System Design интервью
3️⃣ Карьера и опыт:
– Особенности Golang
– Карьера программиста в BigTech
– Путь от джуна до тимлида Яндекса
Если хочется разобраться в Go глубже, научиться объяснять сложные вещи и уверенно проходить собеседования — канал точно пригодится.
Автор канала - Владимир Балун. Разрабатывал высоконагруженные сервисы на С++ и Go в Тинькофф, Mail.ru и Ozon. Руководил командой распределенной трассировки запросов в Яндексе (11GB/s трафик) и провел больше ста технических интервью в разных компаниях. Сейчас создает образовательные проекты и делится опытом в телеграме.
Канал открыт. Без флуда. Только польза.
➡️ Подписаться
Реклама. ИП БАЛУН В.Н., ОГРН 322619600034193 erid: 2VtzqwCaW1e
Знакомо?
Даже у разработчиков с 2-5 годами опыта остаются такие пробелы, которые мешают чувствовать уверенность:
– знаю много паттернов и приемов, но не знаю где и когда их применять;
– на System Design интервью не получается спроектировать систему за час;
– кажется, что понимаю Go, но только до тех пор, пока не столкнусь с задачами на собеседованиях.
– Итераторы в Golang
– Паттерны использования каналов в Go
– Внутреннее устройство аллокатора Go
– Внутреннее устройство мьютексов в Go и Linux
– Concurrency задачи с Go собеседований
– Решение сложных задач с Go собеседований
– Как подготовиться к System Design интервью
– Особенности Golang
– Карьера программиста в BigTech
– Путь от джуна до тимлида Яндекса
Если хочется разобраться в Go глубже, научиться объяснять сложные вещи и уверенно проходить собеседования — канал точно пригодится.
Автор канала - Владимир Балун. Разрабатывал высоконагруженные сервисы на С++ и Go в Тинькофф, Mail.ru и Ozon. Руководил командой распределенной трассировки запросов в Яндексе (11GB/s трафик) и провел больше ста технических интервью в разных компаниях. Сейчас создает образовательные проекты и делится опытом в телеграме.
Канал открыт. Без флуда. Только польза.
Реклама. ИП БАЛУН В.Н., ОГРН 322619600034193 erid: 2VtzqwCaW1e
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤1👍1
Написание идиоматичных CLI на Go
Мы рассмотрим основы пакета flag в Go, создание собственных типов флагов и настройку автоматической генерации справки, чтобы сделать наш CLI более удобным для использования.
В качестве примера в этой статье мы будем ссылаться на приложение для проверки доступности (health check), которое принимает набор URL-адресов и проверяет их на доступность. Детали реализации будут оставлены читателю (так как они не являются основной темой этого поста).
https://www.bytesizego.com/blog/idiomatic-go-cli
👉 @golang_lib
Мы рассмотрим основы пакета flag в Go, создание собственных типов флагов и настройку автоматической генерации справки, чтобы сделать наш CLI более удобным для использования.
В качестве примера в этой статье мы будем ссылаться на приложение для проверки доступности (health check), которое принимает набор URL-адресов и проверяет их на доступность. Детали реализации будут оставлены читателю (так как они не являются основной темой этого поста).
https://www.bytesizego.com/blog/idiomatic-go-cli
👉 @golang_lib
👍2
Как работают массивы в Go и почему с ними бывает непросто при использовании for-range
Классические массивы и срезы в Go на первый взгляд довольно просты. Массивы имеют фиксированный размер, а срезы — динамические. Но скажу честно: Go может казаться простым только на поверхности — под капотом там происходит гораздо больше, чем кажется.
Как обычно, начнём с основ, а затем копнём чуть глубже. Не переживайте, массивы становятся куда интереснее, если взглянуть на них под разными углами.
Что такое массив?
Массивы в Go очень похожи на массивы в других языках программирования. Они имеют фиксированный размер и хранят элементы одного типа в смежных (непрерывных) ячейках памяти.
Это значит, что Go может быстро получать доступ к каждому элементу, так как их адреса вычисляются на основе начального адреса массива и индекса элемента.
https://victoriametrics.com/blog/go-array/
👉 @golang_lib
Классические массивы и срезы в Go на первый взгляд довольно просты. Массивы имеют фиксированный размер, а срезы — динамические. Но скажу честно: Go может казаться простым только на поверхности — под капотом там происходит гораздо больше, чем кажется.
Как обычно, начнём с основ, а затем копнём чуть глубже. Не переживайте, массивы становятся куда интереснее, если взглянуть на них под разными углами.
Что такое массив?
Массивы в Go очень похожи на массивы в других языках программирования. Они имеют фиксированный размер и хранят элементы одного типа в смежных (непрерывных) ячейках памяти.
Это значит, что Go может быстро получать доступ к каждому элементу, так как их адреса вычисляются на основе начального адреса массива и индекса элемента.
https://victoriametrics.com/blog/go-array/
👉 @golang_lib
👍2
FUSE + Go: ковка собственной виртуальной файловой системы на блочном устройстве
В этой статье подробно разбирается создание пользовательской файловой системы с помощью FUSE и языка Go. На реальном примере мы пройдём путь от установки окружения до реализации чтения, записи, метаданных и параллельного доступа. В процессе встретятся живые комментарии, личные наблюдения и советы, которые помогут избежать распространённых подводных камней.
Введение
Давно хотел понять, как сделать “файловую систему в файле” или на блочном устройстве, чтобы потом подключить её к любому Linux-серверу. Оказалось, что комбинация FUSE и Go — отличный вариант для быстрой прототипировки без костылей на C. В этой статье я расскажу о своём опыте, забавных факапах и главных открытиях на пути к рабочей системе.
https://habr.com/ru/articles/933658/
👉 @golang_lib
В этой статье подробно разбирается создание пользовательской файловой системы с помощью FUSE и языка Go. На реальном примере мы пройдём путь от установки окружения до реализации чтения, записи, метаданных и параллельного доступа. В процессе встретятся живые комментарии, личные наблюдения и советы, которые помогут избежать распространённых подводных камней.
Введение
Давно хотел понять, как сделать “файловую систему в файле” или на блочном устройстве, чтобы потом подключить её к любому Linux-серверу. Оказалось, что комбинация FUSE и Go — отличный вариант для быстрой прототипировки без костылей на C. В этой статье я расскажу о своём опыте, забавных факапах и главных открытиях на пути к рабочей системе.
https://habr.com/ru/articles/933658/
👉 @golang_lib
👍2
Go: жарим общие данные. Атомно, быстро и без мьютексов
Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику.
Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделаны на основе внутреннего кода Go с использованием тех же мьютексов из ОС под капотом, а атомарные операции делает сам процессор аппаратно за существенно меньшее количество тактов.
https://habr.com/ru/companies/ruvds/articles/833264/
👉 @golang_lib
Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику.
Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделаны на основе внутреннего кода Go с использованием тех же мьютексов из ОС под капотом, а атомарные операции делает сам процессор аппаратно за существенно меньшее количество тактов.
https://habr.com/ru/companies/ruvds/articles/833264/
👉 @golang_lib
👍2🤣2
🚀 Хотите ускорить обработку во Flutter-приложениях, вынеся тяжёлые задачи на C, Rust или Go?
Приходите на открытый вебинар «Запускаем код C, Rust или Go через FFI» 6 августа в 20:00 МСК. На уроке мы покажем:
- Как написать простую функцию на C, Rust и Go и вызвать её из консольного Dart-приложения.
- Как интегрировать эту же функцию во Flutter-приложение.
- Работу со сторонними библиотеками и нюансы FFI-плагина.
- Примеры Makefile для автоматизации сборки под разные архитектуры.
❗️ Вы научитесь компилировать C/Rust/Go-бинарники, вызывать их из Flutter и создавать скрипты сборки. Всё это — надёжный способ оптимизировать обработку изображений, криптографию и другие ресурсоёмкие операции.
Этот урок проходит в преддверии старта курса «Flutter Mobile Developer» от OTUS. 🔥 Все участники получат записи трех прошлых уроков!
👉 Регистрация открыта: https://vk.cc/cOhkoz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите на открытый вебинар «Запускаем код C, Rust или Go через FFI» 6 августа в 20:00 МСК. На уроке мы покажем:
- Как написать простую функцию на C, Rust и Go и вызвать её из консольного Dart-приложения.
- Как интегрировать эту же функцию во Flutter-приложение.
- Работу со сторонними библиотеками и нюансы FFI-плагина.
- Примеры Makefile для автоматизации сборки под разные архитектуры.
❗️ Вы научитесь компилировать C/Rust/Go-бинарники, вызывать их из Flutter и создавать скрипты сборки. Всё это — надёжный способ оптимизировать обработку изображений, криптографию и другие ресурсоёмкие операции.
Этот урок проходит в преддверии старта курса «Flutter Mobile Developer» от OTUS. 🔥 Все участники получат записи трех прошлых уроков!
👉 Регистрация открыта: https://vk.cc/cOhkoz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Approf
Нативное macOS-приложение для просмотра результатов профилирования pprof, включающее drag/drop, изменение порядка, светлый/темный режим и сохранение сессий.
Возможности
- Поддержка drag-and-drop файла pprof для открытия
- Возможность сравнения pprof-профилей с параметром
- Быстрое добавление, удаление и переупорядочивание файлов
- Тёмный и светлый режимы интерфейса
- Сохранение сессий для последующего использования
Технологии
- SwiftUI и AppKit для UI
- Composable Architecture (TCA) для управления состоянием
- Запуск бинарника pprof в отдельном процессе
https://github.com/moderato-app/approf
👉 @golang_lib
Нативное macOS-приложение для просмотра результатов профилирования pprof, включающее drag/drop, изменение порядка, светлый/темный режим и сохранение сессий.
Возможности
- Поддержка drag-and-drop файла pprof для открытия
- Возможность сравнения pprof-профилей с параметром
-diff_base
- Быстрое добавление, удаление и переупорядочивание файлов
- Тёмный и светлый режимы интерфейса
- Сохранение сессий для последующего использования
Технологии
- SwiftUI и AppKit для UI
- Composable Architecture (TCA) для управления состоянием
- Запуск бинарника pprof в отдельном процессе
https://github.com/moderato-app/approf
👉 @golang_lib
👍1
🔥 Go Maps Explained: Как на самом деле хранятся пары ключ-значение
Go
Ключевые моменты:
Неупорядоченность
Go не гарантирует порядок обхода элементов в
Zero value
Нулевое значение для
Удаление элементов
Удаление производится функцией
Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:
где
Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.
Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют
👉 Читать
👉 @golang_lib
Go
map
— это встроенный тип данных, который реализует хеш-таблицу для хранения пар ключ–значение. В статье рассматриваются важные детали работы map
в Go, которые часто упускают из виду, и даются практические рекомендации по их использованию.Ключевые моменты:
Неупорядоченность
Go не гарантирует порядок обхода элементов в
map
. Если нужен определённый порядок, нужно использовать срез для сортировки ключей перед обходом.Zero value
Нулевое значение для
map
— nil
. Обращение к неинициализированной карте для чтения безопасно и вернёт нулевое значение для типа, но запись в неё приведёт к панике. Создавать карту можно через make()
или литерал.Удаление элементов
Удаление производится функцией
delete(m, key)
. Если ключа нет — операция безопасна, ошибок не будет.Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:
value, ok := m[key]
где
ok
— булево значение, указывающее на наличие ключа.Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.
Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют
sync.Mutex
или sync.Map
.👉 Читать
👉 @golang_lib
👍4
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
👍1🤡1
Stream: 10-недельная онбординг-программа для бэкенд-инженеров на Go
Добро пожаловать в Stream. Если вы читаете публичную версию этого текста, загляните на нашу страницу с вакансиями. Сейчас мы нанимаем специалистов по Go — от начинающего уровня до ведущих инженеров и директоров.
Stream — это API для создания чатов, живого видео и лент активности. Мы обеспечиваем работу тысяч приложений и охватываем более миллиарда конечных пользователей. Такие приложения, как Strava, Nextdoor, IBM, Adobe и Patreon, полагаются на наши технологии.
По мере расширения команды стало очевидно, что отличная программа онбординга крайне важна. Мне всегда казалось немного странным, что у большинства команд по продажам процесс адаптации выстроен отлично, а у инженерных команд - часто нет.
Эта 10-недельная программа онбординга по Go охватывает несколько тем:
- Основы Go и производительность
- Базы данных, масштабирование и Redis. Распространённые шаблоны масштабируемости
- Лучшие практики тестирования
- Ревью, метрики, обработка ошибок и полный жизненный цикл кода
- Raft и WebRTC
Во время этого онбординга мы работаем в группе и берём реальный проект - лучший способ учиться это сочетать теорию с практикой. Добро пожаловать, начнём!
👉 Читать
👉 @golang_lib
Добро пожаловать в Stream. Если вы читаете публичную версию этого текста, загляните на нашу страницу с вакансиями. Сейчас мы нанимаем специалистов по Go — от начинающего уровня до ведущих инженеров и директоров.
Stream — это API для создания чатов, живого видео и лент активности. Мы обеспечиваем работу тысяч приложений и охватываем более миллиарда конечных пользователей. Такие приложения, как Strava, Nextdoor, IBM, Adobe и Patreon, полагаются на наши технологии.
По мере расширения команды стало очевидно, что отличная программа онбординга крайне важна. Мне всегда казалось немного странным, что у большинства команд по продажам процесс адаптации выстроен отлично, а у инженерных команд - часто нет.
Эта 10-недельная программа онбординга по Go охватывает несколько тем:
- Основы Go и производительность
- Базы данных, масштабирование и Redis. Распространённые шаблоны масштабируемости
- Лучшие практики тестирования
- Ревью, метрики, обработка ошибок и полный жизненный цикл кода
- Raft и WebRTC
Во время этого онбординга мы работаем в группе и берём реальный проект - лучший способ учиться это сочетать теорию с практикой. Добро пожаловать, начнём!
👉 Читать
👉 @golang_lib
❤1👍1
Media is too big
VIEW IN TELEGRAM
Doom на Go
Это минималистичный, независимый от платформ порт легендарного движка DOOM на Go, транслированный из кодовой базы doomgeneric.
Никакого CGo. Никаких зависимостей от платформы.
Оригинальный код на C был конвертирован в Go с помощью modernc.org/ccgo/v4 авторства cznic (репозиторий doomgeneric).
После этого он был вручную переработан: удалено множество операций с указателями, код стал более «в духе Go», но при этом сохранил совместимость с оригинальным DOOM и его архитектурой.
https://github.com/AndreRenaud/gore
👉 @golang_lib
Это минималистичный, независимый от платформ порт легендарного движка DOOM на Go, транслированный из кодовой базы doomgeneric.
Никакого CGo. Никаких зависимостей от платформы.
Оригинальный код на C был конвертирован в Go с помощью modernc.org/ccgo/v4 авторства cznic (репозиторий doomgeneric).
После этого он был вручную переработан: удалено множество операций с указателями, код стал более «в духе Go», но при этом сохранил совместимость с оригинальным DOOM и его архитектурой.
https://github.com/AndreRenaud/gore
👉 @golang_lib
👍1😁1