Your trial period has ended!
For full access to functionality, please pay for a premium subscription
GO
Библиотека Go для собеса | вопросы с собеседований
https://t.me/go_interview_lib
Channel age
Created
Language
Russian
1.37%
ER (week)
13.53%
ERR (week)

Вопросы с собеседований по Go и ответы на них.

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

Messages Statistics
Reposts and citations
Publication networks
Satellites
Contacts
History
Top categories
Main categories of messages will appear here.
Top mentions
The most frequent mentions of people, organizations and places appear here.
❓ Какой паттерн позволяет объединить несколько различных интерфейсов в один

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

🐸Библиотека Go для собеса
04/28/2025, 01:26
t.me/go_interview_lib/822 Link
❓ Что имеется в виду под статической компиляцией

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

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

🐸Библиотека Go для собеса
04/27/2025, 00:05
t.me/go_interview_lib/821 Link
❓ В чём разница между replace, exclude и require в go.mod?

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

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

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

🐸Библиотека Go для собеса
04/26/2025, 00:05
t.me/go_interview_lib/820 Link
❓ Когда стоит передавать по значению, а когда по указателю

Если нужно изменить объект внутри функции или он слишком большой для копирования — передавать по указателю. Это экономит ресурсы и позволяет напрямую работать с оригиналом. Но надо быть осторожным: можно случайно испортить данные, особенно если несколько функций шарят один и тот же указатель.

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

🐸Библиотека Go для собеса
04/25/2025, 00:02
t.me/go_interview_lib/819 Link
🚀 Как улучшить навыки разработки на Go?

Научитесь правильно использовать интерфейсы — ключ к гибкости и масштабируемости.

🗓 Присоединяйтесь к открытому вебинару 28 апреля в 20:00 мск и разберитесь, как эффективно применять интерфейсы в Go. На примерах мы разберем типовые ситуации и научим вас правильно интегрировать интерфейсы в код.

Понимание интерфейсов — ключ к эффективному проектированию приложений и обеспечению гибкости в коде.

➡ Регистрируйтесь и получите скидку на курс «Golang Developer. Professional»: https://clc.to/8gTcvg

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
04/24/2025, 20:58
t.me/go_interview_lib/818 Link
❓ Как следить за временем жизни горутины и зачем это делать

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

Основной инструмент для управления временем жизни горутины — это context.Context. Он позволяет задать дедлайн или тайм-аут и передать этот контекст внутрь горутины. Горутине нужно проверять канал <-ctx.Done() и корректно завершаться, когда этот канал закрывается. Это позволяет, например, автоматически завершать работу горутин по истечении заданного времени или по сигналу отмены извне.

Также можно использовать каналы управления вручную, передавая в горутину канал stop или done, и завершать её при получении сигнала. Такой способ полезен, если не требуется гибкость context, но нужно просто и понятно управлять остановкой.

🐸Библиотека Go для собеса
04/24/2025, 00:31
t.me/go_interview_lib/817 Link
❓ Можно ли сделать int(string) и string(int) соответственно

В Go нет прямой функции, как int(string) или string(int), которые можно использовать напрямую для преобразования типов. Вместо этого используются функции из пакета strconv.

1. Преобразование строки в целое число:
Для того, чтобы преобразовать строку в целое число, используется функция strconv.Atoi или strconv.ParseInt.
import "strconv"

str := "123"
num, err := strconv.Atoi(str) // преобразует строку в int
if err != nil {
// обработка ошибки
}
2. Преобразование целого числа в строку:
Для преобразования числа в строку используется функция strconv.Itoa.
import "strconv"

num := 123
str := strconv.Itoa(num) // преобразует int в строку
Кратко:
Нельзя напрямую использовать int(string) или string(int) в Go.
Для преобразования строки в число используем strconv.Atoi или strconv.ParseInt.
Для преобразования числа в строку используем strconv.Itoa.

🐸Библиотека Go для собеса
04/23/2025, 00:04
t.me/go_interview_lib/816 Link
❓ Как можно оперировать строками в Go

В Go для работы со строками используются следующие подходы:
1. Конкатенация: Строки можно склеивать с помощью оператора +, но это неэффективно при многократных операциях.
s := "Hello, " + "world!"
2. Пакет strings: Содержит функции для поиска, замены, разделения и преобразования строк:
import "strings"
lower := strings.ToLower("HELLO") // "hello"
3. strings.Builder: Эффективен для многократной конкатенации строк, избегает излишних аллокаций.
var builder strings.Builder
builder.WriteString("Hello")
result := builder.String() // "Hello"
4. Слайсы байт: Строки в Go — это слайсы байт, и их можно манипулировать для низкоуровневой работы.
b := []byte("Hello")
b[0] = 'h'
newStr := string(b) // "hello"

