Golang вопросы собеседований
15K subscribers
854 photos
21 videos
1 file
634 links
@notxxx1 - админ

@Golang_google - Golang для разработчиков

@itchannels_telegram - 🔥лучшие из ит

@golangl - chat

@golangtests - golang tests

@golang_jobsgo - go chat jobs

@ai_machinelearning_big_data - AI

@data_analysis_ml

РКН: clck.ru/3FmtKd
Download Telegram
👣 Fenwick Tree на Go: всё держится на одном битовом трюке

Fenwick Tree, или Binary Indexed Tree, считает prefix sums за O(log n).

Главная операция:


i & -i


Она находит младший установленный бит числа.

Именно это значение показывает, на сколько нужно прыгнуть по индексам внутри дерева.

Пример:


i = 12 // 1100
i & -i = 4 // 0100


В Go реализация выглядит так:


package main

type Fenwick struct {
tree []int
}

func NewFenwick(n int) *Fenwick {
return &Fenwick{
tree: make([]int, n+1),
}
}

func (f *Fenwick) Update(i, delta int) {
for i < len(f.tree) {
f.tree[i] += delta
i += i & -i
}
}

func (f *Fenwick) Query(i int) int {
sum := 0

for i > 0 {
sum += f.tree[i]
i -= i & -i
}

return sum
}


Как это работает:

* Update идёт вверх по структуре и обновляет все узлы, которые отвечают за индекс
* Query идёт вниз и собирает блоки, из которых состоит prefix sum
* i & -i каждый раз выбирает размер текущего блока

Главный нюанс: Fenwick Tree обычно использует 1-based indexing.

То есть первый элемент имеет индекс 1, а не 0.

Пример использования:


fw := NewFenwick(5)

fw.Update(1, 10)
fw.Update(2, 20)
fw.Update(3, 30)

println(fw.Query(3)) // 60


Красота Fenwick Tree в том, что дерево не хранится явно.

Нет указателей.
Нет рекурсии.
Нет сложной структуры узлов.

Только массив и один битовый трюк.

Дерево спрятано прямо внутри двоичного представления индексов.
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥6👍5
Open-source мониторинг без SaaS-привязки

CheckCle выглядит как интересная self-hosted альтернатива для мониторинга инфраструктуры, сервисов и приложений.

Проект даёт uptime-мониторинг, проверки HTTP, DNS, Ping и TCP-сервисов, распределённые региональные проверки, историю инцидентов, SSL и domain monitoring, public status pages, отчёты и алерты в Telegram, Slack, Discord, Matrix и email.

Главный плюс в том, что всё можно поднять у себя через Docker. Не нужен внешний SaaS, не нужно отдавать данные третьей стороне, не нужно платить за каждый монитор или сидеть в чужой панели.

По стеку тоже интересно: основа на Go, фронт на TypeScript, лицензия MIT. На GitHub у проекта уже около 2.7k звёзд, так что это не просто заброшенная утилита на вечер.

Подойдёт тем, кто хочет свой мини-UptimeRobot/Better Stack для VPS, pet-проектов, внутренних сервисов или небольшой команды.

Репозиторий: https://github.com/operacle/checkcle
🔥4👍31❤‍🔥1🥱1
GoPost - нативный API-клиент на Go + React через Wails, без Electron, аккаунтов и лишнего облака.

Главное:

1. около 15 МБ
2. работает офлайн
3. хранит всё plain JSON-файлами
4. можно версионировать коллекции в Git
5. есть GraphQL, WebSocket, SSE
6. импорт/экспорт .http
7. CLI-runner с JUnit для CI
8. response diff и extract переменных через JSONPath

По сути, это Postman для тех, кому нужен быстрый локальный инструмент без блоата и телеметрии.

GitHub: github.com/berksunduri/GOPost
👍2🥴1
👣 MapStore для Go

Локальная map-база поверх файловой системы.

По сути, это способ хранить map[string]any на диске, но не руками через хаотичные JSON-файлы, а через нормальный слой с кодеками, событиями и безопасной записью.

Что есть:

• JSON или кастомные форматы
• atomic file writes
• optimistic concurrency
• directory store с партиционированием
• optional encryption через OS keyring
• optional full-text search через SQLite FTS5
• pure Go, без cgo, Linux/macOS/Windows

go get github.com/flexigpt/mapstore-go

https://github.com/flexigpt/mapstore-go
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2👍1🥴1
🐷 Pumba: инструмент, который специально ломает контейнеры

