ch
Feedback
Библиотека Go для собеса | вопросы с собеседований

Библиотека Go для собеса | вопросы с собеседований

前往频道在 Telegram

Вопросы с собеседований по Go и ответы на них. Учиться у нас: clc.to/iEeaZw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197

显示更多
7 470
订阅者
-324 小时
-77
+1230
帖子存档
Вам доклады по Go или Java? VK приглашает на митап с двойной начинкой 26 августа VK собирает Go- и Java-инженеров, чтобы прокачать знания. В программе два трека — Go и Java, по три доклада в каждом. Трек Go: • «Компиляция Go в динамическую либу, или как мы ускорили выкатку фичи в два раза, но нам не понравилось», Михаил Кичигин, бэкенд-разработчик, Avito Tech • «Go-платформа VK: как мы построили единую основу для создания Go-сервисов», Александр Апанасенко, руководитель команды SDK Backend, VK • «Почтальон от Kubernetes до Palo Alto. Как осуществляется доставка информации об адресах», Дарья Кулькина, бэкенд-разработчик, Точка Банк Трек Java: • «Перформанс-трюки в поисковой платформе Ozon», Пётр Портнов, ведущий разработчик среднего поиска, Ozon • «Архитектура современного движка платёжной системы и переход к новой архитектуре», Игорь Крикунов, технический лидер разработки DBC, Альфа-Банк • «Переход от федерации S3-кластеров в пользу коммунального и мультитенантного кластера», Кирилл Боблак, ведущий разработчик One-cloud, VK А ещё будет мастер-класс по прокачке навыка, который сделает вас звездой любого вечера, и афтепати, чтобы обсудить доклады в неформальной обстановке. Встречаемся в 17:00, начало в 18:00. Участие бесплатное, регистрация обязательна.

Горутины и каналы: основы параллелизма в Go. Бесплатный урок курса «Go-разработчик. Базовый уровень» Конкурентность — одна из
Горутины и каналы: основы параллелизма в Go. Бесплатный урок курса «Go-разработчик. Базовый уровень» Конкурентность — одна из главных особенностей Go, но именно здесь начинающие разработчики чаще всего сталкиваются с трудноуловимыми ошибками. Неправильная работа с горутинами, каналами или синхронизацией может привести к состояниям гонки, взаимным блокировкам и утечкам ресурсов, которые сложно найти и исправить. На открытом уроке 18 августа в 20:00 разберём, как устроен параллелизм в Go и как безопасно использовать горутины в своих проектах. Поговорим о различиях между горутинами и системными потоками, научимся запускать параллельные задачи, организовывать обмен данными через каналы и применять базовые механизмы синхронизации. Урок будет полезен разработчикам, которые хотят уверенно использовать конкурентность Go в реальных приложениях. 👉 Записаться: https://otus.pw/iA0G/?erid=2W5zFGzTDry Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Объясните разницу между безопасным доступом к байтам строки через срез и использованием unsafe Когда строку преобразуют в срез байтов, создаётся новая копия данных, и доступ к этим данным безопасен, но это также означает, что данные строки не изменяются. unsafe позволяет работать с указателями и памятью напрямую, что даёт больше гибкости, но это также приводит к неопределённому поведению, если использовать эти указатели для изменения данных. 🐸 Библиотека Go для собеса

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

👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется зада
👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science. 🔜 Именно поэтому подписка на обучение многим оказывается удобнее отдельных курсов. Можно спокойно переключаться между темами, когда меняются задачи, а не покупать новую программу каждый раз.
В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков.
Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎 🔗 Узнать подробнее 🏃‍♀️ Proglib Academy

Как создать свою кастомную ошибку в GoПакет errors — самый быстрый способ Подходит для простых статичных ошибок. Такую переменную удобно объявить один раз и сравнивать через errors.Is.
var ErrNotFound = errors.New("запись не найдена")
fmt.Errorf() — когда нужен контекст Позволяет подставить в текст детали. А глагол %w ещё и «оборачивает» исходную ошибку, сохраняя цепочку для errors.Is / errors.Unwrap.
return fmt.Errorf("не удалось загрузить юзера %d: %w", id, ErrNotFound)
• Кастомный тип через struct — максимум гибкости Нужен, когда к ошибке хочется прикрепить данные (код, поле, статус). Достаточно реализовать метод Error() string — и тип становится ошибкой.
type ValidationError struct {
    Field string
    Msg   string
}