🐸Библиотека Go для собеса
04/22/2025, 00:03
t.me/go_interview_lib/815 Link
❓ Что происходит при склеивании строк в Go

При склеивании строк в Go с помощью оператора «+» создается новая строка, так как строки неизменяемы. Это может быть неэффективно, так как каждый раз происходит выделение памяти для новой строки.
Для улучшения производительности в случае частых склеиваний рекомендуется использовать strings.Builder, который оптимизирует процесс и минимизирует лишние аллокации.

Пример с strings.Builder:
var builder strings.Builder
for i := 0; i < 1000; i++ {
builder.WriteString("x")
}
result := builder.String()
Это значительно эффективнее, чем использование оператора «+» в цикле.

🐸Библиотека Go для собеса
04/21/2025, 00:04
t.me/go_interview_lib/814 Link
❓ Знакомы ли с концепцией 12FA для проектирования SaaS приложений (часть 2)

7. Порты и связи – приложение должно быть независимым от порта, на котором оно работает, и должно использовать обмен сообщениями через порты.
8. Конкурентность – приложение должно быть масштабируемым и поддерживать параллельное выполнение с использованием процессов.
9. Обработка ошибок – ошибки должны быть обрабатываться через логи, а не через сложные механизмы восстановления состояния.
10. Репликация процессов – приложение должно поддерживать репликацию процессов, чтобы обеспечивать отказоустойчивость.
11. Документация – необходимо поддерживать документацию для быстрого развертывания приложения.
12. Тестирование и производство – код должен быть готов к тестированию и запуску на производстве с минимальными усилиями.

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

🐸Библиотека Go для собеса
04/20/2025, 00:04
t.me/go_interview_lib/813 Link
❓ Знакомы ли с концепцией 12FA для проектирования SaaS приложений

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

Основные принципы включают:
1. Разделение конфигурации – конфигурация должна быть отдельной от кода (например, через переменные окружения).
2. Кодовая база – приложение должно иметь единую кодовую базу, которая управляется с помощью системы контроля версий.
3. Поддержка нескольких сред – приложение должно работать в различных средах (разработка, тестирование, продакшн) с минимальными изменениями в коде.
4. Обработка зависимостей – все зависимости должны быть явно заявлены в коде и управляться через зависимости, такие как go.mod для Go.
5. Сборка, релиз, выполнение – процесс развертывания приложения должен быть разделён на стадии сборки, релиза и выполнения.
6. Отслеживание состояния – приложение должно минимизировать зависимость от состояния, хранимого на сервере, и использовать внешние системы хранения состояния.

Продолжение следует...

🐸Библиотека Go для собеса
04/19/2025, 00:05
t.me/go_interview_lib/812 Link
⭐️ Что означает звёздочка у ресивера в Go

Звёздочка у ресивера в Go, как правило, означает, что мы работаем с указателем на тип, а не с самим значением этого типа. То есть, когда мы видим звёздочку перед типом, это указывает на то, что переменная является указателем.

Пример:
var ptr *int // указатель на int
Если у нас есть переменная типа *int, то её значение — это адрес в памяти, где хранится переменная типа int. Чтобы получить доступ к значению по этому адресу, нужно использовать оператор разыменования (тоже звёздочку):
var a int = 58
var ptr *int = &a // ptr теперь указывает на a
fmt.Println(*ptr) // выводит 58

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

🐸Библиотека Go для собеса
04/18/2025, 00:03
t.me/go_interview_lib/811 Link
❓Какие сущности есть в планировщике

➖Горутины (goroutines): Легковесные потоки, которые выполняют код асинхронно.
➖Машины (M): Абстракции операционных систем, отвечающие за выполнение горутин на физических процессорах.
➖Процессоры (P): Сущности, управляющие очередью готовых горутин и привязанные к ядрам процессоров.
➖Очередь ожидания (run queue): Очередь горутин, которые готовы к выполнению на процессоре.
➖Синхронизация: Взаимодействие с механизмами синхронизации (каналы, мьютексы, условные переменные) для управления выполнением горутин.

🐸Библиотека Go для собеса
04/17/2025, 00:02
t.me/go_interview_lib/810 Link
❓Что такое сага

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