Pumba нужен для chaos testing на уровне контейнеров.

Он работает с Docker, containerd и Podman и помогает проверить, как сервис ведёт себя при реальных сбоях:

• контейнер упал
• сеть начала лагать
• часть пакетов теряется
• CPU забит
• память под давлением
• I/O тормозит

Что умеет Pumba:

kill, stop, pause, rm, restart для контейнеров
• сетевые задержки через netem delay
• потерю пакетов через netem loss и iptables loss
• ограничение скорости сети
• дублирование и повреждение пакетов
• стресс CPU, памяти и I/O через stress-ng
• выбор контейнеров по имени, regex, labels или случайно
• запуск хаоса по расписанию через --interval

Пример:


pumba --interval=30s --random kill "re2:^test"


https://github.com/alexei-led/pumba
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🥰1
Limen — модульная auth-библиотека для Go с подходом plugin-first.

Ядро даёт базовые интерфейсы, сессии и security primitives, а каждый способ аутентификации поставляется как отдельный Go-модуль.

То есть в проект можно импортировать только то, что реально нужно, без лишнего балласта.

Хороший подход для Go-сервисов, где auth хочется собирать как конструктор: минимальное ядро, отдельные провайдеры и меньше зависимостей в проде.

GitHub: https://github.com/thecodearcher/limen

#golang
8👍2🔥2
TypeScript 7.0 переписали на Go

Microsoft выкатила один из самых важных апдейтов TypeScript за всю историю проекта.

Главное изменение - новый нативный компилятор и tooling на Go.

Что это даёт:

* full builds быстрее в 8–12 раз
* меньше расход памяти
* быстрее отклик IDE
* параллельная обработка parsing, type-checking и emit
* более комфортная работа с большими monorepo

Пример из бенчмарков Microsoft: VS Code собирался 125,7 секунды на TypeScript 6.0 и 10,6 секунды на TypeScript 7.0.

Это не релиз про новый синтаксис.

Это релиз про скорость, масштабирование и нормальную работу TypeScript на больших кодовых базах.


https://linuxiac.com/typescript-7-0-rewrites-the-compiler-in-go-for-up-to-12x-faster-builds/
🔥29❤‍🔥1🥰1
Любопытная идея: протоколы, которые легко блокируются напрямую, можно сделать гораздо живучее, если запускать их не «голыми», а внутри отдельного туннеля.

Пример - catwire, кастомная виртуальная сеть на Go.

В этом кейсе через неё пробрасывают обычный VLESS без дополнительной маскировки и шифрования на стороне самого VLESS.

Фокус в том, что снаружи виден уже не прикладной протокол, а транспорт виртуальной сети.

Получается простой паттерн:

* VLESS живёт внутри приватного слоя
* внешний трафик идёт через catwire
* туннель берёт на себя сетевую обвязку
* блокировать сам прикладной протокол становится сложнее

Это хороший пример того, что устойчивость часто строится не вокруг одного «волшебного протокола», а вокруг правильной архитектуры: виртуальная сеть сверху, нужные сервисы внутри.

https://github.com/nktauserum/catwire
🔥11👍31
🔍Тестовое собеседование с Go Senior с опытом работы в Яндексе, EPAM и Uzum в этот четверг

