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

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

Ir al canal en Telegram

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

Mostrar más
7 429
Suscriptores
+224 horas
-87 días
+730 días
Archivo de publicaciones
Почему chan struct{} считается более «правильным» вариантом для сигнализации, чем chan bool? 🔹 struct{} занимает 0 байт в памяти, в отличие от bool (1 байт). 🔹 Закрытый канал struct{} не вызывает панику при чтении. 🔹 Каналы bool могут вызвать путаницу, если их используют для нескольких сигналов (true, false). 🔹 chan struct{} передаёт только факт события, без лишней информации, что делает код чище и читаемее.

❓ Что особенного в chan struct{}? chan struct{} используется, когда значение не имеет значения — только сам факт сигнала

❓ Что такое graceful shutdown? Graceful Shutdown (корректное завершение работы) — это механизм безопасного завершения работы приложения, при котором: 1️⃣ Завершаются все текущие операции (например, обработка сообщений из очереди). 2️⃣ Освобождаются ресурсы (закрытие соединений с БД, файлов, сетевых сокетов). 3️⃣ Принимаются новые задачи только до определенного момента, после чего система начинает «затухание». Библиотека Go для собеса

🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хо
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.

Почему сейчас не используют «Memory ballast»? Потому что в Go 1.19+ появилась runtime/debug.SetMemoryLimit — более гибкий и безопасный способ управления сборщиком мусора (GC). Раньше Ballast был хаком для снижения частоты запусков GC, но теперь есть официальное решение, которое не требует выделения лишней памяти и лучше интегрировано в язык. Библиотека Go для собеса

Что такое «Memory ballast»? Это техника оптимизации работы сборщика мусора (GC) в Go, при которой в программе намеренно выделяется большой объём памяти (например, слайс var ballast = make([]byte, 1<<30)), чтобы повлиять на поведение GC.

❓Как вы реализуете поддержку флагов командной строки в Go? Опишите, как вы бы создали программу, которая принимает следующие
❓Как вы реализуете поддержку флагов командной строки в Go? Опишите, как вы бы создали программу, которая принимает следующие флаги: -name (строка, имя пользователя, обязательный) -age (целое число, возраст, необязательный, по умолчанию 18) -verbose (булев флаг, включение подробного вывода, необязательный) Также объясните, как вы бы обработали ошибки, например, если обязательный флаг не передан. Для реализации поддержки флагов командной строки в Go используется стандартный пакет flag. Сначала определяются флаги с помощью функций flag.String, flag.Int и flag.Bool. Например, флаг name будет обязательным, age — необязательным со значением по умолчанию 18, а verbose — булевым флагом для включения подробного вывода. После определения флагов вызывается flag.Parse(), чтобы обработать аргументы командной строки и заполнить значения переменных. Затем добавляется проверка, чтобы убедиться, что обязательный флаг name не пустой. Если он пустой, программа завершается с ошибкой и выводит справку по использованию флагов с помощью flag.Usage(). Если все флаги корректны, их значения выводятся. Если требуется поддержка коротких флагов или пользовательских типов, можно использовать сторонние библиотеки, такие как cobra или urfave/cli, так как стандартный пакет flag этого не поддерживает.

❓ Как вы реализуете поддержку флагов командной строки в Go? Опишите, как вы бы создали программу, которая принимает следующие флаги: • name (строка, имя пользователя, обязательный) • age (целое число, возраст, необязательный, по умолчанию 18) • verbose (булев флаг, включение подробного вывода, необязательный) Также объясните, как вы бы обработали ошибки, например, если обязательный флаг не передан. Для реализации поддержки флагов командной строки в Go используется стандартный пакет flag. Сначала определяются флаги с помощью функций flag.String, flag.Int и flag.Bool. Например, флаг name будет обязательным, age — необязательным со значением по умолчанию 18, а verbose — булевым флагом для включения подробного вывода. После определения флагов вызывается flag.Parse(), чтобы обработать аргументы командной строки и заполнить значения переменных. Затем добавляется проверка, чтобы убедиться, что обязательный флаг name не пустой. Если он пустой, программа завершается с ошибкой и выводит справку по использованию флагов. Код ищите в комментариях! 👇 🐸Библиотека Go для собеса

❓ Что такое руны? В Go руны (тип rune) представляют собой символы Unicode и являются синонимом типа int32. Руны используются для представления символов, которые могут занимать более одного байта в кодировке UTF-8.

