← Назад к вопросам

Расскажи о последнем месте работы

1.2 Junior🔥 201 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Последнее место работы

Моё последнее место работы — крупная финтех-компания PayCore (условное имя), специализирующаяся на платежных системах и обработке транзакций для e-commerce платформ. Я работал там 4 года в роли Senior Java Developer, а в конце стал Lead Developer.

О компании

PayCore — это B2B платежный гейтвей, обрабатывающий миллиарды рублей ежедневно. Клиенты — крупные онлайн-магазины, маркетплейсы, системы подписок. Требования к надёжности и производительности очень высокие.

Stack:

  • Java 11+ (позже Java 17)
  • Spring Boot 2.x (позже 3.x)
  • PostgreSQL, Redis, Kafka
  • Docker, Kubernetes
  • AWS (EC2, S3, SQS)
  • Gradle, Jenkins, GitLab CI/CD

Мои основные ответственности

1. Разработка ядра платёжной системы

Основной проект: микросервис обработки платежей

Текущая архитектура при приходе:
- Monolith на Spring Boot
- 15K строк в main service class
- Медленный code review (2+ недели)
- Трудно добавлять новые платёжные методы

Что я сделал:

  1. Рефакторинг в микросервисы

    • Разделил на 6 микросервисов: Payment Processing, Acquirer Integration, Settlement, Reconciliation, Notification Service, Admin API
    • Внедрил Event-Driven архитектуру через Kafka
    • Сократил среднее время обработки платежа с 800ms до 150ms
  2. Реализовал Strategy паттерн для платёжных методов

    interface PaymentMethod {
        PaymentResult process(Payment payment);
        PaymentResult refund(Payment payment);
        PaymentResult capture(Payment payment);
    }
    
    class CreditCardPaymentMethod implements PaymentMethod { ... }
    class PayPalPaymentMethod implements PaymentMethod { ... }
    class YandexKassaPaymentMethod implements PaymentMethod { ... }
    

    Теперь добавление нового способа оплаты — это 1-2 дня работы вместо 2 недель

  3. Внедрил CQRS и Event Sourcing

    • Все события платежей хранятся в EventStore
    • Отделил read модель от write модели
    • Упростил аудит и отладку проблем

2. Оптимизация performance

Проблема: во время sales peaks система падала, TPS (transactions per second) падал с 1000 до 200.

Решение:

  1. Профилирование с JFR (Java Flight Recorder)

    • Нашёл N+1 queries в платёжном сервисе
    • Обнаружил неоптимальную обработку больших объёмов в Kafka
    • Выявил утечку памяти в кэше (забыли TTL)
  2. Оптимизация БД

    • Добавил правильные индексы
    • Реализовал Connection Pooling (HikariCP)
    • Использовал batch inserts для reconciliation
    • Результат: query time сократился на 70%
  3. Внедрил Redis для кэширования

    • Кэшировал данные acquirers, комиссии, курсы валют
    • Использовал Redis Pub/Sub для invalidation
    • Hit rate достиг 92% для критичных данных
  4. Оптимизация Kafka consumers

    • Настроил batch processing (вместо обработки по одному сообщению)
    • Внедрил backpressure handling
    • Увеличил throughput в 5 раз

Результат: TPS в peak hours увеличился до 5000, latency p99 снизился с 2500ms до 200ms.

3. Обработка отказоустойчивости

В платёжной системе отказоустойчивость критична:

  1. Реализовал Circuit Breaker паттерн

    @CircuitBreaker(name = "acquirerService", 
                    failureThreshold = 5,
                    delay = 1000)
    public PaymentResponse callAcquirer(Payment payment) {
        // Автоматически откроется при 5 ошибках подряд
        return acquirerClient.process(payment);
    }
    
  2. Retry logic с exponential backoff

    • Критичные операции пересылаются автоматически
    • Временные сбои acquirers обрабатываются корректно
  3. Graceful degradation

    • Если Redis недоступен, падаем на БД (медленнее, но работает)
    • Если один acquirer slow, переходим на другого
  4. Distributed transactions с Saga паттерном

    • Платёж состоит из 5 шагов (validation, authorization, capture, settlement, notification)
    • При ошибке на любом шаге — компенсирующие транзакции
    • Гарантия консистентности без 2-phase commit

