Библиотека Go для собеса | вопросы с собеседований
6.85K subscribers
221 photos
5 videos
1 file
404 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
У вас есть код на Go версии 1.20, который использует map. Что нужно сделать, чтобы мигрировать на версию 1.24, которая принесла Swiss Table в Go

Делать ничего не нужно, потому что внешне map не изменилась. Методы работают также, как и до обновления.
😁21🥱9👍5🌚2
Что делает переменная окружения GOOS в Go

Переменная окружения GOOS определяет операционную систему, для которой будет скомпилировано Go-приложение. Она используется при кросс-компиляции, когда код пишется на одной платформе, но компилируется для другой.

Поддерживаемые значения GOOS:
• Linux
• Windows
• macOS
• FreeBSD
• OpenBSD
• NetBSD
• Android
• iOS
• Plan 9


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4
Что такое префиксная сумма

Префиксная сумма — это массив, в котором каждый элемент содержит сумму всех предыдущих элементов исходного массива до текущего индекса.

Это позволяет быстро вычислять сумму любого подмассива за O(1) после предварительной обработки.


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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👾4🥰1
Как отличается управление памятью в Go от С++

Управление памятью в Go и C++ различается по подходу. Go использует автоматический сборщик мусора, который упрощает написание кода и уменьшает риск утечек памяти, но может влиять на производительность. C++ же требует ручного управления памятью с помощью операторов new и delete, что дает низкоуровневый контроль и высокую производительность, но увеличивает сложность и риск ошибок.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💯3
Что такое канареечный релиз/тестирование

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔2🌚2
Media is too big
VIEW IN TELEGRAM
⚙️ Как работает API

Proglib рассказывает базу в формате рилса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱8👍5🤔31👾1
Что такое Starvation

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Что такое Cache contention

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🏃‍♀️ 40+ каналов, которые должен читать каждый разработчик

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

IT Job Hub | Работа и вакансии в IT — избранные IT-вакансии

Библиотека программиста — новости из мира IT и технологий

Книги для программистов — самые годные книги по любым языкам и стекам

IT-мемы — мемы про жизу айтишника

Proglib Academy — обучение и курсы, чтобы стать топовым специалистом

Азбука айтишника — азы из мира разработки

Библиотека нейросетей — лайфхаки и промпты для разных задач, баттлы нейронок и новости из мира ИИ

Библиотека фронтендера — все о JS, React, Angular и не только

Библиотека мобильного разработчика — лайфхаки и новости из мира Swift и Kotlin

Библиотека хакера — уязвимости, атаки, бэкдоры и как от них защититься

Библиотека тестировщика — самое интересное о том, как крашить код

🦫 Go
Библиотека Go-разработчика
Библиотека задач по Go
Библиотека Go для собеса
Вакансии по Go

#️⃣ C#
Библиотека шарписта
Библиотека задач по C#
Библиотека собеса по C#
Вакансии по C#

🔧 DevOps
Библиотека devops’а
Библиотека задач по DevOps
Библиотека собеса по DevOps
Вакансии по DevOps & SRE

🐘 PHP
Библиотека пхпшника
Библиотека задач по PHP
Библиотека PHP для собеса
Вакансии по PHP, Symfony, Laravel

🐍 Python
Библиотека питониста
Библиотека Python для собеса
Библиотека задач по Python
Вакансии по питону, Django, Flask

☕️ Java
Библиотека джависта
Библиотека задач по Java
Библиотека Java для собеса
Вакансии по Java

📊 Data Science
Библиотека дата-сайентиста
Библиотека задач по Data Science
Библиотека Data Science для собеса
Вакансии по Data Science

🎮 C++
Библиотека C/C++ разработчика
Библиотека задач по C++
Библиотека C++ для собеса
Вакансии по C++

Подписывайтесь на интересные вам каналы и сохраняйте пост в закладки, чтобы не потерять 🔑
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Table-Driven тестирование