С Новым годом и Годом Змеи! 🐍 Пусть этот год принесет вам успех, рост и меньше усилий для достижения больших целей. Мы в Pro
С Новым годом и Годом Змеи! 🐍 Пусть этот год принесет вам успех, рост и меньше усилий для достижения больших целей. Мы в Proglib Academy пришли с хорошими новостями в начале года. 🌟 Обновления курсов! Мы работаем над тем, чтобы ваше обучение было проще и эффективнее. Вот что мы уже улучшили: 📈 Data Science: улучшили блок «Геометрическая прогрессия и векторная алгебра» — ключевой этап курса, который идет сразу после теории множеств. Он закладывает фундамент для работы с данными: от анализа роста и убывания величин (геометрическая прогрессия) до понимания многомерных пространств и операций с векторами. Знания которых пригодятся в машинном обучения и аналитики. 🐍 Python: обновили курс с учетом последней версии Python 3.9.5, добавив актуальные материалы и улучшив структуру. Чтобы вы могли лучше закрепить пройденный материал, мы добавили новые интересные задачи и практические примеры. Учебный процесс стал еще удобнее и эффективнее, а вы сможете быстрее освоить современные инструменты и техники программирования Общие обновления: - Перезаписали демо-курсы и презентации. Чтобы вы точно одурели с этой прикормки. - Сократили время проверки домашних заданий, ответы теперь приходят быстрее. - Видео теперь без перекрытий, презентации стали четче, а задания логичнее. Но главное — мы растем для вас и с вами. Ваша обратная связь помогает нам становиться лучше. Делитесь идеями, и вместе мы создадим лучший образовательный продукт для вас! 💡 С 27.01.25 цены изменятся на 10%. Пример: Математика для DS (Базовый): 20,990 → 23,090 ₽. Это позволяет нам делать курсы еще круче. Давайте сделаем 2025 год годом вашего профессионального успеха! 🚀 Выбрать курс

❓ Что такое импортируемый и исполняемый пакеты? Импортируемые пакеты содержат библиотечные функции и структуры данных, которые могут быть использованы в других пакетах. Исполняемые пакеты содержат функцию main() и являются точкой входа для выполнения программы. Исполняемые пакеты всегда имеют имя main

Хочешь уверенно проходить IT-интервью? Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще. 💡 Почему Т1 тренажёр — это мастхэв? • Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше. • Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!". • Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях. Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов! Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy #Айти #Собеседование #Т1

❓ Что такое ABA-проблема в контексте Compare and Swap операций? ABA-проблема — это ситуация, которая возникает при использовании операции Compare-And-Swap (CAS) в многопоточном программировании. Она связана с тем, что значение переменной изменяется с A на B, а затем снова на A. CAS не может определить, что значение изменялось между этими состояниями, и считает, что оно не изменилось.

❓Какие механизмы используются для предотвращения бесконечных повторных попыток (spinlocks) в Lock-Free алгоритмах? Для предотвращения бесконечных попыток используются: Экспоненциальный бэкофф: поток ждёт случайный интервал времени перед следующей попыткой CAS, постепенно увеличивая задержку. Это снижает нагрузку на процессор. Адаптивные алгоритмы: используют метрики системы, такие как нагрузка на процессор, чтобы регулировать поведение потоков. Алгоритмы с ограничением времени ожидания (timed wait): если после определённого количества попыток CAS не удаётся, поток может прекратить выполнение или использовать fallback-метод. Смешанный подход (Hybrid Locking): Использование мьютексов или других методов синхронизации как резервного механизма, если CAS не удаётся.

Способы борьбы с трэшингом Увеличение размера кэша: выделить больше памяти для хранения данных. Оптимизация алгоритма замещения: использовать эффективные алгоритмы, такие как: LRU (Least Recently Used): замещает данные, которые не использовались дольше всего. LFU (Least Frequently Used): удаляет данные, которые реже всего запрашиваются. Категоризация кэша: разделить данные на сегменты для разных типов запросов, чтобы снизить конкуренцию. Фильтрация данных: исключить из кэша редко запрашиваемую или устаревшую информацию. Многоуровневое кэширование: организовать кэширование на нескольких уровнях: Локальный кэш (в памяти приложения). Распределённый кэш (например, Redis, Memcached). Предварительное заполнение кэша: использовать pre-warming для загрузки часто запрашиваемых данных при запуске системы.

Что такое трэшинг? (В контексте кэширования) Трэшинг — это состояние, когда кэш постоянно вытесняется новыми данными, из-за чего система вынуждена часто обращаться к основному источнику данных (например, к базе данных). Это приводит к значительному снижению производительности, так как теряется основная цель кэширования — ускорение доступа к часто используемой информации.

❓Чем отличаются Lock-Free и Wait-Free алгоритмы? Lock-Free алгоритмы: ➖Гарантируют, что хотя бы один поток завершит операцию за конечное время. ➖Возможны случаи, когда некоторые потоки остаются в состоянии постоянных повторных ➖попыток. ➖Обеспечивают высокий уровень производительности и простоты реализации. Wait-Free алгоритмы: ➖Гарантируют, что каждый поток завершит операцию за конечное время. ➖Обычно сложнее в реализации и менее производительны из-за необходимости более сложной координации между потоками. ➖Используются там, где важно обеспечить равноправие (fairness).

❓ Что такое «кеш-пробивка» (cache penetration) и как с этим бороться? Кеш-пробивка — это ситуация, когда запросы приходят на данные, которых нет в кеше и никогда не будет, например, для несуществующих идентификаторов. Такие запросы всегда попадают в базу данных, перегружая ее. ❓ Как с этим бороться? Занесение пустых значений: если данные отсутствуют, сохранять в кеше пустое значение с коротким TTL. Блокировка запросов: использовать блокировку (mutex), чтобы один поток обрабатывал запрос, а остальные ждали результат. Предварительная фильтрация: проверять валидность запросов до обращения к кешу.

❓Что такое Compare-And-Swap (CAS)? Это атомарная операция, широко используемая в многопоточном программировании для синхронизации доступа к общим данным без использования блокировок. Она обеспечивает механизм обновления значения переменной только если её текущее значение соответствует ожидаемому.

❓В какой момент Go устанавливает случайный seed для map?
Anonymous voting