Fundamentos de Java 2
Conceitos avançados e recursos modernos da linguagem Java aplicados a cenários práticos de desenvolvimento de software.
Cartões · 55
- try-with-resources
- Gerenciar e fechar automaticamente fluxos de I/O, conexões JDBC ou arquivos, prevenindo vazamentos de recursos de sistema.
- Optional<T>
- Modelar valores de retorno em métodos de serviço que podem ser nulos, evitando NullPointerException sem checagens manuais excessivas.
- Record
- Criar DTOs imutáveis para transferência de dados entre camadas de API REST e controladores de forma concisa e padronizada.
- Stream API
- Filtrar, transformar e agregar coleções de dados em memória, como obter a lista de e-mails ativos a partir de uma lista de clientes.
- CompletableFuture
- Orquestrar chamadas concorrentes assíncronas para múltiplos microsserviços e combinar suas respostas sem bloquear threads.
- synchronized
- Garantir acesso exclusivo a uma variável crítica ou recurso compartilhado em ambientes concorrentes de baixa complexidade.
- volatile
- Indicar que o valor de uma flag de parada de thread deve ser lido diretamente da memória principal, garantindo visibilidade mútua.
- AtomicInteger
- Implementar contadores concorrentes de alto desempenho, como contagem de requisições por segundo, sem locks pesados.
- ConcurrentHashMap
- Manter um cache em memória acessado simultaneamente por várias threads de requisições web com alta escalabilidade.
- Enum
- Representar um conjunto fixo de constantes de negócio, como status de pagamento (PENDING, PAID, CANCELLED), com tipagem segura.
- Interface Default Methods
- Adicionar novas funcionalidades a bibliotecas legadas sem quebrar as classes existentes que implementam a interface.
- Custom Annotation
- Marcar métodos que exigem verificação de permissões ou logging automático por meio de interceptadores AOP.
- FunctionalInterface
- Definir contratos de ação única para serem passados como expressões lambda, como regras de validação personalizadas.
- Generics
- Desenvolver repositórios de banco e coleções reutilizáveis com verificação de tipo em tempo de compilação.
- Pattern Matching for instanceof
- Simplificar a verificação de tipo de payload polimórfico e eliminar o casting manual explícito.
- Sealed Classes
- Restringir quais classes podem herdar uma hierarquia de domínio, como tipos fixos de eventos de pagamento aceitos.
- ThreadLocal
- Armazenar contexto de segurança, token do usuário ou identificador de transação específico da thread atual de execução.
- Virtual Threads (Project Loom)
- Processar milhões de requisições I/O bloqueantes simultâneas em servidores web sem esgotar as threads do sistema operacional.
- Custom Exception
- Sinalizar erros de domínio específicos, como ProdutoSemEstoqueException, facilitando o tratamento na camada de API.
- transient keyword
- Impedir que campos sensíveis, como senhas de usuários ou tokens, sejam serializados para arquivo ou rede.
- final keyword on variables
- Criar valores imutáveis e garantir segurança de thread para constantes e dependências injetadas via construtor.
- WeakReference
- Implementar caches em memória que descartam objetos automaticamente quando o coletor de lixo (GC) precisa de espaço.
- Varargs (...)
- Permitir métodos flexíveis de utilidade ou concatenação de consultas que aceitam quantidade variável de argumentos.
- Method Reference (::)
- Passar implementações de métodos existentes para streams e lambdas, deixando o código mais limpo e legível.
- Comparable<T>
- Definir a ordem natural de objetos de domínio, como ordenar faturas por data de vencimento por padrão.
- Comparator<T>
- Permitir múltiplas estratégias dinâmicas de ordenação, como listar produtos por preço crescente ou avaliação.
- Immutable Collections (List.of)
- Criar listas constantes e protegidas contra alterações acidentais em tempo de execução.
- ExecutorService
- Gerenciar pools de threads reutilizáveis para processamento em lote (batch) de faturas ou envio de e-mails.
- ReentrantLock
- Controlar concorrência avançada onde é necessário tentar adquirir o lock com timeout ou locks não bloqueantes.
- BlockingQueue
- Implementar o padrão produtor-consumidor para processar filas de mensagens internas entre diferentes tarefas.
- CountDownLatch
- Fazer uma thread principal aguardar até que múltiplos serviços de inicialização concluam seu carregamento.
- CyclicBarrier
- Sincronizar uma etapa de cálculo paralelo onde todas as threads devem terminar antes da próxima iteração.
- Semaphore
- Limitar a quantidade de acessos simultâneos a um recurso escasso, como conexões ativas a uma API de terceiros.
- ServiceLoader (SPI)
- Carregar dinamicamente plugins ou drivers de banco sem acoplamento direto com a aplicação principal.
- Proxy Dinâmico
- Criar wrappers de instrumentação em tempo de execução para frameworks de injeção de dependência e transações.
- Switch Expressions
- Mapear códigos de erro ou regras de tributação retornando valores diretamente sem risco de fall-through acidental.
- Text Blocks (triple quotes)
- Escrever queries SQL, payloads JSON ou scripts legíveis no código-fonte sem necessidade de escape de aspas.
- BigDecimal
- Calcular valores monetários e financeiros sem os erros de arredondamento inerentes ao ponto flutuante binário.
- DateTimeFormatter
- Converter strings de datas recebidas de APIs externas para objetos LocalDate no fuso horário correto.
- Duration e Period
- Calcular intervalos de tempo exatos para expiração de tokens ou cálculo de idade de clientes.
- TreeSet
- Manter uma lista de participantes de eventos sempre ordenada e sem duplicatas em tempo de inserção.
- LinkedHashMap
- Implementar políticas de cache simples baseadas em LRU (Least Recently Used) com base na ordem de acesso.
- BitSet
- Rastrear grandes volumes de flags booleanas de usuários ou permissões com consumo mínimo de memória RAM.
- StrictMath
- Garantir cálculos numéricos idênticos em nível de bit através de diferentes arquiteturas de hardware.
- Var (local variable type inference)
- Reduzir o ruído visual em variáveis locais quando o tipo concreto já está óbvio no lado direito da atribuição.
- Classloader
- Isolar bibliotecas de versões conflitantes e carregar módulos de software em tempo de execução com segurança.
- Shutdown Hook
- Executar rotinas de limpeza, flush de logs e fechamento ordenado de conexões antes do encerramento da JVM.
- SecurityManager / AccessController
- Restringir permissões de execução de código não confiável em ambientes sandbox legados.
- String.intern()
- Reutilizar instâncias de strings repetitivas em memória para reduzir drasticamente o footprint da heap.
- PhantomReference
- Realizar ações de pós-coleta de lixo e liberação de recursos de memória nativa com mais segurança que finalize().
- Foreign Function & Memory API
- Acessar bibliotecas nativas em C e gerenciar memória fora da heap da JVM com segurança de tipos e velocidade.
- StampedLock
- Otimizar leituras concorrentes em estruturas de alta performance usando modo de leitura otimista.
- ForkJoinPool
- Processar tarefas computacionais pesadas de divisão e conquista paralelizadas em múltiplos núcleos de CPU.
- Files.lines()
- Ler arquivos gigantes de log linha por linha via Stream sem carregar o arquivo inteiro na memória RAM.
- UnmodifiableView (Collections.unmodifiableList)
- Expor o estado interno de uma coleção de entidade protegendo-a de modificações externas indesejadas.