Golang
RPS В среднем 4-5 тысяч RPS, в пике доходило до 12k Но тут важно понимать, что основная нагрузка ложилась на Kafka. Поскольку архитектура асинхронная, на каждое создание объявления мой оркестратор генерировал цепочку из 5–7 событий в разные сервисы проверок. Суммарно мы обрабатывали поток до 30k сообщений в секунду в среднем
Что такое nil-канал?
Как на системном дизайне показывать модульный монолит на схеме?
Расскажи про создание overflow-бакетов в map при переполнении
Как проверить корректность временного диапазона бронирования (from < to)?
Построить оптимальный индекс для SELECT * FROM employee WHERE sex = 'm' AND salary > 300000 AND age = 20 ORDER BY created_at
Приходилось ли вам убеждать или влиять на кого-то с другой точкой зрения? Как вы формулировали своё сообщение и слушали их?
Написать функцию, которая проверяет, является ли строка палиндромом. Палиндром - последовательность символов, одинаково читающееся в обоих направлениях. Проверять только на символы алфавита a-zA-Za-яА-Я, не учитывать case-sensitive. Input: "isPalindrome" Output: false <p> Input: "А роза упала на лапу Азора" Output: true <p> Input: "Is_s_d_+_ssi" Output: true
Был ли случай, когда ты был не согласен с решением руководителя или стейкхолдера?
Как устроен интерфейс в Go изнутри (в памяти)?
Работала с OpenTelemetry?
Как ты оптимизировал запросы на практике? Что смотришь, когда ручка тормозит?
Чем стек отличается от кучи? Как компилятор решает, куда аллоцировать объект?
Куда хочешь развиваться в будущем — в техническую или менеджерскую сторону?
Бывало ли у вас, что что-то долго делали, и оно в итоге не было внедрено или отложено в стол?
Что такое OpenTelemetry (OTel), зачем это нужно и как выглядит?
Работал ли с RabbitMQ? Расскажи про Kafka — если 3 партиции и 1 под, как распределяются сообщения?
Есть HTTP handler, который делает сложный SELECT в базу данных, пользователь недоволен долгим ожиданием. Какова последовательность действий для диагностики и оптимизации?
Расскажи про реализацию batch-процесса для перерасчёта исторических данных. Зачем каждую ночь пересчитывать? Сколько данных хранили?
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() }