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

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

前往频道在 Telegram

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

显示更多
7 429
订阅者
+224 小时
-87
+730
帖子存档
Гарантирует ли sync.Pool, что объект останется в пуле между вызовами GC Нет. Сборщик мусора может в любой момент очистить содержимое пула. sync.Pool не даёт гарантий на время жизни объектов. Поэтому его нельзя использовать как кэш или хранилище. 🐸 Библиотека Go для собеса

Когда использовать функции вместо интерфейсов Ключевой критерий это количество методов в поведении. Если нужно абстрагироваться над одним действием, берите функцию-тип. Если поведение требует нескольких связанных методов — интерфейс. Интерфейс оправдан, когда поведение требует нескольких связанных методов или когда реализация несёт внутреннее состояние — соединение, кэш, буфер. Тогда контракт нужно зафиксировать явно, и интерфейс делает это лучше. Показательный пример из стандартной библиотеки — net/http. Там оба подхода живут рядом: • http.Handler — интерфейс с одним методом ServeHTTPhttp.HandlerFunc — функциональный тип, который реализует этот же интерфейс. Это позволяет передавать как структуры со состоянием, так и простые функции, не заставляя автора каждый раз писать обёртку. 🐸 Библиотека Go для собеса

Можно ли складывать два разных алиаса на один и тот же тип Алиас в Go это другое имя для существующего типа. Когда пишут type Meters = float64, компилятор не создаёт новый тип: Meters и float64 взаимозаменяемы без явного приведения. Компилятор видит оба алиаса как float64 и не различает их. Поэтому сложение, сравнение и передача в функцию работают без приведения типов. Если функция принимает Seconds, в неё без ошибки пройдёт переменная типа Meters. 🐸 Библиотека Go для собеса

👣 Хотите вкатиться в разработку с нуля? Рассмотрите Golang, изучите одну из важных тем языка 📚 На открытом уроке разберём,
👣 Хотите вкатиться в разработку с нуля? Рассмотрите Golang, изучите одну из важных тем языка 📚 На открытом уроке разберём, как устроена типизация в Go, как работают указатели и где хранятся данные — стек, куча или статическая память. Покажем на примерах, как язык управляет памятью и почему это влияет на производительность. Урок проходит в преддверии старта курса «Go-разработчик. Базовый уровень». Если вы хотите разобраться в базовых механизмах языка и писать код без скрытых ошибок — подключайтесь 🤓Встречаемся 21 мая в 20:00 МСК. Регистрация открыта: https://clc.to/0zzq6Q Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Что такое httputil.NewSingleHostReverseProxy и зачем он нужен NewSingleHostReverseProxy создаёт обратный прокси, который перенаправляет входящие HTTP-запросы на один заданный сервер. Вы передаёте функции целевой URL, а она возвращает http.Handler, готовый к использованию. Типичный сценарий это API-шлюз или балансировщик нагрузки перед сервисом. Вместо того чтобы писать логику проксирования вручную, можно получить готовый обработчик в несколько строк:
target, _ := url.Parse("http://backend-service:8080")
proxy := httputil.NewSingleHostReverseProxy(target)
http.ListenAndServe(":80", proxy)
🐸 Библиотека Go для собеса

Решаешь задачи, смотришь курсы, а работы всё нет? 🤨 Потому что знать Go и уметь пройти собес - это разные вещи. Компании не
Решаешь задачи, смотришь курсы, а работы всё нет? 🤨 Потому что знать Go и уметь пройти собес - это разные вещи. Компании не платят за знания. Они платят за тех, кто умеет себя продать и решать задачи в стрессовых условиях. ❤️Меня зовут Дима Урин, и я веду разработчиков до оффера на 300-400к в топ-компании. Лично от первой задачи до закрытия испытательного срока. Хочешь так же?💰 Приходи на ведение Приходи на ведение Реклама. Урин Дмитрий Алексеевич, ИНН 760404084194. Erid 2Vtzqvb278C

Что возвращает Buffer.Peek(n), если в буфере меньше n байт Buffer.Peek возвращает срез доступных байт даже если их меньше n. Ошибки при этом нет. Поведение аналогично bufio.Reader.Peek, но там при нехватке байт возвращается io.ErrUnexpectedEOF — это распространённое заблуждение при переносе привычек из bufio. 🐸 Библиотека Go для собеса

