Golang задачи с собеседований
4.58K subscribers
491 photos
6 videos
12 files
257 links
Задачи, тесты и теоретические вопросы по Go. Так же по gin, grpc, горутинах, архитектуре api и http стэку.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
✏️ Создайте ограничитель запросов (Rate Limiter)

Задача:

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

• Запросы, которые превышают установленный лимит, должны быть заблокированы.

Решение в картинках ⬆️

🐸Библиотека задач по Go
Какой пакет необходим для разработки исполняемого приложения на Go?

Библиотека задач по Go.
Какой идентификатор можно использовать из другого пакета?

👻 — func calculateSum(a, b int) int {}
🌚 — func CalculateSum(a, b int) int {}
⚡️ — private func CalculateSum(a, b int) int {}
🎉 — func (s *Sum) calculate() int {}

🐸Библиотека задач по Go
Что проверяет функция errors.Is(err, ErrNotFound)?

👻 — Она определяет, является ли err экземпляром ErrNotFound, включая обёрнутые ошибки.
🌚 — Она проверяет, совпадает ли err с переменной ErrNotFound.
⚡️ — Она всегда возвращает false, так как функции errors.Is() не существует.
🎉 — Это устаревший метод, теперь используется сравнение err == ErrNotFound.

🐸 Библиотека задач по Go
Можно ли передавать канал в функцию как аргумент?

— Да, можно передать в функции.
— Нет, каналы нельзя передавать в функции.
— Да, но только если канал объявлен как chan int.

Библиотека задач по Go.
Какое сообщение будет отображено при запуске этого кода?
Какой объект нужен для создания sync.Cond?

— sync.WaitGroup
— sync.ProgLib
— sync.Mutex или sync.RWMutex
— sync.AtomicInt

Библиотека задач по Go.
Когда стоит применять директиву //go:linkname?

Когда требуется доступ к закрытым методам и переменным в других пакетах для тестирования
Когда необходимо вызывать внешние функции из других языков программирования
Когда нужно скрыть функции и переменные от кода вне пакета
Когда необходимо установить ограничения доступа между пакетами

Библиотека задач по Go
Какой результат выдаст код

👻 — 0
🌚 — a
⚡️ — [97 98 99]
🎉 — 97

🐸Библиотека задач по Go
💬 Как оставлять комментарии в чате нашего канала

В нашем чате работает бот Shieldy, который защищает от спама, запрашивая у новых участников решение простой капчи.

⚠️ Многие сталкиваются с проблемой: вы нажимаете «Прокомментировать» под постом, пишете что-то, а потом получаете бан и не можете комментировать.

Почему это происходит: Shieldy отправляет капчу в общий чат, а не в комментарии под конкретным постом. Поэтому капчу можно не заметить, не ответить на нее, и бот автоматически заблокирует вас.

Как присоединиться к чату, чтобы избежать бана от бота

— Зайдите в описание канала и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат

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

❗️ Если вас всё-таки забанили

— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу

Администраторы канала не могут ускорить процесс, бот автоматически снимет блокировку через пару минут. Мы понимаем, что эта система не идеальна и ищем более удобное решение.

👾 Спасибо, что активно участвуете в обсуждении наших постов!
Какой результат будет, если передать пустой интерфейс в reflect.TypeOf()?

👻 — Это приведёт к ошибке компиляции.
🌚 — Вернёт тип interface{}.
⚡️ — Вернёт nil.
🎉 — Вернёт тип void.

🐸Библиотека задач по Go
Какой подход к планированию горутин используется в Go?

👻 — M:1 (Много горутин на один поток)
🌚 — M:N (Много горутин на много потоков)
⚡️ — 1:1 (Один поток на одну горутину)
🎉 — N:100 (Много потоков на сто горутин)

🐸Библиотека задач по Go
Что означает runtime.GOMAXPROCS(4)

👻 — Это предел на количество горутин, которые могут выполняться одновременно.
🌚 — Это конфигурация для распределения горутин по всем доступным процессорам.
⚡️ — Это параметр, который ограничивает количество потоков в программе.
🎉 — Это настройка, определяющая, сколько ядер процессора может использовать Go.

🐸Библиотека задач по Go
Что случится, если функция, переданная в sync.Once.Do, вызовет панику (при условии, что мы сможем восстановиться после ошибки)?

👻 — Программа завершится с ошибкой, и функция не будет вызвана повторно.
🌚 — Паника будет проигнорирована, и функция продолжит выполнение.
⚡️ — Все последующие вызовы функции завершатся ошибкой.
🎉 — Паника рассматривается как завершение функции, и будущие вызовы не вызовут её снова.

🐸Библиотека задач по Go
Что случится, если вы примените оператор goto для перехода из одной функции в другую?

👻 — Это вызовет ошибку компиляции, так как оператор goto работает только в пределах одной функции.
🌚 — Это возможно, но только если функции находятся в одном пакете.
⚡️ — Это ведет к переполнению стека, поскольку переход между функциями является дорогостоящим.
🎉 — Оператор goto позволяет переходить между функциями, но лучше использовать обычные вызовы функций.

🐸Библиотека задач по Go
Какой паттерн описан ниже

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

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

👻 — Синглтон
🌚 — Шаблонный метод
⚡️ — Фабричный метод
🎉 — Сага
👾 — Много букав..

🐸Библиотека задач по Go
Какой результат вы получите при выполнении кода?

👻 — Привет, мир!
🌚 — Привет...
⚡️ — Завершится с ошибкой
🎉 — Ошибка компиляции

🐸 Библиотека задач по Go
Что будет, если попытаться передать данные в канал, который не был инициализирован?

👻 — Программа будет работать, и данные будут отправлены через канал. Их можно будет получить позже.
🌚 — Программа остановится, так как канал не инициализирован.
⚡️ — Программа завершится с ошибкой.
🎉 — Канал автоматически инициализируется, и данные будут отправлены.

🐸Библиотека задач по Go
Почему каждый программист, работающий на Go, должен начинать утро с кофе?

👻 — Когда программист пьёт кофе, его производительность возрастает, как будто он увеличил GOMAXPROCS с 1 до 4.
🌚 — Кофе улучшает взаимодействие между мозгом и клавиатурой, предотвращая гонки за ресурсами, а код становится свободным от deadlock.
⚡️ — Без кофе программист становится похожим на неинициализированный канал — он может только блокировать выполнение.
🎉 — Без кофе код не компилируется.

🐸 Библиотека задач по Go