Histórico de Revisões
Data |
Versão |
Descrição |
Autor |
Revisora |
08/06/2025 |
1.0.0 |
Criação do documento |
Cédric Fabrice Lamalle |
Renata Cardoso de Oliveira |
1. Desenvolvedores Java
1.1. Nível Júnior
1.1.1. Perguntas
-
Qual é a diferença fundamental entre o operador
==e o método.equals()ao comparar objetos em Java?-
==compara o valor dos objetos, enquanto.equals()compara se eles ocupam o mesmo espaço na memória. -
Não há diferença prática, mas a convenção é usar
.equals()para objetos. -
==compara a referência de memória dos objetos, enquanto.equals()(quando sobrescrito) compara o conteúdo ou valor. -
O método
.equals()só pode ser usado para compararString, enquanto==é para todos os outros tipos de objeto.
-
-
Qual é a principal função da JVM (Java Virtual Machine)?
-
É um Ambiente de Desenvolvimento Integrado (IDE) usado para escrever código Java, como o Eclipse ou IntelliJ.
-
É um compilador que converte código-fonte Java (.java) diretamente em código de máquina para um sistema operacional específico.
-
É uma biblioteca padrão do Java, responsável por criar interfaces gráficas (GUI).
-
É uma máquina virtual que executa bytecode Java, gerenciando memória e garantindo a portabilidade entre diferentes sistemas.
-
-
Em uma coleção Java, quando é mais apropriado usar
ArrayListem vez deLinkedList?-
Quando a principal operação é adicionar ou remover elementos do meio da lista.
-
Quando a principal operação é acessar elementos por seu índice de forma rápida e frequente.
-
LinkedListé sempre mais performático, entãoArrayListraramente é usado. -
Quando é necessário garantir que a coleção seja "thread-safe" sem usar outras classes.
-
-
Qual método HTTP é idempotente e usado para solicitar a representação de um recurso específico?
-
POST -
GET -
PATCH -
UPDATE
-
-
No JavaScript (ES6+), qual declaração de variável cria uma variável de escopo de bloco que não pode ser reatribuída?
-
var -
let -
const -
static
-
-
Em um banco de dados relacional, o que uma chave primária (primary key) garante?
-
Que a coluna seja criptografada.
-
Que cada linha na tabela seja unicamente identificada e não nula.
-
Que a tabela possa ser acessada mais rapidamente, independentemente da consulta.
-
Que a coluna pode ter valores duplicados, mas não nulos.
-
-
No Spring Boot, qual anotação combina
@Controllere@ResponseBody, sendo ideal para criar endpoints de API REST?-
@Component -
@Service -
@RestController -
@Entity
-
-
Para que serve o Git no ciclo de vida de desenvolvimento de software?
-
Para compilar o código Java em bytecode.
-
Para automatizar o processo de build e deploy da aplicação (CI/CD).
-
Para gerenciar e rastrear mudanças no código-fonte, facilitando a colaboração.
-
Para executar testes unitários e de integração.
-
-
(Soft Skill) Ao se deparar com um bug em um código que você não conhece, qual seria a abordagem mais eficaz?
-
Reescrever imediatamente a parte do código que parece estar com problema.
-
Pedir imediatamente para um desenvolvedor sênior resolver o problema para você.
-
Fazer pequenas alterações aleatórias no código até que o bug desapareça.
-
Isolar o problema, tentar replicá-lo, usar ferramentas de depuração e pesquisar antes de pedir ajuda, se necessário.
-
-
(Soft Skill) Você recebe um feedback construtivo sobre seu código durante uma revisão (code review). Qual é a melhor atitude?
-
Justificar cada ponto do seu código, defendendo suas escolhas originais a todo custo.
-
Aceitar as sugestões sem questionar para acelerar o processo.
-
Ignorar o feedback se não concordar e aprovar a tarefa mesmo assim.
-
Analisar o feedback, fazer perguntas para entender a perspectiva do colega e aplicar as mudanças que melhoram a qualidade do código.
-
1.1.2. Gabarito - Nível Júnior
-
c
-
d
-
b
-
b
-
c
-
b
-
c
-
c
-
d
-
d
1.2. Nível Pleno
1.2.1. Perguntas
-
Qual princípio SOLID afirma que uma classe deve ter apenas um motivo para mudar?
-
Princípio Aberto/Fechado (Open/Closed Principle)
-
Princípio da Substituição de Liskov (Liskov Substitution Principle)
-
Princípio da Responsabilidade Única (Single Responsibility Principle)
-
Princípio da Inversão de Dependência (Dependency Inversion Principle)
-
-
Qual das seguintes opções descreve melhor uma vantagem do uso de Java Streams sobre laços
fortradicionais?-
Streams sempre executam mais rápido que laços
forem qualquer cenário. -
Permitem um código mais declarativo e funcional, facilitando operações como filtro, mapeamento e paralelização.
-
Streams são a única maneira de iterar sobre coleções em Java 8 e versões posteriores.
-
O código escrito com Streams consome significativamente menos memória.
-
-
No Spring, qual é a principal diferença de semântica entre as anotações
@Servicee@Repository?-
Não há diferença, são apenas aliases para
@Component. -
@Serviceé para controladores REST e@Repositoryé para clientes SOAP. -
@Serviceindica a camada de lógica de negócio, enquanto@Repositoryindica a camada de acesso a dados e habilita a tradução de exceções. -
@Servicecria beans do tipo Singleton, enquanto@Repositorycria beans do tipo Prototype.
-
-
Qual das opções a seguir NÃO é um dos princípios fundamentais de uma API RESTful?
-
Stateless (Sem estado)
-
Comunicação Cliente-Servidor
-
Interface Contratual Forte (Schema-based)
-
Interface Uniforme
-
-
Em uma aplicação Spring Boot, qual é a melhor abordagem para tratar exceções de forma centralizada para todos os controladores?
-
Usar um bloco
try-catchem cada método de cada controlador. -
Criar uma classe anotada com
@ControllerAdvicee métodos com@ExceptionHandler. -
Configurar um
Interceptorpara capturar e tratar todas as exceções. -
Fazer com que todas as exceções sejam do tipo
RuntimeException, pois o Spring as captura por padrão.
-
-
Qual é uma das principais desvantagens da arquitetura de microsserviços?
-
Baixa escalabilidade, pois cada serviço é pequeno.
-
Forte acoplamento entre os serviços.
-
Complexidade operacional elevada (deploy, monitoramento, resiliência).
-
Impossibilidade de usar diferentes tecnologias para cada serviço.
-
-
Qual problema o Docker resolve primariamente no fluxo de desenvolvimento?
-
A necessidade de escrever código em diferentes linguagens de programação.
-
A lentidão da compilação de código Java.
-
A falta de um sistema de controle de versão distribuído.
-
O problema de "na minha máquina funciona", garantindo consistência entre ambientes.
-
-
O que é o problema de consulta "N+1" em um ORM como o JPA/Hibernate?
-
É quando uma única consulta SQL retorna N+1 resultados inesperados.
-
É um erro que ocorre ao tentar persistir N+1 entidades em uma única transação.
-
É um problema de performance onde o ORM faz 1 consulta para a lista de entidades e depois N consultas para buscar dados associados a cada entidade.
-
É uma vulnerabilidade de segurança que permite N+1 usuários acessarem um recurso simultaneamente.
-
-
(Soft Skill) Durante uma discussão técnica, um colega discorda veementemente da sua solução proposta. Qual é a melhor forma de proceder?
-
Ignorar a opinião dele, pois você tem mais certeza sobre a sua solução.
-
Escalar a discussão para o gerente imediatamente para que ele decida.
-
Ouvir atentamente os argumentos dele, apresentar os seus com base em dados ou fatos e buscar um consenso focado no melhor resultado para o projeto.
-
Aceitar a solução dele para evitar conflito, mesmo que você acredite que a sua é melhor.
-
-
(Soft Skill) A equipe precisa entregar uma nova feature com prazo curto, mas o código existente na área a ser modificada tem alto débito técnico. Como você agiria?
-
Ignoraria o débito técnico para entregar no prazo, deixando para resolver "depois".
-
Negociaria com o Product Owner/Manager, explicando os riscos do débito técnico (bugs, lentidão futura) e propondo alocar um tempo para uma refatoração mínima.
-
Recusaria-se a fazer a tarefa até que todo o débito técnico seja pago.
-
Faria a nova feature e a refatoração completa, mesmo que isso atrase a entrega em várias semanas.
-
1.2.2. Gabarito - Nível Pleno
-
c
-
b
-
c
-
c
-
b
-
c
-
d
-
c
-
c
-
b
1.3. Nível Sênior
1.3.1. Perguntas
-
Em uma arquitetura de microsserviços, qual dos seguintes padrões é mais recomendado para gerenciar autenticação de forma centralizada e segura?
-
Cada microsserviço ter sua própria tabela de usuários e senhas para garantir o desacoplamento.
-
Usar um serviço de identidade centralizado (Identity Provider) que emite tokens (JWT) via OAuth 2.0/OpenID Connect.
-
Passar o nome de usuário e senha em cada requisição entre os serviços usando HTTP Basic Authentication.
-
Armazenar as informações de sessão do usuário em um banco de dados compartilhado acessado por todos os microsserviços.
-
-
Ao projetar a comunicação entre microsserviços, quando a comunicação assíncrona (usando um Message Broker como RabbitMQ/Kafka) é preferível à síncrona (REST)?
-
Quando uma resposta imediata é necessária para o usuário final.
-
Para aumentar o acoplamento entre os serviços, garantindo que um não funcione sem o outro.
-
Quando se busca maior resiliência e desacoplamento, permitindo que os serviços operem mesmo que outros estejam temporariamente offline.
-
Em tarefas simples de CRUD que não envolvem lógica de negócio complexa.
-
-
Qual ferramenta ou técnica é mais eficaz para diagnosticar um vazamento de memória (memory leak) em uma aplicação Java em produção?
-
Aumentar a quantidade de memória RAM disponível para a JVM.
-
Adicionar mais logs (
System.out.println) para verificar onde os objetos estão sendo criados. -
Analisar um heap dump, gerado em um momento de alto consumo de memória, com uma ferramenta como JVisualVM.
-
Reiniciar a aplicação periodicamente para limpar a memória.
-
-
Segundo o Teorema CAP, um sistema distribuído que tolera partições de rede (P) deve escolher entre:
-
Escalabilidade (Scalability) e Performance (Performance).
-
Consistência (Consistency) e Disponibilidade (Availability).
-
Durabilidade (Durability) e Isolamento (Isolation).
-
Monolitismo (Monolith) e Microsserviços (Microservices).
-
-
Qual das seguintes medidas é a mais importante para prevenir ataques de Injeção de SQL (SQL Injection) em uma aplicação Java com JPA/Hibernate?
-
Criptografar todos os dados sensíveis no banco de dados.
-
Usar exclusivamente Stored Procedures para todo o acesso ao banco de dados.
-
Usar APIs parametrizadas (como a Criteria API ou JPQL com
setParameter) em vez de concatenar strings para montar as consultas. -
Implementar um Web Application Firewall (WAF) na frente da aplicação.
-
-
O que significa o termo "Infraestrutura como Código" (IaC)?
-
Escrever o código da aplicação diretamente em linguagens de baixo nível, como Assembly.
-
Gerenciar e provisionar a infraestrutura de TI (servidores, redes) por arquivos de configuração versionáveis, como Terraform ou Ansible.
-
Uma metodologia onde a infraestrutura de hardware é projetada para ser fisicamente idêntica ao código-fonte.
-
O processo de armazenar o código-fonte da aplicação diretamente na infraestrutura de nuvem, sem um repositório.
-
-
Qual problema o padrão de resiliência "Circuit Breaker" (Disjuntor) resolve em uma arquitetura de microsserviços?
-
Impede que senhas sejam enviadas em texto plano pela rede.
-
Garante que uma transação seja completada em múltiplos bancos de dados.
-
Evita que um serviço faça chamadas repetidas para outro serviço que está falhando, prevenindo a cascata de falhas.
-
Controla a taxa de requisições que um cliente pode fazer para uma API (Rate Limiting).
-
-
Em um banco de dados relacional, qual é o principal propósito de se criar um índice em uma coluna?
-
Garantir que os valores na coluna sejam únicos.
-
Reduzir o espaço de armazenamento utilizado pela tabela.
-
Criptografar os dados da coluna para segurança.
-
Acelerar a performance de consultas que filtram ou ordenam por aquela coluna.
-
-
(Soft Skill) Como líder técnico, você percebe que um desenvolvedor pleno da equipe está com dificuldades para evoluir em suas habilidades de arquitetura. Qual a melhor abordagem?
-
Retirar as tarefas complexas dele para não arriscar o projeto.
-
Recomendar ao gerente que o desenvolvedor seja transferido para outra equipe.
-
Criar oportunidades de aprendizado, como sessões de "pair programming" em tarefas de design, delegar responsabilidades com mentoria e fornecer feedbacks construtivos.
-
Esperar que ele aprenda sozinho, pois um desenvolvedor pleno já deveria ter essas habilidades.
-
-
(Soft Skill) Você precisa apresentar uma decisão técnica de grande impacto (ex: migrar de um Monólito para Microsserviços) para diretores não-técnicos. Como você deve comunicar?
-
Focando nos detalhes técnicos da implementação, linguagens e frameworks que serão usados.
-
Explicando a decisão em termos de impacto para o negócio: agilidade, redução de risco, escalabilidade para atender mais clientes, e tempo de lançamento no mercado (time-to-market).
-
Enviando um documento técnico detalhado de 50 páginas e pedindo que eles leiam.
-
Dizendo que é uma necessidade técnica e a decisão não precisa ser compreendida por eles.
-
1.3.2. Gabarito - Nível Sênior
-
b
-
c
-
c
-
b
-
c
-
b
-
c
-
d
-
c
-
b
2. Líder Técnico
2.1. Perguntas
-
Qual é a abordagem mais eficaz para um Líder Técnico gerenciar o débito técnico de um projeto?
-
Parar o desenvolvimento de novas funcionalidades até que todo o débito técnico seja pago, para garantir a qualidade máxima.
-
Ignorar o débito técnico para focar exclusivamente na entrega de novas funcionalidades solicitadas pelo cliente.
-
Criar um projeto de refatoração separado para ser executado somente após a conclusão do projeto atual.
-
Negociar e alocar uma porcentagem da capacidade de cada sprint para pagar o débito, priorizando os itens de maior impacto e risco.
-
-
Ao definir um novo padrão de arquitetura para a equipe, qual é a melhor estratégia que um Líder Técnico pode adotar para garantir sua adoção?
-
Impor o novo padrão de forma unilateral e revisar o código de todos para garantir que estão seguindo.
-
Deixar que cada desenvolvedor decida se quer ou não adotar o novo padrão, promovendo a autonomia total.
-
Documentar a decisão (ex: em um ADR - Architecture Decision Record), discuti-la com a equipe para obter feedback e consenso, e depois automatizar sua verificação.
-
Discutir a decisão verbalmente em uma reunião e esperar que todos se lembrem e apliquem o padrão.
-
-
Dois desenvolvedores sêniores na sua equipe têm opiniões fortes e conflitantes sobre qual tecnologia usar em um novo serviço. Como um Líder Técnico deve mediar a situação?
-
Deixá-los debater até que um deles desista, para não se envolver no conflito.
-
Escolher imediatamente a tecnologia com a qual você tem mais familiaridade para acelerar a decisão.
-
Escalar o problema para o seu gerente, pedindo que ele tome a decisão final.
-
Facilitar uma reunião onde ambos apresentam prós e contras com base nos requisitos do projeto, e guiar a equipe para um consenso ou tomar a decisão final se necessário.
-
-
Qual é a responsabilidade principal de um Líder Técnico no desenvolvimento de carreira dos membros da sua equipe?
-
Nenhuma, pois o desenvolvimento de carreira é uma responsabilidade exclusiva do departamento de RH e do próprio indivíduo.
-
Focar apenas no desenvolvimento dos desenvolvedores sêniores, pois eles trazem mais impacto para o projeto.
-
Identificar proativamente oportunidades de crescimento, delegar tarefas desafiadoras com mentoria e fornecer feedback regular e construtivo.
-
Garantir apenas que as tarefas sejam entregues no prazo, pois esse é o principal indicador de performance da equipe.
-
-
Um gerente de produto (Product Manager) pergunta por que uma funcionalidade aparentemente simples levará três semanas para ser desenvolvida. Qual é a melhor forma de responder?
-
Dizer "porque é tecnicamente complexo" e não dar mais detalhes para não confundir.
-
Usar jargões técnicos complexos para justificar o tempo, mostrando a profundidade do seu conhecimento.
-
Explicar os passos necessários e os riscos em uma linguagem de negócio (ex: "precisamos garantir a segurança dos dados, o que exige testes extras"), traduzindo o esforço técnico em impacto.
-
Aceitar um prazo menor para evitar conflito, mesmo sabendo que isso resultará em baixa qualidade e débito técnico.
-
-
Qual é o papel de um Líder Técnico na promoção de uma cultura DevOps na equipe?
-
Contratar uma equipe de "DevOps" separada para cuidar de toda a automação, isolando os desenvolvedores do processo.
-
Promover a responsabilidade de ponta a ponta ("you build it, you run it"), incentivando a automação de testes/deploys (CI/CD) e a colaboração entre as áreas.
-
Focar apenas na velocidade de desenvolvimento, deixando as responsabilidades de deploy e monitoramento para a equipe de operações.
-
Implementar o maior número possível de ferramentas de DevOps, independentemente de elas resolverem um problema real da equipe.
-
-
Durante o planejamento de um projeto, a equipe sugere usar uma tecnologia nova, mas que ninguém tem experiência. Qual a atitude mais prudente do Líder Técnico?
-
Vetar imediatamente a ideia para evitar qualquer risco ao cronograma do projeto.
-
Aprovar a tecnologia sem ressalvas, confiando que a equipe aprenderá durante o desenvolvimento.
-
Propor a criação de uma Prova de Conceito (PoC) ou um "spike" para avaliar a tecnologia em um escopo limitado, identificando os riscos e tendo um plano B.
-
Delegar a tarefa de aprender a nova tecnologia para o membro mais júnior da equipe, como um desafio.
-
-
Quando é o momento ideal para começar a se preocupar com os requisitos não-funcionais, como performance e escalabilidade?
-
Somente quando os clientes começarem a reclamar da lentidão do sistema.
-
No final do projeto, em uma fase de "otimização" pouco antes do lançamento.
-
Desde o início do projeto, incorporando-os ao design da arquitetura e aos critérios de aceite das funcionalidades.
-
Esta é uma preocupação exclusiva da equipe de infraestrutura (SRE/Ops), não da equipe de desenvolvimento.
-
-
Qual é a forma mais eficaz de um Líder Técnico delegar uma tarefa complexa?
-
Manter todas as tarefas complexas para si mesmo para garantir a máxima qualidade e evitar riscos.
-
Delegar a tarefa com um passo a passo detalhado de como ela deve ser implementada, fazendo microgerenciamento para garantir que saia como o esperado.
-
Definir claramente o resultado esperado ("o quê"), dar autonomia sobre "como" implementar, e garantir que o desenvolvedor tenha o contexto e suporte necessários.
-
Delegar a tarefa para o primeiro desenvolvedor disponível, sem fornecer muito contexto para não influenciar sua criatividade.
-
-
Do ponto de vista de um Líder Técnico, qual é o objetivo principal de se estabelecer um processo de revisão de código (Code Review)?
-
Apenas encontrar o máximo de bugs possível no código dos outros para garantir a qualidade.
-
Servir como um ponto de controle para culpar desenvolvedores por erros e medir a performance individual.
-
Garantir a qualidade, compartilhar conhecimento, manter padrões de código e criar oportunidades de mentoria na equipe.
-
Criar uma burocracia necessária para o processo de desenvolvimento, mesmo que atrase as entregas.
-
2.2. Gabarito
-
d
-
c
-
d
-
c
-
c
-
b
-
c
-
c
-
c
-
c
3. Arquiteto de Software Java
3.1. Perguntas
-
Conforme o Teorema CAP, ao projetar um sistema distribuído que deve tolerar falhas de rede (Tolerância a Particionamento), qual é o principal "trade-off" que um arquiteto deve fazer?
-
Entre alta performance de escrita e alta performance de leitura.
-
Entre baixa latência e alto throughput (vazão).
-
Entre Consistência forte (todos os nós leem o dado mais recente) e alta Disponibilidade (o sistema sempre responde).
-
Entre o custo da infraestrutura e a facilidade de manutenção do código.
-
-
Em uma arquitetura de microsserviços, qual padrão é mais indicado para gerenciar uma transação de negócio que abrange múltiplos serviços, sem o uso de um protocolo de
two-phase commit(2PC)?-
Utilizar um banco de dados monolítico compartilhado por todos os microsserviços para garantir atomicidade.
-
Implementar o padrão Saga, que orquestra a transação por uma sequência de transações locais e eventos de compensação.
-
Exigir que todos os serviços envolvidos na transação estejam sempre 100% disponíveis.
-
Realizar chamadas REST síncronas em cadeia, tratando exceções em cada passo.
-
-
Qual estratégia de cache envolve a aplicação verificar primeiro o cache e, em caso de "cache miss", buscar os dados na fonte primária (ex: banco de dados) e só então popular o cache?
-
Write-Through(Escrita Direta) -
Write-Back(Escrita Posterior) -
Cache-Aside(Cache de Lado) -
Refresh-Ahead(Atualização Adiantada)
-
-
Ao otimizar uma aplicação Java para baixa latência, como um sistema de negociações financeiras, qual tipo de Coletor de Lixo (Garbage Collector) é a escolha mais moderna e apropriada devido ao seu foco em pausas muito curtas?
-
O coletor Serial, por ser o mais simples de todos.
-
O coletor Parallel (Throughput), pois visa maximizar a quantidade de trabalho feito pela aplicação.
-
O coletor ZGC (Z Garbage Collector) ou Shenandoah, projetados para pausas de baixíssima latência (na ordem de milissegundos).
-
Desabilitar o Garbage Collector para evitar qualquer tipo de pausa na JVM.
-
-
Em qual cenário um arquiteto deveria preferir o uso de GraphQL em vez de uma API REST tradicional?
-
Para expor operações simples de CRUD (Create, Read, Update, Delete) sobre um único recurso.
-
Quando a aplicação cliente (ex: um app móvel) precisa buscar dados complexos de múltiplos recursos em uma única chamada, especificando os campos exatos que deseja receber.
-
Quando o principal requisito é aproveitar ao máximo o cache HTTP nativo dos navegadores e CDNs.
-
Para comunicação interna, de servidor para servidor, onde a performance e um contrato rígido são essenciais.
-
-
Qual é o princípio fundamental por trás do padrão de arquitetura CQRS (Command Query Responsibility Segregation)?
-
Unificar os modelos de leitura e escrita para simplificar o acesso aos dados e reduzir a duplicação de código.
-
Usar sempre um único banco de dados para todas as operações, tanto de comando quanto de consulta.
-
Segregar as responsabilidades, usando modelos e, potencialmente, armazenamentos de dados diferentes e otimizados para operações de escrita (Commands) e de leitura (Queries).
-
É um padrão de design que se aplica exclusivamente à camada de interface do usuário (UI) para separar ações de visualizações.
-
-
No contexto de segurança de aplicações, qual é a diferença essencial entre Autenticação e Autorização?
-
São termos sinônimos para o processo de login de um usuário.
-
Autenticação determina o que um usuário pode fazer, enquanto Autorização verifica sua identidade.
-
Autenticação é o processo de verificar a identidade de um usuário (quem você é), enquanto Autorização define quais ações ele pode executar (o que você pode fazer).
-
Autenticação se aplica a usuários humanos, enquanto Autorização se aplica apenas à comunicação entre serviços.
-
-
Um arquiteto precisa de um message broker para um sistema de
event streamingcujo requisito principal é ter um log de eventos durável, imutável e com alta capacidade de reprocessamento (replay). Qual tecnologia é mais adequada?-
RabbitMQ
-
Redis Pub/Sub
-
Apache Kafka
-
Amazon SQS (modo padrão)
-
-
Em qual situação a escolha de uma arquitetura Monolítica pode ser mais vantajosa do que uma arquitetura de Microsserviços?
-
Para uma grande empresa com dezenas de equipes que precisam trabalhar de forma independente.
-
Quando diferentes componentes do sistema possuem requisitos de escalabilidade e tecnologia muito distintos.
-
No início de um novo produto (MVP), com uma equipe pequena, onde a baixa complexidade operacional e a velocidade de desenvolvimento são cruciais.
-
Quando se deseja utilizar diferentes linguagens de programação para diferentes módulos do sistema.
-
-
Qual problema o padrão de resiliência "Circuit Breaker" (Disjuntor) resolve em um sistema distribuído?
-
Garante a consistência de dados em transações que envolvem múltiplos serviços.
-
Balanceia a carga de requisições entre múltiplas instâncias de um serviço.
-
Impede que um serviço continue tentando se comunicar com outro que está falhando, evitando uma falha em cascata e permitindo que o serviço dependente se recupere.
-
Criptografa a comunicação entre os serviços para garantir a segurança dos dados.
-
3.2. Gabarito
-
c
-
b
-
c
-
c
-
b
-
c
-
c
-
c
-
c
-
c
4. Arquiteto de Software (Java + Kubernetes)
4.1. Perguntas
-
Em uma arquitetura de microsserviços rodando em Kubernetes, qual é o principal problema que um Service Mesh (como Istio ou Linkerd) visa resolver?
-
Gerenciar o provisionamento de volumes persistentes (Persistent Volumes) para aplicações stateful.
-
Abstrair a lógica de comunicação entre serviços (observabilidade, resiliência, segurança com mTLS, roteamento) do código da aplicação para uma camada de infraestrutura.
-
Substituir o Ingress Controller para gerenciar o tráfego de entrada no cluster.
-
Automatizar o processo de build e deploy das imagens de contêiner no cluster (CI/CD).
-
-
Ao containerizar uma aplicação Java para rodar em Kubernetes, qual desafio comum relacionado à JVM um arquiteto deve considerar para evitar problemas de instabilidade?
-
A JVM se ajusta automaticamente aos limites do contêiner, não sendo necessária nenhuma configuração adicional.
-
Versões mais antigas da JVM não reconhecem os limites de recursos do contêiner (cgroups), podendo alocar memória em excesso e serem terminadas pelo Kubernetes (OOMKilled).
-
Aplicações Java não podem ser containerizadas eficientemente devido ao seu alto consumo de memória.
-
É obrigatório reescrever a aplicação em outra linguagem, como Go ou Rust, para obter boa performance em contêineres.
-
-
Qual objeto do Kubernetes é o mais indicado para implantar uma aplicação que requer identidade de rede estável e armazenamento persistente garantido, como um banco de dados?
-
Deployment -
DaemonSet -
Job -
StatefulSet
-
-
Frameworks como Quarkus e Micronaut são populares no ecossistema Java cloud-native. Qual é a principal vantagem arquitetural que eles oferecem em um ambiente como Kubernetes?
-
Possuem um modelo de programação muito mais simples para desenvolvedores júnior.
-
Oferecem maior segurança, pois não permitem o uso de bibliotecas de terceiros.
-
São otimizados via compilação Ahead-of-Time (AOT), resultando em startup extremamente rápido e baixo consumo de memória, ideais para contêineres e funções serverless.
-
Fornecem melhor integração com bancos de dados legados do que o Spring Boot.
-
-
O que é um "Operator" no contexto do Kubernetes?
-
Um software de monitoramento que coleta métricas e logs das aplicações.
-
Um padrão de software que estende a API do Kubernetes para automatizar o gerenciamento de ciclo de vida de aplicações complexas, codificando conhecimento operacional.
-
Um tipo especial de
StorageClasspara provisionamento dinâmico de volumes. -
Um profissional certificado responsável por operar manualmente um cluster Kubernetes.
-
-
Qual é a principal diferença de responsabilidade entre um Kubernetes Ingress e um API Gateway?
-
Não há diferença, API Gateway é apenas um nome comercial para um Ingress Controller.
-
O Ingress gerencia o tráfego interno (cluster-to-cluster), enquanto o API Gateway gerencia o tráfego externo.
-
O Ingress lida apenas com o roteamento de tráfego L7 (HTTP/S), enquanto um API Gateway adiciona funcionalidades como autenticação, rate limiting e transformação de requisições.
-
O Ingress é um recurso nativo do Kubernetes, enquanto o API Gateway deve sempre ser executado fora do cluster.
-
-
Como um arquiteto pode garantir que um contêiner dentro de um Pod rode com o mínimo de privilégios necessários (Principle of Least Privilege)?
-
Executando todos os contêineres com o usuário
rootpara evitar problemas de permissão. -
Utilizando
NetworkPolicypara restringir o acesso à rede do Pod. -
Criptografando a imagem do contêiner antes de enviá-la para o registry.
-
Configurando o
securityContextdo Pod/Contêiner para definir um usuário não-root, um sistema de arquivos raiz somente leitura e removercapabilitiesdesnecessárias.
-
-
Em uma arquitetura de microsserviços, como um arquiteto pode viabilizar o rastreamento de uma requisição que passa por múltiplos serviços para depurar latências e erros?
-
Aumentando o nível de log em cada serviço e correlacionando os timestamps manualmente.
-
Implementando health checks (
livenessereadiness probes) em cada serviço. -
Adotando uma solução de Rastreamento Distribuído (Distributed Tracing) com OpenTelemetry, que propaga um ID de correlação através dos serviços.
-
Usando um APM (Application Performance Monitoring).
-
-
Ao projetar um consumidor de eventos de um message broker que garante entrega "at-least-once" (pelo menos uma vez), por que é crucial que o endpoint consumidor seja idempotente?
-
Para garantir que o consumidor processe as mensagens mais rapidamente.
-
Porque a garantia "at-least-once" implica que uma mensagem pode ser entregue múltiplas vezes, e a idempotência evita efeitos colaterais (como duplicar uma cobrança).
-
Para diminuir o tamanho da mensagem e economizar banda de rede.
-
A idempotência não é necessária, pois o padrão é usar entrega "exactly-once".
-
-
Ao escolher entre orquestração e coreografia para a comunicação entre microsserviços, qual é a principal característica da coreografia?
-
Um serviço central (orquestrador) dita o fluxo de execução e as chamadas para os outros serviços.
-
Os serviços reagem a eventos emitidos por outros serviços de forma autônoma e descentralizada, sem um controlador central.
-
Todos os serviços se comunicam diretamente uns com os outros através de chamadas síncronas.
-
A comunicação é feita através de um banco de dados compartilhado que centraliza o estado do fluxo.
-
4.2. Gabarito
-
b
-
b
-
d
-
c
-
b
-
c
-
d
-
c
-
b
-
b