func (e *ValidationError) Error() string {
    return fmt.Sprintf("%s: %s", e.Field, e.Msg)
}
Такую ошибку потом можно вытащить через errors.As и прочитать её поля. 🐸 Библиотека Go для собеса

Что делает CGO_ENABLED CGO_ENABLED — это переменная окружения, которая включает или выключает CGo при сборке Go-приложений. Принимает два значения: 1 (включено) и 0 (выключено). CGo — это механизм, позволяющий Go-коду взаимодействовать с C: вызывать C-функции и использовать C-библиотеки прямо из Go-программы. Зачем этим управлять: • CGO_ENABLED=0 даёт полностью статический бинарник без зависимостей от системных C-библиотек — удобно для минимальных Docker-образов (scratch, alpine) и упрощает кросс-компиляцию. • CGO_ENABLED=1 нужен, когда проект реально использует C-код или библиотеки, завязанные на cgo
CGO_ENABLED=0 GOOS=linux go build -o app
Важный нюанс: по умолчанию CGo включён, но при кросс-компиляции (когда GOOS/GOARCH отличаются от хостовых) Go автоматически отключает его, если не задан C-кросс-компилятор. 🐸 Библиотека Go для собеса

🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами Но цель одна: перейти
🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами Но цель одна: перейти от случайных удачных запусков к управляемому процессу на реальном проекте — с понятными правилами, ревью, контролем расходов и безопасности ✔️ На курсе «ИИ для разработчиков» участники выстраивают такой процесс на практике: подключают инструменты, задают границы для агента и учатся понимать, где ему можно доверять работу, а где требуется проверка. ⚡️ Предзапись на осенний поток уже открыта 🏃‍♀️ Proglib Academy

Разработчику нужен стабильный результат, DevOps — контроль инфраструктуры, техлиду — правила для всей команды. Собрали это в одном посте 👇

Что делает переменная окружения GOOS в Go GOOS задаёт целевую операционную систему, под которую компилируется Go-приложение. Она используется при кросс-компиляции — когда код пишется на одной платформе, а собирается под другую (часто в паре с GOARCH, задающей архитектуру процессора).
GOOS=linux GOARCH=amd64 go build
Основные значения GOOS (именно в таком виде, в нижнем регистре): linux windows darwin — macOS (не macos) ios android freebsd openbsd netbsd plan9 Полный актуальный список можно получить командой go tool dist list. 🐸 Библиотека Go для собеса

⚡️ Highload на Go: System Design, Kubernetes и микросервисы под нагрузкой — новый курс на Mentorix Highload глазами Go-инжене
⚡️ Highload на Go: System Design, Kubernetes и микросервисы под нагрузкой — новый курс на Mentorix Highload глазами Go-инженера: как проектировать, писать и эксплуатировать сервисы, которые держат нагрузку. С расчётами и симуляциями, как на реальных собеседованиях. ⚙️ Внутри: перцентили и SLO, конкурентность и профилирование, кэширование, rate limiting, ретраи и circuit breaker, очереди, БД под нагрузкой, Kubernetes, system design 🧩 118 задач с автопроверкой — вся практика на Go 🎓 Сертификат · доступ навсегда ▶️ Часть уроков открыта — начать можно бесплатно 🏷 −50% — скидка действует 24 часа 19 990 ₽9 995 ₽Забрать курс со скидкой ━━━━━━━━━━━━━━ Курс продвинутый — предполагает уверенный Go. Если хотите подтянуть базу, на платформе есть бесплатные курсы: 🧩 Тренажёр Go — 70 задач с автопроверкой ⚡️ Golang — основы языка Сети для разработчиков: TCP/IP, HTTP, DNS 📚 Все бесплатные курсы Mentorix

