Асинхронная передача сообщений через очередь Обработка с гарантией доставки один раз (at-least-once / exactly-once — в зависимости от реализации) Централизованное хранение событий с уникальными метками Разделение…
фронтенд и оптимизация рендеринга устранять лишние ререндеры с помощью React.memo и PureComponent мемоизировать функции и значения через useCallback и useMemo разбивать код с помощью lazy loading и динамического…
Как покрыть код тестами и какой уровень покрытия считать оптимальным? покрытие тестами — проверка корректности работы кода с помощью автоматизированных тестов виды тестирования: юнит (отдельные модули), интеграционное…
Как обеспечить уникальность записей без DISTINCT? агрегатные функции с GROUP BY — объединение строк по ключам оконные функции (ROW_NUMBER(), RANK()) с последующей фильтрацией по порядковому номеру подзапросы с…
in-memory key-value store, применяемое для кэширования и работы баз данных горизонтально масштабируется с помощью шардинга (Cluster) Redis Cluster распределяет данные между узлами по слотам — всего предусмотрено 16384…
CI/CD автоматизирует сборку, тестирование и доставку приложения настроить Git и определить триггеры запуска pipeline подключить CI-сервер: Jenkins, GitLab CI или GitHub Actions запускать сборку и юнит-тесты…
Как работать с тестовыми стендами? окружения Dev, QA и Prod отличаются уровнем стабильности и правами доступа Dev предназначен для локальной разработки и быстрых изменений, поэтому часто бывает нестабильным QA…
Область: обработка ошибок, backend, REST API Для этого применяют глобальные обработчики исключений, например @ControllerAdvice в Spring. Обработка ошибок выносится за пределы контроллеров, благодаря чему соблюдается…
последовательная очередь обрабатывается в одном потоке, поэтому порядок операций имеет значение deadlock появляется, когда ресурсы взаимно блокируют друг друга для профилактики сокращают пересечения блокировок и…