ar
Feedback
Golang | Вопросы собесов

Golang | Вопросы собесов

الذهاب إلى القناة على Telegram
4 751
المشتركون
+224 ساعات
-77 أيام
-3530 أيام
جذب المشتركين
يوليو '26
يوليو '26
+46
في 0 قنوات
يونيو '26
+46
في 0 قنوات
Get PRO
مايو '26
+42
في 0 قنوات
Get PRO
أبريل '26
+62
في 0 قنوات
Get PRO
مارس '26
+84
في 0 قنوات
Get PRO
فبراير '26
+112
في 0 قنوات
Get PRO
يناير '26
+129
في 0 قنوات
Get PRO
ديسمبر '25
+95
في 0 قنوات
Get PRO
نوفمبر '25
+188
في 1 قنوات
Get PRO
أكتوبر '25
+187
في 1 قنوات
Get PRO
سبتمبر '25
+120
في 0 قنوات
Get PRO
أغسطس '25
+177
في 0 قنوات
Get PRO
يوليو '25
+183
في 0 قنوات
Get PRO
يونيو '25
+153
في 0 قنوات
Get PRO
مايو '25
+192
في 0 قنوات
Get PRO
أبريل '25
+244
في 0 قنوات
Get PRO
مارس '25
+352
في 2 قنوات
Get PRO
فبراير '25
+249
في 1 قنوات
Get PRO
يناير '25
+368
في 53 قنوات
Get PRO
ديسمبر '24
+180
في 0 قنوات
Get PRO
نوفمبر '24
+150
في 0 قنوات
Get PRO
أكتوبر '24
+295
في 41 قنوات
Get PRO
سبتمبر '24
+342
في 246 قنوات
Get PRO
أغسطس '24
+134
في 0 قنوات
Get PRO
يوليو '24
+282
في 54 قنوات
Get PRO
يونيو '24
+819
في 244 قنوات
Get PRO
مايو '24
+886
في 189 قنوات
Get PRO
أبريل '24
+606
في 23 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
29 يوليو+2
28 يوليو+3
27 يوليو+2
26 يوليو+5
25 يوليو0
24 يوليو+1
23 يوليو+1
22 يوليو0
21 يوليو+2
20 يوليو0
19 يوليو+1
18 يوليو0
17 يوليو+1
16 يوليو+5
15 يوليو+2
14 يوليو+1
13 يوليو+2
12 يوليو+2
11 يوليو+1
10 يوليو+2
09 يوليو+3
08 يوليو0
07 يوليو+2
06 يوليو+2
05 يوليو+1
04 يوليو0
03 يوليو+4
02 يوليو+1
01 يوليو0
منشورات القناة
Кинопоиск до 360 дней бесплатно Кинопоиск — тысячи фильмов и сериалов без рекламы, в высоком качестве. Яндекс Музыка и Книги
Кинопоиск до 360 дней бесплатно Кинопоиск — тысячи фильмов и сериалов без рекламы, в высоком качестве. Яндекс Музыка и Книги тоже в мультиподписке Плюс. Попробуйте бесплатно ❤️ Попробовать #реклама 18+ kinopoisk.ru О рекламодателе

