uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

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

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

Відкрити в Telegram

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

Показати більше
7 423
Підписники
-1224 години
-237 днів
-4530 днів

Завантажуємо дані

Залучення підписників
жовт '26
жовтень '26
+53
в 1 каналах
вересень '26
+78
в 0 каналах
Get PRO
серпень '26
+72
в 1 каналах
Get PRO
липень '26
+153
в 2 каналах
Get PRO
червень '26
+96
в 2 каналах
Get PRO
травень '26
+135
в 1 каналах
Get PRO
квітень '26
+143
в 1 каналах
Get PRO
березень '26
+153
в 0 каналах
Get PRO
лютий '26
+307
в 3 каналах
Get PRO
січень '26
+154
в 0 каналах
Get PRO
грудень '25
+139
в 3 каналах
Get PRO
листопад '25
+125
в 2 каналах
Get PRO
жовтень '25
+117
в 1 каналах
Get PRO
вересень '25
+77
в 0 каналах
Get PRO
серпень '25
+150
в 2 каналах
Get PRO
липень '25
+144
в 0 каналах
Get PRO
червень '25
+147
в 3 каналах
Get PRO
травень '25
+148
в 0 каналах
Get PRO
квітень '25
+165
в 1 каналах
Get PRO
березень '25
+352
в 52 каналах
Get PRO
лютий '25
+214
в 31 каналах
Get PRO
січень '25
+339
в 35 каналах
Get PRO
грудень '24
+361
в 35 каналах
Get PRO
листопад '24
+305
в 37 каналах
Get PRO
жовтень '24
+287
в 35 каналах
Get PRO
вересень '24
+317
в 35 каналах
Get PRO
серпень '24
+309
в 35 каналах
Get PRO
липень '24
+355
в 36 каналах
Get PRO
червень '24
+293
в 29 каналах
Get PRO
травень '24
+314
в 35 каналах
Get PRO
квітень '24
+355
в 35 каналах
Get PRO
березень '24
+437
в 29 каналах
Get PRO
лютий '24
+395
в 29 каналах
Get PRO
січень '24
+545
в 24 каналах
Get PRO
грудень '23
+627
в 28 каналах
Get PRO
листопад '23
+488
в 7 каналах
Get PRO
жовтень '23
+1 507
в 22 каналах
Дата
Залучення підписників
Згадування
Канали
26 жовтня+1
25 жовтня+3
24 жовтня+1
23 жовтня+6
22 жовтня+2
21 жовтня+1
20 жовтня+3
19 жовтня0
18 жовтня0
17 жовтня+4
16 жовтня+2
15 жовтня+2
14 жовтня0
13 жовтня+10
12 жовтня+2
11 жовтня+4
10 жовтня+2
09 жовтня+3
08 жовтня+1
07 жовтня+1
06 жовтня+1
05 жовтня0
04 жовтня+2
03 жовтня0
02 жовтня+1
01 жовтня+1
Дописи каналу
❓ Разрешает ли ограничение comparable использовать оператор меньше в обобщённой функции? Ответ: Нет. comparable позволяет сравнивать значения через == и !=, но не гарантирует возможность упорядочить их через <. Например, логические значения и некоторые структуры можно сравнивать на равенство. Но выражения true < false или сравнение двух структур через < недопустимы. Поэтому функция с параметром типа T comparable не может просто выполнить a < b. Компилятор должен знать, что эта операция допустима для всех типов, разрешённых ограничением. Для обобщённого сравнения целых и вещественных чисел, а также строк можно использовать cmp.Ordered из стандартной библиотеки. Если функция должна работать только с выбранными целочисленными типами, задают более узкое ограничение. На собеседовании важно различать проверку равенства и отношение порядка: для них нужны разные требования к типу. Подробнее в документации Go и cmp.Ordered 🐸 Библиотека Go для собеса

