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

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

رفتن به کانال در Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

نمایش بیشتر
4 748
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-97 روز
-3830 روز
جذب مشترکین
ژوئیه '26
ژوئیه '26
+42
در 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 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
28 ژوئیه+1
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
پست‌های کانال
🤔 Что такое репликация? Это процесс копирования и поддержания данных в синхронном или асинхронном порядке между несколькими базами данных или серверами. Это позволяет данным быть доступными на различных серверах, что увеличивает доступность, устойчивость к сбоям и может улучшить производительность приложений за счёт распределения нагрузки на разные серверы или узлы. 🚩Цели 🟠Увеличение доступности данных Позволяет системе продолжать работать даже при сбое одного или нескольких серверов. При наличии нескольких копий данных, система может переключиться на использование актуальной копии данных на другом сервере. 🟠Распределение нагрузки Может помочь распределить запросы чтения между несколькими узлами, тем самым уменьшая нагрузку на один сервер и улучшая время отклика в приложениях. 🟠Геораспределение Реплик в разных географических локациях может улучшить время доступа к данным для пользователей, которые находятся ближе к одной из реплик. 🟠Обеспечение безопасности данных Данных на разные физические места уменьшает риски, связанные с потерей данных в случае катастроф. 🚩Типы 🟠Синхронная репликация Данные одновременно записываются в основную и реплицированную базы данных. Транзакция считается завершенной только после успешной записи на всех репликах. Это обеспечивает высокую степень согласованности данных, но может снижать производительность из-за задержек, связанных с ожиданием подтверждения от всех реплик. 🟠Асинхронная репликация Изменения данных первоначально записываются на основной сервер, и только после этого асинхронно передаются на репликационные серверы. Это метод быстрее, поскольку основная система не ждёт подтверждения от реплик перед завершением транзакции. Однако это также увеличивает риск несогласованности данных между репликами. Ставь 👍 и забирай 📚 Базу знаний

