Golang | Вопросы собесов
الذهاب إلى القناة على Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
إظهار المزيد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 дней бесплатно
Кинопоиск — тысячи фильмов и сериалов без рекламы, в высоком качестве.
Яндекс Музыка и Книги тоже в мультиподписке Плюс.
Попробуйте бесплатно ❤️
Попробовать
#реклама 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 за пару минут — без сложных панелей и долгого ожидания.
На 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 рублей от Яндекс Путешествий. Больше ничего от вас не хотим, потому что понимаем, что сил нет.
Забронировать
#реклама
travel.yandex.ru
О рекламодателе | 315 |
| 8 | 🤔 Чем отличается merge от rebase?
- Merge объединяет ветки, создавая новый коммит слияния. История сохраняет раздвоение и объединение.
- Rebase «переписывает» историю, перенося коммиты одной ветки поверх другой, будто они создавались последовательно.
Merge — безопаснее и прозрачно показывает, где ветки сливались. Rebase — чище история, но может быть опасен при совместной разработке, особенно на уже опубликованных ветках.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 325 |
| 9 | Средства для стирки с выгодой!
Скидка 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-х ваших близких.
Кинопоиск и Яндекс Книги тоже в мультиподписке Плюс.
Попробуйте бесплатно❤️
Слушать
#реклама 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 современных дата-центра в Москве.
👍 Лицензированный оператор связи.
👍 Индивидуальные конфигурации выделенных серверов под задачи клиента.
👍 Круглосуточная техническая поддержка в Телеграм, без ботов.
Узнать цену
#реклама 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 — вебинар с живыми примерами кода. Поднимем кластер в 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 млн руб. на обучение в магистратуре
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
— 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р. и повышенным кешбэком 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 |