4. Безопасность

В финтехе это очень серьёзно:

  1. PCI DSS комплайанс

    • Никогда не храним полные номера карт (только токены)
    • Шифруем sensitive данные (PAN, CVV)
    • Логируем все операции для аудита
  2. Внедрил OAuth 2.0 + JWT

    • Клиенты аутентифицируются через API keys + signatures
    • JWT токены для внутренних сервисов
  3. Rate limiting и DDoS protection

    @RateLimiter("payment-api", limits = "1000 calls per minute")
    @PostMapping("/payments")
    public ResponseEntity<PaymentResponse> createPayment(@RequestBody PaymentRequest req) {
        // Защита от перегруза
    }
    

5. Сбор метрик и логирование

  1. Metrics с Micrometer + Prometheus

    • Отслеживаем TPS, latency (p50, p95, p99), error rate
    • Custom метрики: платежи по методам, по странам, конверсии
  2. ELK Stack для логов

    • Структурированное логирование (JSON)
    • Трейсинг запросов через correlation IDs
    • Быстрый поиск по логам
  3. Distributed tracing с Jaeger

    • Видим пути запроса через все микросервисы
    • Находим узкие места в цепи

Лидерская работа (последний год)

В конце я стал Lead Developer команды из 6 человек:

  1. Архитектурные решения

    • Выбор технологий (Spring Boot 3.0, Java 17, Kotlin для нового функционала)
    • Дизайн новых микросервисов
    • Code review сложных PR
  2. Ментoring

    • Помогал junior разработчикам расти
    • Code reviews с подробными объяснениями
    • Проводил техдискуссии
  3. Planning

    • Оценка сложности задач
    • Идентификация технических долгов
    • Планирование refactoring работ

Ключевые достижения

  • 5x рост TPS в peak hours (1K → 5K transactions/sec)
  • 70% reduction в latency (p99 с 2500ms → 200ms)
  • 99.99% uptime (была 99.5%)
  • Успешно обработал чёрную пятницу (3 млн платежей в день без падений)
  • Сократил time-to-market для новых платёжных методов (2 недели → 2 дня)
  • Построил и воспитал team из 3 юниоров, сейчас они работают как мидлы

Технологии, которые я использовал

Языки:

  • Java (основной)
  • Kotlin (новые microservices)
  • Bash (deployment scripts)
  • SQL (performance tuning)

Frameworks/Libraries:

  • Spring Boot, Spring Cloud, Spring Security
  • Apache Kafka
  • Redis
  • PostgreSQL (с оптимизацией)
  • Docker & Kubernetes
  • JUnit 5, Testcontainers, Mockito

Tools:

  • Git, GitLab CI/CD
  • Jenkins для deployment
  • Prometheus + Grafana
  • ELK Stack
  • Jaeger
  • JFR для профилирования

Почему я ухожу

  1. Достиг потолка — система стабильна, оптимизирована, все processes in place
  2. Хочу новых вызовов — интересуют более сложные архитектурные задачи
  3. Стремлюсь к growth — хочу расширить знания в new technologies (Cloud Native, AI/ML integration)
  4. Баланс — была очень интенсивная работа (на-call в выходные, быстрые отклики на production issues)

Что я вынес из этого опыта

  1. Как создавать надёжные системы — когда ошибка стоит денег, нужно быть очень аккуратным
  2. Importance of monitoring — what you can't measure, you can't improve
  3. Team leadership — как помочь людям расти и достичь целей
  4. Database optimization — indexes, query plans, transactions
  5. Event-Driven design — когда хорошо использовать, как избежать pitfalls

Этот опыт делает меня более зрелым разработчиком, который может работать с высоконагруженными системами и обучать других.

Расскажи о последнем месте работы | PrepBro