Библиотека Go для собеса | вопросы с собеседований
6.86K subscribers
218 photos
6 videos
1 file
412 links
Вопросы с собеседований по Go и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/0b524a15

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Может ли одна горутина заблокировать мьютекс, а другая его разблокировать?

Мьютексы в Go не отслеживают, какая конкретно горутина вызвала Lock или Unlock. Это означает, что мьютекс может быть заблокирован одной горутиной и разблокирован другой. Такое поведение допускается на уровне реализации, чтобы мьютексы были максимально простыми и эффективными.
Однако это крайне не рекомендуется, так как приводит к сложностям в управлении состоянием мьютекса и повышает риск возникновения ошибок.
👍24
В каких случаях деление на ноль в языке Go не приводит к панике (panic), и какой результат возвращается в этих случаях?

Деление на ноль в Go не приводит к панике в случаях, когда используются числа с плавающей запятой (float64). В зависимости от знака делимого, результат будет:
Положительное число делится на ноль: результатом будет положительная бесконечность (+Inf).
Отрицательное число делится на ноль: результатом будет отрицательная бесконечность (-Inf).
Ноль делится на ноль: результатом будет «not-a-number» (NaN).
👍21❤‍🔥1
🎨 Новый канал для вдохновения — UX in GIF

Мы запустили свежий канал, где делимся идеями для дизайна интерфейсов. Всё самое стильное, оригинальное и вдохновляющее теперь в одном месте.

📌 Чем полезен канал?

→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.

👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
🗺 Привычка "срезать углы" при ходьбе – это интуитивное применение алгоритмов?

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

С нашим курсом «Алгоритмы и структуры данных» вы научитесь решать любые сложные задачи так же эффективно.

🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/014fe6d8
Что произойдет, если в defer использовать анонимную функцию, изменяющую внешнюю переменную?

Изменения произойдут в момент выполнения отложенной функции (а не в момент ее определения)
😢3
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
1👍1
Как проверить, пуст ли интерфейс (interface{})?

Интерфейс (interface{}) в Go считается пустым, только если его значение и тип равны nil. Для точной проверки можно использовать reflect.ValueOf(i).IsZero(), чтобы учесть случаи с nil-значением, но заданным типом.

📎 Подробнее можно почитать здесь
👍8😢1
Можно ли модифицировать map внутри цикла range? Почему?

Нет, модифицировать map во время итерации через range в Go нельзя, так как это может привести к панике (runtime panic). В документации языка указано, что параллельное изменение карты во время итерации не допускается, поскольку внутренняя структура map в Go не поддерживает такие операции.

Причина заключается в том, что изменение map во время итерации может нарушить внутреннюю структуру данных, вызывая неконсистентность или некорректное поведение.
👍8
Чем отличается память в куче от памяти в стеке?

Память в стеке:
Используется для хранения данных с коротким временем жизни (локальные переменные функции).
Быстро выделяется и освобождается, поскольку происходит по принципу LIFO (Last-In-First-Out).
Управляется автоматически при выходе из области видимости функции.
Ограничена по размеру.

Память в куче:
Используется для объектов, срок жизни которых не определён заранее.
Выделение и освобождение сложнее и медленнее, так как управляется сборщиком мусора (GC).
Не ограничена жёсткими рамками, зависит от доступной оперативной памяти.
Подходит для глобальных и длительно живущих объектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱10👍21😁1
Что такое GOGC?

GOGC (Garbage Collection Goal) — это переменная окружения или настройка, управляющая частотой работы сборщика мусора в Go. GOGC определяет процентный прирост памяти, который допускается перед запуском очередного цикла GC.

Значение GOGC:
100 (по умолчанию): GC запускается, когда используемая память увеличивается на 100% по сравнению с памятью, оставшейся после последнего цикла GC.
0: отключает автоматическую сборку мусора.
<100: увеличивает частоту работы GC (более агрессивная сборка).
>100: снижает частоту работы GC (редкие сборки).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🎄 Начни 2025-й с апгрейдом навыков,
которые откроют двери в мир IT!

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

🔗 Собери свой план и начни путь в IT

Почему это выгодно?

📚 Несколько программ по цене одной — максимальная эффективность: учишься сразу тому, что действительно нужно.

💾 Бессрочный доступ — все материалы всегда под рукой, чтобы учиться в своём темпе.

💸 Знания, которые окупятся — навыки, востребованные в любой точке мира.
Какие навыки ты можешь прокачать?

💡 Математика для Data Science + Алгоритмы и структуры данных
— Подготовка к собеседованиям в FAANG и поступлению в ШАД. Решай сложные задачи, работай с данными и моделями на профессиональном уровне.