Принципы саги:
➖Компенсационные транзакции: Откат предыдущих шагов при сбое.
➖Гибкость и отказоустойчивость: Избежание блокировок и улучшение отказоустойчивости.
➖Деление на шаги: Каждый шаг — это независимая локальная транзакция.

🐸Библиотека Go для собеса
04/16/2025, 00:04
t.me/go_interview_lib/809 Link
❓Расскажите про аналоги default в select'e

➖Горутины и каналы с блокировкой: Использование горутин с механизмами синхронизации, такими как sync.WaitGroup, для контроля блокировки при работе с каналами.
➖Таймеры или каналы с ограничением времени: Применение time.After или time.Tick для установки временных ограничений на ожидание, избегая бесконечной блокировки, как в случае с default.

🐸Библиотека Go для собеса
04/15/2025, 00:05
t.me/go_interview_lib/808 Link
❓Насколько безопасно передавать слайсы в разные горутины

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

Чтобы избежать гонок при работе с слайсами, необходимо использовать механизмы синхронизации, такие как мьютексы (sync.Mutex или sync.RWMutex) или каналы для передачи копий данных между горутинами. Важно предотвратить одновременное изменение и чтение слайса, чтобы избежать неожиданных ошибок.

🐸Библиотека Go для собеса
04/14/2025, 00:02
t.me/go_interview_lib/807 Link
❓ Что такое коллизия хэш-функции

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

🐸Библиотека Go для собеса
04/12/2025, 23:59
t.me/go_interview_lib/805 Link
📦 Главные проблемы распределенных систем (и способы их решения)

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

➡️ В этой статье мы рассмотрим четыре ключевых вызова в разработке таких систем и эффективные методы их преодоления.

🐸 Библиотека программиста
04/12/2025, 12:59
t.me/go_interview_lib/804 Link
❓ Что означает «D» в ACID

Durability (Долговечность).

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

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

🐸Библиотека Go для собеса
04/11/2025, 23:59
t.me/go_interview_lib/803 Link
❓ Что произойдёт, если попытаться использовать context.WithCancel, но не вызвать cancel()

Контекст не будет отменён, утечёт память и/или горутина не завершится, если она ждёт завершения этого контекста. Best practice — всегда вызывать cancel().

🐸Библиотека Go для собеса
04/10/2025, 23:59
t.me/go_interview_lib/802 Link
🤦‍♂️ Я забил на споры о микросервисах с архитекторами, и вот почему

С момента появления концепции микросервисов прошло уже несколько лет. За это время появилось много споров о её эффективности.

Зачем спорить о микросервисах, если можно просто посмотреть на факты? Давайте разберёмся, что действительно важно

➡️ Читать статью

💬 Как вы относитесь к микросервисам? Использовали ли вы их в своих проектах? Ждём ваши комментарии 👇

🐸Библиотека devops'a
04/10/2025, 16:35
t.me/go_interview_lib/801 Link
❓ Что означает «I» в ACID

Isolation — изолированность.

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

🐸Библиотека Go для собеса
04/09/2025, 23:59
t.me/go_interview_lib/800 Link
❓ Что означает принцип идентификации ресурсов в REST

Принцип идентификации ресурсов в REST означает, что каждый ресурс должен быть доступен через уникальный идентификатор, обычно представленный в виде URI. Ресурсы в контексте REST могут быть любым объектом: документом, записью в базе данных, изображением, пользователем и т.д. Каждый из этих объектов должен быть однозначно идентифицирован.

Для работы с пользователями в REST API, ресурсы могут быть идентифицированы следующим образом:

• /users — коллекция всех пользователей.

• /users/123 — ресурс с ID 123, представляющий конкретного пользователя.

🐸Библиотека Go для собеса
04/09/2025, 00:30
t.me/go_interview_lib/799 Link
❓ Что значит «C» из ACID

C — Consistency (Согласованность)

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

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

🐸Библиотека Go для собеса
04/08/2025, 01:14
t.me/go_interview_lib/798 Link
❓ Как работает затенение

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

var x int = 10 // глобальная переменная

func main() {
x := 20 // локальная переменная, затеняющая глобальную
fmt.Println(x) // Выведет 20, потому что локальная переменная затеняет глобальную
}

🐸Библиотека Go для собеса
04/07/2025, 00:09
t.me/go_interview_lib/797 Link
❓ Что значит «A» из ACID