2
🤔 Как устроен массив в Go? Массивы представляют собой фиксированную последовательность элементов одного типа. Являются основополагающей структурой данных, на базе которой строятся более сложные структуры, такие как слайсы. Рассмотрим, как устроены массивы, их особенности, а также сравнение с другими структурами данных. 🚩Основные характеристики 🟠Фиксированный размер Размер массива задается при его объявлении и не может изменяться во время выполнения программы. 🟠Тип элементов Все элементы массива имеют один и тот же тип. 🟠Непосредственное хранение данных В отличие от слайсов, массивы хранят свои элементы в непрерывном блоке памяти. 🟠Объявление массива С указанием типа элементов и фиксированного размера. Это объявление создает массив из пяти целых чисел, инициализированных нулями. var arr [5]int 🟠Инициализация массива Массивы могут быть инициализированы при объявлении arr := [5]int{1, 2, 3, 4, 5} Можно также инициализировать массив частично, оставив остальные элементы равными нулям: arr := [5]int{1, 2} 🟠Доступ к элементам Осуществляется с использованием индексов, начиная с 0 fmt.Println(arr[0]) // 1 arr[1] = 10 fmt.Println(arr[1]) // 10 🟠Длина массива Фиксирована и задается при его объявлении. Ее можно получить с помощью функции len fmt.Println(len(arr)) // 5 🟠Копирование массива При присваивании одного массива другому копируются все элементы: arr1 := [5]int{1, 2, 3, 4, 5} arr2 := arr1 arr2[0] = 10 fmt.Println(arr1) // [1 2 3 4 5] fmt.Println(arr2) // [10 2 3 4 5] 🟠Передача массива в функции При этом копируется весь массив: func modifyArray(a [5]int) { a[0] = 10 } arr := [5]int{1, 2, 3, 4, 5} modifyArray(arr) fmt.Println(arr) // [1 2 3 4 5] 🚩Сравнение 🟠Размер Массивы имеют фиксированный размер, тогда как слайсы динамичны. 🟠Производительность Массивы могут быть более производительными для небольших коллекций данных из-за отсутствия накладных расходов на управление динамическими данными. 🟠Гибкость: Слайсы более гибки благодаря динамическому изменению размера и доступным методам. Использование массивов package main import ( "fmt" ) func main() { // Объявление и инициализация массива arr := [5]int{1, 2, 3, 4, 5} // Доступ к элементам fmt.Println("First element:", arr[0]) // First element: 1 // Изменение элементов arr[1] = 10 fmt.Println("Modified array:", arr) // Modified array: [1 10 3 4 5] // Длина массива fmt.Println("Length of array:", len(arr)) // Length of array: 5 // Копирование массива arr2 := arr arr2[0] = 20 fmt.Println("Original array:", arr) // Original array: [1 10 3 4 5] fmt.Println("Copied array:", arr2) // Copied array: [20 10 3 4 5] // Передача массива в функцию modifyArray(arr) fmt.Println("Array after modifyArray call:", arr) // Array after modifyArray call: [1 10 3 4 5] } func modifyArray(a [5]int) { a[0] = 10 } Ставь 👍 и забирай 📚 Базу знаний
150
3
Аренда VPS сервера. Удобно: через Telegram-бота! Запустите VPS за пару минут — без сложных панелей и долгого ожидания. На 4vp
Аренда VPS сервера. Удобно: через Telegram-бота! Запустите VPS за пару минут — без сложных панелей и долгого ожидания. На 4vps.su сервер можно заказать прямо через Telegram-бота. Выбирайте конфигурацию, оплачивайте любым удобным способом и начинайте работу сразу после активации. ✅ VPS/VDS от 80 ₽/мес ✅ Мгновенная выдача сервера ✅ 36 дата-центров по всему миру ✅ NVMe-диски и сеть до 5 Gbit/s ✅ SLA 99,9% и бесплатная защита от DDoS Подходит для сайтов, VPN, ботов, прокси, игровых серверов и других проектов. Узнать больше #реклама 16+ 4vps.su О рекламодателе
244
4
🤔 Какой концепт конструкция defer помогает реализовывать? defer реализует концепт отложенного выполнения — аналог "гарантированного освобождения ресурса" или финализации. Это полезно для: - Закрытия файлов или соединений. - Освобождения ресурсов. - Логирования. - Обработки ошибок в recover. Фактически defer помогает имитировать поведение finally из других языков. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
294
5
Партицирование и индексы: миллиарды строк без тормозов Узнайте, как партицирование и индексы ускоряют миллиарды строк. Регист
Партицирование и индексы: миллиарды строк без тормозов Узнайте, как партицирование и индексы ускоряют миллиарды строк. Регистрирация! 19 .08 Узнать больше #реклама 16+ otus.ru О рекламодателе
335
6
🤔 Что такое репликация? Это процесс копирования и поддержания данных в синхронном или асинхронном порядке между несколькими базами данных или серверами. Это позволяет данным быть доступными на различных серверах, что увеличивает доступность, устойчивость к сбоям и может улучшить производительность приложений за счёт распределения нагрузки на разные серверы или узлы. 🚩Цели 🟠Увеличение доступности данных Позволяет системе продолжать работать даже при сбое одного или нескольких серверов. При наличии нескольких копий данных, система может переключиться на использование актуальной копии данных на другом сервере. 🟠Распределение нагрузки Может помочь распределить запросы чтения между несколькими узлами, тем самым уменьшая нагрузку на один сервер и улучшая время отклика в приложениях. 🟠Геораспределение Реплик в разных географических локациях может улучшить время доступа к данным для пользователей, которые находятся ближе к одной из реплик. 🟠Обеспечение безопасности данных Данных на разные физические места уменьшает риски, связанные с потерей данных в случае катастроф. 🚩Типы 🟠Синхронная репликация Данные одновременно записываются в основную и реплицированную базы данных. Транзакция считается завершенной только после успешной записи на всех репликах. Это обеспечивает высокую степень согласованности данных, но может снижать производительность из-за задержек, связанных с ожиданием подтверждения от всех реплик. 🟠Асинхронная репликация Изменения данных первоначально записываются на основной сервер, и только после этого асинхронно передаются на репликационные серверы. Это метод быстрее, поскольку основная система не ждёт подтверждения от реплик перед завершением транзакции. Однако это также увеличивает риск несогласованности данных между репликами. Ставь 👍 и забирай 📚 Базу знаний
303
7
Просто показываем промокод Просто предлагаем съездить отдохнуть со скидкой 5000 рублей от Яндекс Путешествий. Больше ничего о
Просто показываем промокод Просто предлагаем съездить отдохнуть со скидкой 5000 рублей от Яндекс Путешествий. Больше ничего от вас не хотим, потому что понимаем, что сил нет. Забронировать #реклама travel.yandex.ru О рекламодателе
315
8
🤔 Чем отличается merge от rebase? - Merge объединяет ветки, создавая новый коммит слияния. История сохраняет раздвоение и объединение. - Rebase «переписывает» историю, перенося коммиты одной ветки поверх другой, будто они создавались последовательно. Merge — безопаснее и прозрачно показывает, где ветки сливались. Rebase — чище история, но может быть опасен при совместной разработке, особенно на уже опубликованных ветках. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
325
9
Средства для стирки с выгодой! Скидка 25% на Lenor, Ariel, Tide в Любимой категории Купить #реклама market.yandex.ru О реклам
Средства для стирки с выгодой! Скидка 25% на Lenor, Ariel, Tide в Любимой категории Купить #реклама market.yandex.ru О рекламодателе
322
10
🤔 Какие бывают способы оптимизации? Оптимизация кода в Go может быть выполнена на нескольких уровнях: 🟠Оптимизация алгоритмов и структур данных Использование более эффективных алгоритмов (например, O(log n) вместо O(n^2)). Выбор подходящих структур данных (например, map вместо срезов для поиска по ключу). 🟠Оптимизация работы с памятью Снижение количества аллокаций (использование sync.Pool, предварительное выделение памяти). Использование []byte вместо string, если требуется частое изменение строки. Минимизация копирования данных, например, передача []byte по ссылке вместо копирования. 🟠Оптимизация работы с горутинами Использование worker pool, чтобы избежать избыточного создания горутин. Ограничение количества параллельных задач (runtime.GOMAXPROCS). Использование каналов правильной ёмкости для минимизации блокировок. 🟠Оптимизация ввода-вывода (I/O) Буферизация (bufio.Reader, bufio.Writer). Использование асинхронных операций при работе с файлами или сетью. Использование io.Pipe() для потоковой обработки данных. 🟠Использование профилирования и анализа производительности pprof для анализа CPU, памяти и блокировок. race detector (-race флаг) для выявления проблем с конкурентным доступом. Инструменты трассировки (trace). 🚩Пример оптимизации работы с памятью Пример неэффективного кода func inefficient() []string { var result []string for i := 0; i < 1000; i++ { result = append(result, fmt.Sprintf("Item %d", i)) // Частые аллокации } return result } Оптимизированный вариант func efficient() []string { result := make([]string, 0, 1000) // Выделяем память заранее for i := 0; i < 1000; i++ { result = append(result, fmt.Sprintf("Item %d", i)) } return result } Ставь 👍 и забирай 📚 Базу знаний
322
11
Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в мультиподписке
Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в мультиподписке Плюс. Попробуйте бесплатно❤️ Слушать #реклама 18+ music.yandex.ru О рекламодателе
294
12
🤔 Какие циклы есть в Go? Существует один основной цикл — это цикл for. н может использоваться в различных формах, выполняя функции традиционных циклов while, do-while и классического for. 🚩Формы цикла С тремя выражениями package main import "fmt" func main() { for i := 0; i < 5; i++ { fmt.Println(i) } } Как while package main import "fmt" func main() { i := 0 for i < 5 { fmt.Println(i) i++ } } Бесконечный package main import "fmt" func main() { i := 0 for { if i >= 5 { break } fmt.Println(i) i++ } } С использованием range package main import "fmt" func main() { arr := []int{1, 2, 3, 4, 5} for index, value := range arr { fmt.Printf("Index: %d, Value: %d\n", index, value) } } 🚩Примеры Итерация по массиву arr := [5]int{10, 20, 30, 40, 50} for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } Итерация по карте m := map[string]int{"a": 1, "b": 2, "c": 3} for key, value := range m { fmt.Printf("Key: %s, Value: %d\n", key, value) } Итерация по строке s := "hello" for index, char := range s { fmt.Printf("Index: %d, Char: %c\n", index, char) } Ставь 👍 и забирай 📚 Базу знаний
250
13
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве.
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве. 👍 Лицензированный оператор связи. 👍 Индивидуальные конфигурации выделенных серверов под задачи клиента. 👍 Круглосуточная техническая поддержка в Телеграм, без ботов. Узнать цену #реклама 16+ itsoft.ru О рекламодателе
241
14
🤔 Как защититься от ошибки во время конкурентной записи в map? В Go обычный map не потокобезопасен. Если несколько горутин одновременно записывают в map, возникнет ошибка "fatal error: concurrent map writes". Решение: использовать синхронизацию через sync.Mutex, sync.RWMutex или sync.Map. 🚩Использование `sync.Mutex` (мьютекс) Блокируем доступ на запись и чтение через sync.Mutex. package main import ( "fmt" "sync" ) type SafeMap struct { mu sync.Mutex m map[string]int } func (s *SafeMap) Set(key string, value int) { s.mu.Lock() // Блокируем доступ defer s.mu.Unlock() s.m[key] = value } func (s *SafeMap) Get(key string) int { s.mu.Lock() // Блокируем на чтение defer s.mu.Unlock() return s.m[key] } func main() { safeMap := SafeMap{m: make(map[string]int)} var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() safeMap.Set(fmt.Sprintf("key%d", i), i) }(i) } wg.Wait() fmt.Println("Готово:", safeMap.Get("key5")) // Получаем значение без гонок данных } 🚩Использование `sync.RWMutex` (оптимизация для чтения) sync.RWMutex позволяет нескольким горутинам читать одновременно, но блокирует запись. type SafeMap struct { mu sync.RWMutex m map[string]int } func (s *SafeMap) Set(key string, value int) { s.mu.Lock() // Блокируем только на запись defer s.mu.Unlock() s.m[key] = value } func (s *SafeMap) Get(key string) int { s.mu.RLock() // Разрешаем множественное чтение defer s.mu.RUnlock() return s.m[key] } 🟠Использование `sync.Map` (встроенный потокобезопасный `map`) sync.Map из стандартной библиотеки уже потокобезопасен, но работает немного медленнее обычного map из-за внутренних механизмов. package main import ( "fmt" "sync" ) func main() { var m sync.Map var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() m.Store(i, i*10) // Потокобезопасная запись }(i) } wg.Wait() val, ok := m.Load(5) // Потокобезопасное чтение if ok { fmt.Println("Значение:", val) } } Использование канала (`chan`) вместо `map` Вместо map можно передавать данные через канал (chan), если логика позволяет. package main import ( "fmt" ) func main() { ch := make(chan map[string]int, 1) ch <- make(map[string]int) go func() { m := <-ch m["key"] = 42 ch <- m }() m := <-ch fmt.Println(m["key"]) // 42 } Ставь 👍 и забирай 📚 Базу знаний
300
15
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с жи
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с живыми примерами кода. Поднимем кластер в Docker, создадим топики, напишем продюсеров на Python/Java, настроим консьюмеров с consumer groups. Разберем партиционирование, оффсеты и гарантии доставки. Для backend-разработчиков, DevOps и всех, кто любит практику. Узнать больше #реклама 16+ otus.ru О рекламодателе
322
16
🤔 Как проводить тестирование в Go? Тестирование в Go реализуется с помощью встроенного пакета testing. Тесты пишутся как функции с именами, начинающимися на Test, принимающими параметр *testing.T. Для запуска тестов используется команда go test. Также доступны инструменты для бенчмарков (Benchmark), покрытия кода тестами (-cover) и работы с примерами (Example). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
382
17
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пр
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе
322
18
🤔 Почему нельзя брать ссылку на значение, хранящееся по ключу в map? Нельзя напрямую взять ссылку на значение, хранящееся по ключу в карте (map), из-за особенностей реализации карт и управления памятью. Рассмотрим подробнее, почему это так. 🚩Причины, почему нельзя брать ссылку на значение в карте 🟠Внутреннее устройство карты (map) Карты реализованы на основе хеш-таблиц. Внутреннее устройство карты предполагает, что значения могут перемещаться в памяти при выполнении операций, таких как добавление или удаление элементов. Хеш-таблица может перераспределять (реорганизовывать) свои внутренние структуры для оптимизации доступа к элементам. Это может происходить, например, когда карта увеличивается в размере. 🟠Потенциальная недействительность ссылок Если бы была возможность брать ссылки на значения, хранящиеся в карте, то при любой операции изменения карты (добавление, удаление элементов) ссылки могли бы становиться недействительными. Это привело бы к потенциально небезопасному поведению программы, так как указатель (ссылка) мог бы указывать на уже несуществующую или перемещенную область памяти. 🚩Демонстрация проблемы Здесь попытка взять ссылку на значение из карты могла бы привести к проблемам package main import "fmt" func main() { m := map[string]int{"a": 1, "b": 2} // Нельзя делать так: // p := &m["a"] // Вместо этого можно работать с копией значения value := m["a"] p := &value fmt.Println("Value:", *p) // 1 // Изменение карты m["c"] = 3 // Ссылка на значение в карте могла бы стать недействительной // fmt.Println("Value after map change:", *p) } 🚩Правильные способы работы со значениями карты Для работы с ними лучше использовать копии значений. Вот несколько способов, как это можно сделать: 🟠Работа с копией значения Получить значение из карты и сохранить его в переменную. value := m["a"] 🟠Изменение значения в карте Если необходимо изменить значение в карте, его нужно сначала извлечь, изменить, а затем снова записать в карту. value := m["a"] value = value + 10 m["a"] = value 🟠Использование указателей в качестве значений В некоторых случаях можно использовать указатели в качестве значений карты, чтобы можно было изменять значения через указатели. package main import "fmt" func main() { m := map[string]*int{"a": new(int), "b": new(int)} *m["a"] = 1 *m["b"] = 2 // Теперь можно брать указатели на значения p := m["a"] fmt.Println("Value:", *p) // 1 // Изменение значения через указатель *p = 42 fmt.Println("Updated Value:", *m["a"]) // 42 } Ставь 👍 и забирай 📚 Базу знаний
347
19
Предзаказ Samsung Galaxy Z серии на сайте МТС! Оформите предзаказ на Samsung Galaxy Z серии с выгодой до 20 000р. и повышенны
Предзаказ Samsung Galaxy Z серии на сайте МТС! Оформите предзаказ на Samsung Galaxy Z серии с выгодой до 20 000р. и повышенным кешбэком 10% на сайте МТС! Рассрочка 0-0-24 Узнать больше #реклама shop.mts.ru О рекламодателе
333
20
🤔 В чем отличия http 1.1 и http 2? Это версии протокола HTTP, каждая из которых имеет свои особенности и улучшения по сравнению с предыдущими версиями. Важные различия между этими версиями включают следующие аспекты: 🚩Мультиплексирование 🟠HTTP/1.1 Поддерживает одновременное открытие нескольких TCP соединений (обычно 6-8), что позволяет загружать несколько ресурсов параллельно. Однако каждое соединение может обрабатывать только один запрос за раз, что приводит к задержкам из-за блокировки очереди (head-of-line blocking). 🟠HTTP/2 Вводит мультиплексирование, позволяющее отправлять множество запросов и ответов асинхронно через одно единственное TCP соединение. Это значительно уменьшает задержки и улучшает производительность при загрузке страниц с большим количеством ресурсов. 🚩Бинарный протокол 🟠HTTP/1.1 Является текстовым протоколом, что означает, что запросы и ответы форматируются в виде читаемого текста. 🟠HTTP/2 Бинарный протокол, который делает передачу данных более эффективной и менее подверженной ошибкам в синтаксическом анализе. Бинарный формат упрощает реализацию парсеров и уменьшает размер передаваемых данных. 🚩Сжатие заголовков 🟠HTTP/1.1 Заголовки передаются без сжатия, что может привести к значительному объему передаваемых данных, особенно если одни и те же заголовки отправляются повторно с каждым запросом. 🟠HTTP/2 Использует механизм сжатия заголовков HPACK, который уменьшает избыточность заголовков, сжимая их перед отправкой. Это особенно эффективно для повторяющихся запросов к одним и тем же серверам. 🚩Приоритизация запросов 🟠HTTP/1.1 Не поддерживает приоритизацию запросов, из-за чего браузеры должны использовать эвристики для управления приоритетами ресурсов. 🟠HTTP/2 Поддерживает явную приоритизацию запросов, позволяя клиенту указывать приоритет обработки ресурсов, что делает загрузку страниц более эффективной. Ставь 👍 и забирай 📚 Базу знаний
460