💡 Алгоритмы и структуры данных + ML
— Улучшай своё алгоритмическое мышление и изучай базовые методы машинного обучения, чтобы создавать интеллектуальные приложения.

💡 Frontend Basic + Базовые модели ML
— Построй свою первую веб-страницу и погрузись в мир ML: от нейросетей до ML-бустинга.

💡 Архитектуры и шаблоны проектирования + Математика для Data Science
— Развивай аналитическое мышление и учись проектировать устойчивые системы.

💡 Алгоритмы и структуры данных + Frontend Basic
— Получи полный набор навыков: от оптимизации алгоритмов до создания современных веб-приложений.

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

🔗 Составь свой IT-маршрут сейчас или выбери курс по новогодней скидке
1
Что такое sync.Pool?

sync.Pool — это потокобезопасная структура для повторного использования временных объектов. Она помогает уменьшить нагрузку на GC, избегая частого выделения и освобождения памяти. Если пул пуст, может создать новый объект через функцию New. Подходит для объектов с коротким сроком жизни, например, буферов. Объекты в пуле не гарантированно сохраняются, так как могут быть очищены GC при недостатке памяти.
👍9
🤨В каких случаях лучше использовать sync.Pool?

sync.Pool подходит для повторного использования объектов, которые:

Имеют короткий срок жизни.
Часто создаются и освобождаются.
Не требуют постоянного хранения в памяти.

Примеры:
Буферы для обработки данных.
Временные структуры, используемые в алгоритмах.
Часто используемые небольшие объекты (например, []byte).

Важно: объекты из sync.Pool могут быть очищены сборщиком мусора, если память ограничена.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Что делает функция runtime.GC()?

Функция runtime.GC() инициирует принудительную сборку мусора.
1. Выполняет полный цикл сборки мусора (включая STW).
2. Полезна для тестирования или контроля состояния памяти (например, измерения выделений памяти).

Примечание: использование runtime.GC() в продакшене не рекомендуется, так как оно нарушает автоматическое управление памятью.
👍10
Что такое пакет embed в Go, и когда его стоит использовать?

Пакет embed позволяет встраивать файлы в исполняемый бинарник, что полезно для создания автономных приложений, где важно, чтобы все ресурсы (например, конфигурационные файлы или статические данные) были в одном файле. Он особенно полезен для серверов или CLI-инструментов, где важно избежать зависимости от внешних файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
Можно ли использовать embed для встраивания динамически изменяемых файлов, например, конфигурационных файлов, которые могут изменяться в процессе работы приложения?
Anonymous Quiz
30%
Да
60%
Нет
10%
Наверное
🔥5
Что делает инструмент go vet?

Это инструмент для статического анализа кода в Go, который помогает обнаружить потенциальные ошибки, такие как неправильное использование форматов в fmt.Printf, неиспользуемые переменные или параметры, проблемы с указателями и возможные ошибки, которые могут повлиять на выполнение программы.
👍143
Какие стандартные инструменты для сортировки предоставляет пакет sort в Go?

В пакете sort Go предоставляет несколько встроенных функций для сортировки стандартных типов данных. Например, sort.Ints используется для сортировки слайсов целых чисел, sort.Strings — для сортировки строк, а sort.Float64s — для чисел с плавающей запятой.

А если требуется сортировка не только чисел и строк, а пользовательских структур?


Если требуется кастомная сортировка, пакет предлагает интерфейс sort.Interface. Для его использования нужно реализовать три метода: Len, который возвращает длину слайса, Less для определения порядка элементов и Swap для их перестановки. Это позволяет гибко задавать правила сортировки, например, для структур или сложных типов данных.
👍19
Массив и срез в Go это одно и то же? Почему?

Нет, массив и срез в Go — это разные структуры.

Массив: имеет фиксированный размер, который является частью его типа ([5]int), и не может изменяться.
Срез: это динамическая структура, которая ссылается на базовый массив, поддерживает изменение размера и удобнее для работы с данными.
🥱29👍6
В Go 1.24 представлено обновление кэширования для команды go run. Объясните, как работает это кэширование, какие преимущества оно даёт и в каких ситуациях может быть полезным.

В Go 1.24 исполняемые файлы, созданные командой go run, теперь кэшируются. При повторном выполнении go run с теми же исходными файлами и зависимостями Go использует уже скомпилированный файл из кэша, вместо того чтобы повторно компилировать код. Это значительно ускоряет выполнение команды, особенно для крупных проектов.

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

Сценарии, где это полезно:
Частый запуск скриптов для тестирования изменений.
Использование go run для небольших утилит или прототипов.
Повторное выполнение кода с неизменёнными входными данными.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18