Conceitos essenciais que todo desenvolvedor de software deve conhecer para criar sistemas mais robustos, manuteníveis e escaláveis.
- POO (Programação Orientada a Objetos): Conceitos básicos como classes, objetos, herança, encapsulamento, abstração e polimorfismo.
- Abstração: Como simplificar sistemas complexos focando nos aspectos essenciais.
- Polimorfismo: Capacidade de objetos de diferentes classes responderem ao mesmo método de formas diferentes.
- Injeção de Dependência (DI): Padrão que promove o desacoplamento entre classes, facilitando testes e manutenção.
- Beans e Estereótipos: Conceitos de componentes gerenciados em frameworks como Spring.
- ORM (Object-Relational Mapping): O que é, para que serve e como mapeia objetos para bancos de dados relacionais.
- Strategy: Permite que algoritmos sejam selecionados em tempo de execução.
- Chain of Responsibility: Encadeia objetos para processar uma requisição.
- Fluent API: Técnica para criar APIs mais legíveis e expressivas.
- Builder: Separa a construção de objetos complexos de sua representação.
- Factory: Centraliza a criação de objetos, promovendo flexibilidade.
- Singleton: Garante que uma classe tenha apenas uma instância.
- Observer: Notifica objetos sobre mudanças de estado.
- Decorator: Adiciona comportamentos a objetos dinamicamente.
- Adapter: Permite que classes com interfaces incompatíveis trabalhem juntas.
- Facade: Simplifica a interação com subsistemas complexos.
- Arquitetura Hexagonal: Organização de código em torno do domínio, permitindo maior flexibilidade e desacoplamento.
- Arquitetura de Camadas: Separação de responsabilidades em camadas (apresentação, lógica de negócios e dados).
- Microserviços: Divisão da aplicação em serviços independentes.
- API Gateway: Ponto único de entrada para microserviços.
- Domain-Driven Design (DDD): Foco no domínio do negócio para modelagem de software.
- Event Sourcing: Armazenamento de mudanças de estado como eventos imutáveis.
- CQRS (Command Query Responsibility Segregation): Separação de comandos ( escrita) e consultas ( leitura).
- Service Mesh: Gerenciamento de comunicação entre microserviços.
- Orquestração vs Coreografia: Centralização vs descentralização de controle em sistemas distribuídos.
- Stateless vs Stateful: Diferenças entre sistemas sem estado e com estado.
- RDBMS vs NoSQL: Comparação entre bancos relacionais e não relacionais.
- Transações: Atomicidade e Isolamento: Garantia de consistência em operações.
- Optimistic vs Pessimistic Locking: Técnicas de controle de concorrência.
- Idempotência: Garantia de que operações repetidas tenham o mesmo efeito.
- TDD (Test-Driven Development): Desenvolvimento guiado por testes.
- SOLID: Princípios de design orientado a objetos.
- Fluent Interface: Técnica para criar APIs mais legíveis.
- Cache: Armazenamento temporário para otimização de desempenho.
- DevOps: Integração entre desenvolvimento e operações.
- Containers e Orquestração (Docker, Kubernetes): Gerenciamento de sistemas distribuídos.
- Tolerância a Falhas: Capacidade de operar mesmo com falhas.
- Circuit Breaker: Prevenção de falhas catastróficas em sistemas distribuídos.
- Pub/Sub (Publish/Subscribe): Comunicação assíncrona entre produtores e consumidores.
- Observabilidade (Logs, Distributed Tracing, NewRelic): Monitoramento e rastreamento de sistemas em produção.
- Criptografia: Proteção de dados por meio de técnicas e algoritmos de codificação.
- REST vs RESTful: Diferenças entre o estilo arquitetural REST e sua implementação prática.
- Clean Code: Boas práticas para escrever código legível e manutenível.
- YAGNI (You Aren't Gonna Need It): Princípio de evitar funcionalidades desnecessárias.
- GRASP (General Responsibility Assignment Software Patterns): Padrões para atribuição de responsabilidades em software orientado a objetos.
- KISS (Keep It Simple, Stupid): Simplicidade como princípio de design.
- DRY (Don't Repeat Yourself): Evitar duplicação de código.
-
Proxy: Controla o acesso a um objeto.
-
Composite: Trata objetos individuais e compostos de forma uniforme.
-
State: Permite que um objeto altere seu comportamento quando seu estado muda.
-
Template Method: Define o esqueleto de um algoritmo, permitindo que subclasses redefinam etapas específicas.
-
Clean Architecture: Organização de código que promove separação de responsabilidades e independência de frameworks, interfaces e detalhes de implementação.
-
Mudanças Importantes nas Versões LTS do Java: Este documento descreve as principais mudanças e features introduzidas nas versões LTS do Java: Java 8, Java 11, Java 17 e Java 21.
-
JPA vs Hibernate: Diferenças entre a especificação JPA e sua implementação mais popular, o Hibernate.