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

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
May 29
Как расширяется ёмкость у слайсов

Ёмкость слайса расширяется динамически при добавлении элементов, если текущая длина достигает ёмкости. Обычно, когда нужно увеличить ёмкость, она удваивается — то есть становится примерно в 2 раза больше прежней. Однако этот удвоенный рост действует только до определённого предела (около 256 элементов). После этого Go увеличивает ёмкость не в два раза, а примерно на 1.25 (то есть на четверть от текущей емкости). Такое поведение связано с оптимизацией использования памяти и выравниванием данных.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
May 29
Чем конкурентность отличается от параллельности

Конкурентность и параллельность — это разные, хотя и связанные понятия:

Конкурентность — это способность системы управлять несколькими задачами одновременно, то есть они могут переключаться друг с другом, но не обязательно выполняются в один момент времени. Например, одна задача может приостанавливаться, чтобы дать ресурсы другой, и так поочерёдно.

Параллельность — это одновременное выполнение нескольких задач в один и тот же момент времени, например, когда есть несколько процессорных ядер, и каждое ядро выполняет свою задачу одновременно.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
May 30
May 31
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
May 31
Как вам вопросы этой недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментариях.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 1
June 1
Что такое пакет syscall в Go и для чего он используется

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

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 1
В чем основное отличие между пакетами os и syscall в контексте работы с файлами

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

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 2
Что такое паттерн Mediator

Паттерн Медиатор — это способ организовать общение между разными частями программы через одного «посредника».

Вместо того, чтобы все объекты напрямую друг с другом разговаривали и зависели друг от друга, они общаются только с этим посредником. Посредник принимает сообщения от одного объекта и решает, кому их передать дальше.

Это упрощает код, потому что объекты меньше завязаны друг на друга — они знают только медиатора, а не всех сразу. Если надо изменить логику общения, меняешь только медиатора, а не все объекты.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 3
Как обработать сразу несколько ошибок

Помимо поочерёдной обработки ошибок с Go 1.20 можно объединить ошибки в одну. Это позволяет создать агрегированную ошибку с несколькими вложенными ошибками.

Пример:
err = errors.Join(function1(), function2())

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 4
June 5
Сколько виртуальной памяти может использовать Go-процесс

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

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

Для того чтобы увидеть фактически использованную память процессом Go, можно воспользоваться командой top в Unix-системах. В столбцах RES (Linux) или RSIZE (macOS) можно увидеть количество реально выделенной памяти процессу Go.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 5
Какие типы указателей есть в Go

1. Указатель на тип (*T).

Это самый общий тип указателя. Он указывает на значение определенного типа. Например, *int указывает на значение типа int, а *string — на строку.

2. Указатель на массив.

Указатели могут быть использованы для работы с массивами. Важно помнить, что при передаче массива в функцию по значению, копируется сам массив, а не ссылка на него. Чтобы избежать копирования, можно использовать указатель на массив.

3. Указатель на срез.

Срезы в Go являются динамическими и указывают на массив, поэтому можно работать с ними через указатели.
Указатель может быть nil, что означает отсутствие ссылки на значение.

4.
Указатель на структуру.

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

5. Указатели на интерфейсы.

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

6. Нулевой указатель:

Указатели могут быть nil. Это полезно для инициализации указателей, когда они ещё не указывают на какую-либо память.

В Go указатели не могут быть арифметическими (например, нельзя просто прибавлять числа к указателю, как в C).

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 6
June 7
Чем отличается TCP от UDP

TCP — это надежный протокол с установлением соединения, который гарантирует доставку данных в правильном порядке. Он медленнее из-за проверки целостности и повторной передачи потерянных пакетов.

UDP — это ненадежный протокол без установления соединения. Он быстрее, так как не проверяет доставку и не повторяет потерянные пакеты.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 7
Где UDP будет предпочтительнее, чем TCP

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

Видеоконференции и стриминг — где задержка важнее, чем потеря отдельных пакетов.

Онлайн-игры — где важно быстрое обновление состояния игры, а потеря пакетов не всегда влияет на игровой процесс.

VoIP (голосовые вызовы по интернету) — где важно минимизировать задержку в передаче голоса, даже если часть данных потеряется.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
June 8
June 8
❗️ Фидбек по прошедшей неделе

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуются комментарии под постом.

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