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

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
В чём разница между replace, exclude и require в go.mod?

require — явно добавляет зависимость (и её версию) в проект.

replace — подменяет одну версию/путь зависимости на другую (например, локальную или форк).

exclude — exclude — исключает конкретную версию модуля из разрешения зависимостей. Это не удаляет модуль целиком, но не даст использовать именно эту версию (например, если она багованная).

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Что имеется в виду под статической компиляцией

Статическая компиляция в Go — это процесс, при котором компилятор Go встраивает все зависимости (включая стандартные библиотеки и сторонние пакеты) в один исполняемый бинарный файл.

Иными словами: результат сборки (go build) — это один самодостаточный бинарник, который можно запустить без дополнительных библиотек, файлов или окружения. Всё, что нужно программе для работы, уже внутри.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Какой паттерн позволяет объединить несколько различных интерфейсов в один

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Библиотека Go для собеса | вопросы с собеседований
Какой паттерн позволяет объединить несколько различных интерфейсов в один Этот паттерн называется Адаптер. Он позволяет преобразовать интерфейс одного класса в интерфейс, который ожидает клиент. Это полезно, когда у нас есть классы с несовместимыми интерфейсами
Признаёмся, взяли вопрос без корректировок с одного из интервью 👀

В хорошем собеседовании интервьюер не просто задаёт вопросы, но и даёт фидбек по ответу и даже может объяснить концепцию которую он спросил.

Человеческий фактор не исключение, поэтому советуем уточнять что имеет в виду человек по ту сторону интервью.

Пример для вопроса про адаптер
// Target - интерфейс, который ожидает клиент
type Target interface {
Request() string
}

// Adaptee - устаревший класс, который не соответствует интерфейсу Target
type Adaptee struct{}

func (a *Adaptee) SpecificRequest() string {
return "Специфический запрос из Adaptee"
}

// Adapter - адаптирует интерфейс Adaptee к интерфейсу Target
type Adapter struct {
adaptee *Adaptee
}

func (a *Adapter) Request() string {
// Адаптируем специфический запрос Adaptee к формату, который ожидает Target
return a.adaptee.SpecificRequest()
}


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

YAGNI (You Aren't Gonna Need It) — это принцип разработки программного обеспечения, который утверждает, что не стоит добавлять функциональность или код, который на данный момент не нужен. Идея заключается в том, чтобы сосредоточиться только на тех фичах и решениях, которые действительно требуются для текущей задачи, а не строить «на будущее» на основе предположений о том, что может быть нужно.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🔥 IT Breaking Memes — 30 000 ₽ за самую смешную IT-новость

Библиотека программиста запускает конкурс, который взорвет вашу ленту: создайте самую смешную альтернативную версию реальной IT-новости!

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🏆 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

Пример:
Реальная новость: «Гугл создала модель для общения с дельфинами».

Смешная альтернатива: «Нейросеть от Гугл обрабатывает видеопоток с камеры в свинарнике. ИИ следит, сколько свинья находится возле кормушки, не отталкивают ли ее собратья. Недокормленных докармливают, а переевшие пропускают следующую кормешку».

📅 Сроки: с 29 апреля по 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Ждем ваших новостей!
🥱2👍1
Почему defer функции выполняются в LIFO порядке

Основная причина заключается в том, как работает стек вызовов. Стек — это структура данных, которая работает по принципу последним пришел — первым ушел.

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

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

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱31
Как взять ссылку на значение в мапе

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

Пример, который не скомпилируется:
m := map[string]int{"a": 1}
p := &m["a"]


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3👾21👍1
Как передавать множество результатов функции

В Go можно возвращать несколько значений из функции напрямую — это одна из встроенных возможностей языка.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱28😁8👍2
📅 Итоги недели — нужна ваша реакция

Были интересные вопросы? Может сложновато или наоборот слишком скучно?

Можно просто:
🔥 — нравится
🌚 — так себе
😢 — скучно

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥48🌚24🤔2😢1👾1
Какие варианты циклов есть в Go

1. Классический for
for i := 0; i < 10; i++ {
fmt.Println(i)
}


2. Условный for (как while)

i := 0
for i < 10 {
fmt.Println(i)
i++
}


3. Бесконечный цикл
for {
fmt.Println("infinite loop")
break // не забудь выйти
}


4. for range — итерация по коллекции
for index, value := range []string{"a", "b", "c"} {
fmt.Println(index, value)
}


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

Библиотека cookiejar предоставляет механизм для управления HTTP-куками. Это часть стандартной библиотеки.

cookiejar позволяет автоматически сохранять и отправлять куки при работе с HTTP-запросами. Куки могут быть получены в ответах сервера и автоматически добавляться в будущие запросы, что позволяет поддерживать состояние между запросами (например, при аутентификации через сессии).

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость

Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.

📅 Сроки: прием новостей до 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Осталась неделя — ждем ваших новостей!
Что такое пакет net/mail в Go и какие задачи он решает

Пакет net/mail используется для создания, парсинга и обработки почтовых сообщений в формате MIME. Он помогает работать с заголовками сообщений, такими как From, To, Subject, и позволяет парсить и формировать MIME-сообщения. Основной функцией пакета является работа с адресами электронной почты и создание сообщений, готовых к отправке через SMTP.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Что из себя представляет паттерн Strangler Fig

Название происходит от одноимённого тропического растения, которое растёт вокруг дерева-хозяина, постепенно вытесняя его. По аналогии, новая система «обрастает» старую, заменяя её части одну за другой, пока полностью не вытеснит.

Как это работает:

— Создаётся прокси/фасад перед старой системой.
— Новые функции разрабатываются сразу в новой архитектуре.
— Старые модули постепенно переписываются и переносятся.
— После переноса очередной части — обновляется маршрутизация, чтобы трафик шёл в новую реализацию.
— По завершении — старая система удаляется.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👾21
Можно ли добиться от быстрой сортировки времени выполнения O(n log n)

Классическая быстрая сортировка выбирает опорный элемент. Если выбор плохой — например, всегда крайний элемент массива — и массив уже отсортирован (или почти), происходит деградация: один подмассив получает почти все элементы, а другой — почти пустой. Это приводит к дереву рекурсии глубиной n, и итоговая сложность становится O(n²).

Если опорный элемент выбирается случайно, то с высокой вероятностью дерево рекурсии будет сбалансированным. Это даёт среднюю сложность O(n log n), даже на почти отсортированных данных.

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6👍2
Как работает fmt.Sprintf и чем он отличается от fmt.Printf

fmt.Sprintf форматирует строку и возвращает её как результат, не выводя на экран.

fmt.Printf форматирует строку и сразу выводит её на экран.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱21🔥2
🧱 7 архитектурных паттернов, которые должен знать каждый программист

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

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

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

➡️ Узнать паттерны

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM