Sobes.tech

Използвали ли сте моделите Inbox и Outbox?

274

Задача: «Пинг-понг с таймаут» Напишете функция pingPong, която: - Стартира две горутини: едната генерира съобщения "ping", другата — "pong". - Горутините трябва да обменят съобщения чрез общ канал строго по ред. - Обменът продължава 3 секунди, след което програмата трябва да приключи (грейсфул спиране). - Използвайте контекст за анулиране с таймаут. - Извеждайте всяко съобщение на екрана заедно с времето (в милисекунди от старта). Примерен очакван изход: 0ms: ping

218

Проста задача за live coding (базова конкуренция) Условие: Напишете функция fetchAll(urls []string) map[string]string, която за всеки URL изпълнява HTTP GET заявка конкурентно и връща карта, където ключът е URL, а стойността е тялото на отговора (низ). Ако заявката не успее (грешка, не 200), стойността ще бъде празен низ. Ограничения: - Не може да се използват външни библиотеки (само стандартните). - Не може да се променя подписът. - Програмата не трябва да пада при паника в http.Get. Примерен вход: ["[link]" "[link]" "[link]"]

203

package main import ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }

189

Попълнете слайса с елементи без мьютекс, за да съдържа всички 1000 елемента.

180

Как осигуриха идемпотентността?

179

Какво да кажете на интервюиращия (ако ви попитат) "Ще използвам работен пул с фиксиран брой работници, канал за задачи и sync.WaitGroup. Работниците ще изпълняват заявките, а таймаутът и анулирането ще се контролират чрез контекста. Резултатите ще събера в буфер, защитен с мьютекс (или чрез отделен канал)." Сега е вашият ред Напишете кода в този чат. Ще го проверя и ще дам обратна връзка. Ако не знаете откъде да започнете, поискайте подсказка. Успех!

177

Какво е указател и какво ще стане, ако аргументът на функцията е указател?

161

// всички елементи в slice трябва да са уникални + общо 1000 елемента // програмата не трябва да се блокира излишно заради time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("дублиращо се увеличение") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

161

Каква е разликата между DELETE и TRUNCATE?

146

Разкажи за блокировките в Postgres.

145

Чувал ли си за разпределено проследяване?

140

Разкажи ми за последния ти проект.

137