Как работает пробинг в Swiss Table 1. Считается хеш ключа и делится на две части. На поддерживаемых CPU используется aeshash, иначе — memhash. Полученный хеш разбивается на: H1 (старшие 57 бит) — выбирает стартовую группу; H2 (младшие 7 бит) — «отпечаток» (fingerprint) ключа. 2. Внутри группы контрольные байты проверяются параллельно через SIMD. Каждая группа — это 8 слотов и 8-байтовый control word, где каждый байт хранит H2 своего слота. Одной SIMD-инструкцией H2 искомого ключа сравнивается сразу со всеми 8 байтами → получаем маску кандидатов. Только для совпавших по fingerprint слотов сверяется полный ключ. 3. Если совпадений нет и пустого слота в группе тоже нет — переходим к следующей группе. Пробинг идёт по группам квадратично, но по треугольным числам:
offset = (offset + i) mod size,  i = 1, 2, 3, 4...
→ смещения: h, h+1, h+3, h+6, h+10, ...
Такая последовательность гарантированно обходит всю таблицу (при размере — степени двойки) и снижает кластеризацию. Если встретился пустой слот — ключа в таблице нет, поиск останавливается. 🐸 Библиотека Go для собеса

Go: управление памятью. Массивы, слайсы и мапы. Бесплатный урок курса «Go-разработчик. Базовый уровень» Память в Go кажется п
Go: управление памятью. Массивы, слайсы и мапы. Бесплатный урок курса «Go-разработчик. Базовый уровень» Память в Go кажется простой только до первого неожиданного поведения слайсов, лишних аллокаций или просадки производительности. Многие начинающие разработчики используют массивы, слайсы и мапы интуитивно, не понимая, как они устроены внутри. В результате код работает, но расходует больше памяти, становится медленнее под нагрузкой и сложнее в поддержке. На открытом уроке 3 августа в 20:00 разберём, как устроена работа с памятью в Go и как выбирать подходящие структуры данных под конкретную задачу. Поговорим о различиях между массивами и слайсами, особенностях инициализации через make и new, работе с for range, указателями и копированием значений. Отдельно обсудим производительность коллекций, сложность операций с мапами и слайсами, а также влияние этих механизмов на скорость и эффективность приложений. Урок не для тех, кто считает, что достаточно просто знать синтаксис Go и не хочет разбираться, как язык управляет памятью. Будет полезен разработчикам, которые хотят писать быстрый, предсказуемый и эффективный код для реальных проектов. 👉 Записаться: https://clc.to/UUCs3g Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Что будет, если вызвать time.Sleep(0) Вопреки распространённому мифу — практически ничего. time.Sleep с длительностью ≤ 0 сразу возвращает управление: горутина не «усыпляется» и не уступает планировщику. По сути это no-op. Часто думают, что time.Sleep(0) отдаёт управление планировщику Go и позволяет переключиться на другие горутины. Но за это отвечает другая функция:
runtime.Gosched() // вот это уступает управление планировщику
Gosched() снимает текущую горутину с процессора и ставит в очередь, давая шанс другим. А time.Sleep(0) этого не делает — если нужен именно yield, используйте runtime.Gosched(). 🐸 Библиотека Go для собеса

У вас в проекте есть файл вроде utils_v2_final_FIX.py, который все боятся трогать ❓ Что делаете с таким легаси? ❤️ Не трогаю:
У вас в проекте есть файл вроде utils_v2_final_FIX.py, который все боятся трогать Что делаете с таким легаси? ❤️ Не трогаю: работает — и ладно 👍 Переписываю с нуля и надеюсь на лучшее 🔥 Сначала покрываю тестами, потом рефакторю по частям 👾 У нас такого нет — честно-честно На курсе «ИИ для разработчиков» разберём третий подход: как с помощью агента зафиксировать текущее поведение легаси-кода тестами, а затем менять его небольшими безопасными шагами — без одного огромного PR на тысячу файлов. До 31 июля действует скидка и бессрочный доступ к материалам. 🔗 Занять место со скидкой 🏃‍♀️ Proglib Academy