Можно ли отдавать «HTTP 200 OK», если на сервере что-то пошло не так Код 200 говорит клиенту: «Всё прошло штатно, держи результат». Если вместо результата внутри тела прячется ошибка, то клиент вынужден парсить ответ, чтобы понять, что запрос на самом деле провалился. Это ломает саму идею HTTP-контракта. Когда это всё-таки допустимо? При ошибках бизнес-логики. Например, валидация формы вернула список замечаний: сам запрос обработан корректно, просто данные не прошли проверку на уровне домена. Но даже тут стоит трижды подумать. Для всего остального в HTTP уже есть подходящие коды — и они существуют не просто так: 🔹 400 Bad Request — клиент прислал невалидные данные 🔹 404 Not Found — ресурс не существует 🔹 500 Internal Server Error — сервер сломался и не смог обработать запрос 🔹 503 Service Unavailable — сервер на паузе: перегрузка, деплой, обслуживание 🐸 Библиотека Go для собеса

Как сэкономить память при использовании подстроки от строки В Go строки неизменяемы и внутри представлены заголовком с указателем на массив байтов и длиной. При создании среза строки, например, s[10:20] данные не копируются — новый заголовок просто указывает на ту же область памяти оригинала. Из-за этого, если маленькая подстрока живёт дольше родительской строки, весь исходный массив остаётся в памяти, так как сборщик мусора не может его освободить, даже если нужна только небольшая часть. Чтобы экономить память, используйте strings.Clone(substr)или string([]byte(substr)) для создания независимой копии подстроки. Это создаёт новый массив только с нужными байтами, позволяя сборщику мусора освободить большой исходный массив. Копируйте строки только если подстрока действительно живёт значительно дольше родителя — для кратковременной обработки, например, внутри обработчика запроса, срез без копирования эффективнее, так как выделение и копирование дороже, чем удержание лишней памяти. 🐸 Библиотека Go для собеса

Когда использование OnceValue может быть неправильным решением Когда результат зависит от контекста или должен меняться со временем, например, обновляемый конфиг. OnceValue кэширует навсегда и для изменяемых данных нужен другой механизм: atomic, mutex, канал. 🐸 Библиотека Go для собеса

Вы работаете с монолитом, который растёт и замедляет команду, но переход к микросервисам кажется рискованным? В большинстве с
Вы работаете с монолитом, который растёт и замедляет команду, но переход к микросервисам кажется рискованным? В большинстве случаев проблема не в архитектуре, а в неверных решениях на этапе разделения. 📆 Приглашаем вас на открытое онлайн-занятие «Грамотная декомпозиция монолита (когда микросервисы не нужны)», которое проходит в преддверии старта курса «Микросервисы на Go». Вы увидите, как проходит обучение, и разберёте реальные подходы вместе с преподавателем. На занятии вы узнаете, как определить готовность проекта к разделению, какие признаки указывают на необходимость изменений и как избежать появления распределённого монолита. Разберёте работу с событиями, ошибки с общими библиотеками и подходы к выделению первого сервиса без риска для системы. Можно задать вопросы и обсудить свою ситуацию. 🚀 Занятие пройдёт 19 мая в 20:00 по московскому времени. Участие бесплатное. Зарегистрируйтесь заранее, чтобы не пропустить: https://clc.to/ulHozw Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Что изменилось в команде go fix в Go 1.26 go fix была полностью переписана с нуля. Вот ключевые изменения: Старая реализация cmd/fix была удалена, а go fix перестроена по модели go vet — обе команды теперь работают поверх одного и того же фреймворка. Разница между ними в том, что go vet сообщает о диагностике, а go fix применяет предложенные исправления. Команда Go разработала десятки анализаторов для выявления возможностей модернизации кода. Они предоставляют надёжный способ обновить кодовую базу до актуальных идиом и API стандартной библиотеки. Все старые фиксеры из оригинальной go fix, которые к этому моменту были устаревшими, были полностью удалены. 🐸 Библиотека Go для собеса