2
Просто показываем промокод Просто предлагаем съездить отдохнуть со скидкой 5000 рублей от Яндекс Путешествий. Больше ничего о
Просто показываем промокод Просто предлагаем съездить отдохнуть со скидкой 5000 рублей от Яндекс Путешествий. Больше ничего от вас не хотим, потому что понимаем, что сил нет. Забронировать #реклама travel.yandex.ru О рекламодателе
193
3
🤔 Чем отличается merge от rebase? - Merge объединяет ветки, создавая новый коммит слияния. История сохраняет раздвоение и объединение. - Rebase «переписывает» историю, перенося коммиты одной ветки поверх другой, будто они создавались последовательно. Merge — безопаснее и прозрачно показывает, где ветки сливались. Rebase — чище история, но может быть опасен при совместной разработке, особенно на уже опубликованных ветках. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
239
4
Средства для стирки с выгодой! Скидка 25% на Lenor, Ariel, Tide в Любимой категории Купить #реклама market.yandex.ru О реклам
Средства для стирки с выгодой! Скидка 25% на Lenor, Ariel, Tide в Любимой категории Купить #реклама market.yandex.ru О рекламодателе
275
5
🤔 Какие бывают способы оптимизации? Оптимизация кода в 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 } Ставь 👍 и забирай 📚 Базу знаний
283
6
Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в мультиподписке
Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в мультиподписке Плюс. Попробуйте бесплатно❤️ Слушать #реклама 18+ music.yandex.ru О рекламодателе
294
7
🤔 Какие циклы есть в 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) } Ставь 👍 и забирай 📚 Базу знаний
234
8
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве.
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве. 👍 Лицензированный оператор связи. 👍 Индивидуальные конфигурации выделенных серверов под задачи клиента. 👍 Круглосуточная техническая поддержка в Телеграм, без ботов. Узнать цену #реклама 16+ itsoft.ru О рекламодателе
241
9
🤔 Как защититься от ошибки во время конкурентной записи в 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 } Ставь 👍 и забирай 📚 Базу знаний
265
10
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с жи
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с живыми примерами кода. Поднимем кластер в Docker, создадим топики, напишем продюсеров на Python/Java, настроим консьюмеров с consumer groups. Разберем партиционирование, оффсеты и гарантии доставки. Для backend-разработчиков, DevOps и всех, кто любит практику. Узнать больше #реклама 16+ otus.ru О рекламодателе
322
11
🤔 Как проводить тестирование в Go? Тестирование в Go реализуется с помощью встроенного пакета testing. Тесты пишутся как функции с именами, начинающимися на Test, принимающими параметр *testing.T. Для запуска тестов используется команда go test. Также доступны инструменты для бенчмарков (Benchmark), покрытия кода тестами (-cover) и работы с примерами (Example). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
356
12
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пр
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе
322
13
🤔 Почему нельзя брать ссылку на значение, хранящееся по ключу в 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 } Ставь 👍 и забирай 📚 Базу знаний
319
14
Предзаказ Samsung Galaxy Z серии на сайте МТС! Оформите предзаказ на Samsung Galaxy Z серии с выгодой до 20 000р. и повышенны
Предзаказ Samsung Galaxy Z серии на сайте МТС! Оформите предзаказ на Samsung Galaxy Z серии с выгодой до 20 000р. и повышенным кешбэком 10% на сайте МТС! Рассрочка 0-0-24 Узнать больше #реклама shop.mts.ru О рекламодателе
333
15
🤔 В чем отличия 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 Поддерживает явную приоритизацию запросов, позволяя клиенту указывать приоритет обработки ресурсов, что делает загрузку страниц более эффективной. Ставь 👍 и забирай 📚 Базу знаний
407
16
Kaspersky Premium со скидкой до 28% Покупайте Kaspersky Premium со скидкой до 28% и получайте гарантированные ценные подарки
Kaspersky Premium со скидкой до 28% Покупайте Kaspersky Premium со скидкой до 28% и получайте гарантированные ценные подарки от партнёров, а также возможность участовать в розыгрыше путешествия. Узнать больше #реклама 16+ kaspersky.ru О рекламодателе
349
17
🤔 Что делает команда kill в Linux: Команда `kill` в Linux отправляет сигналы процессам. Самым распространенным использованием является отправка сигнала SIGTERM (по умолчанию), который сообщает процессу о необходимости завершения, или SIGKILL, который немедленно прерывает процесс, не позволяя ему корректно завершиться. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
438
18
Дачная дача в Т-Банк Шопе Футболки с огурцами, тыквами, капустой и другие крутые штуки, да еще и с финансовыми пожеланиями. Н
Дачная дача в Т-Банк Шопе Футболки с огурцами, тыквами, капустой и другие крутые штуки, да еще и с финансовыми пожеланиями. Надо брать. Посмотреть каталог Финансовые услуги оказывает: АО "Тинькофф Банк". #реклама tbank.ru О рекламодателе
383
19
🤔 Что такое iota? Это предопределенное идентификатор, используемое для создания последовательностей целочисленных констант. Он применяется в контексте объявления констант и автоматически инкрементируется на единицу с каждым новым значением. Обычно используется для определения множества связанных констант без необходимости вручную назначать каждому элементу значение. 🚩Основные характеристики 🟠Инициализация с нуля Начинает счет с 0 в каждой новой группе констант. 🟠Автоматическое увеличение Каждое последующее использование iota в одной группе констант увеличивает его значение на 1. 🟠Повторное использование При каждом новом объявлении константного блока iota сбрасывается до 0. package main import "fmt" const ( A = iota // 0 B // 1 C // 2 ) func main() { fmt.Println(A) // Вывод: 0 fmt.Println(B) // Вывод: 1 fmt.Println(C) // Вывод: 2 } Использование его для создания битовых флагов package main import "fmt" const ( Flag1 = 1 << iota // 1 << 0 = 1 Flag2 // 1 << 1 = 2 Flag3 // 1 << 2 = 4 Flag4 // 1 << 3 = 8 ) func main() { fmt.Println(Flag1) // Вывод: 1 fmt.Println(Flag2) // Вывод: 2 fmt.Println(Flag3) // Вывод: 4 fmt.Println(Flag4) // Вывод: 8 } Сброс его в новом блоке package main import "fmt" const ( X = iota // 0 Y // 1 ) const ( Z = iota // 0 (новый блок констант, iota сбрасывается) W // 1 ) func main() { fmt.Println(X) // Вывод: 0 fmt.Println(Y) // Вывод: 1 fmt.Println(Z) // Вывод: 0 fmt.Println(W) // Вывод: 1 } 🚩Комплексное использование Можно использовать в выражениях и совместно с другими константами для создания более сложных последовательностей. package main import "fmt" const ( _ = iota // пропускаем 0 KB = 1 << (10 * iota) // 1 << 10 = 1024 MB // 1 << 20 = 1048576 GB // 1 << 30 = 1073741824 ) func main() { fmt.Println("KB:", KB) // Вывод: KB: 1024 fmt.Println("MB:", MB) // Вывод: MB: 1048576 fmt.Println("GB:", GB) // Вывод: GB: 1073741824 } Ставь 👍 и забирай 📚 Базу знаний
393
20
Оплата на сайте с Яндекс Пэй: ниже отказы, выше продажи Клиенты оформляют заказ быстрее: оплата через Яндекс Пэй требует мини
Оплата на сайте с Яндекс Пэй: ниже отказы, выше продажи Клиенты оформляют заказ быстрее: оплата через Яндекс Пэй требует минимум действий. Сохраняйте платёжные данные в аккаунте Яндекса — клиенты платят в один клик. Интегрируйте кнопку оплаты через готовые модули или по API. Снижайте отказы и увеличивайте конверсию. Подключите Яндекс Пэй сейчас! Подать заявку Финансовые услуги оказывает: АО "Яндекс Банк". #реклама 16+ pay.yandex.ru О рекламодателе
311