16 июля(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика.

Как это будет:
📂 Маруф Караев, Senior в европйской компании, ex-Uzum, ex-Яндекс, ex-EPAM будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Маруф будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Маруфу

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир →
@shortcut_go_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
🔌 k8s-d2 - быстрый способ превратить Kubernetes-кластер в понятную схему

Когда кластер растёт, kubectl get pods уже не помогает понять архитектуру. Видно ресурсы, но не видно систему.

k8s-d2 решает это через диаграммы как код. Инструмент читает топологию Kubernetes-кластера и генерирует D2-файлы: пространства имён, workloads, сервисы, ingress и связи между ними.

Удобно для ревью архитектуры, онбординга, документации и поиска странных зависимостей в кластере.

Особенно полезно в командах, где Kubernetes уже живёт давно, а актуальная схема существует только в голове одного DevOps-а, который “сейчас в отпуске, но вроде всё помнит”.

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

https://github.com/vieitesss/k8s-d2
👍7🔥21
Кто-то разобрал Claude Code почти до винтика

learn-coding-agent - репозиторий для тех, кто хочет понять, как устроены современные coding agents не на уровне промо-страниц, а на уровне архитектуры.

Автор собрал разбор Claude Code по публичным источникам: цикл агента, систему инструментов, разрешения, работу с контекстом, сессии, подпроцессы, MCP, удалённые настройки, телеметрию и скрытые флаги.

Получился не “гайд по использованию”, а карта внутренней логики CLI-агента: как он принимает решение, когда просит разрешение, как вызывает инструменты, как хранит историю и как расширяется через внешние интеграции.

https://github.com/justxor/Claudecourse/
👍10🔥32
Anthropic открыла reference harness для поиска уязвимостей с Claude

Anthropic выложила open-source пример того, как можно строить пайплайн для поиска и исправления уязвимостей с помощью Claude. Репозиторий называется Defending Code Reference Harness и уже собрал около 6.5K звёзд на GitHub.

Внутри — Claude Code skills для полного security-цикла:

* /threat-model
* /vuln-scan
* /triage
* /patch
* /customize

Сначала модель помогает построить threat model, потом сканирует код, помогает отфильтровать находки, ранжирует риски и предлагает патчи.

Отдельно есть автономный harness: он проходит путь recon → find → verify → report → patch и в референсной версии заточен под поиск memory-багов в C/C++ через Docker и ASAN.

GitHub: https://github.com/anthropics/defending-code-reference-harness
🔥3🥱21
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

В IT прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы.

Окружение решает больше, чем кажется.

Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.

AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Хакинг: t.iss.one/linuxkalii
DevOps: t.iss.one/DevOPSitsec
Docker: t.iss.one/DevopsDocker
Golang: t.iss.one/Golang_google
Rust: t.iss.one/rust_code
C++: t.iss.one/cpluspluc
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/java_library
JavaScript: t.iss.one/javascriptv
React: t.iss.one/react_tg
Frontend: t.iss.one/front
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Базы данных: t.iss.one/sqlhub
Data Science: t.iss.one/data_analysis_ml
Big Data: t.iss.one/bigdatai
Математика: t.iss.one/data_math
Физика: t.iss.one/fizmat
Kubernetes: t.iss.one/kubernetc
GameDev: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg

Собеседования и карьера:

DS собеседования: t.iss.one/machinelearning_interview
Python собеседования: t.iss.one/python_job_interview

Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.iss.one/memes_prog
Английский для программистов: t.iss.one/english_forprogrammers
ИИ и технологии: t.iss.one/vistehno
954 ГБ open-source курсов: @courses
ИТ-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy

Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg

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

Пока кто-то листает шум, ты будешь видеть инструменты, задачи и идеи, которые помогают расти в профессии.
2👍2🔥1
MinLZ научился искать внутри сжатых данных без полного распаковывания

В релизе MinLZ v1.2.0 появилась очень полезная фича: поиск byte sequences прямо по сжатому потоку. Обычно, чтобы найти строку в архиве или логе, нужно сначала распаковать всё. MinLZ делает иначе: добавляет небольшой search index по блокам и распаковывает только те блоки, где совпадение вообще возможно.

Как это работает:

* каждый блок получает маленькую bloom-filter таблицу
* при поиске MinLZ быстро проверяет, может ли паттерн быть в блоке
* если точно не может — блок пропускается
* если может — только тогда блок декодируется и сканируется

Индекс можно встроить при сжатии или собрать потом как sidecar-файл, не трогая исходные сжатые данные. Старые MinLZ-ридеры такие chunks просто игнорируют, так что совместимость сохраняется.

Самый красивый пример из релиза: поиск строки в 10 GB CockroachDB log, сжатом до 578 MB, занял 0.14 секунды через mz search. Обычный путь через decompression + grep занимал около 5 секунд, а lz4 -dc | grep — около 10 секунд.

Но это не магия для всего подряд.

MinLZ особенно хорош, когда нужно искать редкие literal byte strings: ID, error codes, request paths, hostnames, JSON keys, hashes. Для regex, fuzzy search, case-insensitive поиска или очень частых паттернов выигрыш может исчезнуть.

Доступно как CLI и как Go API.

GitHub: https://github.com/minio/minlz/releases/tag/v1.2.0
👍4🔥3🥰3❤‍🔥1
В Go всего 18 встроенных функций — и половину из них многие почти не трогают

С Go 1.21 их стало 18: добавились min, max и clear.

Чаще всего в реальном коде крутятся старые рабочие лошадки:

* make
* append
* len
* cap
* copy
* delete
* close

complex, real, imag нужны далеко не всем.
print и println вообще лучше не тащить в нормальный код — для этого есть fmt, log и нормальные инструменты отладки.

Самое интересное, что Go держит язык маленьким: встроенных функций мало, но почти каждая решает конкретную базовую задачу.

А какие built-in функции вы реально используете чаще всего?
12👍7🔥5
Каждый год в середине лета мы с друзьями собираемся на E-CODE. Ещё относительно молодая конфа Ozon Tech стала уже своего рода легендой. Не удивительно: хардовость официальной части здесь не уступает громкости афтерпати.

На E-CODE 2026 нас по части бэкэнда ждут:

• Runtime Async с его + и –
• трассировка с eBPF
• ускорение на SIMD
• построение кастомной real-time системы видеоаналитики
• сравнительный анализ алгоритмов сборки мусора

Фишка этого года — брейнринг разработчиков и ИИ. Эксперты разберут сложные кейсы и сравнят свои подходы с тем, что предложит машина. Победителя выберет зал.

Регистрируйтесь сейчас, чтобы услышать это всё вживую: https://ecode.ozon.tech/

12 и 13 сентября, Москва. До встречи на E-CODE!
2🤩2🔥1
https://github.com/inspektor-gadget/inspektor-gadget## Inspektor Gadget: eBPF для отладки Kubernetes и Linux

Inspektor Gadget — open-source набор инструментов для диагностики через eBPF.

Умеет:

- отслеживать процессы, файлы, сеть и syscalls;
- связывать kernel-события с pod и контейнерами;
- работать через kubectl gadget и CLI ig;
- запускать eBPF-гаджеты из OCI images;
- экспортировать данные в observability-системы.

Пример:


kubectl gadget run trace_open:latest


Покажет, какие файлы открывают процессы внутри кластера.

Полезно для SRE и Kubernetes-инженеров, когда логов и метрик уже недостаточно и нужно посмотреть, что происходит прямо на уровне ядра Linux.

https://github.com/inspektor-gadget/inspektor-gadget
🔥32👍1
This media is not supported in your browser
VIEW IN TELEGRAM
IRIS - open-source автодополнение на Go, которое рисует меню подсказок прямо внутри TTY.

Инструмент индексирует историю команд и aliases, после чего предлагает подходящие команды в реальном времени. Работает на Linux и macOS, включая SSH, Tmux и обычные виртуальные терминалы.

Внутри - один нативный Go-бинарник:

https://github.com/versenilvis/iris
👍15🔥53
Go-приём: как не получить 99% после округления

При независимом округлении процентов итоговая сумма может перестать быть равной 100.


33.3 → 33
33.3 → 33
33.4 → 33

Итого: 99%


Для простого интерфейса можно округлить первые значения, а последнему передать остаток:


package main

import "math"

func balancePercentages(values []float64) []int {
if len(values) == 0 {
return nil
}

result := make([]int, len(values))
used := 0

for i := 0; i < len(values)-1; i++ {
result[i] = int(math.Round(values[i]))
used += result[i]
}

result[len(values)-1] = 100 - used

return result
}


Результат:


[]int{33, 33, 34}


Сумма останется равной 100.

Но это быстрый приём, а не универсальный алгоритм:

- значения должны быть заранее нормализованы;
- вся погрешность достаётся последнему элементу;
- результат зависит от порядка;
- при некорректных данных последнее значение может стать отрицательным.

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

Код актуален для современной Go 1.26 и работает без изменений. Функция math.Round доступна начиная с Go 1.10.
6🔥5👍2
⚡️ Одна из недооценённых сильных сторон Go - криптография в стандартной библиотеке.

Хороший пример - SHA-256.

Снаружи разработчик видит обычный crypto/sha256, но внутри Go умеет выбирать оптимальную реализацию под конкретный CPU.

На arm64 логика примерно такая:


if useSHA2 {
blockSHA2(dig, p)
} else {
blockGeneric(dig, p)
}


Если процессор поддерживает SHA-2 instructions - используется платформенно-оптимизированный код. Если нет - generic fallback.

В этом и сила стандартной библиотеки Go: простой API скрывает CPU feature detection, assembly и архитектурные оптимизации.


sha256.Sum256(data) выглядит простенько.

Но под капотом там очень серьёзная инженерия.
11🔥7👍4