2
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один кур
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок. Например, можно совместить два направления по работе с ИИ: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. 📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
616
3
❓ Почему горутина может зависнуть при отправке ошибки после тайм-аута вызывающей функции? Ответ: Потому что вызывающая функция уже перестала читать канал, а отправитель всё ещё пытается в него записать. Представьте: работник выполняет запрос и отправляет ошибку в небуферизованный канал. Вызывающая сторона ждёт либо результат, либо тайм-аут. Тайм-аут сработал, функция вернулась, а работник позже дошёл до отправки. Получателя больше нет — горутина блокируется. Если работник гарантированно отправляет ровно одно сообщение, канал с буфером на один элемент позволит ему отправить результат и завершиться даже после ухода получателя. Но для произвольного числа сообщений такой буфер проблему не решает. Другой вариант — отправка через select с альтернативой по отмене контекста. Тогда работник может отказаться от отправки, если результат уже не нужен. Саму долгую операцию тоже нужно по возможности выполнять с поддержкой отмены. Подробнее в документации Go 🐸 Библиотека Go для собеса
691
4
❓ Гарантирует ли вызов cancel, что горутина уже завершилась? Ответ: Нет. cancel сообщает об отмене, но не ждёт завершения работы. Горутина должна сама заметить отмену: например, выбрать ветку с ctx.Done() или получить ошибку от операции, которой передали контекст. Если она зависла в операции, не поддерживающей отмену, вызов cancel сам по себе её не остановит. Поэтому отмена и ожидание — две отдельные части протокола завершения. Сначала вызывающая сторона подаёт сигнал через cancel, затем ждёт подтверждения: через WaitGroup, отдельный канал завершения или другой механизм координации. Это особенно важно перед освобождением ресурсов. Нельзя считать, что после cancel фоновая горутина уже перестала обращаться к файлу, соединению или общим данным. Подробнее в документации Go 🐸 Библиотека Go для собеса
794
5
❓ Можно ли вызвать Lock, уже удерживая RLock того же RWMutex? Ответ: Нет. RWMutex не поддерживает повышение блокировки чтения до блокировки записи. Если горутина удерживает RLock и вызывает Lock того же мьютекса, Lock ждёт освобождения всех блокировок чтения. В том числе той, которую удерживает сама горутина. Если освободить её некому, получится взаимная блокировка. Вариант RUnlock, затем Lock не является атомарным повышением: между этими вызовами данные может изменить другая горутина. Например, вы проверили под RLock, что ключа нет в map, затем отпустили блокировку и получили Lock. Перед вставкой отсутствие ключа нужно проверить заново. Если заранее известно, что операция может изменить данные, иногда проще сразу взять Lock и выполнить всю проверку вместе с изменением под одной блокировкой. Подробнее в документации Go 🐸 Библиотека Go для собеса
905
6
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один. Например, можно совместить: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
904
7
❓ Почему sync.Cond.Wait нужно вызывать в цикле, а не внутри if? Ответ: Потому что пробуждение не гарантирует, что нужное состояние всё ещё сохраняется. Wait атомарно отпускает связанную блокировку и приостанавливает горутину. Перед возвратом он снова захватывает блокировку. За это время другая горутина могла изменить данные. Например, после Broadcast проснулись два потребителя. Первый захватил мьютекс и забрал единственный элемент очереди. Когда второй получил блокировку, очередь уже пуста — хотя уведомление он тоже получил. Поэтому условие проверяют под блокировкой в цикле: пока очередь пуста — вызывают Wait; после возврата проверяют её ещё раз. В Go Wait не возвращается без Signal или Broadcast. Цикл нужен не из-за «случайных пробуждений», а потому что уведомление не закрепляет состояние за конкретной горутиной. Подробнее в документации Go 🐸 Библиотека Go для собеса
938
8
Почему MaxBytesReader полезнее LimitReader для тела HTTP-запроса? io.LimitReader прекращает чтение после лимита, как будто наступил EOF. Читатель не узнает, что исходное тело было длиннее. http.MaxBytesReader сообщает о превышении через MaxBytesError. Он возвращает ReadCloser, а его Close закрывает исходное тело. Если ResponseWriter это поддерживает, превышение также может привести к закрытию соединения. Проверка на Go 1.27.2: вход «abcd», лимит три байта. ReadAll через LimitReader вернул «abc» и nil. Через MaxBytesReader — те же «abc», но с ошибкой и значением Limit = 3. Разница важна для API: обрезанный JSON и слишком большой запрос — разные ситуации. В обработчике задавайте лимит перед декодированием и отдельно обрабатывайте MaxBytesError. Но сам лимит не означает, что валидатор проверил содержимое запроса. Контракт MaxBytesReader Библиотека Go для собеса
1 231
9
Почему synctest.Wait не означает «все горутины закончились»? Wait ждёт, пока остальные горутины в тестовом пузыре станут durably blocked или завершатся. Это состояние, из которого их может вывести только событие внутри того же пузыря. Горутина, спящая через time.Sleep, может оставаться живой, а Wait уже вернётся. В проверке на Go 1.27.2 сначала Wait оставил флаг незавершённым. После десяти секунд виртуального сна и ещё одного Wait флаг изменился. Десять настоящих секунд тест не ждал. Когда весь пузырь заблокирован, сначала возвращается ожидающий Wait. Если такого ожидания нет, виртуальные часы переходят к ближайшему таймеру. Это позволяет отделить «дошли до точки ожидания» от «прошло нужное время». Чтение реального сетевого сокета и ожидание Mutex не считаются durably blocking. Поэтому synctest не превращает любой HTTP-тест в мгновенный. Для него нужны изолированные горутины и подходящие fake-зависимости. Контракт testing/synctest Библиотека Go для собеса
1 555
10
👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране? Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить. 🕰️ Опрос займёт около 3 минут. В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео. 🔗 Поделиться опытом 🐸 Библиотека программиста
968
11
🎓 Тестовый собес с Go Senior из Гамбурга, с опытом работы в Yandex и Uzum [ + эталонные ответы на 50 сложных вопросов в пода
🎓 Тестовый собес с Go Senior из Гамбурга, с опытом работы в Yandex и Uzum [ + эталонные ответы на 50 сложных вопросов в подарок ] В четверг, 8 октября, в 19:00 МСК приходи онлайн на тестовое собеседование. Можно посмотреть, как всё устроено изнутри, и понять, насколько ты готов к такому интервью. Интервьюер: Маруф Караев — Senior Software Engineer из Гамбурга, ex-Yandex, ex-Uzum. Как это будет: 📂 Маруф задаст разработчику-добровольцу те вопросы и задачи, которые даёт кандидатам на своих интервью. Заранее их никто не знает; 📂 После каждого ответа Маруф даст обратную связь: что прозвучало сильно, а что стоило раскрыть иначе. Так станет понятнее, на что обращают внимание на собесе; 📂 В конце сможешь задать Маруфу любой вопрос и получить развёрнутый ответ; Эфир проходит в рамках менторской программы ШОРТКАТ для Go-разработчиков, которые хотят сменить работу и вырасти в грейде и зарплате. 🎁 Подарок для всех, кто зарегается на веб: файл с эталонными ответами на 50 сложных вопросов с Go-интервью 🔥 Жми на кнопку, чтобы попасть на эфир и забрать подарок ↓ @shortcut_go_bot Реклама. О рекламодателе.
812
12
А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tproger, Proglib, Столото, Центральны
А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tproger, Proglib, Столото, Центральный университет и SmartApe собрали целую коробку подарков. Переходите по ссылке, трясите коробку и забирайте свой презент: https://tprg.ru/tE1M Реклама. ИП Михайлишина Гузель Фаниловна, erid: 2W5zFJrVGHw
902
13
❓ Какой максимальный размер бинарного файла можно собрать В Go нет встроенного ограничения на размер бинарника. Теоретический предел это ресурсы машины, на которой идёт компиляция: свободное место на диске и доступная память. Размер бинарника растёт из-за нескольких вещей: Статическая линковка. Go по умолчанию собирает всё в один файл — рантайм, стандартная библиотека, все зависимости. Никаких внешних .so или .dll. Это удобно при деплое, но увеличивает размер даже у простой программы. Встроенные ресурсы. Через //go:embed можно упаковать в бинарник статику, шаблоны, миграции. Добавили папку с фронтендом — бинарник вырос на её размер. Отладочная информация. По умолчанию Go включает в бинарник DWARF-символы и таблицы имён. Это нужно для профилировщика и стектрейсов, но добавляет вес. Если размер важен, его можно уменьшить флагами линковщика: go build -ldflags="-s -w" -o app . -s убирает таблицу символов, -w отключает DWARF. Бинарник становится меньше на 20–30%, но отладка по нему будет затруднена. Дополнительно можно прогнать через upx — утилита сжимает исполняемый файл, он распаковывается уже в памяти при запуске. 🐸Библиотека Go для собеса
1 676
14
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потер
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 18 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠
1 437
15
Вам доклады по Go или Java? VK приглашает на митап с двойной начинкой 26 августа VK собирает Go- и Java-инженеров, чтобы прок
Вам доклады по 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. Участие бесплатное, регистрация обязательна.
691
16
Горутины и каналы: основы параллелизма в Go. Бесплатный урок курса «Go-разработчик. Базовый уровень» Конкурентность — одна из
Горутины и каналы: основы параллелизма в Go. Бесплатный урок курса «Go-разработчик. Базовый уровень» Конкурентность — одна из главных особенностей Go, но именно здесь начинающие разработчики чаще всего сталкиваются с трудноуловимыми ошибками. Неправильная работа с горутинами, каналами или синхронизацией может привести к состояниям гонки, взаимным блокировкам и утечкам ресурсов, которые сложно найти и исправить. На открытом уроке 18 августа в 20:00 разберём, как устроен параллелизм в Go и как безопасно использовать горутины в своих проектах. Поговорим о различиях между горутинами и системными потоками, научимся запускать параллельные задачи, организовывать обмен данными через каналы и применять базовые механизмы синхронизации. Урок будет полезен разработчикам, которые хотят уверенно использовать конкурентность Go в реальных приложениях. 👉 Записаться: https://otus.pw/iA0G/?erid=2W5zFGzTDry Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
652
17
❓ Объясните разницу между безопасным доступом к байтам строки через срез и использованием unsafe Когда строку преобразуют в срез байтов, создаётся новая копия данных, и доступ к этим данным безопасен, но это также означает, что данные строки не изменяются. unsafe позволяет работать с указателями и памятью напрямую, что даёт больше гибкости, но это также приводит к неопределённому поведению, если использовать эти указатели для изменения данных. 🐸 Библиотека Go для собеса
1 553
18
Покупать новый курс каждый раз, когда меняется рабочая задача, — довольно странная механика. Нашли альтернативу 👇
1 501
19
👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется зада
👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science. 🔜 Именно поэтому подписка на обучение многим оказывается удобнее отдельных курсов. Можно спокойно переключаться между темами, когда меняются задачи, а не покупать новую программу каждый раз. В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков. Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎 🔗 Узнать подробнее 🏃‍♀️ Proglib Academy
1 241
20
❓ Как создать свою кастомную ошибку в 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 для собеса
1 536