Citydrive / Cитидрайв
Актуальность: 1 кв 2025
Задача: Что выведет? Какие проблемы в коде? Как исправить? go/puzzles
Заголовок раздела «Задача: Что выведет? Какие проблемы в коде? Как исправить? go/puzzles»func main() { data := map[int]bool{} for i := 0; i < 10; i++ { go func() { data[i] = true }() }
time.Sleep(time.Second * 100)
for k, v := range data { fmt.Println(k, v) }}Доп. вопросы и задания
Заголовок раздела «Доп. вопросы и задания»- Что такое mutex?
go/sync - Какие тут примитивы синхронизации можем использовать?
go/sync - Что такое атомики?
go/sync - Как решить на атомиках?
go/sync - Как решить на каналах?
go/channels - Каналы это, чем буферизированный от небуферизованного отличается?
go/channels - Что такое мапа, синк мапа чем от мапы отличается?
go/maps
Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»func main() { go func() { fmt.Println(1) }()
fmt.Println(2)}- Как сделать так, чтобы явно у нас только одна отработала, без доработки программы?
go/sync - Как доработать код, чтобы вывело оба числа?
go/concurrency - Как работает планировщик, как устроены очереди?
go/concurrency
Задача: Объединить все каналы в один. Если один канал закрывается, то необходимо все остальные закрыть. go/channels
Заголовок раздела «Задача: Объединить все каналы в один. Если один канал закрывается, то необходимо все остальные закрыть. go/channels»func merge(channels ...chan int) <-chan int {}Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»func a(s []int) { s = append(s, 37)}
func b(m map[int]int) { m[3] = 33}
func main() { s := make([]int, 3, 8) m := make(map[int]int, 8)
a(s) println(s[3]) // ?
b(m) println(m[3]) // ?}Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»type T []int
func (T) X() {}
func (*T) Z() {}
func main() { var t T
t.X() // 1 t.Z() // 2
var p = &t
p.X() // 3 p.Z() // 4 T{}.X() // 5 T{}.Z() // 6}Задача: Нужно написать select который выведет значения в порядке, как в out. go/channels
Заголовок раздела «Задача: Нужно написать select который выведет значения в порядке, как в out. go/channels»CREATE TABLE test_table (id bigserial PRIMARY KEY,name varchar(256)); in:+----+-------+| id | name |+----+-------+| 1 | name1 || 2 | name2 || 3 | name3 || 4 | name4 || 5 | name5 |+----+-------+
out:+----+-------+| id | name |+----+-------+| 1 | name1 || 3 | name3 || 2 | name2 || 4 | name4 || 5 | name5 |+----+-------+Задача: Задача 7. Есть 5 экземпляров сервисов. На них крутится такой код. Нужно сделать так, чтобы раз в 5 секунд только на одном из инстансов выводилось Hello World. Предложить системное решение. go/basics
Заголовок раздела «Задача: Задача 7. Есть 5 экземпляров сервисов. На них крутится такой код. Нужно сделать так, чтобы раз в 5 секунд только на одном из инстансов выводилось Hello World. Предложить системное решение. go/basics»func main() { for range time.NewTicker(time.Second * 5).C { fmt.Println("Hello World ") }}Вопрос на тему распределенных блокировок.