Sobes.tech

Что делать, если мы добавили все необходимые индексы, но база данных всё равно не справляется с нагрузкой и тормозит?

Middle
СитиДрайвСитиДрайв
5

Расскажи про ClickHouse — как он хранит данные на диске (колоночное хранение), почему нельзя менять ORDER BY у существующей таблицы, только добавлять новые колонки в конец?

Senior
МВидеоМВидео
5

Вы сохраняли все сообщения из Kafka в отдельную таблицу? Какой в этом был смысл, разве Kafka была недостаточна?

Middle+
ВайлдберрисВайлдберрис
5

Что такое слайсы в Go, как они устроены?

Middle
ООО Левел Тревел
5

Были ли у вас sidecar-контейнеры на инстансах? Что такое sidecar?

Middle+
ВайлдберрисВайлдберрис
5

Какие ещё глобальные проблемы есть в коде? Как хранить деньги — можно ли использовать float?

Senior
Pasul LTD
4

Что означает поле issued_at?

Middle
Ozon FreshOzon Fresh
4

Если бы этот кэш использовался в реальном приложении и возникли проблемы с производительностью, как можно было бы улучшить решение?

Middle
Ozon FreshOzon Fresh
4

Объясни, почему выбрано именно 16 шардов по умолчанию?

Middle
Ozon FreshOzon Fresh
4

Что происходит, когда ты добавляешь элемент через append в слайс, у которого capacity уже полностью использован?

Middle
Ozon FreshOzon Fresh
4

Может ли быть такое, что сообщения распределены по partition'ам неравномерно? Как с этим бороться?

Middle+
ВайлдберрисВайлдберрис
4

Какие виды gRPC-взаимодействия вы использовали? Можете назвать их?

Middle+
ВайлдберрисВайлдберрис
4

Как работает сборка мусора в Go?

Senior
OZONOZON
4

А если нужно искать по части названия книги (подстроке)?

Middle
СитиДрайвСитиДрайв
4

-- Вывести всех авторов и кол-во их книг. -- Пример: -- author_name | book_count --------------------------- -- Игорь | 2 -- Иван | 1 -- Вывести авторов, которые написали более 2-х книг.

Middle
СитиДрайвСитиДрайв
4

func (p *Pool) Stop() { p.mu.Unlock() // Теперь можно безопасно закрыть канал close(p.tasks) // сигнал воркерам: новых задач не будет, дочитайте остаток p.wg.Wait() // ждём завершения всех горутин p.cancel() // отменяем контекст на всякий случай fmt.Println("Pool stopped.") } // ForceStop принудительно останавливает все воркеры без ожидания завершения задач. // Воркеры будут прерваны немедленно через контекст. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Force stopping pool (timeout: %v)...\n", timeout) // Блокируем добавление новых задач p.mu.Lock() p.isOpen = false p.mu.Unlock() // Закрываем канал, чтобы воркеры не брали новые задачи close(p.tasks) // Отменяем контекст – это прервет все выполняющиеся задачи p.cancel() // Даём ограниченное время на завершение done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool force stopped (все воркеры завершены)") case <-time.After(timeout): fmt.Println("Pool force stopped (timeout, могут остаться зависшие горутины)") } }

Senior
Pasul LTD
4

// GetUsersList возвращает список пользователей. (в бд храним порядка 1 млн пользователей) // Используется для отображения списка пользователей в админке. Если isActive = true, то возвращаются только активные пользователи. func (u *UsersRepo) GetUsersList(ctx context.Context, isActive bool) ([]User, error) { rows, err := u.DB.Query("SELECT id, name, phone FROM users WHERE is_active = ?", isActive) if err != nil { return nil, errors.New("ошибка получения списка пользователей") } var users []User // Заполним информацию о пользователях. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Получим список e-mail пользователя err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("ошибка получения списка пользователей") } var emails []string for er.Next() { var email string err := rows.Scan(&email) if err != nil { return nil, err } emails = append(emails, email) } if len(emails) != 0 { for i, e := range emails { emails[i] = strings.ToLower(e) } } user.Emails = emails // Получим информацию о профиле из апи ВКонтакте profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("ошибка получения списка пользователей") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("ошибка получения списка пользователей") } }

Middle
СитиДрайвСитиДрайв
4

Вы строили real-time аналитику или какие цели изначально преследовали?

Middle+
РамблерРамблер
4

Что такое ld, rd := 1<<62, 1<<62 в контексте алгоритма?

Senior
Pasul LTD
4

-- Вывести авторов, у которых нет книг.

Middle
СитиДрайвСитиДрайв
4
/399