Табличное тестирование (table-driven tests)— это популярный подход к написанию тестов, при котором определяется набор тестовых случаев в виде таблицы или слайса структур, а затем каждый случай прогоняется через одну и ту же тестовую логику.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👾4🤔1
Что делает CGO_ENABLED

CGO_ENABLED — это переменная окружения, которая управляет использованием CGo при компиляции Go-приложений.

CGo — это механизм в Go, который позволяет взаимодействовать с C-кодом, вызывать C-функции и использовать C-библиотеки внутри Go-программ.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💯41
Чем CGO_ENABLED=0 полезен при сборке Go-приложений

Переменная окружения CGO_ENABLED=0 отключает поддержку CGo при компиляции Go-кода. Это означает, что все зависимости компилируются исключительно на чистом Go, без использования C-библиотек.

Если CGO_ENABLED=1, компилятору Go могут понадобиться инструменты и заголовочные файлы C для целевой платформы. С CGO_ENABLED=0 можно без проблем собирать бинарники для других архитектур и ОС.

Отключение CGo позволяет Go-компилятору использовать статическую компоновку, что уменьшает размер бинарного файла и исключает динамические зависимости.

Приложение не зависит от внешних C-библиотек, что делает его легче для развертывания, особенно в контейнерах или в средах с минимальным окружением.

Исключение C-кода уменьшает вероятность уязвимостей, связанных с управлением памятью в C, и делает код более платформонезависимым.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11😁2
Как работает система пакетов в Go

В начале каждого .go файла указывается, к какому пакету он принадлежит

Если в коде есть package main, то этот пакет может быть скомпилирован в исполняемый файл. В противном случае это библиотечный пакет.

Пакеты импортируются явно, указывая полный путь.

Ограниченная область видимости

Если идентификатор (переменная, функция, структура) начинается с заглавной буквы, он доступен за пределами пакета.

Если начинается с маленькой буквы, он доступен только внутри пакета.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😁1🥱1
Как в Go реализовать wildcard импорт

В Go нет wildcard-импортов (import "*"), как в Java или Python.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11👍3🥱2🤔1
Как создать свою кастомную ошибку в Go

1️⃣ Пакет errors позволяет быстро создать новую ошибку

2️⃣ Через fmt.Errorf() с форматированием

3️⃣ Создание кастомного типа ошибки через struct

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102
Как работает errors.Is()

Функция errors.Is(err, target) позволяет проверять цепочку ошибок, включая обёрнутые ошибки.

errors.Is(err, ErrNotFound) сравнивает err с ErrNotFound по значению, поэтому сработает.

Почему err == ErrNotFound не сработает?

• err == ErrNotFound проверяет только точное совпадение указателей.

• Если ошибка была обёрнута (fmt.Errorf("%w", err)), указатель изменился, и == больше не сработает.

• А errors.Is() умеет разбирать цепочку ошибок, поэтому он правильно обработает вложенную ошибку.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
В чем разница между rune и byte

byte и rune — это синонимы типов uint8 и int32:

• byte (аналог uint8) — хранит один байт. Используется для работы с ASCII-символами и []byte.
• rune (аналог int32) — хранит один Unicode-символ, так как некоторые символы занимают больше 1 байта.

Когда использовать

• byte — для ASCII-символов, массивов []byte, работы с файлами
• rune — для Unicode (например, китайские и эмодзи-символы)

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
В чем отличие между буферизированным и небуферизированным каналом с точки зрения синхронизации

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

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🥱2
Чем sync.Cond отличается от sync.Mutex

sync.Mutex — примитив блокировки, предотвращает конкурентный доступ к данным. Горутины ждут освобождения мьютекса, но не получают уведомления об изменении состояния.

sync.Cond — механизм ожидания события. Горутины ждут условие (Wait()), а другая горутина будит (Signal() или Broadcast()) их, когда условие меняется.

sync.Cond полезен, когда нужно ждать события, а не опрашивать состояние в цикле.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤩6😁1