Ты сейчас в Магните ещё работаешь? Почему решил выйти на рынок?
Объясни почему и какая (по поводу вывода кода)
База данных тоже является схемой — как вы это понимаете?
От чего зависит Index Only Scan vs Index Scan в PostgreSQL?
Расскажи про уровни изоляции транзакций
Если сделаем вам предложение, через какое время смогли бы присоединиться?
Напишите функцию Exclude, которая возвращает элементы из slice-а a, которых нет в slice-е b.
Какие-то пет-проекты у тебя есть?
Реализуй функцию для нахождения сервиса с наибольшим количеством логов в каждом namespace. Какова сложность алгоритмов для топ-1, топ-2, топ-10?
Обсуждали ли вы развитие? Был ли план развития?
Почему вы сейчас думаете о смене работы?
Что такое OpenTelemetry (OTel), зачем это нужно и как выглядит?
Какие технические истории есть — не про архитектуру сверху, а про углубление в детали, реальный проблемный кейс?
Есть HTTP handler, который делает сложный SELECT в базу данных, пользователь недоволен долгим ожиданием. Какова последовательность действий для диагностики и оптимизации?
Расскажи про реализацию batch-процесса для перерасчёта исторических данных. Зачем каждую ночь пересчитывать? Сколько данных хранили?
Расскажи, чем ты занимался на текущем месте работы?
Для API Gateway один Load Balancer, для WebSocket другой — итого два LB в системе?
Был ли у тебя опыт с gRPC и GraphQL? Расскажи про них.
func (c *Client) Send(ctx context.Context, messages []Message, maxWorkers int) error { sem := make(chan struct{}, maxWorkers) var wg sync.WaitGroup var resultErr error var once sync.Once for _, msg := range messages { wg.Add(1) go func(msg Message) { defer wg.Done() sem <- struct{}{} defer func() { <-sem }() body, err := json.Marshal(msg) if err != nil { once.Do(func() { resultErr = err; cancel() }) return } req, _ := http.NewRequestWithContext( ctx, http.MethodPost, c.url, bytes.NewReader(body), ) req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { once.Do(func() { resultErr = err; cancel()}) return } defer resp.Body.Close() if resp.StatusCode >= 500 { once.Do(func() { resultErr = fmt.Errorf("server error") cancel()}) return } c.sentCount.Add(1) time.Sleep(time.Second) }(msg) } wg.Wait() }
Расскажи подробнее про семафоры.