Когда название файла уже само по себе считается техническим долгом 👇

Что такое fallthrough в Go fallthrough — это ключевое слово внутри switch, которое передаёт управление следующему case, не проверяя его условие. В отличие от C и многих других языков, в Go switch по умолчанию не «проваливается» дальше: выполнение завершается сразу после первого совпавшего case, без явного break. fallthrough включает обратное поведение — принудительный переход к следующему блоку.
switch n {
case 1:
    fmt.Println("один")
    fallthrough
case 2:
    fmt.Println("два") // выполнится, даже если n == 1
default:
    fmt.Println("другое")
}
Важные нюансы: • fallthrough передаёт управление безусловно — условие следующего case игнорируется. • Он должен стоять последним оператором в case, иначе будет ошибка компиляции. • Из последнего case (или default, если он в конце) провалиться некуда — там fallthrough использовать нельзя. 🐸 Библиотека Go для собеса

В чём разница между //go:build и // +build Обе директивы — это build constraints (ограничения сборки), которые указывают компилятору, при каких условиях включать файл в сборку. Разница в синтаксисе и возрасте. // +build — старая форма, использовавшаяся до Go 1.17: • Размещается в начале файла, до объявления пакета. • После блока директив обязательна пустая строка. • Условия комбинируются неочевидно: пробел означает «И», запятая — «ИЛИ», а несколько строк — тоже «И». Это часто путало. //go:build — новая форма, введённая в Go 1.17: • Использует привычные логические выражения с &&, ||, ! и скобками. • Читается гораздо понятнее.
// Старая форма:
// +build linux,amd64 darwin

// Новая форма:
//go:build (linux && amd64) || darwin
Начиная с Go 1.17, инструмент gofmt автоматически добавляет //go:build рядом со старыми // +build, синхронизируя их. Сегодня рекомендуется использовать именно //go:build, а старую форму оставляют лишь для совместимости со совсем древними версиями Go. 🐸 Библиотека Go для собеса

Что особенного в chan struct{} chan struct{} — это канал, по которому передаётся не данные, а сам факт сигнала. Пустая структура struct{} не занимает памяти (0 байт), поэтому такой канал явно говорит читателю кода: «здесь важно только событие, а не его содержимое». Типичные сценарии: • Сигнал завершения / отмены. Закрытие канала (close(done)) разом оповещает всех, кто его слушает. • Синхронизация горутин. Одна горутина ждёт, пока другая пошлёт сигнал ch <- struct{}{}. • Семафоры и ограничение параллелизма, где важен сам факт занятости слота, а не передаваемое значение.
done := make(chan struct{})

go func() {
    // ... работа ...
    close(done) // сигнализируем о завершении
}()

<-done // ждём сигнал
Почему именно struct{}, а не, например, chan bool: булев канал намекает, что значение (true/false) несёт смысл, хотя на деле его игнорируют. chan struct{} выражает намерение точнее — «данных нет, есть только событие» — и не тратит память на само значение. 🐸 Библиотека Go для собеса

📈 Скоро фраза «умею пользоваться AI» в резюме будет звучать так же странно, как сегодня «умею пользоваться Git» Это просто с
📈 Скоро фраза «умею пользоваться AI» в резюме будет звучать так же странно, как сегодня «умею пользоваться Git» Это просто станет частью профессии. А вот умение встроить AI в процесс разработки так, чтобы он действительно ускорял работу команды, останется конкурентным преимуществом 💡 🔜 На курсе «ИИ для разработчиков» участники работают со своими проектами и учатся делать AI частью ежедневной разработки: планировать задачи, писать код, проверять изменения, готовить PR и автоматизировать рутину. До конца июля действует специальная цена — 59 990 ₽ вместо 79 990 ₽ 🥳 И получить бессрочный доступ ко всем материалам курса. 🔗 Посмотреть, как устроен курс 🏃‍♀️ Proglib Academy