Как использовать context в юнит-тестах t.Context() — основной способ (Go 1.24+):
func TestFetch(t *testing.T) {
    result, err := Fetch(t.Context(), "https://example.com")
    // ...
}
Контекст автоматически отменяется при завершении теста, в том числе по go test -timeout. Не нужен ни defer cancel(), ни ручной WithTimeout. Явный таймаут — когда тестируете временно́е поведение:
ctx, cancel := context.WithTimeout(t.Context(), 500*time.Millisecond)
defer cancel()
Базовый контекст — t.Context(), не context.Background(). Так контекст остаётся привязан к жизненному циклу теста. 🐸 Библиотека Go для собеса

🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев Эмиль — эксперт с 8-летним опытом в разработке, который специализиру
🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев Эмиль — эксперт с 8-летним опытом в разработке, который специализируется на внедрении LLM и агентных подходов в реальные коммерческие сервисы. Он точно знает, как проектировать архитектуру так, чтобы ИИ-функции работали стабильно в связке с внешними системами. 🏃‍♀️ Уже 14 мая Эмиль проведет открытый вебинар! Обсудим самую «больную» тему: «Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало». 🗓 Когда: 14 мая в 19:00 (Мск) Почему Эмиля стоит послушать: 🟣 8+ лет в разработке (Backend и Frontend)
Прошел путь от фулстека до Backend Platform Developer в SMIT.Studio.
🟣 Международный исследовательский опыт
Работал исследователем в Институте ИИ НИУ ВШЭ и в Национальном университете Сингапура (NUS).
🟣 Преподаватель-практик
Ведет семинары в НИУ ВШЭ, в том числе по проектированию и разработке агентских систем.
🟣 Мастер интеграции AI в Backend
Его главная суперсила — умение правильно встраивать LLM через API, выстраивать workflow и агентную логику в сложных распределенных системах.
🔗 Зарегистрироваться на вебинар

Что изменилось в функции new в go 1.26 Теперь в качестве аргумента можно передавать не только тип, но и выражение с начальным значением.
p := new(42) // *p == 42
Если аргумент expr имеет тип T, то new(expr) выделяет переменную типа T, инициализирует её значением expr и возвращает указатель типа *T. 🐸 Библиотека Go для собеса

👣 Пишете сервисы на Go, но при работе с базой данных всё становится сложнее? На практике именно здесь возникают проблемы: ка
👣 Пишете сервисы на Go, но при работе с базой данных всё становится сложнее? На практике именно здесь возникают проблемы: как правильно строить схему, как управлять изменениями, что выбрать — ORM или чистый SQL. 📖 На открытом уроке разберём, как работать с базой данных в Go: создание таблиц, миграции и выполнение запросов. Покажем, как выстроить понятную структуру и избежать типичных ошибок на старте. Урок проходит в преддверии старта курса «Go-разработчик. Базовый уровень». Если вы хотите уверенно работать с базами данных в своих сервисах — подключайтесь. ❗️ Урок проведёт руководитель курса «Go-разработчик. Базовый уровень» Александр Хохлов. На вебинаре сможете задать любые вопросы по программе, чтобы убедиться, что курс вам подходит. 🔵 Встречаемся 14 мая в 20:00 МСК. Принять участие: https://clc.to/eIj-aA Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Какое обязательное требование к срезу для slices.BinarySearch   Срез должен быть отсортирован по возрастанию — иначе результат непредсказуем.  
names := []string{"Alice", "Bob", "Vera"}
n, found := slices.BinarySearch(names, "Bill")
// n=1, found=false — позиция, куда нужно вставить "Bill"
 
n, found = slices.BinarySearch(names, "Vera")
// n=2, found=true
🐸 Библиотека Go для собеса

Как вам вопросы этой недели Оцените их по шкале 🔥,❤️,👍,😢, 🥱, где 🔥 — это супер, а 🥱 — это скучно. Также приветствуется фидбек в комментариях. 🐸 Библиотека Go для собеса

🗓 14 мая в 19:00 (Мск) встречаемся в онлайне. Тема: Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало. В кружке выше Эмиль Сатаев рассказал, какие именно проблемы с LLM в проде будем разбирать. Что в программе:
- Разберем реальные кейсы стартапов и ограничения LLM. - Обсудим рабочие архитектуры: RAG, human-in-the-loop, контроль качества. - Ответим на ваши вопросы и разберем кейсы участников.
🎁 Бонусы: в конце вебинара подарим промокод на скидку 10.000 ₽ на курсы и разыграем подписки на полезные AI-сервисы. 👉 Зарегистрироваться на вебинар