Golang
Тайм-аут одинаковый для всех? Как будет высчитываться этот тайм-аут?
Если БД недоступна и вы делаете retry — не будете ли вы бесконечно обрабатывать одни и те же сообщения? Все 500 уйдут в DLQ?
Вот, предположим, у нас большая нагрузка, миллионы клиентов, и твой запрос начинает очень долго работать. Что ты будешь делать? Как ты поймешь, что он работает за константное время?
Что выведет программа? Почему? func main() { timeStart := time.Now() _, _ = <-worker(), <-worker() println(int(time.Since(timeStart).Seconds())) } func worker() chan int { ch := make(chan int) go func() { time.Sleep(3 * time.Second) ch <- 1 }() return ch }
Почему вы сделали именно столько сервисов? Как происходил выбор — делать сервис или не делать?
Если добавляем много consumer'ов, но Kafka lag всё равно не уменьшается — о чём это свидетельствует?
Давай обсудим реплики и партиционирование — зачем они нужны.
Почему мы не можем на всякий случай на каждое поле заранее добавлять по индексу?
Как пронумеровать сотрудников мужского и женского пола отдельно?
Как понять, в какой бакет положить новый элемент?
Можешь привести примеры, когда использование внешних ключей нецелесообразно?
Как осуществлялся деплой? Через что выкатывали в Kubernetes?
Расскажи про массивы и слайсы в Go: чем они похожи и в чём отличие.
package main import "fmt" func main() { a := []int{1,2} a = append(a, 3) b := append(a, 4) c := append(a, 5) fmt.Println(b) fmt.Println(c) }
А так вот ин-мемори решение у тебя использует мьютекс. Можешь рассказать, что это такое, какой использовался у тебя?
Сталкивался ли ты с понятием шардирования?
func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // добавить транзакцию if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount partner.Hold -= amount partner.Balance += amount if err := r.save(advertiser); err != nil { return err } if err := r.save(partner); err != nil { return err } r.totalPayouts++ return nil } func (r *PayoutRepository) find(id string) (Partner, error) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // добавить $1 if err != nil { if err == sql.ErrNoRows { return p, errors.New("partner not found") } return p, err } return p, nil }
Зачем вообще используются интерфейсы (в разработке в целом, не только в Go)?
Как это сделать на уровне Go — идейно, чтобы отправлять ответ пользователю и параллельно отправлять данные в аналитику?
Дана таблица "orders": +----+---------+---------------------+-------------+ | id | user_id | created_at | price_total | +----+---------+---------------------+-------------+ | 1 | 111 | [phone]:00:00 | 2000| | 2 | 222 | [phone]:00:00 | 100 | | 3 | 111 | [phone]:00:00 | 20000| | 4 | 222 | [phone]:00:00 | 500| | 5 | 333 | [phone]:00:00 | 1000| +----+---------+---------------------+-------------+ Напишите SQL-запрос, который вернёт количество заказов по каждому пользователю с price_total больше или равным 1000 в таком виде отсортированному по количеству заказов в обратном порядке: +---------+-------------+ | user_id | order_count | +---------+-------------+ | 111 | 2 | | 222 | 1 | | 333 | 1 | +---------+-------------+