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

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

Открыть в Telegram

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

Больше
7 429
Подписчики
+224 часа
-87 дней
+730 день
Архив постов
❓ Можно ли передать данные в body в GET запросе Хотя HTTP позволяет добавить тело к GET-запросу, это не является стандартной практикой, и часто такие запросы могут не быть обработаны корректно на сервере или прокси. Для передачи данных в теле запроса рекомендуется использовать POST, PUT, PATCH 🐸Библиотека Go для собеса

❓ Реализуйте простое замыкание Замыкание — это функция, которая захватывает и использует переменные из своей окружающей облас
Реализуйте простое замыкание Замыкание — это функция, которая захватывает и использует переменные из своей окружающей области видимости, даже после того как эта область видимости завершится. Таким образом, замыкание «запоминает» контекст, в котором оно было создано, и может работать с переменными, которые были доступны в этот момент. 🐸Библиотека Go для собеса

Как устроена защита от копирования в sync.once Защита от копирования в sync.Once реализована с помощью специального поля noCopy. Это поле является пустой структурой, которое предотвращает копирование структуры sync.Once. В Go копирование структуры типа с таким полем не разрешается, и компилятор будет генерировать ошибку при попытке сделать копию этой структуры. 🐸Библиотека Go для собеса

Зимний режим OFF. Весна начинается с апгрейда. Если чувствуешь, что за зиму навыки подзастыли — пора их разморозить. 📦 Включ
Зимний режим OFF. Весна начинается с апгрейда. Если чувствуешь, что за зиму навыки подзастыли — пора их разморозить. 📦 Включили весеннюю распродажу: скидка –35% на курсы до конца марта. Выбирай направление и выходи из спячки: — Алгоритмы и структуры данных — чтобы собеседования в Яндекс, Ozon и другие были как уровень easy — Математика для Data Science — для тех, кто не хочет просто «жать на кнопки», а понимать, что под капотом — Архитектуры и шаблоны — если хочется мыслить как senior и прокачать системное мышление — Python, Frontend, основы IT — для тех, кто стартует путь в разработке 👾 Proglib Academy — это как старая добрая 8-битная игра, но вместо врагов — практические задачи и собеседования. Мы просто упаковали сложное обучение в пиксельную обёртку, чтобы тебе было чуть веселее прокачиваться. 🧠 Отогревай мозги, прокачивай скиллы и хватай свой power-up до конца марта. 👉 Выбрать курс

Как под капотом работает sync.Once Метод Do в структуре Once гарантирует, что функция, которую передали в метод, будет вызвана только один раз для каждого экземпляра Once. Если функция уже была вызвана, будущие вызовы Do не будут её повторно выполнять. Быстрый путь: В быстром пути (if o.done.Load() == 0) проверяет значение переменной done: Если done равно 0 (т.е. действие ещё не выполнено), вызывается метод doSlow(f), который выполняет функцию с блокировкой. Если done равно 1, значит действие уже выполнено, и метод просто завершает выполнение без вызова f. Медленный путь: Когда проверка в быстром пути не прошла, вызывается медленный путь. Этот путь используется для блокировки и гарантирует, что только одна горутина выполнит функцию. Горутина захватывает мьютекс, чтобы синхронизировать доступ. После захвата мьютекса снова проверяется значение done: Если оно всё ещё равно 0, выполняется функция. После выполнения функции устанавливается done в 1, чтобы указать, что функция была выполнена. Мьютекс разблокируется, и другие горутины могут продолжить выполнение. 🐸Библиотека Go для собеса

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

Какие стратегии можно использовать для уменьшения аллокаций памяти • Использование пула объектов При часто повторяющихся аллокациях можно использовать пул объектов (sync.Pool). Это позволяет повторно использовать объекты вместо того, чтобы создавать новые каждый раз. • Предварительное выделение памяти Если размер данных заранее известен, предварительное выделение памяти может помочь избежать ненужных динамических аллокаций. Например, при работе с большими срезами можно заранее выделить достаточный объём памяти, чтобы не выполнять расширение среза во время работы. • Использование указателей вместо копий Если возможно, следует использовать указатели для передачи объектов, а не создавать их копии. Это позволяет избежать дополнительных аллокаций памяти при передаче данных между функциями. • Использование буферов Когда работаете с большими объемами данных, можно использовать буферизацию для чтения/записи. 🐸Библиотека Go для собеса

Как планировщик Go решает, на каком ядре будет выполняться конкретная горутина В Go планирование горутин не зависит напрямую от операционной системы, а управляется Go-рантаймом, который использует свою собственную модель многозадачности Go использует модель планирования M:N (M горутин на N потоков). Это означает, что несколько горутин могут быть распределены по нескольким потокам ОС. В Go есть три ключевых компонента, которые связаны с планированием горутин: G (goroutine): горутина — поток, который управляется Go-рантаймом. В Go может быть создано много горутин (десятки тысяч и даже миллионы), и они используют системные ресурсы с минимальными затратами. M (machine): системный поток, который Go использует для выполнения горутин. В операционной системе это обычный поток ОС. В Go обычно количество потоков M ограничено числом доступных ядер процессора. P (processor): абстракция процессора, которая управляет очередями готовых горутин, которые могут быть исполнены. Каждый процессор может управлять множеством горутин, но горутина будет выполняться только на одном ядре в момент времени. Go решает, на каком ядре будет выполняться горутина, на основе количества доступных процессоров (runtime.GOMAXPROCS) и текущей загрузки 🐸Библиотека Go для собеса

