Самостоятельно применяет алгоритмическое мышление в Java: выбирает эффективные Stream-операции для обработки данных, понимает паттерны параллельных алгоритмов с ForkJoinPool, оценивает компромиссы алгоритмов коллекций. Анализирует вычислительную сложность горячих путей кода в Spring-сервисах.
Роли · Backend Developer (Java/Kotlin) · Middle
Что должен уметь Middle }
35 ключевых навыков, всего 74. Ожидания по каждому навыку и что меняется на следующем уровне.
На этой странице — что ожидается от Middle }, навык за навыком. Ключевые навыки оценивают руководитель и коллеги в цикле ревью; остальные учитываются только в самооценке. Основные области: Основы программирования, Backend Development, Базы данных.
Ключевые навыки для Middle
Сгруппированы по областям. Метка справа — ожидаемая глубина: Осведомлённость, Применение, Продвинутый или Эксперт.
Основы программирования · 9
Самостоятельно применяет асинхронное программирование в Java: композиция CompletableFuture, реактивные потоки с Project Reactor/RxJava, виртуальные потоки (Loom). Понимает компромиссы между моделями thread-per-request, реактивной и виртуальных потоков.
Применяет продвинутые дженерики Java: использует wildcard-типы (? extends T, ? super T) по принципу PECS (Producer Extends, Consumer Super). Реализует generic utility-методы с рекурсивными type bounds (<T extends Comparable<T>>). Понимает bridge-методы, генерируемые type erasure, обрабатывает ограничения создания generic-массивов, применяет @SafeVarargs для предотвращения heap pollution в вариативных generic-методах.
Самостоятельно применяет практики качества кода в Java/Spring-разработке. Пишет чистый код по конвенциям Spring с правильным dependency injection и scoping бинов. Понимает компромиссы между использованием паттернов проектирования и простотой кода. Ревьюит код на паттерны обработки исключений, управление транзакциями и консистентность дизайна API.
Самостоятельно применяет многопоточность в Java: CompletableFuture для async-композиции, конкурентные коллекции и атомарные операции, ReentrantLock и Condition для продвинутой синхронизации, виртуальные потоки (Project Loom) для легковесной конкурентности. Решает типовые задачи конкурентного программирования самостоятельно.
Самостоятельно применяет паттерны проектирования в Java: стратегия со Spring profiles, шаблонный метод для воркфлоу сервисов, декоратор для потоковой обработки, observer со Spring Events. Понимает компромиссы между паттернами и конвенциями фреймворка в Spring Boot.
Самостоятельно применяет ООП/SOLID в Java/Spring: правильные контракты сервисов на основе интерфейсов, Spring DI для инверсии зависимостей, абстрактные классы для общего доменного поведения. Понимает компромиссы между иерархиями наследования и паттернами композиции в корпоративной Java-архитектуре.
Самостоятельно выбирает подходящие структуры данных в Java: ArrayList vs LinkedList для последовательных данных, HashMap vs TreeMap для поиска по ключу, concurrent-коллекции для многопоточных сценариев. Понимает компромиссы между реализациями коллекций для различных паттернов доступа и мутации.
Самостоятельно применяет возможности системы типов Java — wildcard generics, sealed classes для ADT и типобезопасные паттерны builder. Понимает компромиссы между стиранием типов и reified generics, raw types vs параметрический полиморфизм. Применяет типобезопасные паттерны с records, pattern matching и обработкой аннотаций при ревью кода.
Backend Development · 7
Работает с messaging в Java-экосистеме: использует Spring Kafka для Kafka-интеграции, Spring Cloud Stream для абстракции от брокера, настраивает consumer groups и partition assignment. Применяет @KafkaListener с concurrency для параллельной обработки и настраивает error handler с retry.
Проектирует многоуровневое кеширование: Caffeine (L1) + Redis (L2) через Spring Cache. Реализует cache-aside pattern с fallback на БД. Предотвращает cache stampede через distributed locks. Мониторит cache hit ratio.
Проектирует Kafka-потоки для Java-сервисов: выбор partition key для ordering, настройка consumer concurrency, exactly-once semantics через transactional producer. Обрабатывает poison pills через DLT. Настраивает Schema Registry для Avro/Protobuf.
Самостоятельно реализует интеграцию Elasticsearch в Java через Spring Data Elasticsearch/RestHighLevelClient. Проектирует маппинги индексов, строит сложные запросы с QueryBuilders и реализует bulk-индексацию со стратегиями refresh.
Самостоятельно реализует задачи с Java Spring Ecosystem. Понимает внутреннее устройство и оптимизирует производительность. Пишет тесты.
Проектирует RabbitMQ-топологию для Java-сервисов: exchange-queue bindings, routing keys, priority queues. Настраивает publisher confirms и consumer acknowledgment. Реализует retry с exponential backoff. Мониторит через Management Plugin.
Проектирует стратегии кеширования для Java-сервисов: cache-aside, write-through, cache stampede protection через Redisson locks. Использует Redis Pub/Sub для инвалидации. Настраивает Lettuce connection pool и sentinel для HA.
Базы данных · 9
Самостоятельно проектирует схемы и оптимизирует запросы с Индексирование БД. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
Самостоятельно проектирует схемы и оптимизирует запросы с Миграции БД. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
Самостоятельно проектирует схемы и оптимизирует запросы с Оптимизация запросов. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
Самостоятельно проектирует схемы и оптимизирует запросы с Проектирование схем данных. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
Самостоятельно проектирует схемы и оптимизирует запросы с Транзакции и конкурентность. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
Работает с шардированием в Java: реализует AbstractRoutingDataSource для multi-database routing, использует ShardingSphere для transparent sharding, настраивает HikariCP connection pools per shard. Применяет thread-local context для shard selection в Spring transactions.
Оптимизирует connection pooling в Java: настраивает HikariCP для production (leak detection, connection test, validation timeout), использует Spring Boot Actuator для мониторинга pool metrics. Разбирается в statement caching и prepared statement pooling через JDBC driver settings.
Самостоятельно проектирует схемы и оптимизирует запросы с MySQL / MariaDB. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
Самостоятельно проектирует схемы и оптимизирует запросы с PostgreSQL. Понимает индексирование и планы выполнения запросов. Использует Hibernate/JPA эффективно.
API и интеграции · 6
Проектирует документацию API в Java-проектах: spec-first через OpenAPI YAML, code generation через openapi-generator. Документирует error codes, authentication flows, rate limits. Автоматизирует проверку актуальности через Spring REST Docs.
Реализует версионирование API в Spring: URL-based, header-based, media type versioning. Поддерживает несколько версий одновременно через абстракции. Планирует deprecation lifecycle. Автоматизирует compatibility checks.
Проектирует GraphQL API для Java-сервисов: custom scalars, input types, enum mapping. Реализует DataLoader для решения N+1. Настраивает pagination через Relay Connection spec. Обрабатывает ошибки через GraphQL error extensions.
Разрабатывает gRPC-сервисы на Java/Kotlin: реализует streaming RPC, настраивает ServerInterceptor для аутентификации и трейсинга, интегрирует с Spring Boot через grpc-spring-boot-starter. Использует async stub с ListenableFuture для неблокирующих вызовов.
Реализует rate limiting в Java-сервисах: использует Bucket4j с Hazelcast/Redis для distributed limiting, настраивает Resilience4j RateLimiter с custom configuration per endpoint. Реализует tiered rate limiting через Spring interceptors с extraction key из JWT claims.
Проектирует RESTful API по best practices: HATEOAS, content negotiation, pagination через Pageable. Реализует версионирование через URL path или headers. Документирует через SpringDoc/Swagger. Обрабатывает ошибки через @ControllerAdvice.
Облако и инфраструктура · 2
Проектирует сетевую архитектуру для Java-сервисов: load balancing, reverse proxy (nginx/Envoy), service discovery (Eureka/Consul). Настраивает HTTP client timeouts и connection pooling в RestTemplate/WebClient.
Пишет Terraform-конфигурации для инфраструктуры Java-сервисов: EC2/ECS, RDS, ElastiCache, SQS/SNS. Использует модули для консистентности окружений dev/staging/prod. Работает с remote state (S3 бэкенд) и блокировкой state. Управляет переменными окружений через tfvars. Импортирует существующие AWS-ресурсы под управление Terraform.
Архитектура и проектирование · 1
Реализует CQRS в Java-проектах: использует Axon Framework для command/query separation, настраивает event handlers для обновления read models, применяет Spring Data для read-optimized repositories. Настраивает saga для координации распределённых команд.
Observability и мониторинг · 1
Определяет SLI для Java-сервисов — p99 задержку из метрик Micrometer, частоту ошибок из трекинга исключений и индикаторы здоровья JVM (паузы GC, утилизация heap). Настраивает мониторинг SLI с Spring Boot Actuator и Prometheus. Понимает error budgets и участвует в ротации дежурств для надёжности Java-сервисов.
Дополнительные навыки
Команда их не оценивает, но они входят в самооценку и план развития.
Что меняется на Senior
74 навыков получают более высокое ожидание или становятся ключевыми при переходе с Middle на Senior. Сначала самые большие скачки.
- Декомпозиция на микросервисы: Осведомлённость → Применение · становится ключевым
- Интеграционное тестирование: Применение → Продвинутый · становится ключевым
- Основы System Design: Применение → Продвинутый · становится ключевым
- Практики безопасного кода: Применение → Продвинутый · становится ключевым
- Структурированное логирование: Применение → Продвинутый · становится ключевым
- AWS: Применение → Продвинутый · становится ключевым
- Clean Architecture: Применение → Продвинутый · становится ключевым
- Code Review: Применение → Продвинутый · становится ключевым
- DDD тактические паттерны: Осведомлённость → Применение · становится ключевым
- Docker: Применение → Продвинутый · становится ключевым
} в открытой матрице компетенций: 74 навыков на 5 уровнях. Матрица бесплатна для специалистов и останется бесплатной.