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

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

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

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

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
Что включает в себя набор примитивов синхронизации пакета sync в Go

Примитивы синхронизации — инструменты (в основном из пакета sync), которые обеспечивают безопасную работу с общими данными и координацию горутин.

sync.Mutex — базовый механизм взаимного исключения. Позволяет заблокировать доступ к ресурсу, чтобы только одна горутина могла его изменять в текущий момент.

sync.RWMutex — вариант мьютекса с разделением на блокировку для чтения и записи:
Одновременно могут выполняться несколько операций чтения.
Запись возможна только при полном исключении доступа.

sync.WaitGroup — позволяет дождаться завершения группы горутин. Удобен для синхронного старта/остановки процессов.

sync.Once — гарантирует однократное выполнение кода, даже при множественных вызовах из разных горутин.

sync.Cond — условная переменная, при помощи которой горутина может "заснуть" до наступления определённого события.

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🚀 Главная ошибка новичка в ML — строить звездолёт вместо велосипеда

Многие сразу хотят свою Midjourney, но в итоге получают только выгорание.

Успех начинается с «велосипеда»: научитесь предсказывать цены или классифицировать отзывы. Освойте базу, а уже потом стройте «звездолёты».

Наш курс «ML для старта в Data Science» — это и есть тот самый правильный старт от простого к сложному.

👉 Начните правильно

Берёте курс «ML для старта» до конца недели — Python в подарок.

А 21 августа пройдет бесплатный вебинар с Марией Жаровой: узнаете, какие проекты качают скилл, а какие качают ваши нервы.

А какой самый сложный проект вы брались делать в самом начале? 🫢
1
Что такое гонка данных и как она проявляется в языке Go

➡️ Гонки данных — это ошибки, возникающие в конкурентных системах, когда две горутины одновременно обращаются к одной и той же переменной, и хотя бы одно из обращений — запись. Для предотвращения таких ошибок в Go есть примитивы синхронизации.

➡️ Состояние гонки (Race Condition) описывает ситуацию, когда поведение программы зависит от порядка выполнения операций. Гонка данных — это тип состояния гонки.

Пример гонки данных, которая может привести к сбоям и повреждению памяти:
func main() {
c := make(chan bool)
m := make(map[string]string)
go func() {
m["1"] = "a" // Первый конфликтный доступ
c <- true
}()
m["2"] = "b" // Второй конфликтный доступ
<-c
for k, v := range m {
fmt.Println(k, v)
}
}


➡️ Для диагностики таких ошибок Go предоставляет встроенный детектор гонок данных. Для его использования достаточно добавить флаг -race при запуске команд:
$ go test -race mypkg   
$ go run -race mysrc.go
$ go build -race mycmd
$ go install -race mypkg


➡️ Переменная окружения GORACE позволяет настроить параметры детектора гонок, например:
$ GORACE="log_path=/tmp/race/report Strip_path_prefix=/my/go/sources/" go test -race


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🔎 Ищете способы улучшить работу с данными в Go?

На открытом вебинаре разберемся, как использовать итераторы для работы с большими данными. Поймем, что изменилось с Go 1.23 и какие преимущества дают ленивые итераторы.

❗️ Изучите, как заменить стандартные циклы на более эффективные итераторы и оптимизировать свой код. Освойте лучшие практики разработки на Go!

Присоединяйтесь к открытому уроку 19 августа в 20:00 МСК: https://clc.to/M-aU0Q

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍1🥱1
Для чего в Go применяется пустой идентификатор

Пустой идентификатор _ в Go используется как анонимный заполнитель. Он позволяет обращаться к значению, но не связывает его с переменной.

1️⃣ Игнорирование возвращаемых значений функции: если функция возвращает несколько значений, но нужно только одно из них.
value, _ := someFunction()


2️⃣Игнорирование элементов в range: при переборе элементов среза или карты, когда нужен только ключ или только значение.
for k, _ := range myMap {
fmt.Println(k)
}

for _, v := range mySlice {
fmt.Println(v)
}


3️⃣Импорт пакета: если пакет нужно импортировать только для выполнения его инициализации, без использования его функций или типов.
import _ "image/png"


4️⃣ Игнорирование переменных в множественном присваивании:
_, y := getCoordinates()


5️⃣ Игнорирование ошибок: можно использовать для игнорирования ошибок, но это не рекомендуется.
result, _ := strconv.Atoi("123")


6️⃣ Использование в анонимных структурах: при создании анонимной структуры, когда не нужно имя для одного из полей.
person := struct {
Name string
_ int
}{"Alice", 30}


➡️ Пустой идентификатор полезен, но злоупотреблять им не следует, особенно для игнорирования ошибок.

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