Какие вопросы хотели бы увидеть на следующей неделе 👍🏼 — Классика: goroutine, channel, interface{} — то, что встречается на каждом собесе 🤔 — Неочевидные штуки: GC, race detector, pointer escaping — то, что вы не найдёте в туториалах 🔥 — Вопросы с кодом: разбор реальных кейсов или mini-challenges 🐸Библиотека Go для собеса

Как изменить значение переменной через reflect? Чтобы изменить значение переменной через reflect в Go, необходимо использовать метод Set(), предоставляемый типом reflect.Value. Однако для того чтобы использовать Set(), нужно убедиться, что передаваемый объект является изменяемым (т.е. является указателем на значение) 🐸Библиотека Go для собеса

💬 Как оставлять комментарии в чате нашего канала В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи. ⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии. ❓Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас. ✅ Как присоединиться к чату, чтобы бот вас не забанил — Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат — Нажмите Join / Присоединиться — Сразу обратите внимание на сообщение от бота Shieldy — Решите простой пример и отправьте ответ в чат После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат. ❗️ Если вас все-таки забанили — Это временная блокировка на несколько минут — Подождите и попробуйте зайти позже, бот снова отправит вам капчу Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение. 👾 Спасибо, что активно участвуете в обсуждении наших постов!

Когда использовать тип, а когда структуру Тип лучше использовать, когда нужен новый тип на основе уже существующего типа, но с дополнительной типовой безопасностью. Например, номер телефона или идентификатор нужно валидировать не как int. Структуру лучше использовать, когда необходимо представить объект с несколькими различными полями, как, например, пользователь, заказ или продукт. Структуры позволяют группировать связанные данные. 🐸Библиотека Go для собеса

Какую роль играет компилятор Go при проверке типов Компилятор Go выполняет статическую проверку типов до компиляции, что помогает выявить ошибки на раннем этапе. Он проверяет: Совместимость типов — проверяет, что операции выполняются над совместимыми типами. Интерфейсы — проверяет, реализует ли тип интерфейс. Конкретные и абстрактные типы — убеждается, что переменные имеют ожидаемые типы. 🐸Библиотека Go для собеса

Чем sync.Cond отличается от sync.Mutex sync.Mutex — примитив блокировки, предотвращает конкурентный доступ к данным. Горутины ждут освобождения мьютекса, но не получают уведомления об изменении состояния. sync.Cond — механизм ожидания события. Горутины ждут условие (Wait()), а другая горутина будит (Signal() или Broadcast()) их, когда условие меняется. sync.Cond полезен, когда нужно ждать события, а не опрашивать состояние в цикле. 🐸Библиотека Go для собеса

Go — это мощь, простота и высокая производительность. Но как писать код, который пройдет проверку на собеседовании? Как работ
Go — это мощь, простота и высокая производительность. Но как писать код, который пройдет проверку на собеседовании? Как работать с ffmpeg на Go и транскодировать видео без боли? На True Tech Go мы обсудим, какие подходы к разработке действительно работают в продакшене, и разберем лучшие практики из индустрии. 🔹 В программе: ✅ Идеальная задача для собеседования Go-разработчика — какие вопросы действительно оценивают твои знания ✅ Панельная дискуссия про найм — как компании оценивают кандидатов и что важно для роста 📅 27 марта 2025 📍 Москва, офлайн + онлайн-трансляция 🎟 Регистрация открыта по ссылке! Количество мест ограничено

В чем отличие между буферизированным и небуферизированным каналом с точки зрения синхронизации Небуферизированный канал: каждый отправитель блокируется, пока получатель не получит данные. Это означает, что операции отправки и получения жёстко синхронизированы. Буферизированный канал: отправители могут отправлять данные в канал, не блокируя себя, если в канале есть место для записи. Блокировка происходит только при заполнении буфера. 🐸Библиотека Go для собеса

В чем разница между rune и byte byte и rune — это синонимы типов uint8 и int32: • byte (аналог uint8) — хранит один байт. Используется для работы с ASCII-символами и []byte. • rune (аналог int32) — хранит один Unicode-символ, так как некоторые символы занимают больше 1 байта. Когда использовать • byte — для ASCII-символов, массивов []byte, работы с файлами • rune — для Unicode (например, китайские и эмодзи-символы) 🐸Библиотека Go для собеса

Как работает errors.Is() Функция errors.Is(err, target) позволяет проверять цепочку ошибок, включая обёрнутые ошибки. errors.Is(err, ErrNotFound) сравнивает err с ErrNotFound по значению, поэтому сработает. Почему err == ErrNotFound не сработает? • err == ErrNotFound проверяет только точное совпадение указателей. • Если ошибка была обёрнута (fmt.Errorf("%w", err)), указатель изменился, и == больше не сработает. • А errors.Is() умеет разбирать цепочку ошибок, поэтому он правильно обработает вложенную ошибку. 🐸Библиотека Go для собеса

❓ Как создать свою кастомную ошибку в Go 1️⃣ Пакет errors позволяет быстро создать новую ошибку 2️⃣ Через fmt.Errorf() с форм
+1
Как создать свою кастомную ошибку в Go 1️⃣ Пакет errors позволяет быстро создать новую ошибку 2️⃣ Через fmt.Errorf() с форматированием 3️⃣ Создание кастомного типа ошибки через struct 🐸Библиотека Go для собеса

Как в Go реализовать wildcard импорт В Go нет wildcard-импортов (import "*"), как в Java или Python. 🐸Библиотека Go для собеса

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