A — Atomicity (Атомарность)

Атомарность гарантирует, что транзакция будет выполнена целиком или не выполнена вовсе. То есть, если транзакция состоит из нескольких операций (например, вставка, обновление или удаление данных), то либо все эти операции выполнятся успешно, либо ни одна из них не будет выполнена.

🐸Библиотека Go для собеса
04/06/2025, 00:47
t.me/go_interview_lib/796 Link
✏️ Готовы ли вы к собеседованию

Если вы работаете с языком Go и уверены в своих знаниях — самое время это проверить.

Это мини-экзамен перед собеседованием: синтаксис, тонкости работы с горутинами, ошибки, которые делают даже опытные разработчики.

➡️ Проверить свои знания

🐸Библиотека Go для собеса
04/05/2025, 12:59
t.me/go_interview_lib/795 Link
❓ Какие методы REST API идемпотентны

➖ GET: многократные запросы на получение данных не изменяют состояние системы.

➖ PUT: при многократных запросах с одинаковыми данными, результат должен быть одинаковым (например, обновление объекта с одинаковыми данными не должно создавать дополнительные изменения).

➖DELETE: повторный запрос на удаление ресурса не должен приводить к ошибке (например, если ресурс уже удален).

🐸Библиотека Go для собеса
04/05/2025, 01:10
t.me/go_interview_lib/794 Link
❓ Что такое false sharing

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

Как избежать false sharing:

1. Разделение данных: чтобы минимизировать false sharing, можно разместить данные, которыми часто пользуются разные горутины или потоки, в разные кэш-линии. Для этого в Go можно использовать padding (добавление пустых полей в структуру) или memory alignment (выравнивание данных по границе кэш-линии).

2. Использование более мелких блоков данных: если возможно, лучше разделить общие данные на более мелкие блоки, чтобы они не попадали в одну кэш-линию.

3. Использование атомарных операций: в некоторых случаях можно использовать атомарные операции для предотвращения пересылки данных между процессами, так как они могут помочь снизить нагрузку на кэш.

🐸Библиотека Go для собеса
04/04/2025, 00:07
t.me/go_interview_lib/793 Link
❓ Как можно прервать работу с time.Sleep() в Go, если программа должна реагировать на завершение работы

В Go, использование time.Sleep() не позволяет гибко реагировать на контекст завершения (context.Done()), потому что эта функция просто «засыпает» на указанный период времени, не проверяя при этом контекст выполнения. Если программа получает сигнал о завершении работы (например, через context), и в это время выполняется time.Sleep(), программа будет продолжать «спать» до завершения времени сна, что может быть проблемой в случае необходимости немедленно завершить выполнение.

Чтобы решить эту проблему и более корректно обрабатывать паузы с учётом контекста, можно использовать несколько альтернативных подходов, которые позволяют прерывать паузы и учитывать отмену контекста. Например, можно использовать конструкцию select с каналами и функцией time.After(), а также с каналом контекста, который будет отслеживать отмену.

🐸Библиотека Go для собеса
04/03/2025, 00:12
t.me/go_interview_lib/792 Link
❓ Что бы сделал Go, если бы у него была возможность искать баги самостоятельно

Во-первых, он бы запускал go vet, чтобы анализировать код на наличие типичных ошибок, таких как неправильное использование переменных или несовместимость типов. Далее Go бы проверял гонки данных с помощью флага -race, чтобы находить и устранять состояния гонки в многозадачных приложениях, особенно когда несколько горутин изменяют общие данные.

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

🐸Библиотека Go для собеса
04/01/2025, 22:08
t.me/go_interview_lib/791 Link
❓ Какая разница между select и обычным switch в Go?

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

🐸Библиотека Go для собеса
04/01/2025, 00:44
t.me/go_interview_lib/790 Link
❓ Что будет при вызове runtime.Goexit в методе main

runtime.Goexit() завершает только текущую горутину, но если она вызывается в основной горутине, это приведет к deadlock.

Для завершения всей программы лучше использовать os.Exit(), чтобы избежать ошибок и корректно завершить выполнение.

🐸Библиотека Go для собеса
03/30/2025, 22:48
t.me/go_interview_lib/789 Link
Search results are limited to 100 messages.
Some features are available to premium users only.
You need to buy subscription to use them.
Filter
Message type
Similar message chronology:
Newest first
Similar messages not found
Messages
Find similar avatars
Channels 0
High
Title
Subscribers
No results match your search criteria