Glossário¶
Definições centralizadas de termos técnicos, siglas e acrônimos usados no conteúdo. Cada termo deve ser definido aqui uma única vez (evitar redefinir de forma inconsistente dentro das páginas de conteúdo — nas páginas, referencie o termo e linke para a entrada correspondente aqui).
Formato de cada entrada:
Organize por ordem alfabética.
Apache Kafka — plataforma de streaming distribuída (originalmente do LinkedIn, hoje mantida pela Apache Software Foundation) para mover, armazenar e processar dados em tempo real com alta performance e resiliência. Um tópico é dividido em partições; cada mensagem publicada recebe um offset (posição na partição); brokers formam um cluster que armazena as partições de forma distribuída; o Zookeeper coordena a descoberta e sincronização entre brokers. Ver Event-Driven Architecture.
Consumer Group (Kafka) — mecanismo que garante que cada grupo de consumidores inscritos num tópico receba uma cópia de cada mensagem — dentro do mesmo grupo, a mensagem é distribuída (nunca duplicada) entre os consumidores membros. Regra fundamental: uma partição não pode ser lida por mais de um consumidor do mesmo grupo ao mesmo tempo — mais consumidores num grupo do que partições no tópico deixa consumidores ociosos. Ver Event-Driven Architecture.
Replication factor (Kafka) — define quantas réplicas cada partição de um tópico terá, obrigatoriamente distribuídas em brokers diferentes. Com fator 1 (padrão), a perda do broker que hospeda uma partição perde as mensagens dela; com fator maior, uma réplica é automaticamente promovida a "master" se o broker original ficar indisponível, sem perda de dados. Ver Event-Driven Architecture.
AoP (Aspect-Oriented Programming) — paradigma que complementa a orientação a objetos,
lidando com funcionalidades que atravessam múltiplos módulos de um sistema
(cross-cutting concerns, como logging, segurança e transações) sem espalhar código
repetitivo por todas as classes envolvidas. Um pointcut define onde um comportamento
deve ser aplicado; um advice define o que executar naquele ponto (@Before,
@AfterReturning, @AfterThrowing). Não substitui a OO — encapsula esses
comportamentos transversais em aspects, aplicados automaticamente antes, depois ou ao
redor de métodos específicos. Ver SRE.
AES (Advanced Encryption Standard) — algoritmo de criptografia simétrica (mesma chave cifra e decifra), padrão do NIST desde 2001, sucessor do DES. Cifrador de blocos (128 bits), com chaves de 128/192/256 bits e modos de operação (ECB — inseguro, evitar —, CBC, CFB/OFB, GCM). Preferível a RSA para criptografar dados entre serviços de backend numa rede confiável, por ser mais rápido. Ver Segurança.
Abstract Factory (padrão GoF) — fábrica responsável por criar uma família inteira de
objetos relacionados, garantindo que todos vêm da mesma implementação/fornecedor, sem
risco de misturar objetos incompatíveis entre si (ex.: Connection/ResultSet/
Statement de drivers JDBC diferentes). Fácil adicionar uma família nova (nova
implementação da fábrica); difícil adicionar um tipo de produto novo (exige alterar a
abstração e todas as implementações existentes). Ver
Padrões Arquiteturais.
AUTO_INCREMENT — atributo de coluna (SQL) que faz o banco gerar automaticamente o
próximo número inteiro sequencial a cada INSERT, sem precisar informá-lo manualmente.
Uso mais comum: gerar o valor de uma chave primária. Ver SQL.
Acoplamento — o quanto uma classe depende de outras classes. Não é problemático por si só — acoplar-se com um módulo estável (que muda pouco, como uma interface bem definida) é acoplamento bom; acoplar-se com um módulo instável propaga mudanças e bugs para a classe dependente. Ver Boas Práticas.
Acoplamento lógico — acoplamento que não aparece no código-fonte (nenhum import
ou referência direta) — duas partes do sistema que precisam mudar juntas por uma
convenção externa (ex.: nome de método de um controller que precisa bater com o nome
de um arquivo de view). Mais perigoso que o acoplamento estrutural por ser invisível
numa leitura rápida do código. Ver
Boas Práticas.
Acoplamento aferente / eferente — métricas que medem, respectivamente, quantas
classes dependem de uma classe (aferente — alto indica que a classe é usada por
muitas outras, então deve ser estável) e de quantas classes ela depende (eferente —
alto indica que ela é frágil, pois muita coisa externa pode forçá-la a mudar). List
do Java tem aferente altíssimo e eferente zero. Ver
Boas Práticas.
Adapter (padrão GoF) — faz uma classe existente (Adaptada) ser usável através de
uma interface diferente da que ela já implementa. Estruturalmente parecido com Proxy/
Decorator, mas a classe encapsulada não implementa a mesma interface — o Adapter
traduz cada chamada. Muito usado para migração de versões de API incompatíveis (ex.:
Enumeration → Iterator via IteratorUtils do Apache Commons Collections). Ver
Padrões Arquiteturais.
Agregação x composição (sentido estrito) — duas formas de uma classe guardar outra como atributo. Agregação: a instância pode ser compartilhada entre vários objetos e existe independente de quem a referencia. Composição (sentido estrito): a instância é exclusiva de um objeto, e sua existência está atrelada à dele. No vocabulário mais geral de padrões de projeto, "composição" costuma ser usada sem essa distinção fina — só para indicar que uma classe tem outra como atributo. Ver Padrões Arquiteturais.
Alias (SQL) — apelido curto para uma tabela (ou coluna calculada, com AS) numa
consulta, evitando repetir o nome inteiro e desambiguando colunas de mesmo nome entre
tabelas diferentes num JOIN. Ver SQL.
Array — estrutura de dados que guarda uma coleção de valores do mesmo tipo, em
posições sequenciais (índices de 0 até tamanho - 1), com tamanho fixo definido na
criação. Ver Estrutura de Dados.
Agregado (Aggregate, DDD) / Aggregate Root — Agregado é um aglomerado de Entidades e
Objetos de Valor tratados como uma única unidade de negócio identificável (ex.: um
Order/pedido, contendo cliente e itens). O Aggregate Root é a Entidade principal do
Agregado e a única porta de entrada para interagir com ele — nenhum código deveria
acessar diretamente um objeto interno por fora da raiz, sob risco de comprometer a
consistência do conjunto. Ver DDD.
Anti-Corruption Layer — padrão de Domain-Driven Design (Eric Evans) para acessar um sistema legado sem deixar o modelo antigo "contaminar" o novo design: uma camada de tradução (normalmente um Facade, às vezes com um Adapter por trás) fica entre as duas aplicações, isolando a existência do legado do restante do código novo. Ver Padrões Arquiteturais.
Arquitetura hexagonal (Ports and Adapters) — padrão (Alistair Cockburn, 2005) que garante que o domínio lide exclusivamente com regras de negócio, com toda interação externa passando por portas de entrada (input ports) e de saída (output ports/adapters) — o fluxo de dependência sempre aponta para dentro do domínio, representado metaforicamente como um hexágono. Ver Padrões Arquiteturais.
Arquitetura em Camadas (Layered Architecture) — agrupa responsabilidades em pacotes com dependência sequencial entre eles (apresentação → domínio/serviços → persistência), como um prédio onde cada andar só acessa o de baixo. Mais simples de implementar que Hexagonal/Clean Architecture, mas não prioriza o isolamento do domínio: a camada de domínio tende a ficar acoplada diretamente à de persistência, ferindo o DIP. Ver Padrões Arquiteturais.
Clean Architecture — padrão (Robert C. Martin, 2012) visto como evolução da Arquitetura Hexagonal, especificando mais camadas para o domínio: Entities (regras de negócio enterprise, reaproveitáveis) e Use Cases (regras específicas da aplicação atual, orquestrando Entities na "Dança das Entidades"), com Gateways e Presenters como portas de saída. Regra de dependência: sempre da camada mais externa para a mais interna. Ver Padrões Arquiteturais.
ArchUnit / Teste de arquitetura — teste de arquitetura automatiza, via teste
unitário, a validação de que um padrão arquitetural definido pela equipe (ex.: "classes
da camada de domínio não devem depender de nada fora dela") continua sendo respeitado ao
longo do tempo — sem depender só de code review manual. ArchUnit é a biblioteca Java
mais usada para isso, com regras (@ArchTest) escritas numa linguagem próxima da
linguagem natural. Ver
Padrões Arquiteturais.
Arrange, Act, Assert — os três passos que a maioria dos testes automatizados segue: montar o cenário, executar a ação testada, e validar a saída contra o esperado. Ver Qualidade.
Árvore (TAD) — TAD hierárquico onde elementos (nós) têm uma relação pai/filho — um nó pode ter vários filhos, mas um único pai (exceto a raiz, que não tem pai). Ver Estrutura de Dados.
Árvore AVL — árvore binária de busca que se rebalanceia sozinha a cada inserção/remoção (via rotações), garantindo busca/inserção/remoção O(log n) mesmo no pior caso. Ver Estrutura de Dados.
Árvore binária de busca (BST) — árvore binária ordenada: em todo nó, a subárvore à esquerda só tem valores menores e a subárvore à direita só tem valores maiores. Permite busca O(log n) descartando metade dos nós a cada passo, como uma busca binária. Ver Estrutura de Dados.
ArithmeticException x Infinity/NaN — dividir um valor inteiro por zero lança
ArithmeticException; a mesma operação com float/double não lança exceção, e produz
Infinity ou NaN (Not a Number). Ver
Java.
Assinatura de um método — nome do método mais os tipos e ordem dos parâmetros; não inclui o tipo de retorno nem o nome dos parâmetros. É o que permite sobrecarga (métodos de mesmo nome com assinaturas diferentes). Ver Orientação a Objetos.
Authentication x Authorization — autenticação confirma quem é o usuário;
autorização confere o que esse usuário pode fazer. O cabeçalho HTTP Authorization
carrega, por convenção histórica, uma credencial de autenticação, e é o servidor
quem decide as autorizações a partir dela. Ver
Backend.
authorization_code (OAuth) — código de curta duração (recomendado no máximo 10
minutos) que o Authorization Server entrega ao Client, via redirecionamento, após o
Resource Owner autorizar o acesso — trocado em seguida por um token de acesso. Não
confundir com o grant type "Authorization Code" (o fluxo inteiro); é só o parâmetro de
uma das etapas dele. Ver Segurança.
Autoboxing — conversão automática (feita pelo compilador) entre um tipo primitivo e
sua classe wrapper correspondente, ex.: Integer numero = 10; sem new Integer(10)
explícito. Ver Java.
Bloco estático (static { }) — código que roda uma única vez, quando a classe é
carregada pela JVM (antes de qualquer instância ou acesso a membro estático). Se lançar
uma exceção, ela é embrulhada num ExceptionInInitializerError. Ver
Java.
BETWEEN — operador SQL que filtra um intervalo (valor BETWEEN a AND b),
equivalente a >= a AND <= b, mas mais legível. Funciona para números e datas. Ver
SQL.
BFS (busca em largura) — percorre uma árvore ou grafo visitando todos os vizinhos diretos antes de avançar para os vizinhos dos vizinhos; implementação típica usa fila. Encontra o caminho mais curto (em arestas) primeiro, em grafo não ponderado. Ver Estrutura de Dados.
Bridge (padrão GoF) — separa duas variabilidades independentes de um problema em duas hierarquias de classes ligadas por composição, evitando duplicação de código ou explosão combinatória de subclasses quando as duas dimensões variam ao mesmo tempo. Qualquer implementação de um lado se combina livremente com qualquer implementação do outro. Ver Padrões Arquiteturais.
Builder (padrão GoF) — extrai a lógica de criação de um objeto complexo para uma classe própria, responsável por todo o processo de construção; permite obter diferentes representações do produto final a partir do mesmo processo. Costuma expor uma interface fluente (ver Interface fluente, abaixo). Ver Padrões Arquiteturais.
Blackbox x Whitebox framework — dois jeitos de estender um framework. Whitebox (herança): a subclasse precisa conhecer a estrutura interna da superclasse (hook methods) para inserir comportamento. Blackbox (composição): quem estende só implementa a interface esperada, sem conhecer nada do interior da classe — mais simples de usar, porém mais difícil de identificar de início como ponto de extensão. Uma classe pode combinar as duas abordagens. Ver Padrões Arquiteturais.
Baby steps — na prática de TDD, sempre escrever o código mais simples possível que faz o teste atual passar, generalizando aos poucos conforme novos testes forçam a implementação a evoluir. Ver Qualidade.
Brainstorming — técnica (Alex Osborn, 1948) para gerar ideias criativas coletivamente, livre de críticas durante a geração. Quatro regras de Osborn: foco na quantidade, sem críticas, incentivo a ideias "malucas", combinar e melhorar ideias. Três tipos: Silent storming (individual, via post-its), Group storming (colaborativo, em voz alta) e Reverse storming (cada ideia passada adiante para ser descartada ou mantida). Consolidação de ideias via multi-votação ou grupo nominal/Zen voting. Ver Requisitos.
Bearer Token — tipo de token de acesso mais comum em OAuth 2.0: pode ser usado por
qualquer um que o possua, como uma nota de dinheiro (quem a encontra pode gastá-la).
Enviado tipicamente no header Authorization: Bearer <token> — a forma mais
recomendada, mais simples e mais segura que enviá-lo como parâmetro de formulário ou de
URI. Ver Segurança.
Bytecode — formato intermediário gerado pelo compilador Java (javac), guardado em
arquivos .class. Não é código de máquina nem o código-fonte original: é o que a JVM
sabe interpretar. Ver Java.
Clean Code — conjunto de boas práticas definido por Robert C. Martin (Uncle Bob) para escrever código legível e de boa qualidade, entendível até por quem não participou da criação dele. SOLID é o conjunto de princípios mais importante dentro do Clean Code, voltado especificamente a design orientado a objetos. Ver Boas Práticas.
CamelCase — convenção de nomenclatura sem espaço ou _ entre palavras, onde cada
nova palavra começa com maiúscula (meuPrimeiroPrograma). Ver
Java.
Chain of Responsibility (padrão GoF) — organiza uma sequência de passos como uma
cadeia de execução: cada elemento processa a informação e decide se delega ao próximo.
Combina Template Method (lógica comum + hook por elemento) com composição recursiva
(cada elemento referencia o próximo do mesmo tipo). Filtros de Servlet (Filter/
doFilter()) são um exemplo direto. Ver
Padrões Arquiteturais.
Command (padrão GoF) — representa uma operação como uma classe (em vez de só um
método): a abstração define um método de execução, e cada comando concreto guarda os
dados necessários para a própria execução como atributos. Torna a operação independente
do contexto que a originou — pode ser passada como parâmetro, armazenada num histórico,
executada remotamente, ou desfeita (com um método desfazer() complementar). Ver
Padrões Arquiteturais.
Casting — conversão explícita de um valor de um tipo para outro, quando o compilador
não faz essa conversão sozinho (ex.: double para int, com possível perda de
precisão). Ver Java.
Crise do software — movimento evidenciado numa conferência da NATO Science Committee em 1968, que reconheceu formalmente que o modo como o software vinha sendo criado até então era ineficiente — gatilho para a criação da Engenharia de Software como disciplina organizada. Ver Engenharia de Software.
Canvas MVP — quadro visual usado numa Lean Inception para estruturar e validar as ideias de um MVP, organizado em 7 blocos (Proposta do MVP, Personas segmentadas, Jornadas, Funcionalidades, Resultado esperado, Métricas para validar propostas de negócio, Custo e cronograma), apoiado nos ciclos do Lean Startup (construir-medir- aprender) e do design centrado no usuário. Ver Requisitos.
Crazy8s — técnica de ideação rápida (usada no Dia 2 de um Design Sprint): em 8 minutos, cada participante gera 8 ideias diferentes numa folha dobrada em 8 retângulos, sem julgamento durante a criação; depois cada um apresenta e defende suas ideias, que são votadas para eleger 1 ideia principal e 2 secundárias. Ver Requisitos.
Chave primária (Primary Key) — coluna (ou conjunto de colunas) que identifica
unicamente cada linha de uma tabela; nunca se repete, nunca fica vazia. Comumente um
número inteiro autoincrementado (id). Ver
Modelagem de Dados.
Constraints (SQL) — restrições que o banco garante sozinho, sem depender de
validação na aplicação (ex.: NOT NULL, PRIMARY KEY). Ver
SQL.
Checked Exception x Unchecked Exception — checked exceptions (filhas diretas de
Exception, ex.: IOException) obrigam o compilador a exigir tratamento (try/catch)
ou declaração (throws); representam condições externas não totalmente previsíveis pelo
código. Unchecked exceptions (filhas de RuntimeException, ex.:
NullPointerException) não exigem tratamento do compilador; em geral representam erros
de programação evitáveis. Ver
Boas Práticas.
Catálogo de exceções e erros comuns (IndexOutOfBoundsException,
NumberFormatException, IllegalArgumentException, IllegalStateException,
StackOverflowError, OutOfMemoryError, NoClassDefFoundError) — ver tabela completa
em Boas Práticas.
Curto-circuito (operadores lógicos) — comportamento de &&/|| de não avaliar o
segundo operando quando o resultado já pode ser determinado só pelo primeiro. Os
operadores &/| (sem curto-circuito) sempre avaliam os dois lados — importa quando o
segundo operando tem efeito colateral. Ver
Java.
Claim (JWT) — uma afirmação que um token JWT faz sobre si mesmo ou sobre uma
entidade (usuário, sistema). Classificadas em registered (padronizadas pela
especificação: iss, sub, aud, exp, nbf, iat, jti), public (definidas
livremente, registradas para evitar colisão de nomes) e private (combinadas só entre
as partes de um sistema específico). Ver
Segurança.
Classe abstrata — classe que não pode ser instanciada diretamente (new), existindo
apenas para ser herdada. Pode declarar métodos abstratos (sem corpo), que toda subclasse
concreta é obrigada a implementar. Ver
Orientação a Objetos.
Classe de equivalência (testes) — grupo de cenários de entrada equivalentes sob a ótica do comportamento testado — testar um representante do grupo testa, na prática, todos os outros. Escrever um teste por classe de equivalência (em vez de vários testes quase idênticos) cobre o comportamento sem inflar a suíte à toa. Ver Qualidade.
Caso especial (edge case) — cenário na borda de um comportamento — lista com um
elemento, lista vazia, valor exatamente igual ao limite de uma condição (> x >=).
Fácil de esquecer na implementação; merece teste próprio, separado do caso comum. Ver
Qualidade.
Classpath — conjunto de diretórios, .jars e .zips onde javac/java procuram as
classes referenciadas por um programa. Configurável via variável de ambiente CLASSPATH
(evitar — é global) ou via -cp/-classpath na chamada do comando (recomendado — vale só
para aquela execução). Ver Java.
Container (Docker) x Máquina Virtual (VM) — duas formas de isolar aplicações. VM executa um sistema operacional Guest completo sobre um hypervisor — isolamento total, mas inicialização lenta e alto consumo de recursos. Container compartilha o kernel do sistema hospedeiro, isolando só processos e dependências — mais leve, rápido de iniciar (segundos) e fácil de replicar, ideal para microsserviços e pipelines de CI/CD. Ver Containers (Docker).
Docker / Docker Compose — Docker é a ferramenta principal para criar e gerenciar
containers, a partir de imagens em camadas armazenadas em repositórios remotos
(registries como o Docker Hub). Docker Compose coordena múltiplos containers e suas
dependências num único arquivo YAML (docker-compose.yaml), simplificando orquestração
local — por padrão, containers rodam em redes isoladas entre si; colocá-los na mesma rede
Docker permite que se comuniquem pelo nome do container em vez de localhost. Ver
Containers (Docker).
Cliente confidencial x cliente público (OAuth) — classificação de uma aplicação conforme sua capacidade de proteger uma credencial. Cliente confidencial roda no servidor (código não exposto) e consegue guardar segredos com segurança; cliente público roda no dispositivo do usuário (app mobile, JavaScript no navegador) e não tem como guardar um segredo de forma confiável — por isso o OAuth 2.0 define fluxos diferentes para cada tipo. Ver Segurança.
client_id / client_secret (OAuth) — identificadores gerados pelo Authorization
Server ao registrar um Client: client_id é um identificador único, não sigiloso;
client_secret é uma chave que o Client usa para se autenticar sempre que se comunica
com o Authorization Server (só clientes confidenciais recebem e usam). Ver
Segurança.
Coesão — o quanto uma classe representa uma única responsabilidade/conceito do sistema (ver também SRP, mais abaixo). Classe coesa é mais simples, mais fácil de reutilizar e menos propensa a propagar bugs para outras classes. Ver Boas Práticas.
Cobertura de código (code coverage) — métrica que indica a porcentagem do código-fonte executada por pelo menos um teste automatizado. Útil como indicador de onde faltam testes, não como prova de ausência de defeitos — perseguir 100% como meta absoluta raramente vale o esforço. Ver Qualidade.
Code smell (mau cheiro de código) — padrão recorrente no código que não é, por si só, um bug (o programa funciona), mas é sintoma de um problema maior de design (baixa coesão, acoplamento alto, abstração faltando). Exemplos: feature envy, intimidade inapropriada, refused bequest, god class, divergent changes, shotgun surgery. Ver Boas Práticas.
Collections Framework — família de interfaces (List, Set, Map, todas sob
Collection) e implementações prontas (ArrayList, HashSet, HashMap, ...) para
guardar e manipular grupos de objetos, resolvendo as limitações de um array simples
(tamanho fixo, sem métodos de busca). Ver
Estrutura de Dados.
Comparable / compareTo — interface e método usados para definir a ordem natural
entre objetos de um tipo, usados por Collections.sort. compareTo retorna negativo
(vem antes), positivo (vem depois) ou 0 (equivalente). Ver
Estrutura de Dados.
Classe x Objeto — uma classe é a especificação (molde: atributos e métodos que um
tipo de objeto vai ter); um objeto é uma instância concreta dessa especificação, criada
com new, com seus próprios valores. Ver
Orientação a Objetos.
Complexidade ciclomática (Número de McCabe) — mede quantos caminhos diferentes de
execução um método pode ter, contando instruções de desvio (if, for, while, case)
e somando 1. Quanto maior, mais difícil o método é de entender e testar. Pode ser somada
por classe. Ver Boas Práticas.
Composição — técnica de montar uma classe usando outra classe como atributo (ex.:
Livro tem um Autor), em vez de repetir os mesmos campos em lugares diferentes.
"X tem um Y" ou "X faz uso de Y", em oposição a "X é um Y" (herança) — geralmente
preferível a herança por criar um acoplamento mais fraco. Ver
Orientação a Objetos e
Boas Práticas.
Composição recursiva — uma classe tem, como atributo, uma referência à própria abstração dela mesma (superclasse/interface), permitindo que uma instância seja composta por outras do mesmo tipo geral, formando uma estrutura recursiva (base de listas ligadas, árvores, grafos e do padrão Composite). Ver Padrões Arquiteturais.
Composite (padrão GoF) — permite tratar um objeto simples e um conjunto desses objetos pela mesma abstração — ambos implementam a mesma interface, e o cliente não precisa saber se lida com um ou com muitos. A implementação composta delega e combina o resultado de quem a compõe (folhas = simples, ramos = compostos). Usado com frequência em componentes de UI (Swing, SWT, JSF). Ver Padrões Arquiteturais.
Comutação de pacotes / de circuitos — duas técnicas de rede: circuitos criam uma conexão dedicada ponto a ponto (telefonia antiga) que garante banda mas desperdiça recursos ociosos; pacotes dividem a informação e a enviam por uma malha compartilhada, sem conexão dedicada (a técnica da Internet) — mais econômica, mas sem garantia individual de entrega rápida ou ordenada. Ver Redes.
Constant folding — otimização em que o compilador resolve, em tempo de compilação, o
valor de uma expressão composta só por literais (ex.: "a" + "b" vira o literal "ab").
Relevante para o String pool: o resultado de constant folding é tratado como literal e
entra no pool; se qualquer operando for uma variável, a expressão só é resolvida em
tempo de execução, fora do pool. Ver
Java.
Cookie — mecanismo (RFC 6265) para o servidor guardar uma informação no cliente que volta automaticamente em cada requisição seguinte ao mesmo domínio — usado tipicamente para guardar um identificador de sessão, com prazo de expiração. Ver Backend.
Content negotiation (HTTP) — cliente e servidor negociam o formato da resposta via
cabeçalhos Accept/Accept-Language/Accept-Encoding/Accept-Charset, cada opção com
uma prioridade (quality factor q, padrão 1.0). O servidor escolhe dentre o que
consegue oferecer e informa a escolha via Content-Type/Content-Language/
Content-Encoding na resposta. Ver Backend.
CORS (Cross-Origin Resource Sharing) — mecanismo que permite (ou bloqueia) que uma
página web solicite recursos de um domínio diferente daquele que a serviu. O navegador
envia o cabeçalho Origin; o servidor responde com Access-Control-Allow-Origin
indicando quais domínios podem acessar o recurso — sem esse cabeçalho, ou com um domínio
diferente, o navegador bloqueia. Protege contra CSRF e acesso indevido a dados de um
usuário autenticado em outro domínio, mas só vale para navegadores (Postman e curl
ignoram essa restrição). Ver
Backend.
CSRF (Cross-Site Request Forgery) — ataque em que a vítima, autenticada num
sistema, é induzida (por um link ou formulário malicioso) a executar uma ação
indesejada nesse sistema sem perceber. No contexto OAuth, permite sequestrar um
authorization_code gerado pelo atacante, atribuindo as ações da vítima à conta dele —
mitigado com o parâmetro state. Ver
Segurança.
Construtor — método especial de uma classe, com o mesmo nome dela e sem tipo de
retorno, executado toda vez que um objeto é criado com new. Quando nenhum é declarado,
o compilador cria um construtor vazio automaticamente. Ver
Orientação a Objetos.
Construtor rico — construtor que exige, como parâmetro, todo atributo sem o qual o
objeto não pode existir em estado válido — torna impossível, em tempo de compilação,
criar uma instância incompleta. Alguns frameworks (Hibernate) exigem também um
construtor padrão (sem argumentos); nesse caso, mantê-lo com visibilidade reduzida e
@Deprecated sinaliza que não deve ser usado diretamente. Ver
Boas Práticas.
Classe imutável — classe cujo estado nunca muda depois de criada — sem setters;
qualquer "alteração" devolve uma nova instância. Evita efeitos colaterais inesperados
(nada muda por trás) e problemas de concorrência entre threads. LocalDate/
LocalDateTime (Java 8+) seguem esse padrão; Calendar (mutável) não. Ver
Boas Práticas.
Dependency Injection (Injeção de Dependências) / Inversão de Controle — padrão em que
uma classe externa ("montador") cria as dependências de um objeto e as conecta a ele
(por setter, construtor ou interface), em vez de o próprio objeto criar ou buscar suas
dependências. Também chamado de Inversão de Controle. Frameworks como Spring e o CDI do
Java EE implementam o papel de montador. Vantagem principal: testabilidade (um Mock
Object pode ser injetado no lugar da dependência real). Desvantagem: dependência não
configurada só falha em tempo de execução (NullPointerException). Ver
Padrões Arquiteturais.
Double Dispatch — técnica em que um método recebe um parâmetro e devolve a chamada
para um método do próprio parâmetro, passando this como argumento — a delegação
acontece duas vezes ("despacho duplo"). Permite que cada tipo do parâmetro decida sua
própria lógica de interação com a classe original, sem exigir instanceof nem
sobrecarga de método para cada tipo novo. Base do padrão Visitor. Ver
Padrões Arquiteturais.
Design Pattern (padrão de projeto) — solução reutilizável para um problema que se repete no projeto de um software OO — descreve problema, contexto e solução já consolidada pela experiência, não uma solução nova. Só é padrão se for uma boa solução; solução ruim recorrente é anti-padrão. Catalogados pelo GoF. Ver Padrões Arquiteturais.
Design Sprint — técnica criada pelo Google para resolver problemas complexos e testar ideias de forma rápida e colaborativa, condensando em 5 dias (Map, Sketch, Decide, Prototype, Test) o que levaria meses — permite explorar soluções, prototipar e validar hipóteses com usuários reais antes de investir no desenvolvimento. Ver Requisitos.
Design evolucionário — ideia (discutida por Martin Fowler em Is Design Dead?) de que o design de uma aplicação pode evoluir a partir das necessidades reais de crescimento do projeto, em vez de ser todo planejado com antecedência — apoiado por boa cobertura de testes e refatoração constante. Inclui não ter medo de remover um padrão de projeto já aplicado, se ele não estiver ajudando. Ver Padrões Arquiteturais.
DRY (Don't Repeat Yourself) — a mesma regra de negócio ou trecho de lógica não deveria existir duplicado em vários pontos do código; quando precisa mudar, é fácil esquecer de atualizar uma das cópias. Extrair a lógica repetida para um método ou classe reutilizável resolve. Ver Boas Práticas.
DFS (busca em profundidade) — percorre uma árvore ou grafo avançando o mais fundo possível por um caminho antes de retroceder; implementação típica usa pilha (ou recursão). Ver Estrutura de Dados.
DIP (Dependency Inversion Principle) — princípio SOLID: módulos de alto nível não devem depender de módulos de baixo nível — ambos devem depender de abstrações estáveis. Prefira depender de uma interface estável a depender direto de uma implementação instável. Ver Boas Práticas.
Divergent changes (code smell) — quando uma classe não coesa precisa ser alterada com frequência, por motivos diferentes a cada vez — o oposto do SRP: várias razões para mudar, não relacionadas entre si. Ver Boas Práticas.
DNS (Domain Name System) — sistema que traduz um nome de domínio
(www.pudim.com.br) para o endereço IP correspondente — o primeiro passo antes de
qualquer requisição HTTP conseguir abrir uma conexão. Ver
Backend.
Delegação de acesso — em vez de repassar uma credencial (senha) de um sistema para outro, gerar uma credencial temporária de escopo limitado (um token de acesso) — revogável independentemente da senha do usuário. Base conceitual do OAuth 2.0. Ver Segurança.
DTO (Data Transfer Object) — objeto usado só para transmitir dados entre camadas ou sistemas, geralmente sem comportamento (só atributos e getters/setters). Usado no lugar certo (formato exato que uma tela exibe, ou que um serviço externo espera), aumenta a semântica do código sem contaminar as classes de domínio. Ver Boas Práticas.
Dynamic Factory (padrão) — cria um objeto de uma abstração conhecida cuja
implementação concreta só é definida em tempo de execução, por configuração (arquivo,
banco, anotações) — usa reflexão (Class.forName()/newInstance()) para instanciar a
classe indicada por esse metadado. Serve de base para outros padrões de criação
(Dependency Injection, Service Locator) carregarem novas implementações sem
recompilação. Ver
Padrões Arquiteturais.
Effectively final — uma variável local ou parâmetro nunca reatribuído depois de
inicializado, mesmo sem a palavra-chave final explícita. Um lambda só pode capturar
variáveis locais que sejam final ou effectively final — nunca uma que seja
reatribuída depois. Ver Java.
Encapsulamento — pilar de OO que esconde os detalhes internos de uma classe
(atributos private, acesso só por métodos), expondo apenas o que é necessário através
de uma interface pública. Ver
Orientação a Objetos.
EDA (Event-Driven Architecture) — padrão de arquitetura em que aplicações se comunicam por meio de eventos de forma assíncrona: produtores geram eventos sem saber quem os consome, consumidores reagem sem bloquear o produtor, transportados por um bus de eventos (Apache Kafka, RabbitMQ). Promove baixo acoplamento e resiliência, ao custo de maior complexidade, depuração mais difícil e consistência eventual. Ver Event-Driven Architecture.
Event Sourcing — padrão de EDA em que o estado de um sistema é armazenado como uma sequência de eventos (um "log"), em vez de só o estado atual — cada alteração vira um evento separado, formando um histórico completo, valioso para auditoria, depuração e reconstrução de estado. Consumidores podem ler o log a partir de qualquer ponto, sob demanda. Ver Event-Driven Architecture.
Etnografia — técnica originária da Antropologia, usada na elicitação de requisitos para compreender comportamentos e práticas de um grupo por meio de observação direta e imersiva do seu modus operandi — passiva (só observar) ou ativa (participar do grupo). Útil para identificar requisitos que os próprios usuários têm dificuldade de expressar sobre sua rotina. Roteiro: planejamento, imersão, anotações, análise e validação. Ver Requisitos.
Entidade (DDD) — objeto com identidade própria (geralmente um identificador único): dois objetos com todos os outros atributos iguais ainda são considerados diferentes se seus identificadores forem diferentes. Diferente de um Objeto de Valor, que não tem identidade. Ver DDD.
Extrair Método (refatoração) — isola um trecho de um método que acumula mais de uma responsabilidade num método novo, com nome que já comunica o que aquele trecho faz. Base da técnica Extrair Classe, que faz o mesmo movimento numa escala maior: cria uma classe nova para hospedar uma responsabilidade inteira, usando Mover Método e Mover Campo para migrar até ela o que faz sentido. Ver Boas Práticas.
Escopo (scope, OAuth) — delimita o que o Client pode fazer com um token de
acesso (read, write, ...), aprovado pelo Resource Owner na tela de autorização. O
escopo concedido é a interseção entre o que o Client pediu, o que está autorizado a
pedir, e o que o Resource Owner aprovou. Diferente de role (que restringe o usuário,
não o Client — ver Segurança). Ver
Segurança.
Engenharia de Requisitos (ER) — subárea da Engenharia de Software responsável por definir um processo de obtenção, entendimento, escrita, validação e manutenção dos requisitos de um software (a etapa de Especificação do Processo de Software). Cinco fases: Estudo de viabilidade, Elicitação de Requisitos, Especificação de Requisitos, Validação/Priorização de Requisitos e Gerenciamento de Requisitos — orientadas por três perguntas (os 3 Ws): Why (motivação), What (funcionalidades) e Who (quem utiliza). Ver Requisitos.
Product Discovery (PD) — processo iterativo e colaborativo, complementar (não substituto) à Engenharia de Requisitos, que identifica e valida rapidamente as necessidades reais dos usuários e as soluções mais adequadas, antes de construir — usando técnicas de UX e Design Thinking. Aceita incerteza e promove experimentação (diferente da ER, que busca completude e estabilidade), concentrando-se nas fases de estudo de viabilidade e elicitação. Ver Requisitos.
Estabilidade de classe/interface — o quanto uma classe ou interface muda com pouca
frequência. Módulos estáveis (tipicamente abstrações/interfaces bem definidas, como
List do Java) propagam poucas mudanças para quem depende delas — acoplar-se com um
módulo estável é acoplamento de baixo risco. Ver
Boas Práticas.
ETag / If-None-Match / If-Match (HTTP) — ETag representa o estado atual de
uma entidade (ex.: hash do conteúdo). If-None-Match é usado para cache: o
servidor responde 304 Not Modified (sem corpo) se o ETag não mudou. If-Match é
usado para controle de concorrência: só executa a modificação se o ETag não
tiver mudado, evitando que dois clientes sobrescrevam um ao outro sem perceber. Ver
Backend.
Prompt — instrução, pergunta ou solicitação em texto que orienta um sistema de IA sobre que tipo de resposta ou ação produzir. Termo originado do prompt de comando das interfaces de linha de comando (CLI). Ver Engenharia de Prompt.
Engenharia de Prompt — processo (e especialização emergente) de elaborar, otimizar e ajustar prompts para extrair de sistemas de IA respostas contextuais, coerentes e úteis — não apenas corretas. Interseção entre Linguística, Ciência da Computação e IA; tende a se tornar uma habilidade complementar exigida em várias áreas, mais do que uma carreira isolada. Ver Engenharia de Prompt.
Predicate<T> — interface funcional pronta em java.util.function, com o método
test(T t) retornando boolean — representa "um critério que avalia um valor". Uma
entre várias interfaces funcionais prontas da API (Function<T,R>, Consumer<T>,
Supplier<T>), que evitam ter que declarar uma interface de um método só para cada
caso de uso. Ver Java.
Expressão lambda — forma compacta de implementar uma interface funcional:
(parâmetros) -> expressão-ou-bloco, sem nome de classe nem declaração de tipos (o
compilador infere do contexto). Introduzida no Java 8. Ver
Java.
equals — método herdado de Object que define igualdade de conteúdo entre dois
objetos (diferente de ==, que compara referência). Sem sobrescrever, se comporta igual
a ==. Deve sempre ser sobrescrito junto com hashCode. Ver
Java.
Fake (dublê de teste) — implementação escrita à mão, mais simples que a real, que
sobrescreve o comportamento de uma classe para permitir controlar diretamente o que ela
retorna num teste. Diferente de um Mock object (abaixo), que é gerado dinamicamente
por um framework como o Mockito com expectativas configuradas via when()/thenReturn()
— um Fake tende a ser preferido quando o mesmo comportamento simulado é reaproveitado em
muitos testes diferentes. Ver Qualidade.
Facade (padrão GoF) — cria uma classe intermediária (a fachada) que serve de ponto único de acesso a um conjunto de classes (um subsistema), escondendo do cliente sua complexidade interna. Não substitui a API original, só oferece um caminho mais simples para os casos de uso mais comuns. Diferente do Adapter (que adapta uma classe existente para uma interface já esperada), o Facade define uma interface nova para simplificar o uso de várias classes ao mesmo tempo. Ver Padrões Arquiteturais.
Framework — estrutura de software incompleta por design: só funciona quando completada com classes específicas da aplicação. Diferente de uma biblioteca (a aplicação chama o código e controla o fluxo), no framework é ele quem controla o fluxo e invoca código da aplicação em pontos específicos (inversão de controle). Composto por frozen spots (funcionalidade fixa) e hot spots (pontos de extensão). Ver Padrões Arquiteturais.
Frozen spot / Hot spot — as duas partes que compõem a arquitetura de um framework: frozen spots são a funcionalidade fixa, que o framework já provê pronta; hot spots são os pontos de extensão, onde a aplicação insere sua própria lógica (via herança, composição, ou configuração/anotações). Ver Padrões Arquiteturais.
Factory method (método fábrica estático) / Static Factory Method — padrão em que um
construtor é private e a criação de objetos passa por um método estático da própria
classe, em vez de new direto de fora. Resolve três limitações dos construtores: nome
expressivo (dois construtores não podem ter parâmetros do mesmo tipo, mas dois métodos
podem se chamar diferente), pode devolver uma instância já existente em vez de sempre
criar uma nova, e pode devolver qualquer subtipo compatível. Não documentado como padrão
GoF — descrito em detalhe no livro Effective Java, de Joshua Bloch. Não confundir
com o padrão GoF Factory Method (abaixo) — mesmo nome popular, ideias diferentes: este
é sobre esconder um construtor atrás de um método estático; o do GoF é sobre uma
subclasse decidir, via hook method, qual implementação concreta instanciar. Ver
Orientação a Objetos e
Padrões Arquiteturais.
Factory Method (padrão GoF) — hook method especializado em criar objetos: a superclasse define um método abstrato de criação, cada subclasse o implementa devolvendo a instância concreta que faz sentido para ela — métodos gerais da superclasse usam a dependência sem nunca conhecer sua classe concreta. Ver Padrões Arquiteturais.
Fábrica (Factory, padrão GoF) / Fábrica (DDD) — no sentido geral (GoF), classe cuja
única responsabilidade é criar outra classe, escondendo os detalhes de construção (new,
quais dependências passar) de quem só precisa do objeto pronto — alternativa mais simples
a um framework de injeção de dependência. No DDD, tem um objetivo mais específico:
criar Agregados garantindo que nasçam sempre num estado internamente consistente,
encapsulando a montagem de suas Entidades e Objetos de Valor internos. Ver
Boas Práticas e
DDD.
FIFO — first in, first out: "o primeiro a entrar é o primeiro a sair". Comportamento
de uma fila comum (Queue). Ver Estrutura de Dados.
Fila (Queue) — TAD linear em que inserção e remoção acontecem em pontos opostos (entra no fim, sai da frente) — comportamento FIFO. Variações: fila de prioridade (sai por prioridade, não por chegada) e deque (insere/remove nas duas pontas). Ver Estrutura de Dados.
Flyweight (padrão GoF) — reaproveita a mesma instância para representar objetos
semelhantes, em vez de criar uma nova a cada necessidade: uma fábrica devolve, a partir
de uma chave, sempre a mesma instância já existente. Só se aplica a objetos imutáveis
— qualquer informação dependente do contexto de uso deve ser passada por parâmetro, nunca
armazenada no objeto compartilhado. A classe String do Java é um Flyweight (o string
pool compartilha cadeias de caracteres iguais). Ver
Padrões Arquiteturais.
Feature envy ("inveja de funcionalidade") — code smell em que um método usa quase só dados/comportamento de outra classe, em vez dos próprios — sinal de que esse comportamento provavelmente deveria morar na outra classe. Ver Boas Práticas.
Fall-through (switch) — comportamento padrão de um switch de continuar
executando todos os cases abaixo do que bateu (e o default), até encontrar um
break ou o fim do bloco — não para automaticamente ao "achar a resposta certa" como um
if/else. Ver Java.
Foreign Key (chave estrangeira) — coluna que guarda o valor da chave primária de outra tabela, criando um relacionamento entre elas. Fica sempre no lado "muitos" de uma relação um-para-muitos. Ver Modelagem de Dados.
EXISTS/NOT EXISTS (SQL) — verifica se uma subquery devolve pelo menos uma linha
(EXISTS) ou nenhuma linha (NOT EXISTS) — usado tipicamente para achar registros que
têm (ou não têm) um relacionado numa outra tabela. Ver
SQL.
ENUM (SQL) — extensão específica do MySQL (não é padrão ANSI SQL) que restringe
uma coluna a um conjunto fixo de valores possíveis, definidos na própria coluna. Ver
SQL.
Fully Qualified Name — nome completo de uma classe, incluindo o pacote
(pacote.NomeDaClasse, ex.: java.util.Date). Necessário quando duas classes com o
mesmo nome, de pacotes diferentes, são usadas no mesmo arquivo sem import. Ver
Java.
Grafo (TAD) — TAD onde elementos (vértices) podem se relacionar livremente entre si através de arestas, sem hierarquia obrigatória. Pode ser direcionado/não direcionado, ponderado, cíclico/acíclico. Uma árvore é um caso particular de grafo (simples, acíclico e conexo). Ver Estrutura de Dados.
Grant type (OAuth) — a forma que uma aplicação cliente usa para obter autorização (um token de acesso) do usuário — escolhida conforme o tipo de cliente (confidencial/público). Um dos dois pontos de extensão que o OAuth 2.0 deixa em aberto por ser um framework, não um protocolo fechado (o outro é token type). Ver Segurança.
Grant types do OAuth 2.0 (os quatro) — Password Credentials (client coleta
login/senha diretamente, só para apps de alta confiança), Authorization Code
(redirecionamento + troca de authorization_code por token, o mais completo, para
apps com backend), Implicit (token direto no fragmento da URI, para SPAs sem backend),
Client Credentials (sem Resource Owner, credenciais só do Client, para comunicação
servidor-a-servidor). Ver Segurança.
GraphQL — estilo de API onde o cliente define, a cada chamada, exatamente quais campos quer receber, através de um único endpoint — evita over-fetching e under-fetching. Não concorre com REST; pode ser implementado dentro de uma API REST existente. Ver Backend.
gRPC — framework RPC do Google (2015): usa Protocol Buffers (protobuf) para definir interface e serializar dados, sobre HTTP/2. Orientado a serviços, não a recursos (não tem URI de recurso, tem mensagens e métodos remotos). Mais rápido que REST/SOAP em cenários de alta performance, ao custo de legibilidade humana direta. Ver Backend.
Garbage Collector — mecanismo da JVM que libera automaticamente a memória de objetos inacessíveis, sem intervenção manual do programador. Roda em segundo plano, em momento não determinístico. Ver Java.
GoF (Gang of Four) — apelido dos quatro autores do livro fundador do catálogo de padrões de projeto (Design Patterns: Elements of Reusable Object-Oriented Software, 1994: Gamma, Helm, Johnson e Vlissides) e, por extensão, do próprio catálogo de 23 padrões. Ver Padrões Arquiteturais.
Generics — recurso (desde o Java 5) que permite parametrizar o tipo que uma estrutura
guarda (List<Produto>), eliminando a necessidade de casting manual e o risco de
ClassCastException ao recuperar valores. Ver
Estrutura de Dados.
Gherkin — linguagem usada para escrever Cenários e Critérios de Aceitação de forma estruturada, no formato Given/When/Then (Dado/Quando/Então): Dado descreve o contexto/pré-condição, Quando descreve a ação realizada, Então descreve o resultado esperado (encadeável com "E" para condições/resultados extras). Base da técnica de BDD (Behavior Driven Development), permitindo que ferramentas de teste interpretem o cenário e o executem automaticamente. Ver Requisitos.
Gerenciamento de Requisitos — atividade contínua (não uma fase única) de manter os requisitos de um software atualizados e consistentes ao longo de todo o seu ciclo de vida, sustentada em quatro pilares: Controle de Versão (identificação única e histórico de cada requisito), Controle de Mudanças (avaliação e aprovação de alterações antes de implementá-las, medindo a volatilidade dos requisitos), Acompanhamento do Estado dos Requisitos (monitorar em que fase cada um está) e Rastreabilidade. Ver Requisitos.
God class (code smell) — classe que controla/conhece muitos outros objetos do sistema, tentando "fazer tudo" — o oposto de coesão. Extremamente frágil: qualquer uma das dezenas de classes das quais depende pode forçar uma mudança nela. Ver Boas Práticas.
GROUP BY (SQL) — agrupa linhas por uma ou mais colunas para uso com funções de
agregação (SUM, COUNT, AVG, ...), que sozinhas colapsariam o resultado inteiro
numa única linha. Toda coluna não agregada no SELECT precisa estar no GROUP BY. Ver
SQL.
Getter e Setter — métodos convencionais para ler (getX()) e atribuir (setX(valor))
um atributo privado, sem quebrar o encapsulamento. Ver
Orientação a Objetos.
hashCode — método herdado de Object que gera um código numérico para um objeto,
usado por estruturas baseadas em hash (como HashMap). Contrato importante: dois objetos
considerados iguais por equals devem obrigatoriamente ter o mesmo hashCode. Ver
Java.
HAVING (SQL) — filtra pelo resultado de uma função de agregação, depois do
GROUP BY (diferente de WHERE, que filtra linha a linha, antes de agrupar, e não
aceita agregação). Ordem sintática: WHERE → GROUP BY → HAVING. Ver
SQL.
Função hash — algoritmo determinístico que gera uma cadeia de caracteres (o hash) a partir de outra cadeia de entrada — a mesma entrada sempre produz o mesmo hash, e o resultado costuma ter tamanho fixo. Usada tanto para indexação (ver Tabela de dispersão, abaixo) quanto para garantir integridade de dados (uma assinatura combina hash + chave; TLS usa o mesmo princípio para detectar alteração em trânsito). Ver Segurança.
Hash / Tabela de dispersão (hashtable) — estrutura que usa uma função hash para
calcular diretamente o endereço de um elemento (a partir do valor ou de uma chave),
dando acesso/inserção/remoção O(1) em média — base de HashSet/HashMap. Ver
Estrutura de Dados.
HashMap x Hashtable — Hashtable é a classe original de Java (desde 1.0) para
mapa chave-valor, hoje legada; HashMap (Java 1.2, Collections Framework) é a
substituta recomendada, sem a sincronização desnecessária que torna Hashtable mais
lenta. Ver Estrutura de Dados.
HATEOAS (Hypermedia As The Engine Of Application State) — nível 3 (o mais alto) do Richardson Maturity Model: a resposta de uma API inclui links indicando ao cliente quais ações/recursos ele pode acessar a seguir, a partir do estado atual — tornando a API autoexplicativa e descobrível, semelhante a navegar por links num site. Opcional mesmo em APIs maduras: a maioria para no Nível 2. Ver Backend.
Heap (estrutura de dados) — árvore binária em que todo nó pai é sempre maior (max-heap) ou sempre menor (min-heap) que seus filhos — o maior/menor elemento fica sempre na raiz, O(1) para consultar. Base de implementação de filas de prioridade. Não confundir com heap (memória). Ver Estrutura de Dados.
Herança — mecanismo pelo qual uma classe (subclasse) reaproveita atributos e métodos
de outra (superclasse), declarando que é um tipo dela (extends, em Java). Java só
permite herdar de uma única superclasse diretamente (sem herança múltipla). Ver
Orientação a Objetos.
instanceof — operador que checa se um objeto é (ou herda/implementa) de um
determinado tipo, em tempo de execução — usado tipicamente antes de um casting
explícito, para evitar um ClassCastException. Só não compila se os tipos forem
obviamente incompatíveis. Uso excessivo (cadeia de if (x instanceof Y)) costuma
indicar que polimorfismo resolveria melhor. Ver
Orientação a Objetos.
import static — desde o Java 5, importa membros estáticos (atributos e métodos) de
uma classe, permitindo usá-los sem prefixar com o nome dela (import static
java.lang.Math.sqrt; → sqrt(x) em vez de Math.sqrt(x)). Ver
Java.
Hiding (method hiding / field hiding) — quando uma subclasse declara um método
static ou um atributo com o mesmo nome de um membro da superclasse. Diferente de
sobrescrita (@Override, só para métodos de instância), hiding não é polimórfico: a
versão usada é decidida em tempo de compilação, pelo tipo da referência, não pelo
tipo real do objeto. Ver
Orientação a Objetos.
Hook method (método-gancho) — método público na superclasse que delega parte da
sua execução para um método (o hook) implementado só pela subclasse — a superclasse
dá a estrutura, a subclasse "pendura" o comportamento específico. abstract marca
hook obrigatório; final/private nunca podem ser hook; protected/public sem
final são candidatos. Técnica mais geral que o padrão Template Method, que a
utiliza. Ver Padrões Arquiteturais.
HTTP (HyperText Transfer Protocol) — protocolo (1990) que define como um cliente troca mensagens com um servidor sobre uma conexão TCP já aberta: requisição (método + URI + versão, cabeçalhos, corpo opcional) e resposta (versão + código de status + frase razão, cabeçalhos, corpo opcional). Camada 7 do modelo OSI. Ver Backend.
HTTP/2 — revisão do HTTP focada em desempenho, sem mudar a semântica do 1.1 (mesmos métodos/status/headers): formato binário e multiplexação de requisições numa única conexão TCP, incluindo Server Push. Ver Backend.
HTTP Basic Authentication — método de autenticação padrão do HTTP (RFC 2617):
cabeçalho Authorization: Basic <usuário:senha em Base64>. A credencial é só
codificada, não criptografada — só é seguro combinado com HTTPS, senão vulnerável a
man-in-the-middle. Ver Backend.
ID Token (OpenID Connect) — JWT devolvido pelo Identity Provider, além do access
token, contendo claims que identificam o usuário autenticado (sub, aud = client_id
do Relying Party, auth_time, nonce contra replay attack, entre outras). Diferente
do access token, é destinado ao próprio Client, não ao Resource Server. Ver
Segurança.
VRAM / KV-Cache / LLMOps — rodar LLMs é, sobretudo, um problema de memória: a VRAM (memória da GPU) precisa comportar o modelo inteiro (70B em 16 bits ≈ 140 GB) mais o KV-Cache (cálculos intermediários da atenção, que crescem com a conversa). Lentidão costuma ser falta de VRAM, não de processamento. LLMOps é a engenharia de infraestrutura para LLMs: equilibrar latência e custo. Ver I.A. e Machine Learning.
vLLM / PagedAttention / TensorRT-LLM / TGI — frameworks de serving de LLMs. vLLM
(ponto de partida recomendado) usa PagedAttention — KV-Cache em "páginas" alocadas
dinamicamente, como memória virtual — e tem API compatível com a da OpenAI (trocar a
base_url migra de nuvem para local). TensorRT-LLM (NVIDIA) compila o modelo para
máxima performance em GPUs NVIDIA. TGI (Hugging Face) usa continuous batching. Ver
I.A. e Machine Learning.
Quantização / Pruning / Distillation — técnicas de compressão de modelos. Quantização: reduz a precisão dos pesos (16 → 8 ou 4 bits; GPTQ, AWQ), cortando ~75% da memória com perda quase imperceptível. Pruning: remove pesos/neurônios redundantes (estruturado ou não), em geral com retreinamento. Distillation: treina um modelo menor ("aluno") para imitar um maior ("professor"), ex.: DistilBERT. Ver I.A. e Machine Learning.
Throughput, SLO e prompt caching — throughput (vazão) é o total de tokens gerados por segundo somando todos os usuários (capacidade). SLO (Service Level Objective) é a meta de desempenho assumida (ex.: TTFT < 500 ms em 99% das requisições). Prompt caching reaproveita o processamento de prefixos repetidos do prompt (até ~90% mais barato) — coloque o conteúdo estático no início do prompt. Ver I.A. e Machine Learning.
Nuvem x self-hosting e break-even — APIs de nuvem: simples e escaláveis, mas caras em grande escala e com dados passando por terceiros. Self-hosting: controle total e custo por token menor em escala, porém com investimento e complexidade maiores. O break-even é o volume de uso a partir do qual o self-hosting compensa (custo mensal da infraestrutura ÷ custo por token da API). Ver I.A. e Machine Learning.
Model Context Protocol (MCP) — padrão aberto que cria um "barramento universal" para IA, padronizando como clientes (aplicações), hosts (back-ends) e servidores trocam contexto, ferramentas, recursos e templates de prompts, via schema JSON. Qualquer cliente compatível descobre e usa uma ferramenta sem código de integração específico, desacoplando front-end, back-end e modelos (trocar o banco vetorial leva horas, não semanas). Ver Agentes e Agentic AI.
Guardrails (de entrada e de saída) e PII — verificações em tempo real que intervêm (observabilidade ativa): de entrada, checam a mensagem do usuário antes do LLM (dados pessoais/PII, prompt injection); de saída, checam a resposta antes de mostrá-la (toxicidade, vazamento, alucinação). PII (Personally Identifiable Information) são informações pessoalmente identificáveis, como CPF, e-mail e telefone. Ver I.A. e Machine Learning.
TTFT / TPOT — métricas de latência de LLMs: TTFT (Time to First Token) é o tempo até o primeiro token da resposta; TPOT (Time Per Output Token) é o tempo por token de saída. Complementam custo por requisição, contagem de tokens e scores de avaliação. Ver I.A. e Machine Learning.
Pirâmide de testes para IA — adaptação da pirâmide de testes ao mundo probabilístico: base com testes de unidade das ferramentas (determinísticos, rápidos), depois testes de regressão de prompts (Golden Set), testes de integração de agentes e, no topo, poucos testes E2E. Constrói-se de baixo para cima. Ver I.A. e Machine Learning.
Governança de dados para IA (qualidade, diversidade, freshness, lineage) — cinco pilares: qualidade (dados limpos e corretos), diversidade (cobre cenários e casos de borda), atualização/freshness (quão recentes são), rastreabilidade/lineage (origem e transformações de cada dado) e catálogo + contrato de dados. Em sistemas de IA é questão de sobrevivência: quando a resposta está errada, é preciso saber de onde veio o dado. Ver I.A. e Machine Learning.
DVC (Data Version Control) — ferramenta de versionamento de dados complementar ao Git:
o Git guarda o código e arquivos-ponteiro .dvc; o DVC guarda os dados grandes num
armazenamento remoto (S3, GCS). Um checkout recupera código e dados da mesma versão —
reprodutibilidade total. Comandos básicos: dvc init, dvc add, dvc remote add,
dvc push, dvc checkout. Ver I.A. e Machine Learning.
Dados sintéticos — dados de treinamento gerados por um LLM mais poderoso para treinar um modelo menor ou especializado, útil quando o volume real é insuficiente ou para casos de borda raros. Risco: herdam e podem amplificar os vieses do modelo gerador — exigem validação por amostragem e nunca substituem dados reais no Golden Set. Ver I.A. e Machine Learning.
Pipeline de dados (batch x streaming, Great Expectations, quarentena) — sequência automatizada de ingestão → validação → processamento → armazenamento. Ingestão em batch (periódica, ex.: Airflow/Prefect) quando horas/dias de atraso são aceitáveis; em streaming (tempo real, ex.: Kafka) quando minutos/segundos importam. A validação (ex.: Great Expectations) define "testes" para os dados; os que falham vão para quarentena, com alerta, em vez de seguir adiante. Ver I.A. e Machine Learning.
Engenharia de IA (AI Engineering) — disciplina que orquestra dados, LLMs, ferramentas e avaliações para criar sistemas de IA confiáveis e auditáveis em produção. Difere da Engenharia de Software (base robusta do sistema) e da Engenharia de ML (pipelines de dados e modelos) por focar em prompt engineering, sistemas RAG, agentes, avaliação de qualidade e guardrails, lidando com não determinismo, alucinações e prompt injection. Ver I.A. e Machine Learning.
Paradigma determinístico x probabilístico — no determinístico, a mesma entrada sempre gera a mesma saída, por regras explícitas; no probabilístico (LLMs), o sistema estima a resposta mais provável a partir de evidências, com grau de confiança — a pergunta passa de "o que o algoritmo faz?" para "o que os dados indicam e com qual confiança?". Ver I.A. e Machine Learning.
Contrato de dados (data contract) — acordo formal, validado programaticamente (ex.: com Pydantic), sobre estrutura, tipos e regras de um dado trafegado entre sistemas. Faz uma mudança inesperada de schema quebrar o pipeline imediatamente, em vez de corromper dados silenciosamente. Ver I.A. e Machine Learning.
Data drift / training-serving skew — data drift é a mudança, ao longo do tempo, na distribuição dos dados que um modelo recebe em produção; training-serving skew é a diferença entre os dados/transformações usados no treino e os vistos em produção. Ambos degradam o desempenho do modelo sem gerar erros explícitos. Ver I.A. e Machine Learning.
Inteligência Artificial (IA) — campo que busca criar máquinas/softwares capazes de simular funções cognitivas humanas, e também estuda os princípios que regem a inteligência em si. Subáreas: raciocínio, representação de conhecimento, planejamento e tomada de decisão, aprendizado automático (Machine Learning), Processamento de Linguagem Natural (PLN) e percepção. Ver I.A. e Machine Learning.
Teste de Turing — desafio proposto por Alan Turing no fim dos anos 1950: uma máquina simularia inteligência humana ao ponto de um juiz humano não conseguir distinguir suas respostas das de uma pessoa real. Marco conceitual da IA como campo. Ver I.A. e Machine Learning.
Modelo de linguagem — ferramenta probabilística que analisa e gera sequências de palavras a partir de dados textuais, prevendo repetidamente o próximo token. Evoluiu de n-gramas (estatística pura) para redes neurais recorrentes (RNN) e, hoje, para a arquitetura Transformer. Ver LLM.
LLM (Large Language Model) — modelo de linguagem de grande porte, com dezenas de milhões a bilhões de parâmetros, pré-treinado sobre a arquitetura Transformer em grandes volumes de texto (em geral raspados da internet). Exemplos: GPT, BERT, LLaMA, Gemini, Claude. Ver LLM.
Code Language Model — especialização dos LLMs treinada com foco em datasets de código-fonte, em vez de texto genérico — mais eficaz para lidar com linguagens de programação, padrões de codificação e estruturas de dados. Exemplos: GitHub Copilot, OpenAI Codex, Tabnine, CodeT5. Ver LLM.
Direitos autorais de obras criadas por IA — questão jurídica ainda sem consenso. No Brasil, a Lei nº 9.610/1998 é anterior à presença marcante da IA e centraliza direitos autorais em pessoas físicas, criando desafios regulatórios para obras geradas por sistemas de IA. A União Europeia tem sido pioneira em propor regulamentações específicas (direitos conexos, transparência sobre material protegido usado em treinamento); nos EUA, a discussão se concentra em como os princípios tradicionais (autoria, uso justo) se aplicam a conteúdo gerado por IA. Ver Engenharia de Prompt.
GitHub Copilot — Code Language Model integrado a IDEs via extensão, baseado no GPT-4, com dois modos de uso: autocomplete inline (sugere o corpo de uma função a partir do nome e contexto) e chat integrado (usa a pasta do projeto aberta como contexto implícito para mudanças em linguagem natural). Sugestões não são determinísticas e podem conter erros — sempre exigem revisão. A versão Copilot X amplia para explicação de código, detecção de vulnerabilidades e bloqueio proativo de padrões inseguros. Ver LLM.
Transformer (arquitetura) — arquitetura de rede neural que entende as conexões entre palavras/símbolos num texto de forma mais eficaz que arquiteturas anteriores (n-gramas, RNN), permitindo treinar modelos com mais dados e desempenho excepcional em tarefas diversas — é a base dos LLMs modernos (GPT, BERT) e de modelos multimodais (GPT, CLIP). Ver LLM.
SFT / RLHF / DPO — tipos de fine-tuning. SFT (Supervised Fine-Tuning): treina com pares prompt → resposta ideal, para ensinar formato, tom ou jargão. RLHF (Reinforcement Learning from Human Feedback): humanos avaliam respostas, um modelo de recompensa aprende as preferências e otimiza o LLM — complexo e caro. DPO (Direct Preference Optimization): otimiza direto com pares escolhida/rejeitada, sem modelo de recompensa — alternativa mais simples ao RLHF. Ver LLM.
LoRA / QLoRA / PEFT — LoRA (Low-Rank Adaptation) faz fine-tuning congelando os pesos originais e treinando só pequenas matrizes adaptadoras (decomposição de baixo rank), reduzindo de bilhões para milhões os parâmetros treináveis; faz parte da família PEFT (Parameter-Efficient Fine-Tuning). QLoRA combina LoRA com quantização do modelo base (ex.: 4 bits), permitindo ajustar modelos grandes numa única GPU de consumo. Ver LLM.
Riscos do fine-tuning (overfitting, catastrophic forgetting, alignment tax) — overfitting: o modelo se especializa demais no treino e perde a capacidade de generalizar (detecta-se comparando treino x validação); catastrophic forgetting: perde habilidades anteriores (mitiga-se incluindo 10–20% de exemplos gerais); alignment tax: piora em segurança/honestidade ao otimizar outra métrica (avaliar também critérios de alinhamento). Ver LLM.
Agente de IA — sistema que usa um LLM como "cérebro" para raciocinar, tomar decisões e usar ferramentas (APIs, bancos de dados, arquivos) a fim de atingir objetivos no mundo real. Opera num ciclo percepção → raciocínio → ação, com memória, e não para no primeiro raciocínio: repete o ciclo usando o resultado de cada ação para decidir a próxima, até concluir a tarefa. Ver Agentes e Agentic AI.
Function Calling (Tool Calling) — mecanismo que formaliza o uso de ferramentas por um LLM: o modelo recebe um "cardápio" de ferramentas (nome, descrição, parâmetros em schema JSON) e decide quando usá-las, gerando uma chamada estruturada. O LLM só descreve o que quer fazer; o código do desenvolvedor executa — mantendo controle e segurança. Ver Agentes e Agentic AI.
Memória de agente (curta, longa e procedural) — três tipos: curta duração (a conversa atual, na janela de contexto), longa duração (preferências e fatos persistidos, em geral num vector store) e procedural (o conhecimento de como usar as ferramentas, via schemas). Ver Agentes e Agentic AI.
Plan-Execute-Verify e Reflexion — padrões de raciocínio de agentes. Plan-Execute- Verify: planeja antes de agir, executa passo a passo e verifica o resultado — para tarefas longas ou de alto custo de erro. Reflexion: após a tarefa, um "crítico interno" gera uma lição em linguagem natural, guardada na memória e reutilizada na próxima tentativa — aprendizado sem retreinamento. Ver Agentes e Agentic AI.
Sistemas multiagente (Manager-Worker, Debate, Swarm) — dividir uma tarefa entre agentes especializados. Manager-Worker: um gerente distribui subtarefas a workers e consolida; Debate: agentes defendem perspectivas opostas e um juiz sintetiza (decisões com trade-offs); Swarm: muitos agentes simples em paralelo, sem coordenador central (tarefas altamente paralelas). Ver Agentes e Agentic AI.
Segurança de agentes (menor privilégio, confirmação humana, sandboxing) — riscos de agentes que agem: ações perigosas (mitigadas com confirmação humana e sandboxing), loops infinitos (limites rígidos de passos e custo) e escopo excessivo (princípio do menor privilégio: cada agente só acessa as ferramentas e dados estritamente necessários). Ver Agentes e Agentic AI.
RAG (Retrieval-Augmented Generation) — técnica (Lewis et al., 2020) que, antes de gerar a resposta, busca trechos relevantes numa base de documentos própria e os entrega ao LLM junto com a pergunta. Duas fases: indexação offline (carregar → fatiar em chunks → gerar embeddings → armazenar num vector store) e geração online (pergunta → embedding → busca por similaridade → prompt aumentado → resposta). Vantagens: conhecimento sempre atualizado, menos alucinações e fontes auditáveis; complementa (não substitui) o fine-tuning. Ver LLM.
Vector store (banco vetorial) — banco de dados especializado em armazenar embeddings e encontrar rapidamente os mais próximos de um vetor de consulta. Exemplos: Pinecone e Weaviate (nuvem), FAISS (biblioteca local) e Chroma (leve, local, bom para prototipagem). Ver LLM.
Chunking — dividir documentos em pedaços (chunks) autocontidos antes de indexá-los num RAG. Estratégias: tamanho fixo (simples, pode cortar ideias ao meio), semântico (corta onde o assunto muda) e janela deslizante (com sobreposição entre chunks, para não perder informação nas bordas). Ver LLM.
Re-ranking (Bi-Encoder x Cross-Encoder) e Hybrid Search — re-ranking: um Retriever rápido (Bi-Encoder, compara vetores) traz muitos candidatos e um Re-ranker preciso (Cross-Encoder, lê pergunta e chunk juntos) reordena e escolhe os melhores. Hybrid search: combina busca semântica (vetores) com busca por palavras-chave (BM25), fundindo os rankings via Reciprocal Rank Fusion (RRF) — útil para siglas e termos técnicos. Ver LLM.
Agentic RAG — evolução do RAG clássico (passivo) em que o LLM decide quando e o que buscar, num laço de raciocínio (padrão ReAct): detecta ambiguidade e pede clarificação, refina buscas iterativamente e escolhe a fonte certa (documentos via vetores ou banco estruturado via SQL). Ver LLM.
Métricas de avaliação de RAG — duas de busca e duas de geração: precisão do contexto (dos chunks recuperados, quantos são relevantes), cobertura do contexto (dos relevantes existentes, quantos foram recuperados), fidelidade (a resposta se baseia só no contexto, sem inventar — mede alucinação) e relevância da resposta (responde de fato à pergunta). Frequentemente calculadas com LLM-as-a-Judge. Ver LLM.
Embedding — representação vetorial (lista de números) que captura o significado semântico de um token ou texto: significados parecidos geram vetores próximos no espaço vetorial (medidos, por exemplo, por similaridade de cosseno). Base da busca semântica usada em RAG. Ver LLM.
Self-attention (autoatenção) — mecanismo central do Transformer: para cada token, avalia todos os outros e pondera quais são mais relevantes para definir seu contexto, usando três vetores por token — Query (o que procuro), Key (como posso ser encontrado) e Value (o que contribuo). Custo cresce de forma quadrática, O(n²), com o número de tokens — daí o custo e a latência do tamanho do contexto. Ver LLM.
Encoder-only / Decoder-only / Encoder-Decoder — os três "sabores" de Transformer: encoder-only (BERT) lê e entende texto, gerando representações/embeddings; decoder-only (GPT, Claude, Llama) gera texto token a token, sem "espiar" o futuro (masked attention); encoder-decoder (T5, BART) lê toda a entrada antes de gerar a saída, útil em tradução e sumarização. Ver LLM.
Token (IA/PLN) — unidade mínima de informação textual processada por um modelo de linguagem: pode ser uma palavra, subpalavra ou até um único caractere, dependendo de como o modelo foi treinado. Ver LLM.
Zero-shot / Few-shot / Chain of Thought (CoT) — técnicas de prompting em ordem de complexidade. Zero-shot: instrução direta, sem exemplos. Few-shot: 1 a 5 exemplos de entrada/saída antes da instrução (in-context learning, sem retreinar o modelo). Chain of Thought: instruir o modelo a "pensar passo a passo", externalizando o raciocínio — útil em problemas de múltiplas etapas, desnecessário em tarefas simples. Ver Engenharia de Prompt.
Self-Consistency e temperature — Self-Consistency executa o mesmo prompt várias vezes (com temperature alta, ~0,7–1,0, para gerar caminhos de raciocínio diversos) e escolhe a resposta por votação majoritária. Temperature controla o quanto o modelo sorteia tokens menos prováveis: 0 = determinístico (extração, JSON), 0,5–0,7 = balanceado, >1,5 = imprevisível. Ver Engenharia de Prompt.
Tree of Thoughts / Least-to-Most / ReAct — padrões avançados de raciocínio. ToT: explora vários caminhos em paralelo, avaliando e retrocedendo. Least-to-Most: decompõe o problema em subproblemas e os resolve em sequência, encadeando o contexto. ReAct (Reason + Act): ciclo pensar → agir (chamar ferramenta) → observar o resultado, até concluir — base dos agentes. Ver Engenharia de Prompt.
System prompt — instrução de alto nível que define identidade, regras e limites do assistente de IA; mais difícil de sobrescrever que um prompt de usuário e principal ferramenta de governança do comportamento do modelo — mas também uma superfície de ataque quando o modelo está exposto ao público. Ver Engenharia de Prompt.
Prompt injection / Jailbreaking / Exfiltração — três ameaças a sistemas com LLM. Prompt injection: instruções maliciosas disfarçadas de dados (direta, digitada pelo usuário; ou indireta, embutida em documentos/páginas lidos via RAG), análoga ao SQL Injection. Jailbreaking: contorna os filtros de segurança do próprio modelo (ex.: papéis fictícios como "DAN"). Exfiltração: induz o modelo a vazar contexto sensível (system prompt, dados de outros clientes). Defesas em camadas: delimitadores, guardrails no prompt e validação de saída. Ver Engenharia de Prompt.
Golden Set e LLM-as-a-Judge — Golden Set: conjunto curado (50–200) de pares pergunta/resposta esperada, que funciona como teste unitário de um prompt, incluindo casos extremos. LLM-as-a-Judge: usar um LLM forte como avaliador, pontuando respostas por critérios (fidelidade, relevância, completude, tom) com justificativa — permite avaliar em escala e comparar versões de prompt com dados, não intuição. Ver Engenharia de Prompt.
Alucinação (IA) — quando um modelo de linguagem gera uma resposta factualmente errada com a mesma confiança e fluência de uma resposta correta — o modelo reage textualmente a estímulos, sem garantia de veracidade, e falha sobretudo com informações pouco populares/presentes em sua base de treinamento. Por isso, informações factuais geradas por IA devem sempre ser validadas; fornecer o texto-fonte na instrução (contextualização explícita) reduz o risco. Ver Engenharia de Prompt.
Janela de contexto (IA) — limite de tokens que um modelo de linguagem consegue processar numa interação, contando a conversa inteira (perguntas e respostas anteriores), não só a instrução atual. Ao se aproximar do limite, as interações mais antigas são truncadas para abrir espaço para as novas — mitigado solicitando ao próprio modelo uma síntese periódica do que já foi discutido, usada como novo ponto de partida. Ver Engenharia de Prompt.
LGPD / GDPR — LGPD (Lei Geral de Proteção de Dados, Brasil) é inspirada na GDPR (General Data Protection Regulation, União Europeia) — ambas estabelecem regras estritas sobre o tratamento de dados pessoais, exigindo consentimento e transparência. Consentir com os termos de uso de uma plataforma de IA não autoriza, por si só, compartilhar dados pessoais de terceiros através de prompts. Ver Engenharia de Prompt.
Banco de prompts / banco de contextos — repositório compartilhado de uma equipe para reaproveitar prompts eficazes já validados (banco de prompts) e metadados/ convenções/diretrizes de um projeto que orientam a IA a responder de forma alinhada às práticas daquele projeto (banco de contextos) — categorizados, versionados e documentados (contexto de uso, limites, casos de uso) para facilitar a busca e a manutenção. Ver Engenharia de Prompt.
PMBOK (Project Management Body of Knowledge) — guia de boas práticas em gerenciamento de projetos do PMI (Project Management Institute), organizado em cinco grupos de processos: Iniciação, Planejamento, Execução, Monitoramento e Controle, e Encerramento. Ver Engenharia de Prompt.
Function Points (UFP/AFP) e Use Case Points (UCP) — duas metodologias de estimativa de esforço de desenvolvimento. Function Points atribui uma pontuação de complexidade a cada funcionalidade (gerando o Total UFP — Unadjusted Function Points —, depois ajustado por fatores de arquitetura/equipe/tecnologia no AFP — Adjusted Function Points). Use Case Points pontua cada caso de uso combinando Ator Principal, Complexidade e Fronteira (escala 1-3), somando o Total UCP. Em ambas, o esforço em meses é o total de pontos dividido pela produtividade da equipe (pontos entregues por mês). Ver Engenharia de Prompt.
PlantUML — ferramenta de código aberto que gera diagramas UML (casos de uso, classes, sequência, entre outros) a partir de uma linguagem de marcação em texto — mesmo princípio usado pelo Mermaid neste material (ver Diagramas e UML 2): um modelo de linguagem não consegue desenhar um diagrama diretamente, mas consegue gerar o texto que uma ferramenta text-to-image especializada então renderiza como imagem. Ver Engenharia de Prompt.
Técnicas de teste de prompts — cinco abordagens para validar e refinar prompts antes de incorporá-los a um processo real: teste manual (revisão qualitativa de uma resposta individual), teste iterativo (ajuste contínuo de uma sequência de prompts), teste de múltiplas variações (comparar fraseados diferentes do mesmo pedido), teste de casos extremos (verificar comportamento em cenários incomuns, ex.: divisão por zero) e teste com diferentes modelos (comparar a mesma instrução em modelos de IA distintos). Ver Engenharia de Prompt.
Fine-tuning (ajuste fino, IA) — técnica de adaptação de um modelo de linguagem pré-treinado a uma tarefa ou domínio específico, treinando-o com um conjunto de dados relacionado àquele contexto. Ver LLM.
Idempotência (HTTP) — propriedade de uma operação cujo resultado é o mesmo não
importa quantas vezes seja repetida. GET/PUT/DELETE/HEAD/OPTIONS são
idempotentes; POST e PATCH não são — reenviar um POST que falhou pode criar
recursos duplicados. A mesma preocupação vale para consumidores de eventos (EDA): como
mensagens podem ser reentregues após uma falha, o processamento deve ser idempotente para
não duplicar efeitos colaterais. Ver
Backend e
Event-Driven Architecture.
Intimidade inapropriada — quando uma classe entende demais sobre o funcionamento interno de outra, lendo seus dados e decidindo por fora algo que deveria ser comportamento da própria classe dona do dado. A solução é sempre mover o comportamento para dentro da classe que tem o dado (Tell, don't ask). Ver Boas Práticas.
Interface — contrato que define métodos que uma classe deve ter (implements), sem
dizer como são implementados. Diferente de herança de classe, uma classe pode implementar
várias interfaces. Desde o Java 8, pode ter métodos com implementação (default
methods). Ver Orientação a Objetos.
Interface fluente — estilo de API (termo cunhado por Martin Fowler e Erick Evans) em
que os métodos devolvem this, permitindo encadear chamadas de forma que o código se
leia quase como uma frase em linguagem natural — também chamada de DSL
(Domain-Specific Language) interna. Comum em implementações do padrão Builder. Ver
Padrões Arquiteturais.
IN (SQL) — coluna IN (v1, v2, ...) equivale a coluna = v1 OR coluna = v2 OR
..., de forma mais legível — filtra por múltiplos valores possíveis numa única
condição. Ver SQL.
Integridade referencial — garantia (via constraint FOREIGN KEY) de que uma chave
estrangeira só aponta para registros que realmente existem na tabela referenciada. Ver
SQL.
Integer cache (cache de wrappers) — a JVM reutiliza instâncias de Boolean, Byte,
Short/Integer/Long entre -128 e 127, e Character ASCII, por economia de memória.
Faz == "funcionar por acidente" entre wrappers nessa faixa — motivo para nunca comparar
wrappers com ==, sempre .equals(). Ver
Java.
Interface funcional — interface com um único método abstrato (default methods não
contam), opcionalmente marcada com @FunctionalInterface. É o que viabiliza expressões
lambda em Java. Ver Orientação a Objetos.
IP (Internet Protocol) — protocolo (1974) responsável por endereçar e entregar pacotes entre máquinas de uma rede; não garante entrega nem ordem — essas garantias vêm de um protocolo de transporte por cima dele (TCP ou UDP). Camada 3 do modelo OSI. Ver Redes.
INVEST (Bill Wake) / 3C (Ron Jeffries) — dois guias para escrever boas Histórias de Usuário. INVEST: Independent, Negotiable, Valuable, Estimable, Small, Testable. 3C: Card (escrita curta, tipo post-it), Conversation (expansão via conversa com stakeholders) e Confirmation (validável via Critérios de Aceitação). Ver Requisitos.
Item de Backlog (IB) — a unidade de trabalho gerenciável que dá origem a toda especificação de requisito (CDU, HU, RN, CA, RNF) nas metodologias ágeis. Deve seguir cinco critérios: Clareza, Valor, Estimável, Priorizável e Pequeno (sucinto o bastante para caber num post-it, expandido depois em artefatos mais detalhados). Ver Requisitos.
ISP (Interface Segregation Principle) — princípio SOLID: nenhum cliente deveria ser forçado a depender de métodos que não usa. Prefira várias interfaces pequenas e coesas a uma única interface "gorda" cobrindo várias responsabilidades. Não confundir com ISP de rede (Internet Service Provider, provedor de acesso à Internet). Ver Boas Práticas.
Iterator — interface que permite percorrer qualquer Collection de forma
padronizada, sem depender de índice (hasNext, next, remove). O enhanced-for
usa Iterator por baixo dos panos. Ver
Estrutura de Dados.
JOIN (SQL) — combina linhas de duas (ou mais) tabelas relacionadas, usando ON
para dizer qual coluna de uma corresponde a qual coluna da outra. Ver
SQL.
LEFT JOIN (SQL) — variação do JOIN que preserva todas as linhas da tabela à
esquerda mesmo sem correspondência na tabela à direita (colunas dessa faltando viram
NULL) — a ferramenta certa para "todos os X, incluindo os que não têm Y
relacionado". RIGHT JOIN é o espelho (preserva a tabela à direita), mas raramente
usado na prática. Ver SQL.
Jagged array — array multidimensional (array de arrays) em que as "linhas" têm tamanhos diferentes entre si — não existe obrigação de ser retangular/quadrado em Java. Ver Estrutura de Dados.
java.time — pacote de datas/horas do Java 8 (LocalDate, LocalTime,
LocalDateTime, Period, Duration, DateTimeFormatter, ...), imutável, substituindo
java.util.Date/Calendar. Convenção de nomes: get/is/with/plus/minus/to/
at. Period mede intervalo em anos/meses/dias; Duration mede em horas/minutos/
segundos, a partir de Instant. Ver
Java.
JAR / MANIFEST.MF — um JAR (.jar) é um .zip com classes Java compiladas, usado
para distribuir bibliotecas ou aplicações. Um JAR executável declara sua classe principal
no arquivo interno META-INF/MANIFEST.MF (Main-Class: pacote.Classe), permitindo rodar
com java -jar app.jar sem informar a classe. Ver
Java.
JDK x JRE — JRE (Java Runtime Environment) traz só o necessário para rodar um
programa Java já compilado (JVM + bibliotecas padrão); JDK (Java Development Kit)
inclui o JRE mais as ferramentas de desenvolvimento (javac, entre outras). Ver
Java.
JIT (Just In Time) — estratégia do compilador da JVM de compilar bytecode para código nativo durante a própria execução do programa (em vez de só interpretá-lo), melhorando a performance. Introduzido no Java 1.2. Ver Java.
JTBD (Job to Be Done) — técnica (Clayton Christensen) que foca em compreender o que realmente motiva alguém a "contratar" um produto/serviço para resolver um problema ou atingir um objetivo (o Job), em vez de focar só no resultado final. Seis pontos: objetivo principal, resultados desejados, tarefas relacionadas, fatores emocionais/ sociais, tarefas da cadeia de consumo e resultados financeiros desejados. Resumido na frase "as pessoas não querem uma furadeira, elas querem um furo na parede". Ver Requisitos.
JUnit — framework de testes de unidade mais popular do mundo Java. Automatiza a
validação de um teste (Assert.assertEquals(esperado, calculado)), executa métodos
anotados com @Test, e relata resultado (verde/vermelho) e mensagem de erro exata por
teste. Ver Qualidade.
JWT (JSON Web Token) — token auto-contido (RFC 7519), em 3 partes separadas por .
(header, payload, signature), cada uma em Base64Url. Toda informação necessária já está
no próprio token — verificável por qualquer serviço com a chave pública correspondente,
sem depender do servidor "lembrar" de nada. Enviado tipicamente em
Authorization: Bearer <token>. Ver Backend
e Segurança (estrutura interna, claims,
JWS x JWE).
JOSE (JavaScript Object Signing & Encryption) — família de especificações que cobre tokens JWT: JWS (JSON Web Signature, tokens assinados — garante integridade), JWE (JSON Web Encryption, tokens criptografados — garante confidencialidade), JWA e JWK. Ver Segurança.
Introspecção de tokens (RFC 7662) — mecanismo em que o Resource Server consulta um
endpoint do Authorization Server, enviando o token, e recebe de volta seus metadados
(incluindo se ainda está active). Alternativa ao JWT autocontido: troca acesso direto
ao banco de dados por uma dependência de rede — vale a pena quando reduzir acoplamento
ao banco compensa o custo da chamada extra (idealmente com cache). Ver
Segurança.
JVM (Java Virtual Machine) — máquina virtual que interpreta e executa o bytecode
gerado pelo compilador Java, tornando o mesmo .class portável entre sistemas
operacionais. Ver Java.
Kanban — método de origem industrial (Toyota, Taiichi Ohno, sistema Just in Time), adaptado ao desenvolvimento de software por David J. Anderson. Baseado num "sistema puxado": novas demandas só são trabalhadas quando as atuais são finalizadas, evitando sobrecarregar o time. Conceitos-chave: WIP (Work in Progress, acompanhamento contínuo do que está em execução), Cadência (período de entrega de valor) e Lead Time (tempo total de um item, da definição à entrega) — visualizados num Quadro Kanban (colunas por etapa do fluxo, sem ordem fixa de execução entre itens). Combinações informais de Scrum + Kanban são chamadas de Scrumban. Ver Gestão de Projetos.
Keycloak — Identity Provider (IDP) completo e de código aberto, mantido pela Red Hat,
implementando OAuth 2.0 e OpenID Connect. Terminologia própria: Realm (espaço isolado de
usuários/credenciais/roles), Client (identificador de uma aplicação/serviço), Roles
(permissões, globais ao realm ou específicas de um client) e Usuários. Emite roles
específicas de client numa claim aninhada resource_access, exigindo um
JwtAuthenticationConverter customizado para extraí-las no Spring Security. Ver
Segurança.
KISS (Keep It Simple, Stupid) — mantenha o código o mais simples possível: evite funções longas, condicionais encadeados demais e nomes que não deixam clara a utilidade de uma variável ou método. Complexidade que não vem do problema em si, e sim de como ele foi resolvido, é sempre um custo. Ver Boas Práticas.
Kubernetes (K8s) — plataforma open source para orquestração de containers, projetada para automatizar implantação, dimensionamento, gestão e operação de aplicações em escala. Originalmente desenvolvido pelo Google (inspirado no sistema interno Borg), doado em 2014 à Cloud Native Computing Foundation (CNCF). O cluster é composto por um nó mestre (control plane) e worker nodes; o Pod é a menor unidade de implantação, encapsulando um ou mais containers com recursos e rede compartilhados. Diferenciais sobre o Docker Compose: self-healing (reinicia containers falhos e reprograma pods automaticamente), escalonamento horizontal automático e alta disponibilidade nativa. Ver Containers (Docker).
Literal — valor escrito diretamente no código-fonte (10, "texto", true), sem
passar por uma variável. Números inteiros são int por padrão e números com casa decimal
são double, a menos que um sufixo indique outro tipo (L, F, D). Ver
Java.
Labeled loop (rótulo em laço) — identificador antes de um for/while/do-while
(nome: for (...) {...}) que permite a um break/continue de um loop aninhado
controlar especificamente o loop rotulado, em vez de sempre o mais interno. Ver
Java.
LCOM (Lack of Cohesion of Methods) — métrica que mede a falta de coesão de uma classe, agrupando métodos pelos atributos que cada um manipula. Quanto maior o número, menos coesa a classe é considerada — mas é uma heurística (classes cheias de getters/setters simples inflam o número artificialmente), não prova definitiva. Versão mais aceita: LCOM HS (Handerson-Sellers). Ver Boas Práticas.
LIFO — last in, first out: "o último a entrar é o primeiro a sair". Comportamento
de uma pilha (Stack). Ver Estrutura de Dados.
Linguagem onipresente (Ubiquitous Language, DDD) — linguagem comum, compartilhada entre desenvolvedores e especialistas do negócio, usada tanto nas conversas sobre o domínio quanto no próprio código (nomes de classes, métodos, variáveis) — elimina a tradução (e a perda de significado) entre como o negócio fala e como o código está escrito. Ver DDD.
Lean Inception — técnica de elicitação de requisitos (Paulo Caroli), mistura do Lean Startup com o Lean UX, voltada à concepção de software. Integra várias técnicas (Personas, Brainstorming, Jornada do Usuário) num evento estruturado de 5 dias, com o objetivo principal de definir o MVP de forma rápida e colaborativa. Ao final: visão compartilhada do software, backlog inicial priorizado, personas/jornadas definidas, riscos identificados e um plano de releases. Ver Requisitos.
Lei de Demeter — recomenda evitar cadeias de chamadas entre objetos
(a.getB().getC().metodo()) — "fale só com seus amigos diretos". Cada get a mais na
cadeia é um acoplamento indireto a mais; a solução costuma ser a classe do meio esconder
o repasse atrás de um método próprio. Não é regra absoluta — não vale a pena aplicá-la a
qualquer leitura simples de dado para exibição. Ver
Boas Práticas.
LSP (Liskov Substitution Principle) — princípio SOLID: uma subclasse deve poder
substituir sua superclasse em qualquer lugar do código sem quebrar o comportamento
esperado. Formalizado por pré-condições (a subclasse só pode afrouxar, nunca apertar) e
pós-condições (a subclasse só pode apertar, nunca afrouxar) do contrato herdado. O
exemplo clássico que viola LSP é Quadrado extends Retangulo. Ver
Boas Práticas.
Lista encadeada (linked list) — TAD linear onde cada elemento (nó) guarda seu valor
e uma referência para o próximo nó (e, se duplamente encadeada, também para o anterior).
Diferente de um array, não ocupa memória contígua — troca acesso O(1) por índice por
inserção/remoção O(1) nas pontas. LinkedList do Java é uma lista duplamente encadeada.
Ver Estrutura de Dados.
Looping infinito — bug em que a condição de um looping (while, for) nunca se
torna falsa, geralmente por esquecer de atualizar a variável usada na condição. Ver
Java.
MITM (Man-In-The-Middle) — ataque em que alguém intercepta a comunicação entre cliente e servidor (ex.: via um proxy malicioso), tentando ler ou alterar os dados trafegados. Mitigado pela criptografia em trânsito (HTTPS): a partir do handshake TLS, toda a comunicação usa uma chave de sessão que só cliente e servidor conhecem, tornando o conteúdo interceptado ilegível para o atacante. Ver Segurança.
Criptografia em trânsito x em repouso — em repouso (at rest) protege dados persistidos (banco, tópico, arquivo), tipicamente aplicada pela própria aplicação (ex.: com AES antes de gravar); em trânsito (in transit) protege dados trafegando pela rede, responsabilidade do protocolo de transporte (HTTPS/TLS). São complementares — nenhuma substitui a outra, e dados sensíveis costumam ser criptografados nas duas camadas ao mesmo tempo. Ver Segurança.
Mediator (padrão GoF) — concentra a lógica de interação entre vários objetos numa
classe própria (o mediador), no lugar de eles se comunicarem diretamente entre si. Cada
objeto passa a interagir só com o mediador, que recebe e encaminha as requisições —
resolve o caso de comunicação bidirecional entre muitos objetos (diferente do Facade,
que simplifica o acesso a um subsistema numa única direção). Pode ser implementado via
eventos (ex.: ApplicationEvent/ApplicationListener do Spring). Ver
Padrões Arquiteturais.
Membros da classe — nome coletivo para atributos, métodos e construtores declarados dentro de uma classe. Ver Orientação a Objetos.
Metadado — "dado sobre o dado"; no contexto de uma classe, as informações a respeito dela mesma (atributos, métodos, interfaces, superclasse). No padrão Dynamic Factory, o metadado relevante é qual classe concreta deve ser instanciada para uma abstração. Ver Padrões Arquiteturais.
Microsserviço — divisão de um sistema grande em serviços menores e independentes, cada um sob responsabilidade de um time pequeno (ver Regra das duas pizzas). Resolve um problema de escala organizacional, ao custo de introduzir comunicação via rede entre os serviços (latência, falha parcial) — origem de padrões próprios de sistemas distribuídos. Ver Microsserviços.
MVC (Model-View-Controller) — padrão de separação de responsabilidades (década de 1970) que organiza a camada de apresentação em três componentes: Model (dados e regras de negócio), View (exibição ao usuário) e Controller (entrada do usuário e orquestração entre Model e View). Não é uma arquitetura completa — não define nada sobre as camadas de negócio ou persistência por trás do Model, e Controllers tendem a acumular responsabilidade demais com o tempo. Ver Padrões Arquiteturais.
Many to Many (tabela associativa) — relação em que cada lado pode se associar a vários registros do outro (ex.: aluno-curso). Modelada com uma terceira tabela (tabela associativa/de junção) que guarda um par de chaves estrangeiras, uma para cada lado. Ver Modelagem de Dados.
Mover Método / Mover Campo (refatoração) — Mover Método reloca um método que usa mais informações de outra classe do que da própria (sinal de Feature Envy) para a classe onde essas informações moram; Mover Campo faz o mesmo para um atributo mais usado por outra classe do que pela sua. Em ambos, o processo é duplicar na classe de destino, atualizar os testes lá, trocar as chamadas na origem para delegar, e só então remover a versão antiga. Ver Boas Práticas.
Method reference — sintaxe (Classe::metodo) que referencia um método existente para
usar como implementação de uma interface funcional, quando o corpo do lambda só
delegaria para esse método (Comparator.comparing(Livro::getNome)). Ver
Java.
Mock object — objeto falso que simula o comportamento de outro objeto (uma dependência real), usado em testes automatizados para isolar o comportamento da classe sob teste sem depender de banco de dados, rede ou qualquer infraestrutura de verdade. Só é possível mockar facilmente uma dependência recebida por fora (construtor/setter) — daí a testabilidade ser consequência de seguir OCP/DIP. Ver Boas Práticas e Qualidade (uso prático com Mockito).
Mockito — um dos frameworks de mock mais populares do mundo Java. mock(Classe.class)
cria o objeto falso; when(mock.metodo()).thenReturn(valor) ensina seu comportamento;
verify(mock).metodo() confirma que um método foi de fato invocado (com times(n) ou
atLeastOnce() para checar quantas vezes). Ver
Qualidade.
Matriz Esforço x Valor — técnica de priorização de requisitos que posiciona cada item num quadrante 2x2 cruzando esforço de implementação com valor gerado (alto valor/baixo esforço = prioridade imediata; baixo valor/alto esforço = evitar ou reavaliar). Ver Requisitos.
Matriz CSD — técnica para esclarecer dúvidas antes de iniciar uma nova demanda, reunindo rapidamente as informações relevantes do contexto em 3 colunas: Certezas (consenso entre stakeholders), Suposições (carecem de confirmação) e Dúvidas (incertas ou desconhecidas). Atualizada continuamente, funciona como indicador do nível de maturidade e entendimento do projeto. Ver Requisitos.
MoSCoW — técnica de priorização qualitativa que classifica cada requisito em Must have (obrigatório), Should have (importante, mas não bloqueia o lançamento), Could have (desejável) ou Won't have (combinado que não será feito nesse momento). Ver Requisitos.
Manifesto Ágil — criado em 2001 por um grupo de especialistas (Kent Beck, Ward Cunningham, Martin Fowler, Jeff Sutherland, entre outros), reconhecendo que os modelos de processo existentes focavam demais no processo em si, não no produto final. Quatro premissas: indivíduos e interações mais que processos e ferramentas; software em funcionamento mais que documentação abrangente; colaboração com o cliente mais que negociação de contratos; responder a mudanças mais que seguir um plano. Não elimina a documentação — só muda quando e como ela é produzida. Ver Engenharia de Software.
MER (Modelo de Entidade-Relacionamento) x MFD (Modelo Físico de Dados) — dois
diagramas de banco de dados, em níveis de abstração diferentes. O MER mostra só os nomes
das entidades/conceitos do software e como se relacionam entre si (cardinalidade), sem se
preocupar com colunas ou tipos. O MFD mostra como as tabelas de fato armazenam os dados —
colunas, tipos, chaves primárias/estrangeiras — seguindo convenções de nomenclatura (ex.:
prefixos tb_, tx_, dt_). O MFD pode ter mais tabelas que o MER ou o Diagrama de
Classe correspondente, porque relacionamentos muitos-para-muitos exigem uma tabela
associativa própria no mundo relacional. Ver
Diagramas e UML.
Modelo de Processo (Cascata, Espiral, RUP) — meta-informações que orientam como o Processo de Software deve ser aplicado. Cascata (Waterfall), de Winston Royce (1970): cada estágio só avança quando o anterior está 100% concluído — simples, mas versão executável só ao final, e erros descobertos tarde custam caro. Espiral, de Barry Boehm (1988): iterativo-incremental, com gerência de riscos constante a cada ciclo — aplicável a projetos de qualquer porte, ao custo de mais complexidade de gerenciamento. RUP (Rational Unified Process), da Rational Software/IBM: também iterativo-incremental, fortemente ligado a OO e UML, com 4 fases (Iniciação, Elaboração, Construção, Transição) cruzadas com disciplinas — conhecido por ser um modelo pesado, usado em softwares de alta criticidade. Ver Engenharia de Software.
Modelo anêmico — classe que só tem atributos e getters/setters, sem nenhum
comportamento/regra de negócio — as regras que deveriam estar nela vivem em outra
classe (Service, BLL, ...) que lê e escreve os atributos por fora. Código
procedural disfarçado de orientado a objetos. Ver
Boas Práticas.
Modelo OSI — modelo conceitual de 7 camadas para comunicação de rede. As mais relevantes na Web: camada 3 (Rede, IP), camada 4 (Transporte, TCP/UDP), camada 7 (Aplicação, HTTP). Ver Redes.
Normalização — dividir uma tabela que guarda dados de mais de uma entidade (colunas soltas repetindo informação de outra coisa) em tabelas separadas e relacionadas por chave estrangeira, eliminando duplicação e inconsistência de dados. Ver Modelagem de Dados.
Null Object (padrão GoF) — em vez de retornar null quando não existe um valor
válido, cria-se uma subclasse dedicada que implementa um comportamento neutro e seguro
para cada método — elimina a necessidade de checagens if (objeto != null)
espalhadas, porque o código cliente nunca precisa saber que está lidando com o caso
"vazio". Ver Padrões Arquiteturais.
OTCE (viabilidade Operacional, Técnica, Cronológica, Econômica) — as quatro óticas usadas para avaliar se um software vale a pena ser construído, no Estudo de Viabilidade. Operacional avalia o quão benéfico o software será (técnica PIECES: Performance, Informação, Economia, Controle, Eficiência, Serviço); Técnica avalia se a tecnologia proposta é viável; Cronológica avalia se o prazo é desejável ou obrigatório; Econômica avalia se o custo valerá a pena (análise de custo-benefício: Payback, NPV, ROI). Ver Requisitos.
On-Premises / IaaS / PaaS / SaaS — modelos de contratação de nuvem, em ordem crescente de conveniência (e decrescente de controle): On-Prem (infraestrutura própria, sem fornecedor de nuvem), IaaS (o provedor entrega a máquina), PaaS (o provedor entrega uma plataforma de desenvolvimento pronta, só o código é responsabilidade de quem contrata), SaaS (aplicação completa e pronta para uso). Ver Nuvem.
NULL (SQL) — ausência de valor numa coluna; diferente de texto vazio ('') ou de
0. Não pode ser comparado com = (precisa de IS NULL/IS NOT NULL), já que não é
um valor de verdade. Ver SQL.
DISTINCT (SQL) — devolve só os valores únicos de uma coluna (ou combinação de
colunas), eliminando repetições do resultado. Ver SQL.
DEFAULT (SQL) — valor atribuído automaticamente a uma coluna quando o INSERT
não o informa, em vez de deixá-la NULL. Ver SQL.
Modificadores de método (synchronized, native, strictfp) — além de final,
abstract e static, um método pode ser synchronized (trava a instância para acesso
concorrente entre threads), native (implementado fora da JVM, em código nativo via
JNI) ou strictfp (força cálculos de ponto flutuante ao padrão IEEE 754, para
portabilidade entre plataformas). Ver
Orientação a Objetos.
Modificadores de acesso — palavras-chave que controlam de onde um atributo, método ou
classe pode ser acessado. Em Java, do mais restrito ao mais aberto: private (só na
própria classe), default (só no mesmo pacote), protected (mesmo pacote + subclasses,
mesmo que em outro pacote) e public (de qualquer lugar do projeto). Ver
Orientação a Objetos.
OAuth 2.0 — protocolo (RFC 6749) para delegação de acesso: permite que um usuário autorize uma aplicação terceira a acessar seus dados em outro sistema, sem repassar sua senha — via um token de acesso com escopo e validade limitados. Evoluiu do OAuth 1.0 para cobrir apps nativos, aplicações JavaScript no navegador e acesso de aplicação em benefício próprio. Ver Segurança.
Objeto de Valor (Value Object, DDD) — objeto que descreve uma característica ou
atributo de uma Entidade, mas não tem identidade própria — é definido inteiramente pelos
seus valores, e pode ser reaproveitado por mais de uma Entidade (ex.: um Address,
compartilhável entre clientes de uma mesma família). Ver
DDD.
Observability — capacidade de entender o estado interno de um sistema a partir dos dados que ele expõe externamente, especialmente importante em arquiteturas distribuídas (microsserviços), onde uma falha pode se originar em qualquer ponto de uma cadeia de chamadas. Apoia-se em três pilares complementares: métricas (dados numéricos sobre desempenho e saúde ao longo do tempo — Prometheus/Micrometer/Grafana), logs (registros textuais de eventos — centralizados com Grafana Loki) e traces (o caminho completo que uma requisição percorre entre serviços, composto por spans — visualizado com Grafana Tempo). Um mesmo trace ID cruzando os três pilares permite identificar rapidamente falhas, picos de latência e comportamentos anômalos num sistema distribuído. Ver SRE.
Observer (padrão GoF) — um objeto observável mantém uma lista de observadores
registrados (interface comum) e notifica todos quando seu estado muda, sem conhecer
suas classes concretas. Base de ActionListener (Swing), MessageListener (JMS) e
listeners em geral — "listener" é só outro nome para observador nessas APIs. A JDK tem
java.util.Observer/Observable desde a versão 1.0, mas pouco usados/legados na
prática. Ver Padrões Arquiteturais.
OpenID Connect — especificação construída sobre o OAuth 2.0 especificamente para autenticação: usa o mesmo fluxo de autorização, mas devolve também um ID Token (JWT com claims de identidade). O Authorization Server que emite o ID Token é chamado de Identity Provider; o Client, de Relying Party. É o que está por trás de qualquer botão "entrar com sua conta Google/Facebook". Ver Segurança.
OWASP (Open Web Application Security Project) — organização sem fins lucrativos focada em segurança de software, famosa por sua lista Top 10 das vulnerabilidades mais críticas em sistemas web — boa referência inicial para quem quer se aprofundar em segurança. Ver Segurança.
OCP (Open-Closed Principle) — princípio SOLID: uma classe deve ser aberta para
extensão (fácil de fazer se comportar de um jeito novo) mas fechada para modificação
(sem precisar editar o código já existente dela). Regra nova = classe nova implementando
uma abstração já existente, não um if a mais. Ver
Boas Práticas.
One to Many / Many to One — a mesma relação entre duas tabelas, vista de lados diferentes: "um comprador tem muitas compras" (one to many) é, do ponto de vista da compra, "muitas compras pertencem a um comprador" (many to one). Determina de que lado a chave estrangeira fica (sempre no lado "muitos"). Ver Modelagem de Dados.
Operador ternário — forma curta de escrever um if/else que retorna um valor:
condição ? valorSeVerdadeiro : valorSeFalso. Ver
Java.
PKCE (Proof Key for Code Exchange) — extensão do Authorization Code (OAuth 2.0), hoje
padrão recomendado para SPAs e apps mobile, que não têm como guardar um client_secret
com segurança. O Client gera um code verifier aleatório e deriva dele um code
challenge (hash SHA-256), enviando só o challenge no redirecionamento inicial; na troca
do authorization_code por tokens, envia o verifier original, que o Authorization Server
confere contra o challenge recebido antes — protege contra interceptação do
authorization_code sem exigir client secret. Ver
Segurança.
Device Authorization Flow (OAuth) — grant type para dispositivos sem navegador (ou com entrada de texto limitada), como Smart TVs: a aplicação exibe um código curto e uma URL de verificação; o usuário autoriza noutro dispositivo (o celular), enquanto a aplicação original faz polling até receber os tokens. Ver Segurança.
Palavra reservada — termo predefinido pela linguagem (if, for, class, static,
...) que não pode ser usado como identificador (nome de variável, método, classe, ...).
Ver Java.
Parâmetro state (OAuth) — valor aleatório gerado pelo Client antes de
redirecionar o usuário para autorização, guardado na sessão e reenviado pelo
Authorization Server na URL de callback. O Client só aceita o authorization_code se
o state recebido bater com o guardado — defesa contra CSRF via sequestro de
identidade. Deveria ser tratado como obrigatório, mesmo sendo opcional na
especificação. Ver Segurança.
Persona — personagem fictício (mas baseado em pessoas reais) que representa um grupo de usuários, usado para identificar padrões de comportamento e necessidades — cria empatia com stakeholders e ajuda a evitar gasto de recursos com demandas irreais. Ver Requisitos.
Jornada do Usuário (User Journey) / Mapa da Jornada do Usuário (MJU) — a Jornada do Usuário analisa os comportamentos de uma persona ao realizar uma atividade para atingir um objetivo (passos, emoções, frustrações); o MJU é sua representação gráfica, relacionando necessidades/atividades/emoções com anseios/contatos/interações/resultados ao longo do caminho. Foca em como o software é usado, não só o quê ele faz. Ver Requisitos.
Protótipo (Descartável x Reutilizável) — representação gráfica de como o software deve ser, usada para validar requisitos ainda pouco claros antes da construção efetiva. Descartável (throwaway) tem fidelidade baixa/média, usado para sanar dúvidas rapidamente, sem intenção de reaproveitar o trabalho. Reutilizável (evolutionary) tem fidelidade alta, construído com ferramentas que geram código de front-end reaproveitável. Segue um ciclo: Criar → Testar → Aprender → Revisar. Ver Requisitos.
Pré-condição / Pós-condição — o que precisa ser verdade antes (pré) e o que é garantido depois (pós) de um método rodar corretamente. Centrais para o LSP: uma subclasse pode afrouxar uma pré-condição e apertar uma pós-condição, nunca o contrário. Ver Boas Práticas.
Pass-by-value — Java sempre passa parâmetros por valor, mesmo para objetos: o que é copiado para o parâmetro é a referência (o endereço), não o objeto em si. Por isso é possível mutar o objeto original através do parâmetro, mas não fazer a variável do chamador apontar para outro objeto de dentro do método chamado. Ver Orientação a Objetos.
Pilha de execução (stack) e heap — a JVM guarda variáveis locais e controle de
chamadas de método na pilha (removida quando o método retorna); objetos criados com
new vivem no heap, área compartilhada — variáveis de objeto guardam só a referência
para lá. Ver Orientação a Objetos (aplicação
na JVM) e Estrutura de Dados (conceito geral
de memória, não amarrado a uma linguagem).
Pilha (Stack, TAD) — estrutura linear onde inserção e remoção acontecem por um único
ponto, o topo (comportamento LIFO). Operações centrais: push (empilha), pop
(desempilha), peek/top (olha o topo sem remover). Usos práticos: pilha de chamadas de
método, desfazer (ctrl+z), balanceamento de expressões, recursão. Não confundir com
pilha de execução (aplicação específica desse conceito na JVM). Ver
Estrutura de Dados.
Ponteiro — forma de acessar um dado indiretamente pelo seu endereço de memória. Linguagens como C dão acesso explícito a esse endereço; linguagens mais modernas (Java, C#, Python) escondem esse mecanismo atrás de referências. Ver Estrutura de Dados.
Pacote (Package) — mecanismo de organização de classes em Java, correspondente a uma estrutura de pastas real no projeto. Evita ambiguidade de nomes entre classes e organiza o projeto por contexto/domínio. Ver Java.
PL/SQL (Procedural Language/SQL) — linguagem procedural da Oracle, construída sobre o
SQL. Diferente do SQL (declarativo), permite escrever lógica de programação — variáveis,
condicionais, laços, tratamento de erros, funções e procedimentos — organizada em
blocos, que podem ser salvos no banco como procedures, functions, packages ou
triggers para reuso. Ver PL/SQL.
Bloco PL/SQL — unidade fundamental de um programa PL/SQL, delimitado por
begin/end, com três áreas possíveis: declare (variáveis, cursores, exceções —
opcional), begin-end (comandos executados — obrigatória) e exception (tratamento
de erros — opcional, mas recomendada). Um bloco sem cabeçalho é chamado bloco anônimo
e não fica salvo no banco. Ver PL/SQL.
dbms_output — pacote nativo do Oracle para gerar mensagens a partir de blocos
PL/SQL, guardadas num buffer em memória durante a sessão e exibidas só quando a
ferramenta (SQL*Plus, com set serveroutput on) as lê do buffer. Principais rotinas:
put_line (grava com quebra de linha), put/new_line (grava sem quebra automática),
get_line/get_lines (lê o buffer de volta). Ver
PL/SQL.
Variável bind x variável de substituição (SQL*Plus) — bind é tipada (variable
nome tipo), referenciada com :nome, resolvida em tempo de execução pelo motor SQL/
PL-SQL, e não pode substituir uma cláusula inteira. Substituição não é tipada (sempre
texto), definida com define nome = valor, referenciada com &nome (uma vez) ou
&&nome (persiste), e resolvida por substituição textual antes da execução — por
isso pode substituir até uma cláusula SQL inteira. Ver
PL/SQL.
Transação (commit/rollback/savepoint) — unidade lógica de trabalho composta por um
ou mais comandos DML. commit torna permanentes as alterações feitas desde o último
commit; rollback desfaz essas alterações, voltando ao estado anterior; savepoint
nome cria um ponto de salvamento intermediário, permitindo desfazer só uma parte da
transação com rollback to nome. Garante que um conjunto de alterações relacionadas
aconteça por inteiro ou não aconteça, evitando estados inconsistentes no banco. Ver
PL/SQL.
%TYPE / %ROWTYPE (Oracle) — formas de declarar uma variável PL/SQL referenciando o
tipo de algo já existente no banco, em vez de repeti-lo manualmente. coluna%type
assume o tipo de uma coluna específica; tabela%rowtype cria uma variável do tipo
registro, com um campo para cada coluna da tabela. Evita que a declaração quebre se o
tipo original da coluna mudar depois. Ver PL/SQL.
Exceção (PL/SQL) — mecanismo de tratamento de erros do PL/SQL. Predefinida: o
Oracle a dispara automaticamente para erros conhecidos (no_data_found,
too_many_rows, zero_divide, dup_val_on_index, others, entre outras).
Definida pelo usuário: declarada como exception e disparada manualmente com
raise quando uma condição de negócio é violada. Se não tratada em nenhum bloco, o
Oracle aborta o programa. Ver PL/SQL.
raise_application_error (Oracle) — procedure nativa que interrompe a execução do
bloco PL/SQL atual e força o desvio para a área exception mais próxima, lançando um
erro customizado (ex.: violação de regra de negócio). Recebe um código de erro — deve
estar na faixa reservada -20000 a -20999 — e uma mensagem descritiva. Ver
PL/SQL.
Cursor (PL/SQL) — estrutura que permite percorrer, linha a linha, o resultado de
um select. Explícito: declarado, aberto, lido (fetch) e fechado manualmente
pelo programador — ciclo declare/open/fetch/close. Implícito: criado, aberto
e fechado automaticamente pelo Oracle a cada insert/update/delete/select into.
Um cursor for loop simplifica o explícito, cuidando de todo o ciclo de vida
sozinho. Atributos (%found, %notfound, %rowcount, %isopen) informam o estado do
cursor. Ver PL/SQL.
for update / where current of (Oracle) — for update no select de um cursor
garante exclusividade sobre as linhas retornadas até um commit/rollback (for
update ... nowait evita esperar se o recurso já estiver travado por outra sessão);
where current of nome_cursor, usado num update/delete dentro do loop desse
cursor, altera exatamente a linha em que o cursor está posicionado, via rowid, sem
precisar reescrever a condição where. Ver PL/SQL.
to_date / to_number x to_char (Oracle) — to_date e to_number convertem uma
string para date/número — a máscara de formato passada serve só para interpretar a
entrada, não para controlar a exibição do resultado (que segue o formato padrão da
sessão). to_char é a função voltada para exibição: converte número ou data para
string já formatada como deve aparecer na tela. Erro comum: achar que o formato do
to_date/to_number também define a exibição — não define. Ver
PL/SQL.
decode x case (Oracle) — decode(valor, comp1, res1, comp2, res2, ..., padrão)
funciona como um if-else/switch dentro de um select, exclusivo do Oracle. case
when ... then ... else ... end é o equivalente padrão ANSI SQL, funcionando em
qualquer banco relacional. Produzem o mesmo resultado — case é a escolha correta
para código que precisa rodar em bancos diferentes de Oracle. Ver
PL/SQL.
nvl / nullif (Oracle) — nvl(valor, substituto) retorna substituto quando
valor é null, evitando que o null se propague silenciosamente por cálculos e
comparações (o Oracle trata operações com null como resultando em null/falso, sem
erro). nullif(valor1, valor2) retorna null se os dois forem iguais, senão retorna
valor1. Ver PL/SQL.
Programa armazenado (Oracle) — bloco PL/SQL nomeado e gravado no banco de dados
(procedure, function ou package), diferente de um bloco anônimo. Benefícios:
reaproveitamento, rapidez (já compilado), controle de alterações/acesso e
modularização. Ver PL/SQL.
procedure x function (Oracle) — function sempre retorna um valor (return) e
pode ser chamada de dentro de comandos SQL; procedure não retorna valor via
return (mas pode "retornar" indiretamente via parâmetros out) e só pode ser
executada via execute ou de dentro de um bloco PL/SQL — nunca dentro de um comando
SQL. Ver PL/SQL.
Modos de parâmetro: in / out / in out (PL/SQL) — in (padrão): parâmetro de
entrada, pode ser lido mas não reatribuído. out: parâmetro de saída, pode ser
atribuído mas não lido. in out: combina os dois, pode ser lido e reatribuído. Ver
PL/SQL.
Dependência direta x indireta (Oracle) — quando um objeto A chama um objeto B, A
tem dependência direta de B (B precisa estar válido para A estar); se B chama C, A tem
dependência indireta de C. Invalidar um objeto não afeta o que ele depende, mas
invalida em cascata quem depende dele. Consultado via a view all_dependencies. Ver
PL/SQL.
Package (Oracle) — programa armazenado que agrupa vários procedures/functions
relacionados, além de variáveis, cursores, exceções e types compartilhados.
Composto por até duas partes: specification (área pública — só o que está
declarado nela é acessível de fora) e body (implementação, pode conter objetos
adicionais com escopo privado, inacessíveis externamente). Uma specification sem body
funciona como área de armazenamento compartilhada na sessão. Objetos de um package têm
escopo de sessão, inicializados uma única vez por sessão, na primeira referência. Ver
PL/SQL.
Transação autônoma (Oracle) — recurso (pragma autonomous_transaction;) que
isola a transação de uma procedure/function/bloco anônimo da transação que o chamou,
abrindo uma nova sessão de transação independente. Dentro dela, só são visíveis dados
já commitados — nunca dados pendentes da transação original. Precisa ser encerrada
com commit/rollback explícito antes do fim do programa. Fundamental para alguns
cenários de trigger (ex.: log de auditoria que deve persistir mesmo se a operação
original sofrer rollback). Ver PL/SQL.
Trigger (Oracle) — bloco PL/SQL armazenado, disparado automaticamente por uma
ação (nunca chamado diretamente). Trigger de tabela: dispara uma vez por comando,
sem for each row. Trigger de linha: dispara uma vez por linha afetada
(for each row), com acesso a :old/:new (insert só tem :new, delete só tem
:old); :new só pode ser alterado no before. Trigger de sistema: disparado
por eventos de nível de sistema (logon, DDL, erro). Trigger de view (instead of):
necessário para views compostas por mais de uma tabela, assume manualmente o que fazer
em cada tabela de origem. Ver PL/SQL.
Mutante table / mutating table (ORA-04091) — erro que ocorre num trigger de
linha, no momento after, ao tentar consultar (select ou DML) a mesma tabela
que disparou o trigger — os dados dela ainda estão em alteração, numa transação não
confirmada. Não ocorre em triggers de linha before, nem em triggers de tabela.
Contornado trocando para before ou usando pragma autonomous_transaction (com a
ressalva de que a transação autônoma só enxerga dados já commitados, podendo não
refletir a própria alteração em andamento). Ver
PL/SQL.
PL/SQL Table x PL/SQL Record — PL/SQL Table é o nome que o PL/SQL dá a um vetor:
estrutura homogênea (todos os elementos do mesmo tipo) em memória, declarada com
type nome is table of tipo index by binary_integer, navegada com os métodos
first/last/count/next. PL/SQL Record é uma estrutura heterogênea
(type nome is record (campo1 tipo1, campo2 tipo2, ...)) que guarda uma única linha
de campos de tipos diferentes — para guardar várias linhas heterogêneas, combina-se
uma Table cujo elemento é um Record. Ver PL/SQL.
utl_file (Oracle) — pacote nativo para ler e gravar arquivos de texto no sistema
operacional do servidor a partir de blocos PL/SQL. O acesso a diretórios é autorizado
via objeto directory (forma atual, sem exigir reinício do banco) ou o parâmetro
utl_file_dir (forma antiga). Principais rotinas: fopen (abre, modos R/W/A),
get_line/put_line (lê/grava uma linha), fclose. Ao chegar ao final do arquivo,
get_line dispara a exceção no_data_found — não retorna null. Ver
PL/SQL.
SQL Dinâmico / execute immediate (Oracle) — recurso para montar e executar um
comando SQL (ou bloco PL/SQL) a partir de uma string, com a estrutura definida em
tempo de execução, não de compilação. execute immediate 'comando' using
param1, param2 executa a string, passando parâmetros via bind variables (:1,
:2, ...); returning ... into ... captura valores de um DML na mesma chamada; uma
procedure/function também pode ser chamada dinamicamente, com parâmetros
in/out/in out na cláusula using. Ver
PL/SQL.
ref cursor (Oracle) — tipo de variável que referencia a estrutura de um select
de forma dinâmica — não fixa a um único comando SQL como um cursor comum, e
aponta só para o resultado (sem armazená-lo), útil para repassar um resultado entre
programas ou sistemas. Ver PL/SQL.
bulk collect (Oracle) — cláusula que carrega todo o resultado de um select
(estático ou dinâmico) direto numa variável do tipo PL/SQL Table, sem precisar de um
loop manual de fetch. Usável com select into, fetch into, returning into e
execute immediate ... into; só funciona com variáveis do tipo Table, não Record. Ver
PL/SQL.
Polimorfismo — capacidade de tratar objetos de tipos diferentes, mas relacionados por herança, de forma uniforme através do tipo da superclasse. Qual versão de um método sobrescrito roda é decidido em tempo de execução, com base no tipo real do objeto — não no tipo da variável usada para referenciá-lo. Ver Orientação a Objetos.
Paginação / LIMIT (SQL) — devolver os resultados de uma consulta aos poucos, em
blocos, em vez de todos de uma vez (essencial quando a tabela tem muitas linhas).
LIMIT deslocamento, quantidade pula deslocamento linhas a partir do início e traz
quantidade linhas seguintes — a base de qualquer sistema de páginas ("página 2" =
pular a página 1). Ver SQL.
Pub/Sub (Publish/Subscribe) — padrão de EDA em que produtores publicam mensagens num canal e consumidores se inscrevem para recebê-las — sempre que um evento é publicado, ele é enviado a todos os consumidores inscritos que precisam reagir. Ver Event-Driven Architecture.
Produto cartesiano (SQL) — resultado de combinar duas tabelas sem indicar como se
relacionam (FROM a, b sem condição): cada linha de uma é pareada com todas as
linhas da outra, gerando linhasA × linhasB combinações, a maioria sem sentido. JOIN
... ON evita isso. Ver SQL.
Profiling (ferramenta de) — software que monitora uma aplicação em execução (tempo de execução de métodos, quantidade de objetos em memória por classe, entre outras métricas), usado para investigar problemas de desempenho — como um número muito grande de instâncias semelhantes de uma mesma classe, sinal de que o padrão Flyweight pode ajudar. Ver Padrões Arquiteturais.
Proxy (padrão GoF) — mesma estrutura do Decorator (composição recursiva), mas com
motivação diferente: serve de intermediário protetor/controlador de acesso a um objeto
principal, tipicamente remoto ou caro de criar. Exemplos nas APIs Java:
Collections.synchronizedList/unmodifiableList, stubs de RMI, e o lazy loading do
JPA (a lista associada vira um Proxy que só consulta o banco no primeiro acesso). Ver
Padrões Arquiteturais.
Decorator (padrão GoF) — mesma estrutura do Proxy (composição recursiva), mas para adicionar funcionalidade a um objeto existente de forma transparente (analogia: uma moldura decorando um quadro, sem alterar o quadro). Costuma aceitar qualquer implementação da abstração encapsulada, recebida por fora (construtor/configuração). Ver Padrões Arquiteturais.
Ataque de injeção (SQL Injection, XSS) — explora concatenação insegura de strings para alterar o comando que a aplicação pretendia executar. SQL Injection injeta partes de SQL num parâmetro para alterar a consulta no banco; Cross-Site Scripting (XSS) injeta JavaScript num parâmetro usado na construção de uma página web. Ver Padrões Arquiteturais.
RSA (Rivest, Shamir e Adleman) — algoritmo de criptografia assimétrica: uma chave pública criptografa, uma chave privada diferente descriptografa. Mais seguro que o AES para o cenário em que quem criptografa não deveria ter acesso à chave que reverte a operação — por isso preferido no lado cliente (frontends web), ao custo de maior complexidade de implementação. Ver Segurança.
Requisito de Usuário (RU) x Requisito de Software (RS) — RU descreve o software numa linguagem natural e de alto nível (textos/imagens), ajudando o solicitante a compreender o todo. RS descreve o comportamento esperado de forma formal e detalhada, para que a equipe de desenvolvimento saiba com precisão o que implementar. Vários artefatos (CDU, HU, RN, CA, RNF) podem ser considerados dos dois tipos ao mesmo tempo, por estarem vinculados a um requisito de software mas também servirem ao solicitante. Ver Requisitos.
Requisito Funcional (RF) x Requisito Não Funcional (RNF) — RF descreve os serviços que o software deve fornecer (o que ele deve/não deve fazer). RNF descreve restrições sobre como essas funcionalidades devem operar — de produto (usabilidade, eficiência, confiabilidade), organizacionais (políticas da equipe/empresa) ou externos (regulatórios, éticos/legais) — e costuma se aplicar ao software como um todo, não a uma funcionalidade isolada. Ver Requisitos.
Caso de Uso (CDU) x História de Usuário (HU) — artefatos de requisito que descrevem detalhadamente como uma funcionalidade deve se comportar, usados por quem codifica ou testa. CDU é mais antigo, escrito numa linguagem mais formal, em tópicos/passo a passo. HU é mais recente (surgiu com as Metodologias Ágeis), com a mesma função — a diferença é só a forma de escrita, nenhum é melhor que o outro. Ambos podem ser criados até depois da codificação. Ver Requisitos.
ROI (Return on Investment) / NPV (Net Present Value) / Payback Analysis — três técnicas de análise de custo-benefício, usadas (não excludentes entre si) na viabilidade econômica de um software. Payback Analysis calcula quando os benefícios superam os custos, usando o Valor Presente de cada ano projetado. NPV subtrai custos atualizados dos benefícios atualizados — resultado positivo indica que vale a pena; mais útil que o Payback ao comparar múltiplas alternativas. ROI = (Benefícios totais − Custos totais) / Custos totais, também usado para comparar alternativas. Ver Requisitos.
RICE — técnica de priorização quantitativa de requisitos: RICE = (Reach × Impact × Confidence) / Effort. Reach mede quantas pessoas o requisito afeta; Impact, o quanto afeta cada uma (escala de 0,25 a 3); Confidence, o quão confiante o time está nas estimativas (escala de 0,1 a 1,0); Effort, o esforço total de entrega (geralmente medido em T-shirt sizes) — por ser o divisor, quanto maior o esforço, menor a prioridade resultante. Ver Requisitos.
Rastreabilidade horizontal x vertical — a horizontal conecta artefatos do mesmo nível de abstração entre si (ex.: um CDU que depende de Regras de Negócio), garantindo coerência e identificando dependências, conflitos ou lacunas entre requisitos. A vertical conecta artefatos de níveis diferentes, da necessidade de negócio original até o código e os testes que a implementam, garantindo que tudo o que foi solicitado tenha sido efetivamente desenvolvido e testado. A Matriz de Rastreabilidade é a ferramenta que materializa as duas direções. Ver Requisitos.
Refatoração — segundo Martin Fowler, melhorar o design de um código já existente sem alterar seu comportamento externo, em pequenos passos, nunca deixando o sistema quebrado entre um passo e outro (o que exige boa cobertura de testes). Não é o mesmo que adicionar funcionalidade nova. Ver Boas Práticas.
Reflexão (Reflection) — capacidade de um programa executar computações a respeito
de si mesmo em tempo de execução: obter informações sobre suas classes e instanciá-las a
partir de um nome, em vez de um new fixo no código. Em Java, a API java.lang.reflect
(Class, Method, Field, Constructor) cobre obtenção de informação e instanciação;
é a base do padrão Dynamic Factory. Ver
Padrões Arquiteturais.
RMI (Remote Method Invocation) — tecnologia Java para invocação remota de métodos. O cliente chama um stub (Proxy local que representa o objeto remoto); do lado do servidor, um skeleton recebe a chamada e a repassa ao objeto real. Ver Padrões Arquiteturais.
printf / String.format — formatação de saída (Java 5) com marcadores % no
texto (%[index$][flags][width][.precision]type), permitindo largura mínima, casas
decimais, separador de milhar (sensível a Locale) e reordenação de argumentos. Ver
Java.
Recursividade — quando uma função/método chama a si mesmo repetidamente até atingir
um caso base (teste de parada). Toda solução recursiva precisa de: caso base, a operação
da chamada atual, e a chamada recursiva para uma versão menor do problema. Sem caso base
alcançável, estoura a pilha de execução (StackOverflowError). Ver
Estrutura de Dados.
Referência (objeto) — o que uma variável de objeto guarda de fato: um endereço de
memória apontando para onde o objeto vive, não o objeto em si. Por isso == entre dois
objetos compara referência (endereço), não conteúdo, e atribuir um objeto a outra
variável copia a referência, não o objeto. Ver
Orientação a Objetos.
Redirect URI (OAuth) — URI registrada previamente no Authorization Server, para onde o usuário é devolvido (com um código de autorização) após autorizar o acesso. Registrá-la antecipadamente evita que uma URI maliciosa seja injetada no fluxo e receba o token de acesso no lugar da aplicação certa. Ver Segurança.
Refresh token (OAuth) — token usado para obter um novo token de acesso sem incomodar o Resource Owner novamente, quando o token de acesso (de vida curta, por segurança) expira. Ver Segurança.
Refused bequest ("herança recusada", code smell) — quando uma classe filha herda de uma classe pai, mas não usa (ou não quer) parte dos métodos herdados — sinal de que a relação de herança não é uma verdadeira "X é um Y". Ver Boas Práticas.
Regra das duas pizzas — heurística (popularizada pela Amazon) de que um time de desenvolvimento não deveria ser maior do que o número de pessoas que duas pizzas alimentam (~6-10 pessoas) — times maiores gastam mais energia em coordenação do que em entrega. Motivação histórica por trás da divisão de sistemas em microsserviços. Ver Microsserviços.
Repositório (DDD) — termo do Domain-Driven Design para uma abstração de acesso a dados mais próxima da linguagem do domínio do que um DAO tradicional. Só vale a pena criar quando existe necessidade real de trocar a forma de acesso aos dados — DAOs concretos já tendem a ser estáveis por natureza. Ver Boas Práticas e DDD.
Resource Owner / Client / Authorization Server / Resource Server (OAuth 2.0) — os quatro papéis do protocolo. Resource Owner é o dono dos recursos (geralmente o usuário, mas pode ser a própria aplicação). Client é a aplicação que acessa recursos em nome do Resource Owner. Authorization Server emite tokens de acesso, só após o Resource Owner se autenticar e autorizar. Resource Server guarda os recursos protegidos e valida o token apresentado. Authorization Server + Resource Server juntos formam o "OAuth Provider" — podem viver na mesma aplicação (separação lógica) ou em aplicações distintas (separação física, reduz superfície de ataque). Ver Segurança.
REST (Representational State Transfer) — estilo arquitetural (tese de Roy Fielding, 2000) para sistemas cliente-servidor baseados em rede, definido por 6 restrições: cliente-servidor, stateless, cacheável, interface uniforme (URI identifica o recurso, verbo HTTP identifica a ação), sistema em camadas, e código sob demanda (opcional). Não define formato de corpo — "REST responde JSON" é um mito. Ver Backend.
RESTful — descreve uma implementação concreta que segue o estilo REST — diferença de nível: REST é o estilo em si, RESTful descreve uma API que o segue. Ver Backend.
Rest-Assured — framework Java mais usado para automatizar testes de serviços web
REST, com API fluente (given()/when()/expect()) para montar requisições HTTP e
XmlPath/JsonPath para navegar e desserializar a resposta direto em objetos Java. Ver
Qualidade.
Shadowing — quando uma variável local ou parâmetro tem o mesmo nome de uma variável de
instância ou estática. Permitido em Java; o nome sozinho sempre resolve para a variável de
menor escopo (a local) — para acessar a outra, usa-se this.nome ou
NomeDaClasse.nome. Ver Java.
Shotgun surgery ("cirurgia de espingarda", code smell) — quando uma mudança de negócio aparentemente simples obriga a alterar muitos arquivos diferentes de uma vez, porque a lógica está espalhada em vez de encapsulada num único lugar. Ver Boas Práticas.
Service Locator (padrão) — alternativa ao Dependency Injection: em vez de receber
dependências prontas de um montador, cada classe busca ativamente a implementação de que
precisa, delegando a busca a uma classe localizadora. Documentado originalmente como
Core J2EE Pattern (localização de enterprise beans via JNDI) — uso hoje considerado
obsoleto, mas o padrão continua útil fora desse contexto, sobretudo em arquiteturas
baseadas em plugins. A JDK oferece um pronto: ServiceLoader, que carrega implementações
de uma interface a partir de arquivos META-INF/services/<interface> presentes nos
.jar do classpath. Ver
Padrões Arquiteturais.
Scrum — metodologia ágil (origens em 1986 com Takeuchi/Nonaka, formalizada por Schwaber/Sutherland em 2001) inspirada numa formação tática de Rugby: toda a equipe em torno de um objetivo comum, entregando o maior valor de negócio possível dentro do prazo. Papéis: Product Owner (dono do produto, prioriza o que fazer), Scrum Master (guia o processo) e Time (codifica/testa/documenta). Artefatos: User Story/HU (necessidade declarada pelo PO), Item de Backlog/IB (unidade de trabalho gerenciável), Product Backlog x Sprint Backlog x Release/MVP. Cerimônias: Sprint (ciclo de 2-4 semanas), Sprint Planning, Daily Scrum, Sprint Review, Sprint Retrospective. Ver Gestão de Projetos.
SGBD (Sistema de Gerenciamento de Banco de Dados) — software responsável por armazenar e consultar dados de forma eficiente e segura (MySQL, PostgreSQL, Oracle, SQL Server, ...). Ver Modelagem de Dados.
Serviço de Domínio (Domain Service, DDD) / Serviço de Aplicação (Application Service) — Serviço de Domínio realiza operações do negócio que não se encaixam naturalmente em nenhuma Entidade específica, normalmente operando sobre um Agregado ou conjunto de Entidades. Serviço de Aplicação orquestra o fluxo de trabalho da aplicação como um todo, atuando como controlador do caso de uso — invoca Agregados, Serviços de Domínio e Fábricas, e lida com infraestrutura (repositórios, filas, transações). Ver DDD.
Simple Factory — classe dedicada só a criar instâncias de um tipo de produto,
escondendo do cliente a lógica de decisão envolvida. Resolve o problema de if/else
de criação espalhado pelo código, mas não é considerado um padrão pela maioria dos
autores (nem pelo catálogo GoF) — é tratado como um idioma de linguagem, por ser simples
demais para carregar o peso de "padrão de projeto". Evolui para Factory Method quando
passam a existir várias fábricas diferentes para o mesmo tipo de produto. Ver
Padrões Arquiteturais.
Singleton (padrão GoF) — caso especial de Static Factory Method para quando a
aplicação deve ter apenas uma instância de uma classe: construtor private, atributo
estático guarda a única instância, método estático (getInstancia()) a cria na primeira
chamada e devolve sempre a mesma depois. Usado sem critério, funciona como uma variável
global disfarçada e prejudica a testabilidade (não dá para substituir por um Mock Object,
já que o acesso é estático). Ver
Padrões Arquiteturais.
SOAP (Simple Object Access Protocol) — estilo baseado em RPC, mais antigo que gRPC:
mensagens trafegam como XML, sempre encapsuladas num Envelope contendo um Body.
Perdeu espaço para gRPC/REST (sem o ganho de performance de um formato binário), mas
continua em uso em sistemas legados corporativos. Ver
Backend.
SOA (Service Oriented Architecture) — estilo arquitetural (meados dos anos 1990) que quebra uma aplicação monolítica em serviços desacoplados, integrados por interfaces bem definidas e reutilizáveis (tipicamente SOAP + WSDL sobre HTTP), evitando integrações ponto a ponto. Precursor histórico direto dos microsserviços, que foram além ao definir o tamanho ideal da unidade de serviço (um único contexto de negócio, coeso e autônomo). Ver Microsserviços.
BFF (Backend For Frontend) — camada intermediária que orquestra chamadas a vários
microsserviços em sequência, manipula respostas e conhece o domínio interno da aplicação
— o objetivo é que o frontend nunca precise lidar diretamente com essa complexidade de
orquestração, falando só com o BFF. Em contextos simples, um serviço já natural como
porta de entrada (ex.: customer-service) pode assumir esse papel, sem exigir um serviço
dedicado. Ver Microsserviços.
Simplicidade de código (Kent Beck) — quatro características, em ordem de prioridade, que definem um código simples (Extreme Programming Explained, 1999): todos os testes passam; sem duplicação; mostra as intenções de quem escreveu; menor número possível de classes e métodos. Aplicar um padrão de projeto tende a melhorar os dois itens do meio e piorar o último — por isso nenhum deles deve ser otimizado isoladamente. Ver Padrões Arquiteturais.
SOLID — acrônimo para cinco princípios de design orientado a objetos: SRP (responsabilidade única), OCP (aberto-fechado), LSP (substituição de Liskov), ISP (segregação de interface), DIP (inversão de dependência). Juntos, buscam alta coesão e baixo acoplamento. Ver Boas Práticas.
SQL (Structured Query Language) — linguagem padrão para criar/alterar tabelas e inserir, consultar, atualizar e remover dados num banco relacional. Ver SQL.
SRP (Single Responsibility Principle) — princípio SOLID: uma classe deve ter uma, e apenas uma, razão para mudar — representa um único conceito/responsabilidade do sistema. Dois comportamentos pertencem à mesma responsabilidade se sempre mudam juntos. Ver Boas Práticas.
Strategy (padrão GoF) — usado quando uma classe precisa de vários algoritmos intercambiáveis: delega a execução para uma instância que a compõe (recebida por fora), em vez de implementar o algoritmo diretamente ou via herança. Permite trocar o algoritmo sem alterar a classe principal, inclusive em tempo de execução. Custo: mais classes no sistema e complexidade extra na criação do objeto. Ver Padrões Arquiteturais.
Subquery (SQL) — um SELECT usado dentro de outra consulta (como argumento de
EXISTS, ou onde um valor/lista de valores é esperado), rodando para cada linha
candidata da consulta externa. Ver SQL.
Subquery correlacionada — uma subquery usada no lugar de uma coluna do SELECT,
filtrada por uma coluna da linha atual da consulta externa (ex.: WHERE aluno_id =
a.id), permitindo trazer um valor calculado por aluno/linha sem precisar de JOIN +
GROUP BY. Só funciona se devolver exatamente uma linha por execução. Ver
SQL.
Sobrecarga (Overload) — ter mais de um método (ou construtor) com o mesmo nome na mesma classe, desde que a lista de parâmetros seja diferente em quantidade ou tipo. Ver Orientação a Objetos.
Richardson Maturity Model (RMM) — modelo (Leonard Richardson, popularizado por Martin Fowler) que organiza a aderência de uma API ao estilo REST em quatro níveis progressivos: Nível 0 (The Swamp of POX — um único método e URI para tudo), Nível 1 (Resources — URIs por recurso, ainda um único verbo), Nível 2 (HTTP Verbs — verbos e códigos de status corretos, mínimo para ser considerada RESTful) e Nível 3 (Hypermedia Controls/HATEOAS — "a glória do REST"). Ver Backend.
RPC (Remote Procedure Call) — modelo de programação (1976) onde cliente e servidor se comunicam como se estivessem no mesmo processo — quem desenvolve só conhece uma interface de código, o framework esconde protocolo e serialização. Uma chamada RPC nunca é garantidamente confiável como uma chamada local (falácia comum), porque sempre atravessa uma rede de verdade. gRPC e SOAP são implementações de RPC. Ver Backend.
Retorno covariante — numa sobrescrita, a permissão de a subclasse devolver um tipo mais específico (um subtipo) do que o declarado na superclasse, para tipos de referência. Não existe para tipos primitivos. Ver Orientação a Objetos.
Sobrescrita (Override) — quando uma subclasse redefine o comportamento de um método
herdado da superclasse, mantendo a mesma assinatura. Marcada opcionalmente com
@Override, que faz o compilador validar que o método realmente existe na superclasse.
Diferente de sobrecarga (mesmo nome, parâmetros diferentes). Ver
Orientação a Objetos.
static (binding estático) — modificador que faz um atributo ou método pertencer à
classe, não a cada instância. Métodos static são resolvidos em tempo de compilação,
pelo tipo da variável usada para chamar — diferente de métodos de instância
(polimórficos, resolvidos em tempo de execução pelo tipo real do objeto). Ver
Java.
Stacktrace — rastro impresso quando uma exceção não é tratada: qual exceção ocorreu, sua mensagem, e a sequência de chamadas de método até o ponto exato do problema (arquivo e linha). Ver Boas Práticas.
State (padrão GoF) — usa composição para representar cada estado possível de uma
entidade como uma classe própria, todas implementando uma abstração comum. A entidade
delega para o estado atual qualquer comportamento dependente dele — trocar de estado é
só trocar a instância referenciada, sem condicionais na classe principal. Um enum
Java pode implementar o padrão diretamente, quando o conjunto de estados é fixo e não
precisa de dado específico por instância. Ver
Padrões Arquiteturais.
Stateless (HTTP) — o protocolo não guarda nenhum estado da conexão entre requisições; cada requisição é completa e independente. Facilita escalar servidores horizontalmente, mas exige reconstruir qualquer noção de "sessão" a cada requisição (via cookie, token, ...). Ver Backend.
Stream — API (Java 8) para processar coleções de forma declarativa, encadeando
operações (filter, forEach, ...) sem criar listas intermediárias nem alterar a coleção
original. Ver Java.
StringBuilder / StringBuffer — classes de string mutável: alteram o próprio
objeto (append, insert, delete, reverse) em vez de criar uma String nova a cada
operação. Mesma interface nas duas; StringBuffer é thread-safe (mais lento),
StringBuilder não é (mais rápido, preferido por padrão). Ver
Java.
String pool — cache de strings literais mantido pela JVM: duas variáveis com o mesmo
literal ("java") apontam para o mesmo objeto no pool, então == entre elas dá true —
uma exceção prática à regra geral de que == entre objetos compara só referência. Ver
Java.
TDD (Test-Driven Development) — ciclo de desenvolvimento vermelho-verde-refatorar: escreve-se um teste que falha, depois o código mais simples possível que o faz passar (baby steps), depois refatora-se com a segurança do teste passando. Tende a produzir classes mais coesas e menos acopladas, como efeito colateral de escrever código fácil de testar. Ver Qualidade.
TCP (Transmission Control Protocol) — protocolo de transporte que garante entrega completa e ordenada de pacotes, retransmitindo o que não chegar. Camada 4 do modelo OSI. Ver Redes.
Timeboxing — técnica de priorização de requisitos baseada em tempo fixo: define-se um intervalo (box) de tempo — tipicamente uma sprint, no Scrum — e prioriza-se apenas o que cabe dentro dele, em vez de tentar prever quanto tempo cada item vai levar. Ajuda a manter foco, evitar perfeccionismo e cumprir prazos. Ver Requisitos.
Tell, don't ask ("diga, não pergunte") — princípio OO: em vez de perguntar o estado de um objeto para decidir algo por fora dele, diga ao objeto para tomar a decisão e agir sozinho — encapsulando a lógica dentro da própria classe dona do dado. Ver Boas Práticas.
Template Method (padrão GoF) — usado quando existe um algoritmo de estrutura fixa mas com passos que variam. A superclasse implementa um método público que coordena a execução, chamando hook methods na ordem certa; cada subclasse concreta implementa só os hooks, sem alterar a estrutura geral do algoritmo. Ver Padrões Arquiteturais.
Teorema do bom vizinho — ideia de que uma classe nunca deve passar dados inválidos
(em especial null) para outra classe — cada classe trata/valida o dado antes de
repassá-lo adiante, para que ninguém precise se defender de null o tempo todo. Ver
Boas Práticas.
Tríade CIA (Confidencialidade, Integridade, Disponibilidade) — os três princípios que orientam decisões de segurança de sistemas: confidencialidade (só quem tem permissão lê o dado, via criptografia), integridade (o dado não foi alterado sem autorização, via assinatura/hash), disponibilidade (o sistema continua acessível sob ataque ou demanda alta, via rate limit e redundância). Ver Segurança.
Teste automatizado — programa que testa outro programa: monta um cenário, executa a ação a ser testada e verifica se a saída bate com o esperado, sem intervenção manual. Segue o padrão Arrange, Act, Assert. Ver Qualidade.
Teste de integração — teste que verifica a comunicação real entre a aplicação e um sistema externo (tipicamente um banco de dados), deliberadamente sem mockar a peça que está sendo integrada — testar um DAO exige rodar contra um banco real, senão erros na consulta SQL/HQL em si passam despercebidos. Ver Qualidade.
Teste de regressão — teste antigo que continua rodando conforme o sistema ganha funcionalidades novas, garantindo que uma mudança recente não quebrou um comportamento que já funcionava — a maior vantagem prática de uma suíte de testes automatizados. Ver Qualidade.
Teste de sistema (end-to-end) — teste que exercita a aplicação inteira do ponto de vista do usuário final (abre navegador, clica, preenche formulários), como caixa-preta — o único tipo de teste que garante o sistema funcionando com tudo integrado ao mesmo tempo. Ver Qualidade.
Selenium — framework mais usado para automatizar testes de sistema em aplicações
web: controla de fato um navegador (WebDriver), localizando elementos (findElement/
By) e interagindo com eles (sendKeys, click, submit). Ver
Qualidade.
Page Object — padrão de projeto para testes de sistema: classe que representa uma página (ou parte dela) da aplicação, escondendo os detalhes de interação com o Selenium atrás de métodos com nomes de negócio. Ver Qualidade.
Test Data Builder — padrão de projeto para código de teste: classe cuja única
responsabilidade é construir um objeto complexo para uso em testes, com API fluente
(métodos encadeados retornando this), isolando o acoplamento entre teste e produção
num único lugar. Ver Qualidade.
Tiny Type — classe pequena e dedicada para representar um conceito que, de outra
forma, seria só uma String/tipo primitivo genérico demais (CPF, Email, Telefone
em vez de tudo String). A assinatura do método documenta melhor o que espera, e cada
tipo valida a si mesmo — ao custo de mais classes no sistema. Ver
Boas Práticas.
TLS x SSL — TLS (Transport Layer Security) é a evolução do SSL (Secure Socket Layer), ambos protocolos que protegem requisições pela internet (base do HTTPS). TLS permite autenticação mútua — não só o servidor prova identidade ao cliente, o cliente também pode provar a sua ao servidor. Ver Segurança.
Token de acesso (OAuth) — credencial temporária, com escopo e validade limitados, gerada por um sistema para que outra aplicação acesse dados em nome de um usuário — sem nunca expor a senha original. Análogo ao cartão de visitante de um condomínio: acesso restrito e revogável, sem entregar a chave principal. Ver Segurança.
Tipo de dado (TD) — categoria em que um dado se enquadra (numérico, lógico, literal) — os tipos primitivos de uma linguagem. Amarrado à linguagem que o disponibiliza, diferente de um TAD. Ver Estrutura de Dados.
Tipo abstrato de dado (TAD) — estrutura construída a partir de tipos primitivos (TDs) que representa, no mundo computacional, algo do mundo real (uma fila, uma pilha, uma lista) — não é amarrada a nenhuma linguagem específica, só a implementação é. Ver Estrutura de Dados.
this — palavra-chave que se refere ao próprio objeto dentro de um método; necessária
quando um parâmetro tem o mesmo nome de um atributo da classe, para desambiguar qual dos
dois está sendo usado. Ver Orientação a Objetos.
throw x throws — throw lança efetivamente uma exceção (throw new
RuntimeException(...)); throws só aparece na assinatura de um método, avisando que ele
pode lançar aquele tipo de exceção, delegando a tratativa para quem o chamar. Ver
Boas Práticas.
toString — método herdado de Object que define como um objeto vira texto (usado
implicitamente em println(objeto) ou concatenação com +). Sem sobrescrever, o padrão
imprime pacote.Classe@hashcode. Ver
Java.
UDP (User Datagram Protocol) — protocolo de transporte que não garante entrega nem ordem dos pacotes (envia e segue em frente, sem confirmação) — mais rápido que o TCP, usado quando agilidade importa mais que integridade total (streaming de áudio/vídeo). Camada 4 do modelo OSI. Ver Redes.
UML (Unified Modeling Language) — linguagem de modelagem e documentação de software (Grady Booch, James Rumbaugh, Ivar Jacobson), composta por diagramas de estrutura (ex.: Diagrama de Classe) e de comportamento (ex.: Diagrama de Caso de Uso, de Sequência, de Estado). Todos são, por definição, requisitos de software; alguns também funcionam como requisito de usuário. Não é preciso usar todos os diagramas disponíveis — só os que fizerem sentido para o contexto do projeto. Ver Diagramas e UML.
Unreachable code / Missing return statement — dois erros de compilação relacionados
à análise de fluxo do Java: missing return é quando existe um caminho possível de um
método que não retorna nem lança exceção; unreachable code é uma instrução que o
compilador consegue provar que nunca executa (ex.: logo após um return). if (false)
não conta como unreachable — o compilador não avalia o valor de condições. Ver
Java.
Valor default (inicialização implícita) — valor que uma variável de instância,
estática, ou posição de array recebe automaticamente quando não é explicitamente
inicializada (0 para numéricos, false para boolean, null para referências).
Variáveis locais não têm valor default — precisam de inicialização explícita antes do
uso, ou é erro de compilação. Ver
Java.
Varargs — sintaxe (Tipo... nome, desde o Java 5) que permite um método receber uma
quantidade variável de argumentos do mesmo tipo, tratados como um array dentro do método.
Deve ser o último parâmetro, e só um por assinatura. Ver
Java.
Visitor (padrão GoF) — usa Double Dispatch para adicionar operações a uma hierarquia
inteira de classes ("elementos") sem alterá-las a cada operação nova: elementos
implementam aceitar(visitante), visitantes implementam um método por tipo de elemento
que sabem visitar. Uma operação nova vira uma implementação nova de visitante; um
elemento novo, porém, exige um método novo em todas as implementações de visitante
já existentes — considerado um dos padrões GoF mais difíceis de aplicar corretamente. Ver
Padrões Arquiteturais.
YAGNI (You Aren't Gonna Need It) — "você não vai precisar disso": não generalizar ou adicionar abstração/flexibilidade num código além do que o problema atual realmente exige. Relevante ao decidir se vale a pena aplicar um padrão de projeto — abstração tem custo, e imaginar o design "ideal" antes de simplificar demais é o caminho mais comum para violar esse princípio. Ver Boas Práticas.
UPDATE/DELETE sem WHERE — pega-lá-dá-cá clássico: sem uma condição WHERE,
UPDATE atualiza todas as linhas da tabela e DELETE apaga todas, sem confirmação.
Boa prática: escrever e testar o WHERE com um SELECT antes de acoplar o
UPDATE/DELETE. Ver SQL.
Upcasting / Downcasting — upcasting (filha → mãe) é automático, nunca precisa de
casting explícito. Downcasting (mãe → filha) sempre precisa, e só compila se existir um
caminho possível na hierarquia — mesmo assim pode lançar ClassCastException em tempo
de execução, se o objeto real não for daquele tipo. Casting entre tipos sem relação
nenhuma é erro de compilação. Ver
Orientação a Objetos.
URI (Uniform Resource Identifier) — endereço no formato
Scheme://Authority/Path?Query#Fragment: protocolo, quem acessar (usuário/senha/
servidor/porta), qual recurso, parâmetros e uma posição específica dentro do recurso.
Não é exclusiva do HTTP — aparece também em connection strings de banco e URLs de Git.
Ver Backend.
Webhook — mecanismo de integração assíncrona em que o sistema externo chama de volta a aplicação (via uma URL previamente registrada) quando um processamento termina, em vez de a aplicação ficar aguardando a resposta numa requisição síncrona. Evita que uma integração lenta bloqueie a aplicação requisitante — o preço é uma orquestração mais complexa, já que é preciso rastrear o estado da operação até a notificação chegar. Ver Event-Driven Architecture.
WireMock — ferramenta que simula um serviço HTTP externo, respondendo requisições reais com respostas pré-configuradas — útil para testar integração com APIs de terceiros (gateways de pagamento, por exemplo) sem depender delas estarem disponíveis, com controle total sobre cenários de sucesso, erro e latência. Ver Qualidade.
WebSocket — extensão do HTTP (ws://) que transforma uma conexão comum num canal
full-duplex (os dois lados podem enviar mensagens a qualquer momento), via
Connection: Upgrade/Upgrade: websocket. Resolve a limitação de o servidor não
conseguir avisar o cliente proativamente, sem recorrer a polling. Ver
Backend.
Widening — conversão implícita (sem casting) de um tipo menos abrangente para um
mais abrangente (int → long, float → double, ...), feita automaticamente pelo
compilador. O caminho contrário (narrowing) exige casting explícito, exceto ao atribuir
um literal a byte/short/char que caiba no tipo. Ver
Java.
Wrapper (classe) — classe que "embrulha" um tipo primitivo para que possa ser tratado
como objeto (Integer para int, Boolean para boolean, ...), com métodos utilitários
de conversão. Ver Java.
PoC (Proof of Concept) — prova de conceito: experimento mínimo que responde se uma ideia é tecnicamente viável, sem preocupação com escala ou acabamento. Ver I.A. e Machine Learning.
MVP (Minimum Viable Product) — produto mínimo viável: a menor versão que entrega valor real a usuários reais, lançada rápido para colher feedback e iterar. Ver I.A. e Machine Learning.
Viés (bias) em modelos de IA — tendência sistemática de o modelo tratar grupos ou categorias de entrada de forma desigual sem justificativa técnica, herdada dos dados de treino ou dos exemplos usados. Combate-se com auditoria recorrente da disparidade entre grupos. Ver Ética e responsabilidade.
Edge AI — execução de modelos de IA em dispositivos locais (celulares, veículos, servidores on-premises), sem enviar o dado a uma nuvem. Reduz latência e preserva privacidade. Ver Tendências.
Multimodalidade — capacidade de um modelo de entender e/ou gerar vários tipos de dado (texto, imagem, áudio, vídeo) no mesmo fluxo. Ver Tendências.
Machine Learning (aprendizado de máquina) — abordagem em que o programa aprende o padrão a partir de exemplos em vez de seguir regras escritas à mão. Ver Machine Learning.
Classificação — tarefa de aprendizado supervisionado em que o modelo atribui cada item a uma categoria (classe) com base em suas características. Ver Machine Learning.
Característica (feature) — atributo observável de um item usado pelo modelo para classificá-lo, em geral codificado como número (ex.: "visitou a página de contato?" → 0/1).
Marcação (label, rótulo) — a classe correta já conhecida de um item de treino ou de teste (ex.: spam = 1, não spam = 0).
X e Y — convenção de ML supervisionado: X é a matriz de características (uma linha por item) e Y é o vetor de marcações que se quer prever.
scikit-learn (sklearn) — biblioteca Python de ML clássico; expõe algoritmos com a mesma
interface: fit(X, Y) para treinar e predict(X) para prever.
Naive Bayes — família de classificadores baseada no teorema de Bayes que assume
independência entre as características ("ingênuo"); o MultinomialNB trabalha com
contagens/frequências, como ocorrências de palavras.
Taxa de acerto (acurácia, accuracy) — percentual de itens de teste classificados corretamente: acertos ÷ total × 100.
Conjunto de treino e conjunto de teste — divisão dos dados rotulados: treino para o modelo aprender e teste, com itens nunca vistos, para medir a qualidade real (ex.: 90%/10%).
Vazamento de dados (data leakage) — usar informação do conjunto de teste durante o treino (ou testar com os dados do treino), gerando uma estimativa de qualidade irrealisticamente boa.
CSV (comma separated values) — formato de texto em que os valores de cada linha são separados por vírgula, com cabeçalho na primeira linha; exportado por qualquer planilha.
Variável categórica — variável que assume um valor dentre um conjunto finito de categorias (ex.: termo buscado, estado, tipo de plano). Precisa ser convertida em números (dummies) antes de alimentar muitos algoritmos.
Dummies (one-hot encoding) — conversão de uma variável categórica em uma coluna binária
por categoria, em que exatamente uma vale 1 por linha; pd.get_dummies faz isso no Pandas.
Ver Machine Learning.
Pandas / DataFrame — biblioteca Python de análise de dados; o DataFrame é a estrutura de
tabela (linhas × colunas nomeadas) devolvida por pd.read_csv.
Algoritmo base (baseline) — classificador trivial que responde sempre a classe mais
frequente, sem olhar as características; serve de piso de comparação: um modelo que não
supera o baseline (nos mesmos dados de teste) não agrega valor. No scikit-learn:
DummyClassifier(strategy="most_frequent"). Ver
Machine Learning.
Dados desbalanceados — conjunto em que uma classe é muito mais frequente que a outra (ex.: 83% de compradores); nele, uma acurácia alta pode ser obtida sem aprender nada.
Counter (collections) — estrutura do Python que conta quantas vezes cada valor aparece
em uma sequência, devolvendo um dicionário {valor: contagem}.
Maximum a posteriori (MAP) — regra de decisão que escolhe a classe de maior probabilidade depois de observadas as características; é o critério padrão do Naive Bayes. Ver Machine Learning.
Probabilidade condicional — probabilidade de um evento dado que outro ocorreu; escreve-se
P(A | B), "probabilidade de A dado B".
Prior (probabilidade a priori) — probabilidade de uma classe antes de olhar as características (sua frequência no histórico); entra como fator na fórmula do Naive Bayes.
AdaBoost (Adaptive Boosting) — algoritmo de ensemble que combina muitos classificadores
fracos, cada um reforçando os itens que o anterior errou, formando um classificador forte.
Em sklearn: AdaBoostClassifier.
Conjunto de validação — fatia dos dados reservada para a avaliação final do modelo escolhido, usada uma só vez, depois de todas as decisões (características, algoritmo); evita que a escolha do "melhor" modelo contamine a medição. Ver Machine Learning.
Correlação espúria — relação estatística entre variáveis que existe só por coincidência (ou por uma causa comum oculta), sem causalidade; surge facilmente quando se testam muitas combinações de variáveis.
Classificação multiclasse — classificação em que cada item pertence a uma entre três ou mais classes (0, 1, 2 … N); em oposição à classificação binária.
One-vs-Rest (um contra todos) — estratégia multiclasse que treina um classificador
binário por classe ("esta classe × todas as demais") e escolhe a classe de maior confiança;
N classificadores, custo linear. OneVsRestClassifier no scikit-learn.
One-vs-One (um contra um) — estratégia multiclasse que treina um classificador para cada
par de classes e decide por votação; N(N−1)/2 classificadores, custo quadrático.
OneVsOneClassifier no scikit-learn.
Recência e frequência — características clássicas de comportamento de clientes: recência = há quanto tempo foi a última interação; frequência = em quantos dias distintos houve interação.
LinearSVC — classificador de máquina de vetores de suporte (SVM) linear do scikit-learn; intrinsecamente binário, costuma ser usado dentro de One-vs-Rest/One-vs-One.
k-fold (validação cruzada, cross-validation) — técnica que divide os dados em k pedaços e repete k vezes, usando um pedaço como teste e os demais como treino; o resultado é a média das k taxas de acerto. Reduz a dependência de uma divisão específica. Ver Machine Learning.
cross_val_score — função do scikit-learn (sklearn.model_selection) que executa a
validação cruzada e devolve a taxa de acerto de cada uma das k rodadas.
Leave-one-out — caso extremo do k-fold em que k é igual ao número de itens: cada item é, uma vez, o conjunto de teste.
Bag of words (saco de palavras) — representação de um texto como vetor de contagens: cada posição corresponde a uma palavra do vocabulário e guarda quantas vezes ela aparece, ignorando a ordem. Permite usar classificadores numéricos com texto. Ver Machine Learning.
Vocabulário (dicionário) — conjunto de palavras distintas dos textos de treino; define as colunas do vetor, de modo que todo texto vire um vetor de tamanho fixo.
CountVectorizer — classe do scikit-learn que monta o vocabulário e converte textos em
vetores de contagem de palavras (fit_transform).
Conjunto (set) — estrutura de dados que não admite elementos repetidos; usada para montar o vocabulário de um texto, pois adicionar uma palavra já existente não tem efeito.
Tupla e dicionário (dict) — tupla é uma sequência ordenada imutável (ex.: ("curso", 16));
dicionário é um mapa chave → valor com busca direta pela chave (ex.: palavra → posição).
Limpeza de texto — pré-processamento que normaliza o texto antes da vetorização (minúsculas, remoção de pontuação, acentos e stop words); a escolha depende do objetivo, pois CAIXA ALTA pode ser um sinal útil (spam, usuário bravo).
Seed (random_state) — valor inicial do gerador de números pseudoaleatórios; fixá-lo torna
reproduzível um algoritmo que usa aleatoriedade (ex.: AdaBoostClassifier(random_state=0)).
NLTK (Natural Language Toolkit) — biblioteca Python de processamento de linguagem natural
com stop words, stemmers e tokenizadores por idioma; os recursos linguísticos são baixados à
parte com nltk.download(...).
Stop words (palavras de parada) — palavras muito frequentes de um idioma ("com", "o", "uma", "de") que carregam pouca informação sobre o assunto e costumam ser removidas antes de vetorizar o texto. Ver Machine Learning.
Stemming (radical) — redução de uma palavra ao seu radical para tratar flexões como uma
só ("amigos", "amigas" → amig); no português, RSLPStemmer do NLTK.
Tokenização — divisão do texto em unidades (tokens), normalmente palavras e sinais de
pontuação; primeira etapa de um pipeline de PLN (word_tokenize no NLTK).
PLN (Processamento de Linguagem Natural) — área da IA que trata texto e fala humanos; inclui tokenização, remoção de stop words, stemming e vetorização.
Job description (descrição da vaga) — documento que lista responsabilidades, requisitos e tecnologias de uma vaga; principal guia do que a empresa busca e base para conectar suas experiências na entrevista. Ver Comportamento em Entrevistas.
Dress code — padrão de vestimenta esperado em um ambiente; em entrevistas, o ideal é um visual discreto e coerente com a cultura da empresa (que convém pesquisar antes).
Follow-up — contato de acompanhamento depois de um evento; após a entrevista, a mensagem ao recrutador ou gestor para agradecer, reforçar o interesse e conectar um ponto da conversa ao seu perfil.
Pergunta aberta ("Me fale sobre você") — pergunta sem resposta única que avalia como o candidato se comunica, organiza as ideias e se posiciona; recomenda-se um roteiro fixo (pessoa, formação, experiência, resultados). Ver Perguntas de RH.
Spring Boot — framework do ecossistema Spring que reduz a configuração repetitiva: oferece autoconfiguração, starters, servidor embutido (aplicação como um único JAR) e recursos prontos para produção. Ver Spring.
Starter (Spring Boot) — pacote de dependências coordenadas que adiciona uma
funcionalidade ao projeto (ex.: spring-boot-starter-web, spring-boot-starter-data-jpa).
Autoconfiguração (Spring Boot) — mecanismo (@EnableAutoConfiguration) que analisa as
dependências do projeto e cria automaticamente as configurações prováveis, com base em
condições.
Spring Initializr — ferramenta oficial (start.spring.io) que gera a estrutura inicial
de um projeto Spring com as dependências escolhidas.
Inversão de Controle (IoC) e Injeção de Dependência (DI) — IoC: o contêiner, e não a
classe, controla a criação e a ligação dos objetos; DI: a classe recebe a dependência pronta
(preferencialmente por construtor). No Spring, o contêiner é o ApplicationContext.
Bean (Spring) — objeto criado e gerenciado pelo contêiner do Spring; registrado por
estereótipos (@Component, @Service, @Repository, @Controller) ou por métodos @Bean.
Estereótipos (Spring) — anotações que registram a classe como bean e indicam o seu papel:
@Component (genérico), @Service (regra de negócio), @Repository (acesso a dados),
@Controller/@RestController (camada web).
@SpringBootApplication — anotação da classe principal que reúne @Configuration,
@EnableAutoConfiguration e @ComponentScan.
Maven wrapper / Gradle wrapper — scripts (mvnw, gradlew) que acompanham o projeto e
padronizam a versão da ferramenta de build em todos os ambientes.
@ConfigurationProperties — anotação do Spring Boot que mapeia um grupo de propriedades
de configuração para uma classe tipada e validável.
Perfil (profile, Spring) — conjunto de configurações por ambiente (dev, test, prod),
ativado com spring.profiles.active.
DispatcherServlet — ponto único de entrada do Spring Web MVC: recebe a requisição, resolve a rota e a encaminha ao controller correto.
DTO (Data Transfer Object) — objeto de entrada ou saída de dados de uma API, desacoplado
da entidade de domínio para controlar o que é exposto; em Java 16+ costuma ser um record.
Bean Validation — especificação de validação por anotações (@NotNull, @NotBlank,
@Size, @Email), ativada com @Valid.
JPA / Hibernate / Spring Data JPA — JPA: especificação Java de persistência
objeto-relacional; Hibernate: implementação mais usada; Spring Data JPA: camada que gera
automaticamente os repositórios (JpaRepository) com CRUD pronto.
@Transactional — anotação que executa o método dentro de uma transação, com rollback
automático em caso de erro.
LAZY x EAGER (JPA) — estratégias de carregamento de relacionamentos: LAZY carrega sob demanda (recomendado); EAGER carrega junto com a entidade (usar com cautela).
@RestControllerAdvice — classe que centraliza o tratamento de exceções de todos os
controllers, convertendo-as em respostas HTTP padronizadas.
Spring Security / SecurityFilterChain — módulo de autenticação e autorização do Spring;
funciona como uma cadeia de filtros executada antes do controller, configurada por uma
SecurityFilterChain (que substituiu o WebSecurityConfigurerAdapter).
@PreAuthorize — anotação que restringe o acesso a métodos por papel ou expressão SpEL,
avaliada antes da execução (ex.: hasRole('ADMIN')).
CORS (Cross-Origin Resource Sharing) — mecanismo do navegador que controla quais origens
(protocolo + domínio + porta) podem acessar uma API; requer cabeçalhos corretos e, para certos
métodos, a resposta à requisição preflight (OPTIONS). No Spring: @CrossOrigin.
CSRF (Cross-Site Request Forgery) — ataque que induz o navegador autenticado a enviar uma requisição indesejada; a defesa usual é um token nas requisições que alteram estado. O Spring Security o habilita por padrão em aplicações web.
SLF4J / Logback — SLF4J é a fachada de logging do Spring Boot; Logback é a implementação padrão. Níveis: TRACE, DEBUG, INFO, WARN, ERROR.
Spring Boot Actuator — módulo que expõe endpoints de monitoramento (/actuator/health,
metrics, info), integrável com Prometheus e Grafana.
Feign Client — cliente HTTP declarativo do Spring Cloud OpenFeign, que abstrai chamadas REST entre serviços com interfaces anotadas.
Circuit Breaker / Retry / Timeout — padrões de resiliência na comunicação entre serviços: timeout limita a espera; retry repete chamadas após falhas temporárias; circuit breaker abre o circuito após várias falhas para evitar chamadas inúteis e efeito cascata (ex.: Resilience4j).
Descoberta de serviços (service discovery) — registro onde os serviços se anunciam (Eureka, Consul), permitindo localizar instâncias dinamicamente e balancear carga.
Mensageria (produtor, fila, consumidor, DLQ) — comunicação assíncrona em que um produtor
publica eventos em uma fila (RabbitMQ, Kafka, SQS) e um consumidor os processa depois; a DLQ
(dead letter queue) guarda mensagens que falharam. No Spring: @RabbitListener.
Cache (@Cacheable, @CacheEvict) e TTL — @Cacheable guarda o resultado de um método
por chave; @CacheEvict invalida entradas; TTL (time to live) é o tempo de expiração do
dado em cache. Redis é um cache distribuído muito usado com Spring Boot.
MultipartFile — representação, no Spring, do arquivo enviado em um upload
(multipart/form-data), com nome, tipo, tamanho e bytes.
JavaMailSender — interface do Spring para envio de e-mails via SMTP, com texto simples,
HTML e anexos.
@Scheduled — anotação que agenda a execução de um método por expressão cron ou
intervalo (fixedRate, fixedDelay); exige @EnableScheduling.
Cron (expressão) — formato com segundo, minuto, hora, dia do mês, mês e dia da semana que
define quando uma tarefa agendada executa (ex.: 0 0 * * * * = toda hora cheia).
Dockerfile / imagem / contêiner — Dockerfile descreve como construir a imagem; imagem é o pacote imutável da aplicação e suas dependências; contêiner é uma instância em execução da imagem.
CI/CD (pipeline) — integração e entrega contínuas: pipeline definido como código que executa build, testes e deploy a cada commit ou pull request.
Blue/green e canary release — estratégias de deploy: blue/green mantém dois ambientes e troca o tráfego entre eles; canary libera a nova versão para uma pequena parte dos usuários antes de estendê-la a todos.
Kubernetes: Pod, Deployment, Service, ConfigMap, Secret — Pod: menor unidade de execução; Deployment: gerencia réplicas e atualizações contínuas; Service: IP estável e balanceamento; ConfigMap: configuração não sensível; Secret: dados sensíveis (em base64).
ACID — propriedades de uma transação: Atomicidade (tudo ou nada), Consistência (leva o
banco de um estado válido a outro), Isolamento e Durabilidade. No Spring, @Transactional
gerencia commit e rollback (por padrão, rollback só para exceções não verificadas).
Resilience4j — biblioteca leve de resiliência integrada ao Spring Boot: timeout (@TimeLimiter),
retry, circuit breaker, fallback, bulkhead e rate limiter. Ver
Spring.
Bulkhead — padrão de resiliência que isola recursos (pools de threads ou semáforos) para que a lentidão de um serviço não consuma todos os recursos da aplicação.
Versionamento de API — estratégia para evoluir uma API sem quebrar clientes: versão na URL
(/api/v1) ou em header (API-Version), com compatibilidade, aviso de depreciação e plano de
migração.
Testcontainers — biblioteca que usa Docker para criar contêineres reais (PostgreSQL, Redis, Kafka…) durante os testes de integração, gerenciando o ciclo de vida automaticamente.
Trace e span (tracing distribuído) — trace é a jornada completa de uma requisição entre
serviços; span é uma unidade de trabalho dentro dela (com início, fim e tags). O traceId
correlaciona logs, métricas e traces.
Micrometer / OpenTelemetry — Micrometer: fachada de métricas usada pelo Actuator (expõe ao Prometheus); OpenTelemetry: padrão aberto de traces, métricas e logs.
RestClient — cliente HTTP fluente do Spring (substituto recomendado do RestTemplate)
para consumir APIs externas, com timeouts, headers e tratamento de erro por onStatus.
Spring Authorization Server / Keycloak — servidores de autorização OAuth2/OIDC que autenticam usuários e emitem tokens (access e refresh) para clientes e APIs.
Kafka: partições, consumer group e offset — tópicos são divididos em partições (cada uma
mantém a ordem; mensagens distribuídas por chave ou round-robin); consumidores de um grupo
dividem as partições; o offset é a posição já processada e pode ser confirmado
manualmente (ack.acknowledge()).
Auditoria JPA (@CreatedBy, @CreatedDate, @LastModifiedBy, @LastModifiedDate) —
anotações do Spring Data que preenchem automaticamente quem criou/alterou o registro e quando;
o autor vem de uma implementação de AuditorAware. Hibernate Envers guarda o histórico completo.
Internacionalização (i18n) / MessageSource / Locale — suporte a vários idiomas: textos
externalizados em messages_*.properties, resolvidos pelo MessageSource conforme o Locale
(idioma/país) da requisição.
GraphQL (schema, query, mutation, resolver) — linguagem de consulta em que o cliente
escolhe os campos; o schema (SDL) é o contrato; query lê dados, mutation altera; o resolver
(@QueryMapping) busca os dados. Evita overfetching e underfetching.
gRPC / Protocol Buffers — framework de RPC de alta performance sobre HTTP/2 com mensagens
binárias (protobuf) definidas em .proto; suporta streaming (unary, server, client,
bidirecional); muito usado entre microsserviços.
Flyway / migração de banco — ferramenta que versiona o esquema com scripts SQL
(V1__descricao.sql) executados uma única vez, na ordem, e registrados em
flyway_schema_history; o rollback deve ser planejado com scripts de undo.
Feature flag (feature toggle) — chave de configuração que liga/desliga uma funcionalidade em tempo de execução, sem novo deploy; viabiliza rollout gradual, testes A/B e desativação rápida em incidentes.
Arquitetura hexagonal (portas e adaptadores) — isola o domínio por meio de portas (interfaces de entrada e saída) implementadas por adaptadores (controllers, repositórios, APIs externas); a infraestrutura é substituível sem afetar o domínio.
API Gateway (Spring Cloud Gateway) — entrada única para os serviços: roteamento, autenticação, rate limit (ex.: Token Bucket) e observabilidade centralizados.
Rate limit / Token Bucket — limitação do número de requisições por cliente; no Token Bucket, tokens são repostos a uma taxa fixa e cada requisição consome um token.
Service discovery / heartbeat / client-side load balancing — registro (Eureka, Consul) onde
os serviços se anunciam e renovam periodicamente (heartbeat); o cliente consulta pelo nome
lógico e balanceia (@LoadBalanced, Round Robin) entre as instâncias saudáveis.
Spring Cloud Config (Config Server) — servidor central de configuração, geralmente
apoiado em Git, de onde as aplicações buscam suas propriedades por aplicação e perfil;
permite atualizar sem redeploy (/actuator/refresh, Spring Cloud Bus).
Saga (transações distribuídas) e compensação — padrão que divide uma transação distribuída em passos locais; se um falhar, executam-se compensações (ações inversas, idempotentes) dos passos já concluídos. Pode ser orquestrada ou coreografada. Garante consistência eventual. Ver Spring.
Consistência eventual — modelo em que os dados de serviços distintos podem ficar temporariamente divergentes, mas convergem a um estado consistente por meio de eventos e compensações, em vez de uma transação ACID única.
Idempotência / Idempotency-Key — propriedade de uma operação poder ser repetida sem
efeitos colaterais duplicados; implementada com uma chave única por operação enviada no
cabeçalho Idempotency-Key. Essencial em pagamentos e reenvios.
Rate limiting / HTTP 429 — limitação de requisições por usuário em uma janela de tempo
(Token Bucket, Fixed Window); ao exceder, a API responde 429 Too Many Requests, com
Retry-After.
Webhook e assinatura HMAC — notificação HTTP enviada por um sistema externo a um endpoint seu quando um evento ocorre; a autenticidade é verificada recalculando o HMAC do corpo com uma chave secreta compartilhada e comparando com o cabeçalho de assinatura.
Polling — consultas repetidas a um serviço para saber se algo mudou; o webhook o evita.
Spring Batch (Job, Step, Chunk) — framework de processamento em lote: o Job contém Steps; no modelo por chunk, cada bloco é lido (reader), processado (processor) e escrito (writer) em uma transação própria.
AOT / GraalVM Native Image — compilação antecipada que gera um executável nativo da aplicação (sem JVM), com inicialização rápida e menor consumo de memória, ao custo de restrições a reflexão e builds mais lentos.
Escalabilidade horizontal, stateless e auto scaling — crescer adicionando instâncias idênticas atrás de um load balancer; a aplicação não guarda estado local (sessão em Redis via Spring Session); o auto scaling (ex.: Kubernetes HPA) ajusta o número de instâncias pela demanda.
HashiCorp Vault / rotação de segredos — gerenciador de segredos com controle de acesso por políticas e fornecimento dinâmico; a rotação periódica e automática reduz o risco de segredos vazados de longa duração.
Observabilidade (logs, métricas, traces) — capacidade de entender o comportamento da aplicação em tempo real: logs dizem o que aconteceu, métricas como está agora e traces por que aconteceu; alertas e dashboards (Prometheus, Grafana) fecham o ciclo.
SLA / SLO — SLA (Service Level Agreement): acordo formal de nível de serviço; SLO (Service Level Objective): meta interna mensurável (ex.: 99,9% de disponibilidade) usada para acompanhar o SLA.
CVE / CVSS — CVE (Common Vulnerabilities and Exposures): identificador público de uma vulnerabilidade conhecida; CVSS: pontuação de severidade (0–10) usada para priorizar a correção.
Dependência transitiva — dependência de uma dependência sua, trazida indiretamente;
pode conter vulnerabilidades e conflitos de versão (inspecione com dependency:tree).
OWASP Dependency-Check / Dependabot / Renovate — ferramentas que analisam as dependências em busca de vulnerabilidades (Dependency-Check) ou abrem atualizações automáticas (Dependabot, Renovate).
Breaking change — mudança que quebra clientes existentes (remover campo, alterar contrato); evita-se com versionamento, compatibilidade retroativa e depreciação gradual.
Teste de contrato — teste que verifica se produtor e consumidor de uma API continuam cumprindo o contrato acordado, garantindo compatibilidade.
Canary release — liberação gradual de uma nova versão para parte dos usuários (ex.: 5% → 25% → 50% → 100%) enquanto se monitoram métricas, com rollback rápido.
Cache-Aside / Write-Through / Write-Behind — padrões de cache: Cache-Aside lê do cache e, se não encontrar, busca no banco e o armazena; Write-Through grava cache e banco juntos; Write-Behind grava no cache e persiste no banco de forma assíncrona.
Headers de segurança (CSP, HSTS, X-Frame-Options) — cabeçalhos HTTP que protegem o navegador: CSP restringe as origens de conteúdo; HSTS força HTTPS; X-Frame-Options evita clickjacking.
Strangler Fig — estratégia de migração incremental em que o sistema legado é substituído aos poucos por novos módulos até poder ser desligado.
Modular monolith (monólito modular) — aplicação única dividida em módulos coesos, com limites claros e baixo acoplamento, como alternativa intermediária aos microsserviços.
Troubleshooting (causa raiz) — diagnóstico estruturado de problemas: reproduzir, ler o stack trace de baixo para cima (Caused by), analisar evidências, perguntar "por quê?" até a causa raiz e validar a correção com testes.
MFA (autenticação multifator) — exige mais de um fator de verificação (senha + código de aplicativo, por exemplo), reduzindo o risco de contas comprometidas.
Smoke test — teste rápido e superficial que verifica se as funções essenciais estão de pé após um deploy (ex.: a aplicação sobe e responde ao health check).
Consumer-Driven Contracts (Pact) — abordagem de testes de contrato em que o consumidor da API define o que espera e o produtor é verificado contra esse contrato (ferramenta Pact).
Pirâmide de testes — guia de proporção: muitos testes unitários na base, poucos de integração no meio e pouquíssimos end-to-end no topo; equilibra custo, velocidade e valor.
@DataJpaTest / @WebMvcTest — anotações do Spring Boot Test que carregam só uma fatia
do contexto: a camada de persistência (JPA) ou a camada web (controllers), tornando o teste
mais rápido que o @SpringBootTest.
Mockito (@Mock, @InjectMocks) — biblioteca de mocks para testes unitários: @Mock
cria a dependência falsa e @InjectMocks a injeta na classe sob teste.
RF e RNF (requisitos funcionais e não funcionais) — RF descreve o que o sistema faz (ex.: cadastrar clientes); RNF descreve uma qualidade (ex.: responder em até 2 s). Ver Requisitos.
Histórias de usuário — descrição curta de uma necessidade no formato "Como um [usuário], quero [ação] para [benefício]".
Associação, agregação e composição — relações "tem-um" entre objetos, distintas pelo ciclo de vida: associação (um objeto conhece/usa outro), agregação (a parte existe sem o todo), composição (a parte pertence ao todo e acompanha seu ciclo de vida). Ver Orientação a Objetos.
Relação é-um x tem-um — "é-um" (is-a) é a herança (Gerente é um Funcionário); "tem-um" (has-a) é a composição/associação (Pedido tem itens). Prefira tem-um sempre que possível.
Cópia defensiva — devolver ou guardar uma cópia (ex.: List.copyOf) de uma coleção interna para que código externo não a altere e quebre as invariantes do objeto.
View — tabela virtual baseada em uma consulta (CREATE VIEW); não guarda dados e reflete sempre os dados atuais das tabelas de origem; simplifica consultas e pode restringir colunas visíveis. Ver SQL.
Índice (banco de dados) — estrutura auxiliar que acelera a localização de dados sem varrer a tabela inteira; acelera leituras e deixa INSERT/UPDATE/DELETE um pouco mais lentos.
EXPLAIN (plano de execução) — comando que mostra o caminho planejado pelo banco para executar uma consulta (tabelas, índices, filtros, custo); útil para achar consultas lentas e leituras completas (full scan).
Transação (BEGIN / COMMIT / ROLLBACK) — conjunto de operações tratado como uma unidade: COMMIT confirma tudo; ROLLBACK desfaz tudo.
ACID — propriedades de uma transação confiável: Atomicidade, Consistência, Isolamento e Durabilidade.
SQL injection — falha em que texto do usuário concatenado ao comando SQL altera a consulta, expondo, alterando ou excluindo dados. Prevenção: prepared statements, validação de entrada e conta de aplicação com poucos privilégios.
Prepared statement (consulta parametrizada) — consulta preparada com marcadores (?) cujos valores são enviados separados da estrutura do comando, de modo que a entrada nunca seja interpretada como SQL.
Formas normais (1FN, 2FN, 3FN) — regras progressivas de normalização: 1FN, valores atômicos e chave primária; 2FN, cada dado depende da chave completa; 3FN, sem dependência entre colunas não-chave. Ver Modelagem de Dados.
NoSQL — família de bancos não relacionais (documentos, chave-valor, colunas, grafos, séries temporais, busca textual), pensados para flexibilidade e escala. Ver NoSQL.
Teorema CAP — em um sistema distribuído, durante uma partição de rede não é possível garantir ao mesmo tempo Consistência, Disponibilidade e Tolerância a partição; na prática escolhe-se entre consistência e disponibilidade.
Consistência eventual — após uma atualização, as réplicas podem demorar a refletir o novo dado, mas convergem para o mesmo valor se não houver novas mudanças.
OLTP x OLAP — OLTP: processamento transacional do dia a dia (operações curtas, dados atuais); OLAP: processamento analítico (consultas complexas sobre histórico). Ver Data Warehouse.
Data Warehouse — repositório central de dados históricos de várias fontes, organizado para análise e relatórios, e não para transações.
ETL / ELT — Extract, Transform, Load: extrai, transforma e carrega os dados; no ELT, carrega-se primeiro e transforma-se no destino (comum em nuvem).
Data Lake / data swamp — repositório de dados brutos e variados com estrutura aplicada na leitura (schema on read); sem governança vira data swamp, difícil de usar.
Modelagem dimensional (fato, dimensão, grão) — organização de dados analíticos: tabela fato guarda métricas e eventos; dimensões dão o contexto (cliente, produto, data); grão é o nível de detalhe de cada linha.
Esquema estrela x floco de neve — estrela: fato central ligada diretamente às dimensões (consultas simples e rápidas); floco de neve: dimensões normalizadas em tabelas menores (menos repetição, mais JOINs).
Governança de dados — políticas, papéis e controles (responsáveis, catálogo, acesso, ciclo de vida) para usar e proteger dados de forma responsável.
LGPD — Lei Geral de Proteção de Dados: regras brasileiras para coleta, uso, guarda e compartilhamento de dados pessoais; exige finalidade clara, base legal, minimização e respeito aos direitos do titular. Ver Administração e Operação de Banco.
Dado pessoal x dado sensível — pessoal: identifica ou pode identificar alguém (nome, CPF, e-mail); sensível: exige proteção maior (saúde, biometria, religião, origem racial).
Bases legais (LGPD) — justificativas legais para tratar um dado pessoal: consentimento, contrato, obrigação legal, legítimo interesse, entre outras.
Anonimização x pseudonimização — anonimização remove identificadores de forma que a pessoa não seja razoavelmente identificável; pseudonimização troca a identidade por um código, mas pode existir uma chave de reidentificação.
RTO e RPO — RTO (Recovery Time Objective): tempo máximo de parada aceitável; RPO (Recovery Point Objective): quantidade máxima de dado que se aceita perder.
Backup completo, incremental e diferencial — completo: cópia de tudo; incremental: só o que mudou desde o último backup; diferencial: o que mudou desde o último completo. Um backup só é confiável com restauração testada.
Replicação — manutenção de cópias sincronizadas do banco (principal e réplicas); escala leituras e ajuda na disponibilidade, mas não substitui backup.
Alta disponibilidade e failover — redundância e monitoramento para minimizar paradas; failover é a troca automática ou manual para um servidor de reserva; o split-brain ocorre quando dois servidores agem como principal.
Particionamento x sharding — particionamento divide uma tabela em partes (por faixa ou lista) no mesmo banco; sharding divide os dados entre bancos/servidores independentes por uma chave de shard.
Pool de conexões — conjunto de conexões prontas e reutilizáveis ao banco, que evita abrir uma conexão nova a cada requisição.
Cache hit / cache miss — hit: o dado está no cache (resposta rápida); miss: não está, busca-se no banco e salva-se no cache.
Runbook — guia prático com procedimentos passo a passo para tarefas e incidentes recorrentes, com validações e plano de retorno.
Pós-mortem (blameless) — análise após um incidente (linha do tempo, causa raiz, impacto, ações) feita sem culpa individual, focada no processo.
Health check (banco) — verificação rápida da saúde do banco: conexão, recursos, desempenho, replicação e backup.
Scanner (Java) — classe de java.util que lê valores digitados (System.in); após nextInt/nextDouble sobra uma quebra de linha que exige um nextLine() extra antes de ler texto.
Arrays (utilitários) — classe java.util.Arrays com sort, binarySearch (exige array ordenado), copyOf e toString.
switch como expressão — forma com setas (case 1 -> ..., Java 14+) que produz um valor, dispensa break, aceita vários rótulos por caso e usa yield em blocos.
enum (Java) — conjunto fechado de constantes (instâncias) que pode ter atributos, construtor e métodos; preferível a Strings soltas.
record (Java 16+) — classe imutável de dados que gera automaticamente construtor, acessores (x()), equals, hashCode e toString.
Optional — contêiner que explicita a possível ausência de um valor (map, orElse, ifPresent, orElseThrow); indicado como retorno de método.
Collectors.groupingBy — coletor de Stream que agrupa elementos por uma chave, opcionalmente aplicando outro coletor (counting, joining).
Referência de método (::) — forma enxuta de lambda que aponta para um método existente (System.out::println, String::toUpperCase, Classe::new).
Path e Files — API java.nio.file para caminhos e operações simples com arquivos (readString, writeString, readAllLines); lança IOException.
JDBC (Java Database Connectivity) — API padrão do Java (java.sql) para acessar bancos relacionais; cada banco fornece um driver (ex.: MySQL Connector/J). Peças: Connection, Statement/PreparedStatement, ResultSet, SQLException. Ver Acesso a Dados com Java.
URL JDBC — endereço do banco no formato jdbc:mysql://host:porta/banco (porta padrão do MySQL: 3306).
ResultSet — resultado de um SELECT em JDBC; percorre-se com next() e leem-se colunas com getInt, getString etc.
DAO (Data Access Object) — padrão que encapsula o SQL e a comunicação com o banco em uma classe/interface própria, isolando o acesso a dados da lógica de negócio.
DataSource / pool de conexões / HikariCP — DataSource é a fábrica padronizada de conexões; o pool mantém conexões prontas e reutilizáveis (close() devolve ao pool); HikariCP é o pool mais usado em Java.
Savepoint — ponto dentro de uma transação JDBC ao qual se pode voltar com rollback(sp), desfazendo apenas parte do trabalho.
Batch (lote) em JDBC — addBatch() acumula comandos e executeBatch() envia todos de uma vez, reduzindo as idas ao banco; no MySQL, rewriteBatchedStatements=true otimiza inserts.
Stored procedure / CallableStatement — rotina SQL armazenada no servidor de banco; em Java é chamada com prepareCall("{call nome(?)}"), com parâmetros IN/OUT.
ORM (Object-Relational Mapping) — mapeamento de classes para tabelas, objetos para linhas e atributos para colunas.
JPA (Jakarta Persistence API) e Hibernate — JPA é a especificação Java de persistência; Hibernate é a implementação mais usada (gera o SQL e usa JDBC por baixo).
EntityManager / EntityManagerFactory — EntityManagerFactory (cara, criada uma vez) cria EntityManagers, a interface central da JPA para persistir, buscar, atualizar, remover e consultar entidades.
Estados de uma entidade JPA — transient (nova), managed (gerenciada), detached (desanexada) e removed (removida); mudanças em entidades gerenciadas são sincronizadas no commit (dirty checking).
JPQL — linguagem de consulta da JPA que usa nomes de entidades e atributos (não tabelas); aceita parâmetros nomeados, JOIN FETCH, agregações e @NamedQuery.
Lock otimista x pessimista — otimista: campo @Version detecta alteração concorrente (OptimisticLockException), bom quando colisões são raras; pessimista: bloqueia o registro no banco (PESSIMISTIC_WRITE).
Problema N+1 — uma consulta para listar N itens mais uma consulta extra por item ao acessar relacionamentos LAZY; resolve-se com JOIN FETCH, @EntityGraph, DTOs, paginação ou batch fetching.
Exclusão lógica (soft delete) — marcar o registro como inativo (ativo = false) em vez de removê-lo, preservando histórico e relações.
@MappedSuperclass — classe base cujos campos (ex.: auditoria) são herdados pelas entidades sem ser uma tabela própria.
Testcontainers — biblioteca que sobe contêineres Docker (ex.: MySQL real) durante os testes de integração.
Heap / stack / Garbage Collector (GC) — heap: memória dos objetos (-Xms/-Xmx); stack: pilha de cada thread com um quadro por chamada (-Xss); GC: libera automaticamente objetos sem referências (padrão atual: G1).
JIT (Just-In-Time) — compilador da JVM que converte o bytecode em código nativo durante a execução, otimizando os métodos mais usados.
JFR (Java Flight Recorder) — ferramenta da JVM de coleta contínua de eventos com baixo overhead, analisada no JDK Mission Control.
GraalVM / Native Image — JVM de alto desempenho cujo native-image compila a aplicação antecipadamente (AOT) em um executável nativo, com inicialização muito rápida e menos memória (reflection exige configuração).
Thread virtual (Project Loom) — thread leve gerenciada pela JVM (Java 21), que permite milhares de tarefas bloqueantes sem consumir threads do sistema operacional.
Concorrência estruturada (StructuredTaskScope) — trata um grupo de subtarefas como uma unidade, cancelando as restantes quando uma falha ou termina.
sealed / permits — classes ou interfaces seladas restringem quais tipos podem estendê-las, permitindo switch exaustivo.
Pattern matching — instanceof e switch com padrões de tipo (e guardas when) que eliminam casts e cadeias de if.
Programação reativa / backpressure / Mono e Flux — modelo de fluxos assíncronos não bloqueantes em que o consumidor controla o ritmo (backpressure); Mono emite 0-1 elementos e Flux, 0-N (Project Reactor, base do Spring WebFlux).
ConcurrentHashMap — Map thread-safe de alto desempenho com bloqueio granular e operações atômicas (putIfAbsent, compute, merge).
NIO.2 (Path/Files/WatchService) — API moderna de arquivos do Java 7+; WatchService monitora mudanças em diretórios.
HMAC — hash com chave secreta que garante integridade e autenticidade (usado, por exemplo, em JWT).
Jakarta EE — conjunto de especificações corporativas do Java (Servlet, CDI, JAX-RS, JPA, EJB...), sucessor do Java EE, com pacotes jakarta.*.
Strangler Fig — estratégia de migração de legado que constrói o sistema novo ao redor do antigo, redirecionando funcionalidades aos poucos até desligar o legado.
Teste de caracterização — teste que captura o comportamento atual de um código legado antes de refatorá-lo.
At-most-once / at-least-once / exactly-once — semânticas de entrega de mensagens: no máximo uma (pode perder), pelo menos uma (pode duplicar; exige consumidor idempotente) e exatamente uma (produtor idempotente + transações do Kafka).
ISR (In-Sync Replicas) e acks — ISR é o conjunto de réplicas Kafka em sincronia com o líder; acks=all só confirma a gravação depois que todas elas a receberem.
Log compaction (Kafka) — política de retenção que mantém só a última mensagem de cada chave, útil para guardar o estado atual.
Schema Registry — serviço que armazena os esquemas (Avro/Protobuf/JSON Schema) dos eventos e valida a compatibilidade entre versões.
DLQ (Dead Letter Queue) — fila/tópico que recebe as mensagens que esgotaram as tentativas de processamento, para análise e reprocessamento manual.
Transactional Outbox — padrão que grava o dado e o evento numa tabela outbox na mesma transação do banco; um relay (poller ou CDC/Debezium) publica depois no broker, evitando perda ou inconsistência.
Teste de contrato / Consumer-Driven Contract (Pact) — verifica que consumidor e provedor de uma API concordam sobre o formato das mensagens; no CDC, o consumidor define o contrato e o provedor o valida a cada build.
Teste de carga / estresse / spike / soak — testes de desempenho: volume esperado, limite do sistema, pico súbito e estabilidade por horas.
Percentil (p95/p99) — valor abaixo do qual ficam 95%/99% das medições; mostra a cauda de latência que a média esconde.
SAST / DAST / SCA — análise estática do código, ataque dinâmico à aplicação em execução e busca de vulnerabilidades (CVEs) nas dependências.
SLI / SLO / SLA / error budget — indicador medido, meta interna, contrato com o cliente e o orçamento de falha permitido (100% − SLO).
OpenTelemetry (OTel) — padrão aberto e independente de fornecedor para gerar e coletar métricas, logs e traces.
Métricas RED / USE / quatro sinais de ouro — RED (taxa, erros, duração) para serviços; USE (utilização, saturação, erros) para recursos; sinais de ouro: latência, tráfego, erros e saturação.
Runbook / postmortem blameless / MTTR — guia passo a passo para resolver um problema conhecido; análise pós-incidente sem busca de culpados; tempo médio para recuperação.
Chaos Engineering — injeção controlada de falhas para descobrir fraquezas antes dos clientes.
RTO / RPO — tempo máximo aceitável para voltar a operar e quantidade máxima de dados que se admite perder, medida em tempo.
Platform engineering / golden path — time que oferece uma plataforma interna de autoatendimento; o golden path é o caminho padrão e pré-configurado para criar e publicar serviços.
Criteria API / Specification — formas de montar consultas JPA por código (tipadas) e de compor filtros reutilizáveis (and/or) no Spring Data; úteis para filtros dinâmicos.
Projeção (JPA/Spring Data) — consulta que devolve só algumas colunas, via interface ou DTO, sem carregar a entidade completa.
Cache de 1º e 2º nível (Hibernate) — 1º nível: do EntityManager, sempre ativo; 2º nível: compartilhado entre sessões, indicado para dados lidos com frequência e raramente alterados.
Spring WebFlux / WebClient / R2DBC — stack web reativa e não bloqueante do Spring, seu cliente HTTP reativo e o acesso reativo a bancos SQL.
WebSocket / STOMP / Server-Sent Events — comunicação bidirecional persistente sobre TCP; STOMP é um protocolo de mensagens sobre WebSocket; SSE é o fluxo unidirecional servidor → cliente sobre HTTP.
Elasticsearch — mecanismo distribuído de busca e análise baseado em índice invertido, usado como índice de leitura para busca textual e logs.
Dívida técnica — custo futuro das escolhas rápidas ou ruins no código; gera "juros" em forma de lentidão e risco a cada mudança, até ser paga com refatoração.
SemVer (versionamento semântico) — MAJOR.MINOR.PATCH: major quebra compatibilidade, minor adiciona funcionalidade compatível, patch corrige defeitos.
Blue-green / canary / rolling deployment — estratégias de implantação: troca entre dois ambientes, liberação gradual para uma fração dos usuários e atualização instância por instância.
Conventional Commits / Trunk-based development / Git Flow — padrão de mensagens de commit; integração diária em um único ramo; modelo de ramos com develop, release e hotfix.
Definition of Done (DoD) — acordo da equipe sobre o que significa "pronto" para uma entrega.
ADR (Architecture Decision Record) — documento curto e versionado que registra uma decisão de arquitetura: contexto, alternativas, decisão e consequências.
Expand and contract — padrão de migração de banco sem parada: adicionar o novo (expandir), migrar os dados e só depois remover o antigo (contrair).
BOM (Bill of Materials) — lista central de versões compatíveis de dependências, usada para evitar conflitos.
Go (Golang) — linguagem compilada, de tipagem estática e com coletor de lixo, criada no Google (2007; pública em 2009) para servidores e ferramentas de infraestrutura: binário único, compilação rápida e concorrência nativa.
Módulo Go (go.mod) — unidade de versionamento e dependências de um projeto Go, descrita pelo arquivo go.mod; substituiu o antigo GOPATH.
Zero value — valor padrão que Go atribui a uma variável não inicializada: 0, "", false ou nil, conforme o tipo.
Slice (Go) — visão dinâmica sobre um array, com ponteiro, tamanho (len) e capacidade (cap); fatiar compartilha o mesmo array, e append aloca outro quando a capacidade acaba.
Identificador vazio (_) — em Go, descarta um valor retornado que não será usado (variáveis não usadas são erro de compilação).
Receptor (Go) — o objeto sobre o qual um método é definido (func (p *Pilha) Empilhar(...)); por valor (cópia) ou por ponteiro (altera o original).
Interface implícita (duck typing em Go) — um tipo satisfaz uma interface apenas por ter os métodos exigidos, sem declarar implements; verificado em tempo de compilação.
defer — adia uma chamada até o momento em que a função retorna; forma idiomática de liberar recursos (defer f.Close()).
Goroutine — tarefa extremamente leve gerenciada pelo runtime do Go e iniciada com go f().
Channel (Go) — canal tipado para comunicação e sincronização entre goroutines (c <- v envia, v := <-c recebe); pode ter buffer e ser fechado com close.
select (Go) — comando que espera por vários channels ao mesmo tempo e executa o caso que ficar pronto primeiro; usado também para timeouts com time.After.
sync.WaitGroup — contador do pacote sync usado para esperar que um conjunto de goroutines termine (Add, Done, Wait).
Struct tag — anotação em um campo de struct (`json:"id"`) que controla, por exemplo, o nome do campo na serialização JSON.
Race condition (condição de corrida) — acesso concorrente a dados compartilhados sem sincronização, com resultado imprevisível; em Go detecta-se com go test -race e evita-se com sync.Mutex ou channels.
Python — linguagem de propósito geral, de tipagem dinâmica e forte, orientada a objetos e conhecida pela legibilidade (indentação obrigatória); o CPython compila o código para bytecode e o executa em uma máquina virtual.
PEP (Python Enhancement Proposal) — proposta de melhoria da linguagem Python; a PEP 8 é o guia de estilo e a PEP 20 resume a filosofia ("Zen do Python").
Bytecode (.pyc) / PVM — código intermediário gerado automaticamente pelo CPython (pasta __pycache__) e a Python Virtual Machine que o executa.
Traceback — rastro de pilha mostrado quando uma exceção não é tratada: a última linha traz o tipo e a mensagem do erro e as anteriores, a sequência de chamadas.
== x is (Python) — == compara o conteúdo de dois objetos; is compara a identidade (se são o mesmo objeto na memória).
Truthy / falsy — valores que se comportam como verdadeiro ou falso em condições: são falsos 0, '', [], {}, set(), None e False.
List comprehension — sintaxe concisa para criar listas a partir de um iterável ([n for n in range(10) if n % 2 == 0]).
*args e **kwargs — empacotam, em uma função, os argumentos posicionais extras (em tupla) e os nomeados extras (em dicionário); com */** na chamada, desempacotam sequências e dicionários.
__name__ == '__main__' — teste que só executa o bloco quando o arquivo é rodado diretamente, e não quando é importado como módulo.
with (gerenciador de contexto) — comando que garante a liberação de um recurso (como fechar um arquivo) mesmo se ocorrer erro no bloco.
self / __init__ / __new__ — self é a referência à instância; __init__ inicializa o objeto; __new__ é quem realmente o cria.
Name mangling (__atributo) — mecanismo que renomeia __x para _Classe__x para evitar colisões entre classes; não torna o atributo realmente privado.
@property — decorator que transforma um método em atributo calculado (getter), com @x.setter para validar a escrita.
Decorator (Python) — função que recebe outra função e devolve uma versão modificada dela (@property, @classmethod, @staticmethod).
@classmethod x @staticmethod — o primeiro recebe a classe (cls) e respeita herança; o segundo não recebe nenhum argumento especial e é só uma função dentro da classe.
__slots__ — declara os atributos permitidos de uma classe e elimina o __dict__ de cada instância, economizando memória.
Métodos mágicos (dunder) — métodos como __str__, __repr__, __eq__, __add__ e __len__, chamados pelo interpretador para que objetos se comportem como tipos nativos.
MRO (Method Resolution Order) — ordem em que o Python procura um método em hierarquias com herança múltipla (consulta-se com Classe.mro()); resolve o problema do diamante.
Mix-in — classe que só acrescenta funcionalidade opcional a outras via herança múltipla, sem ser usada sozinha.
ABC (Abstract Base Class) e subclasse virtual — classe abstrata do módulo abc que não pode ser instanciada e obriga subclasses a implementar os métodos @abstractmethod; register() declara uma classe como implementação sem herdar dela.
EAFP x LBYL — "mais fácil pedir perdão que permissão" (assumir e tratar a exceção, estilo pitônico) versus "olhe antes de pular" (testar antes com if/hasattr).
collections (defaultdict, Counter, deque, namedtuple) — módulo com estruturas de dados alternativas: dicionário com valor padrão, contador de ocorrências, fila de duas pontas e tupla imutável com campos nomeados.
dataclass — decorator que gera automaticamente __init__, __repr__ e __eq__ para classes que só guardam dados.
Kernel (núcleo) / distribuição Linux / GNU/Linux — kernel é a ponte entre aplicativos e hardware (Linux, de Linus Torvalds, 1991); distribuição empacota o kernel com programas e gerenciador de pacotes (Debian, Ubuntu...); GNU/Linux nomeia o kernel somado às ferramentas GNU.
Kernel monolítico x microkernel — no monolítico (Linux) rede, vídeo e sistemas de arquivos rodam no espaço do kernel, ampliados por módulos carregáveis; no microkernel só o mínimo roda ali e o resto fica no espaço do usuário.
Shell / bash — interpretador de comandos que faz a interface entre o usuário e o kernel; o bash é o shell padrão da maioria das distribuições.
root / sudo / su — root é o administrador com poder total; sudo executa um comando com privilégios de root conforme /etc/sudoers; su troca de usuário.
FHS (Filesystem Hierarchy Standard) — padrão da árvore de diretórios do Linux (/bin, /etc, /home, /var, /proc...), que garante compatibilidade entre distribuições.
Shebang (#!/bin/bash) — primeira linha de um script que indica qual interpretador o executa.
Netplan — configuração de rede em YAML do Ubuntu 20.04+ (/etc/netplan/*.yaml, aplicada com netplan apply).
Gerenciador de pacotes / dependências / repositório — ferramenta (apt, dpkg, snap, Flatpak) que instala e atualiza software, resolvendo as dependências a partir de repositórios.
Módulo do kernel (lsmod, modprobe) — pedaço de código que amplia o kernel sob demanda (drivers, sistemas de arquivos); só pode ser removido se nada depender dele.
Partição (primária, estendida, lógica) / sistema de arquivos — divisão do disco; no MBR são até 4 primárias (ou 3 + 1 estendida com várias lógicas); o sistema de arquivos (ext4, XFS, NTFS...) organiza os dados dentro dela.
Ponto de montagem / /etc/fstab — diretório pelo qual se acessa uma partição montada; o fstab lista as montagens automáticas no boot.
Swap — área de disco usada como extensão da memória RAM quando ela se esgota.
Quota de disco — limite de espaço por usuário ou grupo; o limite soft pode ser excedido por um período de graça, o hard é o teto absoluto.
RAID (0, 1, 5, 6, 10) / mdadm — conjunto redundante de discos independentes: striping (0), espelhamento (1), paridade distribuída (5), paridade dupla (6) e espelhos em striping (10); gerenciado por software com o mdadm. Não substitui backup.
LVM (PV, VG, LV) — gerenciador de volumes lógicos: volumes físicos formam um grupo de volumes, do qual se criam volumes lógicos redimensionáveis sem parar o sistema.
SSH / chaves assimétricas / scp — protocolo de acesso remoto criptografado (porta 22); par de chave pública (no servidor) e privada (com o usuário) dispensa senha; scp copia arquivos pelo SSH.
SFTP x FTP — SFTP transfere arquivos sobre o SSH, criptografado e em uma única porta; o FTP não criptografa e usa vários canais.
Hardening — conjunto de práticas para reduzir a superfície de ataque de um servidor (privilégios mínimos, SSH seguro, serviços desnecessários desativados, atualizações, auditoria).
NFS (Network File System) — compartilha diretórios entre máquinas Linux pela rede; root_squash retira os privilégios de root do cliente.
Samba / SMB / Active Directory — Samba implementa o protocolo SMB do Windows e, na versão 4, pode ser controlador de domínio compatível com o Active Directory.
Pilha LAMP — Linux, Apache, MySQL e PHP: conjunto clássico para hospedar aplicações web.
Proxy / Squid / ACL — proxy é um intermediário que filtra o acesso e faz cache; o Squid usa ACLs (listas de controle de acesso) avaliadas em ordem.
Full-cycle developer (desenvolvedor de ciclo completo) — profissional ou time responsável por todo o ciclo de vida do software: desenho, desenvolvimento, teste, implantação, operação e suporte ("você constrói, você opera").
Tech Lead / Arquiteto de software — líder técnico do time (arquitetura voltada ao negócio, apoio a todos os níveis, práticas e pessoas) / responsável pelo desenho geral da arquitetura e pela escolha de ferramentas considerando custo e impacto.
Soft skills x hard skills — habilidades interpessoais (comunicação, colaboração, feedback, gestão do tempo) x habilidades técnicas.
Pomodoro — técnica de estudo/foco em blocos de 25 minutos com 5 de pausa, e pausa maior a cada quatro ciclos.
Rubber duck debugging — técnica de explicar o problema (ou conceito) em voz alta, linha a linha, a um objeto (como um pato de borracha) para organizar o raciocínio e revelar lacunas.
POC (Proof of Concept) — prova de conceito: implementação pequena e rápida para validar uma ideia ou tecnologia.
Burnout — síndrome de esgotamento profissional (OMS: fenômeno ocupacional por estresse crônico não gerenciado), marcada por exaustão, distanciamento/cinismo e redução da eficácia.
Cultura do erro — ambiente em que errar é tratado como aprendizado (sem punição ou vergonha), o que estimula experimentação e compartilhamento de falhas.
Live coding / take-home / system design (entrevistas) — resolver código em tempo real explicando o raciocínio; projeto prático entregue em um prazo (em geral por pull request); desenhar a arquitetura de um sistema avaliando escala, desempenho, segurança e confiabilidade.
Big O — notação que descreve como o tempo ou o espaço de um algoritmo cresce com o tamanho da entrada.
Extreme Programming (XP) — metodologia ágil de Kent Beck, baseada em comunicação, simplicidade, feedback e coragem, com práticas de engenharia como programação em par, TDD e refatoração contínua.
Code review / pull request — revisão do código por outra pessoa antes do merge; o pull request é a proposta de mesclar um branch em outro, com as diferenças abertas à discussão.
MLOps — práticas para testar, implantar, monitorar e automatizar modelos de machine learning em pipelines, unindo ciência de dados e operações.
DevOps — cultura e conjunto de práticas que aproximam desenvolvimento e operação: automação, gerência de configuração, monitoração e entrega contínua.
Infraestrutura como código (IaC) — descrever máquinas, redes e configurações em arquivos versionáveis e aplicá-los por ferramentas (Ansible, Terraform, Vagrant, Docker), em vez de configurar servidores manualmente.
Idempotência — propriedade em que aplicar a mesma operação várias vezes dá o mesmo resultado que aplicá-la uma; em gerência de configuração, o módulo descreve o estado desejado e só age se o estado atual for diferente (na 2ª execução do playbook, changed=0).
Vagrant / Vagrantfile / box — ferramenta que cria e gerencia máquinas virtuais descritas em um Vagrantfile; a box é a imagem base e o provisionador (shell, Ansible...) configura a máquina depois de criada.
Ansible (playbook, inventory, role, módulo) — ferramenta de gerência de configuração sem agente, que usa YAML e SSH: o inventário lista máquinas e grupos, o playbook liga hosts a tarefas e roles, os módulos implementam o estado e os roles reúnem tarefas reutilizáveis.
Jinja2 / template — linguagem de templates ({{ variavel }}) usada pelo Ansible para gerar arquivos de configuração parametrizados.
Provisionamento — criar e configurar itens de infraestrutura e plataforma (máquinas, bancos, balanceadores) e instalar o sistema e a aplicação sobre eles.
Proxy reverso — servidor (ex.: nginx) que recebe as conexões dos usuários e as repassa a servidores de aplicação internos, podendo também balancear carga e fazer cache.
Blue/green deploy — manter duas estruturas idênticas e usar o balanceador como ponto de troca de tráfego, com rollback imediato.
Lock-in / building blocks — grau de dependência de um provedor de nuvem; unidades combináveis e comuns entre provedores (máquinas virtuais, balanceadores, volumes, imagens) que reduzem esse risco.
Probe (sonda) / Nagios — teste periódico de monitoração (ping, porta TCP, resposta HTTP, texto em log) executado por um servidor central, como no Nagios.
Série temporal (time series) — sequência de valores de uma métrica ao longo do tempo (requisições por segundo, uso de CPU), base dos bancos de métricas.
APM / RUM — monitoração de desempenho da aplicação (tempos por camada, métodos que mais consomem CPU) e monitoração de usuários reais nos navegadores.
Noisy neighbor — vizinho barulhento: máquinas virtuais que dividem o mesmo host disputam CPU e E/S, de modo que instâncias do mesmo tamanho podem ter desempenho diferente.
Namespaces / cgroups / OOM Killer — recursos do kernel Linux que isolam processos, rede e sistema de arquivos (namespaces), limitam seu consumo de CPU, memória e E/S (cgroups) e matam o maior processo de um grupo que estoura a memória (OOM Killer).
Apache Benchmark (ab) / Locust — ferramentas de teste de carga: o ab dispara requisições simultâneas e resume tempos e percentis; o Locust simula usuários com scripts em Python.
Angular — framework do Google para construir SPAs (e apps móveis/desktop) com HTML, CSS e TypeScript, baseado em componentes, injeção de dependência e módulos; o Angular 2+ foi reescrito do zero em relação ao AngularJS.
SPA (Single Page Application) — aplicação que carrega uma única página e troca templates no navegador, buscando só dados (JSON) no servidor.
TypeScript — superset de JavaScript com tipagem estática, compilado (transpilado) para JavaScript; é a linguagem do Angular.
ECMAScript / ES6 — especificação do JavaScript; o ES6 (2015) trouxe let/const, arrow functions, parâmetros padrão, destructuring, map/filter/reduce e classes.
Angular CLI (ng) — ferramenta de linha de comando que cria projetos e gera componentes, serviços e módulos (ng new, ng serve, ng generate, ng build, ng test).
Componente / template / decorador (Angular) — componente é uma classe @Component com template HTML e estilos; o decorador anexa metadados (selector, templateUrl, providers) à classe.
Data binding (interpolação, property, event, two-way) — ligação entre a classe e o template: {{ }}, [prop], (evento) e [(ngModel)].
Diretiva estrutural x de atributo — a estrutural altera a estrutura do DOM (*ngIf, *ngFor); a de atributo altera aparência ou comportamento (ngClass, ngStyle).
NgModule — módulo Angular que agrupa declarações, imports, providers, exports e o componente de bootstrap.
Serviço / injeção de dependência (Angular) — serviço é uma classe @Injectable com lógica fora dos componentes; o Angular injeta as instâncias que o construtor declara.
@Input / @Output / EventEmitter — passam dados do componente pai para o filho (@Input) e eventos do filho para o pai (@Output com EventEmitter).
Template-driven x reactive forms — formulários baseados em ngModel no template x formulários cujo modelo (FormGroup/FormControl) é criado na classe.
Lazy loading (rotas) — carregar um módulo só quando a rota correspondente é acessada, reduzindo o carregamento inicial.
Guarda de rota (CanActivate) — serviço que decide se uma rota pode ser ativada (ex.: redirecionar para o login se não há usuário autenticado).
Observable / Promise / RxJS — Observable representa um fluxo de valores assíncronos (pode emitir vários e ser cancelado); Promise resolve uma única vez; RxJS é a biblioteca de operadores sobre Observables.
Pipe (Angular) — transforma um valor para exibição no template (date, uppercase, async) ou é criado com @Pipe.
AOT / Ivy — compilação do Angular antes de o navegador receber o código (AOT) e o compilador/runtime reescrito que o torna mais rápido e menor (Ivy).
Firebase (Authentication, Firestore, Storage, Functions, Hosting) — plataforma de back-end como serviço do Google: login pronto, banco NoSQL de documentos, armazenamento de arquivos, funções acionadas por eventos e hospedagem de SPAs; os dados são protegidos por regras de segurança.
Standalone component / signals — recursos do Angular recente: componentes sem NgModule e estado reativo com detecção de mudanças mais fina.
Flutter — framework do Google para criar apps móveis, web e desktop a partir de uma única base de código em Dart, desenhando a interface com motor gráfico próprio.
Dart (JIT x AOT) — linguagem do Flutter, de tipagem estática; roda em JIT durante o desenvolvimento (permite o hot reload) e é compilada AOT para código nativo em produção.
Hot reload — recurso que injeta o código alterado no aplicativo em execução em segundos, preservando o estado.
Widget (stateless / stateful) — elemento declarativo e imutável da interface; o StatelessWidget não tem estado e o StatefulWidget guarda estado em uma classe State, atualizada com setState.
setState — avisa o Flutter de que o estado de um widget mudou, disparando nova construção da parte afetada da árvore.
Isolate / Future / Stream — unidade de execução do Dart sem memória compartilhada (comunica-se por mensagens), valor assíncrono futuro e fluxo de valores ao longo do tempo.
pub.dev / pubspec.yaml — repositório de pacotes Dart/Flutter e arquivo de configuração do projeto (dependências, assets, versão do SDK), em YAML.
Material Design / Scaffold / Navigator — sistema visual do Google, estrutura básica de tela (appBar, body, botão flutuante) e gerenciador de rotas em pilha.
FutureBuilder — widget que reconstrói a tela conforme o estado de um Future (carregando, erro, dados).
sqflite (SQLite) — pacote que leva o banco relacional SQLite ao Flutter para persistência local.
Null safety (Dart) — sistema de tipos em que valores não aceitam null a menos que declarados com ?.
Bala de prata (silver bullet) — metáfora para uma tecnologia que supostamente resolve qualquer problema; não existe, e a escolha deve ser feita pelos requisitos do projeto.
Liderança — capacidade de influenciar pessoas rumo a um objetivo comum; diferente de gestão (organizar recursos) e de empreendedorismo (criar um negócio novo).
Liderança formal x informal — a formal vem do cargo e do organograma (autoridade sobre recursos); a informal vem da influência espontânea (talento, ajuda aos colegas, confiança), sem cargo.
Ego-drive — impulso de persuadir e fazer os outros acreditarem na sua proposta; termo da área de vendas.
Prestígio ("conta corrente" de favores) — capital de confiança construído ao ajudar as pessoas, que gera crédito para pedir apoio e direcionar o grupo.
Princípio de Peter — tendência de promover alguém até o nível em que ele deixa de ser competente; ex.: bom técnico promovido a gerente sem preparo de liderança.
Efeito halo — generalizar uma boa impressão numa área para outras, supondo que quem é bom tecnicamente também lidera bem.
Bases do poder (talento, referência, autoridade, dinheiro) — as quatro fontes de influência de um líder segundo a fonte; geralmente combinadas.
Tipos de autoridade (identificação, sanções, legitimação, confiança) — motivos pelos quais as pessoas aceitam ordens: afinidade e reciprocidade, consequência pelo descumprimento, subordinação aceita ao entrar na empresa, e reputação comprovada.
Liderança autocrática / democrática / liberal (laissez-faire) — estilos clássicos: o líder decide sozinho; decide junto com o grupo; ou deixa o time decidir e só aponta o objetivo.
Liderança servidora — o líder serve ao time, escutando, removendo impedimentos e sustentando as relações; papel idealizado do Scrum Master.
Liderança situacional (Hersey e Blanchard) — o estilo (impor, vender, participar, delegar) varia conforme a maturidade funcional e emocional de quem é liderado.
Maturidade funcional x emocional — a funcional é experiência, conhecimento e capacidade de resolver problemas; a emocional é motivação, foco, comportamento no grupo, responsabilidade e autonomia.
Estágios de Tuckman (formação, tempestade, normatização, realização, dissolução) — as cinco fases pelas quais uma equipe nova costuma passar.
Dissonância cognitiva (Festinger) — desconforto quando o que se expressa ou faz não combina com o que se pensa ou sente.
Teorias X, Y e Z — premissas sobre o trabalhador: X (evita o trabalho, precisa de controle), Y (proativo, busca desafio), Z (compromisso de longo prazo com a empresa, modelo japonês de Ouchi).
Estrutura funcional x por projeto x matricial — organização por departamentos com gerentes funcionais; organização em torno do projeto com gerente de plena autoridade; e o meio-termo em que a autoridade é dividida.
Bloqueador de carreira — pessoa, situação, comportamento ou lacuna de habilidade que impede a ascensão profissional; pode ser o próprio indivíduo (autoboicote).
QI (quem indica) — contratação ou promoção por relacionamento pessoal, e não por mérito.
Computação em nuvem (NIST) — modelo de acesso via rede, sob demanda, a recursos computacionais compartilhados e configuráveis, provisionados e liberados rapidamente com mínimo esforço de gerência.
CapEx x OpEx — despesa de capital (investimento antecipado em ativos, como um datacenter) x despesa operacional (gasto recorrente conforme o uso); a nuvem pública desloca o gasto de CapEx para OpEx.
TCO (custo total de propriedade) — soma de todos os custos de ter e operar uma infraestrutura (equipamentos, imóvel, energia, refrigeração, equipe, segurança), não só a compra.
Nuvem pública / privada / comunitária / híbrida — tipos de implantação: infraestrutura do provedor para qualquer cliente; de uma única organização; de um grupo de entidades; combinação de duas ou mais.
Região e zona de disponibilidade (AZ) — região é a presença do provedor numa localidade; AZ é um agrupamento de datacenters da região com energia, refrigeração e links redundantes. Multi-AZ elimina pontos únicos de falha.
Modelo de responsabilidade compartilhada — divisão das tarefas de gestão e segurança entre provedor e cliente, que muda conforme IaaS, PaaS ou SaaS; dados e acessos são sempre do cliente.
Lift and shift (rehosting) x cloud native — migrar a aplicação sem alterar a arquitetura x projetá-la para a nuvem (microsserviços, contêineres, serviços gerenciados, elasticidade).
Pay-per-use / instância reservada / spot — pagamento sob demanda sem compromisso; compromisso de 1 a 3 anos com desconto; capacidade ociosa barata que pode ser retomada pelo provedor.
Multicloud — uso de mais de um provedor de nuvem pública, por custo, disponibilidade, recuperação de desastres ou para reduzir lock-in.
IAM (Identity and Access Management) — serviço de identidades e permissões da nuvem: usuários, grupos e políticas.
Usuário root (conta raiz) — identidade inicial da conta de nuvem, com poder irrestrito; deve ser protegida e usada só em ações pontuais.
Privilégio mínimo — conceder somente as permissões estritamente necessárias para a tarefa.
Não repúdio (irretratabilidade) — garantia de que o autor de uma ação não pode negar que a executou, obtida com autenticação e registro de auditoria.
Par de chaves (SSH) — chave pública no servidor e chave privada com o administrador, usada no lugar de senha no acesso remoto a instâncias.
Tag (rótulo) — par chave-valor atribuído a um recurso de nuvem para identificar, filtrar, cobrar e operar em lote.
Imagem x snapshot — snapshot é a cópia de um volume num instante; imagem é um snapshot de sistema operacional homologado, usado como disco de boot para criar máquinas em minutos.
Armazenamento em blocos / arquivos / objetos — volume anexado a uma instância (como um disco); sistema de arquivos de rede compartilhado entre várias; buckets acessados por API HTTP com capacidade praticamente ilimitada.
Bucket e classes de armazenamento — contêiner de objetos com nome único; perfis de custo/desempenho (padrão, acesso infrequente, arquivo) que podem mudar ao longo do ciclo de vida do dado.
IOPS — operações de leitura e escrita por segundo que um volume suporta.
VPC (Virtual Private Cloud) — rede privada virtual isolada dentro do provedor, com blocos de endereços (CIDR), sub-redes e tabelas de rota.
Internet Gateway / NAT Gateway — saída e entrada bidirecional para a internet de sub-redes públicas; saída unidirecional de recursos privados por IP público compartilhado.
IP elástico (EIP) / IP virtual — IP público fixo movível entre instâncias; IP de serviço compartilhado por uma instância principal e outra em espera para failover.
VPN e conexão dedicada (Direct Connect) — túnel criptografado pela internet entre a nuvem e o ambiente do cliente; fibra dedicada de alta banda e baixa latência até o provedor.
VPC peering — conexão privada entre duas VPCs.
Grupo de segurança x ACL de rede — filtro de tráfego aplicado à instância (política fechada, regra de permissão) x aplicado à sub-rede inteira.
Serverless (computação orientada a eventos) — funções executadas em resposta a eventos, sem o cliente provisionar servidores; o provedor cuida de disponibilidade e escala.
Kubernetes gerenciado — cluster de orquestração de contêineres operado pelo provedor, com balanceamento, elasticidade e alta disponibilidade nativos.
Auto Scaling / elasticidade — adicionar ou remover instâncias automaticamente conforme métricas (como CPU), mantendo o custo proporcional ao uso.
Escala vertical x horizontal — aumentar o tamanho de um servidor x adicionar réplicas idênticas; a nuvem prioriza a horizontal.
Serviço totalmente gerenciado (ex.: banco gerenciado) — serviço em que o provedor cuida de instalação, patches, backup, alta disponibilidade e escala; o cliente só usa.
Read replica — réplica usada só para leitura, que alivia o banco principal.
KMS (gerência de chaves) — serviço que cria, guarda e controla chaves criptográficas usadas para proteger dados em repouso e em trânsito.
WAF (Web Application Firewall) — firewall que inspeciona HTTP/HTTPS e bloqueia ataques web comuns do ranking OWASP.
Anti-DDoS — serviço que mitiga ataques de negação de serviço distribuídos sem escalar a infraestrutura inutilmente.
HIPAA / PCI DSS / ISO 27001 — normas de proteção de dados de saúde, de dados de cartões de pagamento e de gestão de segurança da informação.
Tríade CID (CIA) — confidencialidade, integridade e disponibilidade, os três pilares da segurança da informação.
Estatística descritiva / probabilidade / inferência — os três ramos da estatística: resumir dados, medir a incerteza e generalizar da amostra para a população.
População x amostra (parâmetro x estatística) — todo o conjunto de interesse x subconjunto dele; valor calculado na população x calculado na amostra.
Média, mediana e moda — valor médio, valor central dos dados ordenados e valor mais frequente; a mediana e a moda são robustas a valores extremos.
Quartis e percentis — valores que dividem os dados ordenados em 4 ou 100 partes iguais; Q2 = P50 = mediana.
Variância, desvio padrão e coeficiente de variação — dispersão ao quadrado, dispersão na unidade dos dados e razão desvio/média (sem unidade, abaixo de ~25% indica homogeneidade).
Assimetria (skewness) — grau em que a distribuição se afasta da simetria; positiva tem cauda longa à direita.
Boxplot — gráfico que resume mediana, quartis e outliers.
Correlação (Pearson e Spearman) — medida de relação linear (−1 a +1) entre variáveis contínuas; Spearman usa postos, serve a ordinais.
Evento, espaço amostral e axiomas de Kolmogorov — subconjunto de resultados, conjunto de todos os resultados e as três regras básicas da probabilidade (0 ≤ P ≤ 1, P(S) = 1, aditividade para eventos exclusivos).
Probabilidade condicional, lei da probabilidade total e teorema de Bayes — P(A|B); soma de todos os caminhos até A; e inversão da condição, P(B|A) = P(A|B)·P(B)/P(A).
Variável aleatória — função que associa números aos resultados de um experimento; discreta (contável) ou contínua (intervalo).
Bernoulli, Binomial, Poisson, Uniforme, Exponencial e Normal — distribuições clássicas: uma tentativa; sucessos em n tentativas; ocorrências por intervalo; todos equiprováveis; tempo até um evento; curva em sino.
Regra empírica (68-95-99,7) e escore Z — percentual de valores a 1, 2 e 3 desvios da média numa normal; Z = (X − μ)/σ padroniza o valor.
Teorema central do limite (TCL) — a distribuição das médias amostrais tende a uma normal para n grande, qualquer que seja a distribuição original.
Amostragem (aleatória simples, sistemática, estratificada, por conglomerados) — técnicas probabilísticas de seleção de amostra; as não probabilísticas (conveniência, cotas, intencional, voluntária) não permitem medir o erro amostral.
Viés de seleção x erro de amostragem — distorção causada pelo método de seleção x variação natural do sorteio.
Bootstrap — reamostragem com reposição da própria amostra para estimar a variabilidade de uma estatística.
Intervalo de confiança (IC) — faixa de valores plausíveis para um parâmetro, com um nível de confiança (ex.: 95%).
Hipótese nula (H0) e alternativa (H1) — afirmação de ausência de efeito e a de existência do efeito esperado; o teste avalia se H0 pode ser rejeitada.
Erro tipo I (α) e tipo II (β) — rejeitar H0 verdadeira (falso positivo) e não rejeitar H0 falsa (falso negativo).
Nível de significância e p-valor — probabilidade máxima aceita de erro tipo I (em geral 5%); probabilidade de um resultado tão extremo sob H0 (p ≤ α → rejeita H0).
Testes paramétricos x não paramétricos — assumem distribuição conhecida (t, ANOVA) x não assumem (Mann-Whitney, Wilcoxon, Kruskal-Wallis).
Shapiro-Wilk, Kolmogorov-Smirnov e Levene — testes de normalidade e de homocedasticidade (igualdade de variâncias).
Homocedasticidade — variâncias semelhantes entre os grupos comparados, pressuposto de testes paramétricos.
Teste t, ANOVA e Tukey — comparação de médias de 2 grupos, de 3 ou mais grupos e comparação par a par após uma ANOVA significativa.
Tamanho do efeito (d de Cohen) — magnitude da diferença entre grupos, independente do tamanho da amostra (0,2 pequeno, 0,5 médio, 0,8 grande).
Experimentação contínua — avaliar com testes de hipótese se um modelo novo melhora o atual com significância estatística antes de implantá-lo.
Teorema "não existe almoço grátis" — nenhum algoritmo de aprendizado é superior a todos em todos os problemas.
Requisito não funcional (atributo de qualidade) — propriedade de quão bem o sistema funciona (desempenho, escalabilidade, confiabilidade, segurança...), em oposição ao que ele faz (requisitos funcionais).
Trade-off arquitetural — escolha em que melhorar um atributo piora outro (mais redundância melhora a disponibilidade e aumenta o custo).
Desempenho x escalabilidade x elasticidade — rapidez da resposta; capacidade de manter o desempenho com o crescimento da carga; capacidade de aumentar e diminuir recursos automaticamente conforme a demanda.
Escalabilidade vertical x horizontal — usar uma máquina maior x adicionar máquinas iguais atrás de um balanceador.
Cache — armazenamento temporário (geralmente em memória) do resultado de uma operação cara para evitar repeti-la; exige estratégia de invalidação.
Full table scan x índice — leitura da tabela inteira para achar um registro x busca direta por estrutura auxiliar (árvore) sobre uma coluna.
Complexidade O(n²) x O(n) — tempo de execução que cresce com o quadrado ou linearmente com a quantidade de dados.
Comunicação assíncrona (fila) — o serviço só enfileira a tarefa e responde; outro processo a executa depois, absorvendo picos e falhas.
CDN (Content Delivery Network) — rede de servidores distribuídos geograficamente que guarda cópias de conteúdo estático perto do usuário.
Disponibilidade e "noves" — fração do tempo em que o sistema opera normalmente (99,9% ≈ 8,8 horas de indisponibilidade por ano).
Timeout — prazo máximo de espera por uma operação externa (conexão, leitura, transmissão, obtenção de conexão do pool); evita travar threads e falhas em cascata.
Rate limiting (limitação de taxa) — limite de requisições por cliente em um período; ao exceder, responde HTTP 429.
Recuperabilidade — capacidade de restabelecer o serviço após falha; envolve backups, reinício automático e plano de contingência.
Backup completo / incremental / diferencial — cópia total; apenas o que mudou desde o último backup de qualquer tipo; apenas o que mudou desde o último completo.
Plano de contingência (runbook) — documento com cenários de falha, responsáveis, canais de comunicação e passos de recuperação.
Deployability e rollback — facilidade e segurança de implantar uma nova versão; voltar rapidamente à anterior em caso de problema.
Infraestrutura como código (IaC) — descrever a infraestrutura em arquivos versionados e executáveis (Terraform, SDKs) para criá-la de forma repetível.
Cofre de segredos (Vault) — sistema que guarda senhas e chaves com controle de acesso, sem expô-las no código.
JWT (JSON Web Token) — token com cabeçalho, claims e assinatura em Base64, verificável sem armazenar estado no servidor.
BCrypt / hash de senha — função de hash lenta e com sal para armazenar senhas; MD5 e SHA-1 não são adequados.
SQL Injection / XSS / CSRF — injeção de comandos SQL via entrada; script malicioso executado no navegador de outra pessoa; requisição forjada a partir de um site malicioso usando a sessão do usuário.
CVE e Log4Shell — catálogo público de vulnerabilidades; falha crítica na biblioteca Log4J (CVE-2021-44228) que permitia executar código remoto via mensagem de log.
Ransomware / força bruta / varredura de portas / escalada de privilégio — sequestro de dados mediante resgate; tentativa de adivinhar senhas; busca de portas abertas; obtenção de permissões acima das concedidas.
ISO 27001 / SOC 2 — certificações de gestão de segurança da informação e de controles de segurança de serviços.
Integridade (verificação por hash) — garantia de que dados ou arquivos não foram alterados; confere-se um hash calculado.
Vendor lock-in — dependência de recursos exclusivos de um fornecedor que torna a migração cara.
Corretude, testabilidade, manutenibilidade, reprodutibilidade — atender ao especificado; facilidade de testar; facilidade de manter e evoluir; obter o mesmo resultado em ambientes e execuções diferentes.
Dívida técnica — custo futuro assumido quando se escolhe uma solução rápida em vez da mais correta.
Fluência ágil — capacidade de a equipe aplicar práticas ágeis de forma natural, mesmo sob pressão, conquistada em quatro estágios: foco em valor, entrega de valor, otimização de valor e otimização sistêmica.
Shu-Ha-Ri — três níveis de aprendizado de uma prática: seguir as regras à risca, entender os porquês e adaptá-las, e internalizá-las e criar as próprias.
Ordem, caos e complexidade — escala em que a ordem tem regras demais, o caos nenhuma e a complexidade (onde atuam equipes ágeis) poucas regras e muita auto-organização.
Auto-organização e empoderamento — a equipe decide como atingir objetivos compartilhados; exige confiança e autonomia concedida pela gestão.
Backlog DEEP — backlog Detalhado apropriadamente, Estimado, Emergente e Priorizado.
Velocidade (velocity) — soma dos pontos de história concluídos por iteração; usada para planejar, não para comparar equipes.
Planning Poker — técnica de estimativa em que cada pessoa revela ao mesmo tempo uma carta com uma estimativa (escala de Fibonacci) e as discrepâncias são discutidas.
Mapa de histórias (story mapping) — organização das atividades do usuário na horizontal e das histórias por prioridade na vertical, permitindo planejar releases em camadas.
Injeção de funcionalidades (feature injection) — começar pelo valor de negócio e só depois definir funcionalidades que o produzam, validadas por exemplos.
Opções reais — tratar decisões como opções (não compromissos) e comprometer-se tarde e de forma deliberada; opções têm valor e expiram.
Roadmap do produto — visão de alto nível dos próximos releases e marcos, usada como critério relativo, não como promessa de datas.
Definição de pronto (Definition of Done, DoD) — checklist visível e evolutivo do que precisa valer para uma história, iteração ou release ser considerado concluído.
Burndown, burnup e diagrama de fluxo cumulativo (CFD) — gráficos de trabalho pendente, de trabalho concluído e escopo, e de acúmulo de itens por etapa (revela gargalos).
Indicador indutor (leading) x de resultado (lagging) — métrica que antecipa o resultado x métrica que o confirma depois.
Retrospectiva — reunião ao fim da iteração em que a equipe decide o que melhorar; segue cinco etapas (preparação, dados, insights, decisão, fechamento).
5 porquês — técnica de causa-raiz que pergunta "por quê?" repetidamente (origem na Toyota).
Lean (desperdícios) — filosofia do Sistema Toyota de Produção de eliminar tudo o que não agrega valor: trabalho parcialmente pronto, funcionalidades inúteis, documentação, falta de foco, atrasos, indisponibilidade e defeitos.
Equipe cross-funcional / feature team x component team — equipe com todas as habilidades para entregar valor; entrega funcionalidades completas x cuida de um componente da arquitetura.
Profissional em T — especialista em uma área com capacidade de colaborar em outras.
Gestão 3.0 — abordagem de Jurgen Appelo baseada na teoria da complexidade: energizar pessoas, empoderar times, alinhar restrições, desenvolver competências, estruturar e melhorar tudo.
Sete níveis de delegação / quadro de autoridade — de contar a delegar totalmente; quadro que mostra o nível e o responsável por cada área de decisão.
One-on-one e feedback 360° — reunião individual regular entre gestor e pessoa; retorno de vários pontos de vista (colegas, liderança, clientes internos).
Coding Dojo, brown bag, hackathon, comunidade de prática — práticas de aprendizagem: prática colaborativa de código; apresentações no almoço; dia de experimentação livre; grupo de pessoas com interesse comum entre equipes.
OWASP / OWASP Top 10 — comunidade aberta de segurança de aplicações e seu ranking das dez categorias de falhas mais críticas em aplicações web.
SQL Injection — falha em que entrada do usuário concatenada a um comando SQL altera sua lógica; evitada com consultas parametrizadas e privilégio mínimo no banco.
XSS (Cross-Site Scripting) armazenado x refletido — script injetado que o navegador de outra pessoa executa; fica salvo no servidor ou vem na URL e é ecoado na resposta; evitado com escape de saída, sanitização e CSP.
CSP (Content Security Policy) — cabeçalho HTTP que lista as origens permitidas de scripts, estilos, imagens e outros recursos, bloqueando as demais mesmo que haja injeção.
CSRF (Cross-Site Request Forgery) e token anti-CSRF — requisição forjada que o navegador de um usuário autenticado envia ao sistema; evitada com token imprevisível por sessão e cookies SameSite.
SSRF (Server-Side Request Forgery) — induzir o servidor a fazer requisições a recursos internos ou da nuvem em nome do atacante.
Mass Assignment — vulnerabilidade em que o framework preenche automaticamente campos da entidade a partir dos parâmetros, permitindo alterar campos não previstos; evitada com lista de campos permitidos ou DTOs.
Session Hijacking e session fixation — roubo de identificador de sessão (por XSS ou sniffing) para se passar pelo usuário; fixação de um identificador conhecido; evitados com HTTPS, cookies HttpOnly/Secure/SameSite e regeneração do identificador no login.
Cookies HttpOnly / Secure / SameSite — atributos que impedem a leitura por JavaScript, restringem o envio a HTTPS e a requisições do mesmo site.
HSTS — cabeçalho que instrui o navegador a usar sempre HTTPS com o site.
Open redirect (redirecionamento não validado) — parâmetro de URL de destino que leva o usuário a um site malicioso após uma ação legítima; evitado com allowlist de destinos.
IDOR (referência insegura a objeto) — acesso a registros de outras pessoas alterando um identificador previsível na requisição; exige verificação de autorização por recurso.
Hash com sal e key stretching (Bcrypt, Scrypt, PBKDF2, Argon2) — armazenamento de senhas com função de hash lenta e valor único por usuário (sal); MD5 e SHA-1 estão obsoletos para isso.
Criptografia x hash — transformação reversível com chave (confidencialidade) x código fixo irreversível (integridade, senhas).
Pentest (teste de invasão) — avaliação autorizada que simula um atacante para encontrar vulnerabilidades antes de um agente malicioso.
Caixa preta / cinza / branca — pentest sem informação do alvo, com informação parcial ou com código e arquitetura.
Red team / blue team / purple team — simulação de adversário com objetivo; defesa; colaboração entre as duas para melhorar detecções.
Bug bounty — programa que recompensa pesquisadores que relatam vulnerabilidades de forma responsável.
PTES / OSSTMM / NIST 800-115 / OWASP WSTG — metodologias e guias de teste de segurança.
CVSS — sistema de pontuação (0 a 10) da gravidade de vulnerabilidades, com métricas base, temporal e ambiental.
XXE (XML External Entity) — falha em que o parser de XML resolve entidades externas e expõe arquivos internos.
Desserialização insegura — reconstruir objetos a partir de dados não confiáveis, podendo levar à execução remota de código.
Path traversal / LFI / RFI — acesso a arquivos fora do diretório previsto por caminhos manipulados; inclusão de arquivo local ou remoto.
Clickjacking — induzir o clique em elementos de uma página legítima embutida de forma invisível; evitado com X-Frame-Options / frame-ancestors.
Metasploit — framework de exploração e pós-exploração usado em testes de invasão.
Autenticidade, integridade, privacidade e não repúdio — as quatro propriedades da certificação digital: a mensagem é de quem diz ser, não foi alterada, só o destinatário a lê e o remetente não pode negar o envio.
Assinatura digital — hash da mensagem cifrado com a chave privada do remetente; o destinatário verifica com a chave pública, comprovando integridade e autoria.
Certificado digital (X.509) — documento que vincula uma identidade a uma chave pública, assinado por uma autoridade certificadora e com prazo de validade.
AC (autoridade certificadora), AC raiz e ICP-Brasil — entidade confiável que emite certificados; a raiz é autoassinada e pré-confiada; infraestrutura oficial de chaves públicas brasileira, de raiz no ITI.
CRL e OCSP — lista periódica de certificados revogados e consulta online do status de um certificado.
Certificado autoassinado — certificado emitido pela própria entidade, sem AC, adequado só a testes.
JCA (Java Cryptography Architecture), engine e provider — APIs de criptografia do Java independentes de algoritmo e implementação; classes que representam o serviço (Signature, Cipher...) e pacotes que o implementam (como o Bouncy Castle).
KeyStore / keytool — repositório de chaves e certificados e a ferramenta de linha de comando do Java para gerenciá-lo.
CAPTCHA — teste de Turing inverso (Completely Automated Public Turing test to tell Computers and Humans Apart) que distingue pessoas de programas; deve ser combinado com limitação de taxa e outras defesas.
Verificação e validação (V&V) — validação: construímos o software certo (requisitos corretos para o usuário)? Verificação: construímos o software da forma certa (o código reflete os requisitos)? Pode ser estática ou dinâmica.
Fatores de McCall e ISO 9126 / 25010 — modelos de atributos de qualidade de software (operação, revisão e transição; funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade).
Erro, defeito e falha — engano humano; erro materializado no código (bug); comportamento incorreto observado quando o defeito é executado.
Caso de teste, ponto de verificação e critério de teste — cenário com dados de entrada e resultado esperado; o que se confere no resultado; estratégia que orienta o que testar, como avaliar e quais dados usar.
Particionamento de equivalência e análise de valores-limite — dividir as entradas em classes válidas e inválidas representadas por um valor; testar as bordas das classes.
Tabela de decisão e pairwise — combinar condições e ações em cenários de teste; cobrir todos os pares de valores com poucos casos.
Teste exploratório — teste sem roteiro fixo, em que a pessoa aprende o software enquanto o testa.
Caixa branca, preta e cinza — técnicas de teste com conhecimento total, nenhum ou parcial da estrutura interna.
Níveis de teste (unidade, integração, sistema, aceitação; alfa e beta) — da menor parte isolada até a validação pelo cliente; alfa no ambiente de desenvolvimento e beta no ambiente real com usuários reais.
Teste de fumaça (smoke) e teste de regressão — verificação rápida das funções críticas; reexecução dos testes após mudanças para garantir que nada quebrou.
Teste de carga, estresse e volume — desempenho nos picos previstos; além do previsto até a quebra; com grande quantidade de dados.
SAST e DAST — análise estática do código-fonte e teste dinâmico do sistema em execução, para segurança; são complementares.
WCAG e níveis A/AA/AAA — diretrizes de acessibilidade web do W3C, em quatro princípios (perceptível, operável, compreensível, robusto) e três níveis de conformidade.
Testes ágeis e quadrantes de teste — testar de forma contínua e por toda a equipe; quatro quadrantes que combinam testes voltados à tecnologia ou ao negócio e que guiam ou criticam o produto.
BDD e ATDD — desenvolvimento guiado por comportamento (cenários Dado-Quando-Então em Gherkin) e por testes de aceitação definidos antes da implementação.
Gherkin — linguagem de especificação em linguagem natural estruturada (Funcionalidade, Cenário, Dado, Quando, Então) usada no BDD.
SonarQube / Checkstyle / SpotBugs — ferramentas de análise estática de código que detectam bugs, vulnerabilidades, code smells, violações de convenção e dívida técnica.
Quality gate — critério automático (cobertura, vulnerabilidades, duplicação) que bloqueia a entrega quando não atendido.
Teste instável (flaky test) — teste que ora passa ora falha sem mudança no código, geralmente por sincronização (esperas) ou dados compartilhados.
Espera implícita, explícita e fluente (Selenium) — tempo máximo global para localizar elementos; espera por uma condição específica (WebDriverWait); espera explícita com intervalo de verificação e exceções ignoradas. Evite Thread.sleep.
Page Factory (@FindBy, @CacheLookup) — recurso do Selenium que inicializa os elementos de um Page Object declarados por anotação, sem chamar findElement manualmente.
Navegador headless — navegador executado sem interface gráfica, mais rápido e adequado a integração contínua.
Selenium Grid — infraestrutura para executar testes de interface em paralelo e em vários navegadores e máquinas.
MongoDB (documento, collection, BSON) — banco de documentos: registro JSON com todos os dados de uma entidade, agrupado em collections sem esquema fixo; BSON é o JSON binário com mais tipos (data, ObjectId, decimal).
Embutir x referenciar (MongoDB) — guardar dados relacionados dentro do mesmo documento (uma leitura, limite de 16 MB) ou em collections separadas ligadas por _id (como no relacional).
Aggregation pipeline — consulta de agregação do MongoDB como uma sequência de estágios ($match, $group, $sort, $project, $lookup...); substitui o antigo Map Reduce.
explain, COLLSCAN e IXSCAN — plano de execução de uma consulta; leitura da collection inteira x uso de índice.
Índice TTL, parcial, composto e multikey — apaga documentos após um tempo; indexa só documentos que atendem a um filtro; sobre vários campos (a ordem importa); indexa cada elemento de uma lista.
Replica set (primário, secundário, eleição) — conjunto de nós que replicam os mesmos dados; as escritas vão ao primário e, se ele cai, os demais elegem outro.
Sharding, shard key e mongos — particionar uma collection entre vários servidores por uma chave de partição; o mongos é o roteador de consultas e os config servers guardam os metadados.
Write concern — nível de confirmação que o cliente espera de uma gravação (de nenhuma até a confirmação por maioria dos nós).
WriteConflict — erro quando duas transações tentam alterar o mesmo documento; a aplicação deve tentar de novo.
Node.js, event loop e I/O não bloqueante — ambiente de execução de JavaScript baseado em eventos em que uma thread atende muitas requisições registrando callbacks enquanto espera operações de I/O.
npm e package.json — gerenciador de pacotes do Node e arquivo que descreve o projeto e suas dependências versionadas.
Express e middleware — framework web do Node; middleware é uma função da pilha de uma requisição (req, res, next) que a lê, altera, responde ou repassa.
MEAN Stack — MongoDB, Express, Angular e Node.js: aplicação com JavaScript/JSON em todas as camadas.
Callback hell, Promise e async/await — aninhamento de callbacks assíncronos; valor futuro encadeável; sintaxe que escreve código assíncrono de forma sequencial.
Mongoose (ODM) — biblioteca que define esquemas e modelos para o MongoDB, valida dados e gerencia referências.
Passport — middleware de autenticação para Node com estratégias plugáveis (senha, OAuth 2.0, JWT).
Helmet — conjunto de middlewares que configuram cabeçalhos HTTP de segurança.
NoSQL injection — envio de objetos com operadores (como $ne) onde se espera texto, alterando o critério de uma consulta ao MongoDB.
AngularJS e digest cycle — framework 1.x do Google com data binding bidirecional; ciclo que reavalia todos os watches até o modelo estabilizar.
Contrato de mensagem e Schema Registry — definição centralizada e versionada do formato das mensagens de um tópico, validada em produtores e consumidores; a mensagem carrega só o ID do schema.
Subject, Schema ID e versão (Schema Registry) — nome lógico que agrupa e versiona os schemas de um tópico (<tópico>-key e <tópico>-value); identificador global de um schema; número sequencial dentro do subject.
Apache Avro / AVSC / AVDL — formato de serialização binário e compacto com schema em JSON (.avsc) ou IDL (.avdl), com tipos lógicos (decimal, timestamp) e uniões para campos opcionais.
Protocol Buffers (Protobuf) — serialização binária do Google com campos identificados por número de tag (nunca reutilizar ou renumerar); gera código com protoc.
Compatibilidade de schemas (BACKWARD, FORWARD, FULL, TRANSITIVE, NONE) — política que define quais evoluções de um schema são aceitas: ler dados antigos com o schema novo, ler dados novos com o antigo, ambos, em relação a todas as versões, ou nenhuma verificação.
Kafka Connect, conector source e sink — framework de integração do Kafka sem código: traz dados de sistemas externos para tópicos (source) ou leva dados de tópicos para sistemas externos (sink).
CDC (Change Data Capture) e Debezium — captura das mudanças de um banco e publicação como eventos; Debezium é o conjunto de conectores de CDC mais usado.
Kafka Streams, KStream e KTable — biblioteca Java para processar fluxos de eventos; sequência de eventos x estado atual por chave; suporta agregações, joins e janelas de tempo.
Serde — par serializador/desserializador usado pelo Kafka Streams para chave e valor.
Proposição, conectivos e tabela-verdade — sentença verdadeira ou falsa; operadores lógicos (não, e, ou, se-então, se-e-somente-se); tabela com o valor da fórmula para cada combinação de valores.
Tautologia, contradição e contingência — fórmula sempre verdadeira, sempre falsa, ou que depende dos valores.
Leis de De Morgan, contrapositiva e recíproca — ¬(P∧Q) ≡ ¬P∨¬Q e ¬(P∨Q) ≡ ¬P∧¬Q; P→Q ≡ ¬Q→¬P (a recíproca Q→P não é equivalente).
Modus ponens e modus tollens — de P→Q e P conclui-se Q; de P→Q e ¬Q conclui-se ¬P.
Argumento válido — aquele em que é impossível as premissas serem verdadeiras e a conclusão falsa; depende da forma, não do conteúdo.
Lógica de predicados e quantificadores (∀, ∃) — extensão da lógica proposicional com predicados, variáveis e os quantificadores "para todo" e "existe".
Conjunto, produto cartesiano e conjunto potência — coleção não ordenada de elementos distintos; todos os pares de dois conjuntos; todos os subconjuntos de um conjunto (2ⁿ).
Relação binária, de equivalência e de ordem — subconjunto de um produto cartesiano; reflexiva+simétrica+transitiva (particiona em classes); reflexiva+antissimétrica+transitiva (total ou parcial).
Função injetora, sobrejetora e bijetora — sem colisões; que atinge todo o contradomínio; ambas (tem inversa).
Computabilidade e problema da parada — uma função é computável se um algoritmo a calcula terminando para toda entrada; o problema da parada é não computável.
Máquina de estados finitos e máquina de Turing — modelo com estados, entradas e transições; autômato com fita infinita, modelo teórico do computador.
Semigrupo, monoide e grupo — estruturas com operação associativa; com elemento neutro; com elemento inverso (a associatividade e o neutro permitem agregações paralelas como map/reduce).
Spring Boot Starter e auto-configuração — conjunto de dependências por finalidade; mecanismo que configura beans automaticamente conforme o que há no classpath (baseado em @Conditional).
JAR executável (fat jar) — pacote que inclui as dependências e o servidor embutido e roda com java -jar.
CommandLineRunner / ApplicationRunner — interfaces do Spring Boot cujo método run executa logo após a aplicação subir; a segunda recebe argumentos estruturados.
DevTools — módulo do Spring Boot que reinicia a aplicação rapidamente ao alterar classes e recarrega o navegador; ignorado no empacotamento.
LTS (Long Term Support) e baseline — versão com suporte estendido de correções; versão mínima exigida (Spring 6/Boot 3 exigem Java 17).
Lombok — biblioteca que gera código repetitivo (getters, construtores, builders) por anotações; cuidado com @Data em entidades JPA.
Lei de Demeter (princípio do menor conhecimento) — um objeto deve conversar apenas com seus vizinhos imediatos, sem navegar por cadeias de getters.
DTO, VO e POJO — objeto que só transporta dados entre camadas; objeto imutável definido por seus valores (instâncias com os mesmos valores são iguais); objeto simples sem dependência de framework.
Parâmetro flag e Argument Object — booleano que faz a função ter dois comportamentos (sinal de duas funções); objeto que agrupa vários parâmetros e pode concentrar a validação.
Separação comando-consulta — uma função deve fazer algo ou informar algo, não ambos.
F.I.R.S.T. — testes rápidos, independentes, repetíveis, autovalidáveis e escritos no momento certo.
Regra do escoteiro — deixar o código mais limpo do que o encontrou.
PEP 8 / PEP 257 — guia de estilo de código Python e convenções de docstrings.
Princípios de módulos (REP, CCP, CRP, ADP, SDP, SAP) — equivalência entre reúso e entrega; fechamento comum (classes que mudam juntas ficam juntas); reúso comum (use tudo ou nada); dependências acíclicas; dependências na direção da estabilidade; módulos estáveis devem ser abstratos.
Instabilidade (I = Ce / (Ca + Ce)) — métrica de 0 (estável) a 1 (instável) com base em dependências eferentes e aferentes de um módulo.
SPI e Service Loader — interface de extensão definida pelo núcleo e mecanismo do Java para descobrir suas implementações (plugins) em tempo de execução.
JPMS (Java Platform Module System) — sistema de módulos do Java 9+ com module-info.java (requires, exports, opens, uses, provides) e encapsulamento forte.
Barreira arquitetural — mecanismo (módulos separados, testes de arquitetura) que impede dependências proibidas entre partes do sistema.
SIMULA e Smalltalk — primeira linguagem com classes, objetos e herança (Dahl e Nygaard, 1962-67) e linguagem de Alan Kay que popularizou objetos e mensagens.
Gap semântico — distância entre o problema do mundo real e a forma como ele é representado no código.
Ligação dinâmica — escolha do método a executar em tempo de execução pelo tipo real do objeto, base do polimorfismo.
Classe interna (membro, estática aninhada, local, anônima) — classes declaradas dentro de outras, com diferentes relações com a classe externa.
Evento discreto x evento de série (stream) — fato independente que relata uma mudança de estado; fluxo contínuo e ordenado de eventos no tempo (sensores, métricas, cliques).
Comando, evento e query — pedido para executar uma ação; fato que já ocorreu; pedido de informação que exige resposta.
Event notification, event-carried state transfer e claim check — evento mínimo com ID; evento com todo o estado da entidade; evento com referência a dados guardados em um serviço externo.
Saga orquestrada x coreografada — transação distribuída comandada por um orquestrador central ou por eventos trocados entre participantes, sempre com fluxo de compensação.
EventStorming — workshop colaborativo que mapeia eventos de domínio, comandos, agregados e contextos delimitados de um negócio.
AsyncAPI e CloudEvents — especificação de interfaces assíncronas (canais, mensagens, esquemas) e padrão de metadados de eventos interoperáveis.
Broker orientado a fila, a log e a assinatura — remove a mensagem após o ack e distribui por competição; retém eventos em partições com leitura por offset e replay; distribui por regras de filtro com entrega push.
Push x pull — o broker entrega o evento ao consumidor; o consumidor busca no seu ritmo.
Consumidor durável — consumidor que recebe as mensagens mesmo se estava offline quando foram publicadas.
ADR (Architectural Decision Record) — documento curto com contexto, alternativas, decisão e consequências de uma decisão arquitetural.
SRE (Site Reliability Engineering) — disciplina que aplica engenharia de software a operações para manter serviços confiáveis, com metas medidas (SLOs) e automação.
Toil — trabalho operacional manual, repetitivo e automatizável que cresce com o serviço e não gera valor duradouro.
Minutos bons e ruins — forma de medir um SLO contando, por janela, os minutos em que o SLI esteve dentro ou fora da meta.
Quatro sinais de ouro — latência, tráfego, erros e saturação: as métricas mínimas que refletem a experiência do usuário.
Cardinalidade (de métricas) — número de combinações únicas de rótulos de uma métrica; valores ilimitados nos rótulos explodem o custo do banco de séries temporais.
Burn rate — velocidade de consumo do orçamento de erro; alertas por burn rate em múltiplas janelas reduzem falsos positivos.
SLI proxy — indicador intermediário (CPU, memória, disco) que ajuda no diagnóstico mas não mede diretamente a experiência do usuário.
Runbook — documento com passos de verificação e mitigação associado a um alerta.
Comandante de incidente — pessoa que coordena a resposta a um incidente: avalia impacto, delega e decide.
Post mortem sem culpa (blameless) — análise pós-incidente que busca falhas de sistema e processo, não culpados, e gera ações concretas.
MTBF / MTTD / MTTR — tempo médio entre falhas / para detectar / para recuperar.
Monitoramento sintético — sondas que executam transações artificiais continuamente para medir disponibilidade e latência mesmo sem tráfego real.
Game day — simulação planejada de incidente ou falha para treinar a equipe e validar alertas, runbooks e backups.
Efeito colateral e função pura — efeito colateral é tudo que uma função altera ou lê fora das variáveis locais (arquivo, rede, global, relógio); função pura não tem efeito colateral e dá sempre o mesmo resultado para os mesmos argumentos.
Complexidade necessária x acidental — a necessária é inerente ao problema (regras de negócio difíceis); a acidental é criada por nós (nomes ruins, duplicação, abstrações demais) e deve ser reduzida.
Injeção de falhas — técnica de teste que simula erros (exceção do banco, rede fora) para verificar que o sistema falha sem corromper o estado.
Fuzzing — teste que lança entradas aleatórias (mas válidas) contra o programa, por muito tempo, para achar falhas que ninguém previu.
Código legado — código em produção e valioso, mas difícil de mudar, geralmente sem testes (definição de Feathers).
Costura (seam) — ponto natural do código legado onde dá para separar partes e inserir testes ou trocar dependências sem editar o interior.
Licença permissiva x copyleft — permissivas (MIT, BSD, Apache) exigem só manter o aviso; copyleft forte (GPL, AGPL) exige que o código ligado também use a mesma licença; fraco (LGPL, MPL) limita a exigência ao próprio componente.
Ramificação de fornecedor (vendor branch) — ramo que guarda só o código original de uma biblioteca externa, permitindo mesclagem de três vias ao atualizar a cópia modificada.
Sistema de controle de versão (VCS) — ferramenta que registra versões do código ao longo do tempo (commit, tag, branch, merge); centralizado (um servidor) ou distribuído (histórico completo em cada cópia).
MBTI (Myers-Briggs Type Indicator) — modelo de quatro escalas (I/E, S/N, T/F, J/P) que descreve preferências de personalidade; útil como vocabulário, não como rótulo definitivo.
Polo, guardião e pulsador — papéis em redes informais: polo tem muitas conexões; guardião tem uma conexão forte com alguém importante; pulsador está na periferia mas sabe o que acontece em todos os lados.
Kaizen — palavra japonesa para melhoria contínua, por pequenos passos constantes e sem ponto de chegada.
Mentor — pessoa experiente que orienta dúvidas técnicas e de carreira e transmite o conhecimento tribal da empresa.
Classificação forçada (curva forçada) — prática de ranquear a equipe em quartis independentemente do mérito absoluto; limita quantas pessoas podem receber a melhor nota.
Plano de melhoria de desempenho (PIP) — documento formal que lista pontos a corrigir e metas com prazo; sinal sério de que o trabalho está no limite.
CEO, CTO, CIO, COO — executivos: CEO responde pela estratégia; CTO pela tecnologia dos produtos; CIO pela informação e sistemas internos; COO pelas operações.
Spike (pregar grampos) — estudo rápido e delimitado para responder a uma pergunta técnica específica, sem virar pesquisa acadêmica.
Release candidate (candidata a lançamento) — versão que a equipe considera pronta e que passa por testes finais; se encontrar defeitos, gera nova candidata.
Lei de Brooks (mítico homem-mês) — adicionar pessoas a um projeto de software atrasado o atrasa ainda mais, pelo custo de comunicação e coordenação.
Taco de hóquei (hockey stick) — projeção de crescimento lento seguida de subida vertical sem premissas que a justifiquem.
Grande reescrita — decisão de refazer um sistema do zero; costuma estourar o prazo porque o código antigo continha regras de negócio ocultas.
Carreira como produto — enfoque que trata habilidades e tecnologias como investimentos de tempo, com risco, retorno e demanda de mercado a serem avaliados.
Oferta e demanda (na carreira) — quanto mais pessoas dominam uma habilidade, menor tende a ser seu valor; nichos com menos concorrência (inclusive tecnologias em declínio, como COBOL) podem pagar melhor.
Prática deliberada / code kata — treino curto e repetido de um exercício pequeno, feito para aprender (não para entregar), com feedback e variações.
Lei de Parkinson — o trabalho se expande até ocupar todo o tempo disponível; prazos curtos autoimpostos ajudam a contrariar isso.
Teoria das janelas quebradas — problema pequeno e ignorado (teste quebrado, aviso, script manual) sinaliza que ninguém se importa e favorece a degradação; resolver uma pequena "picuinha" por dia evita isso.
Rigidez de valor (armadilha do macaco) — apego a crenças sobre carreira ou tecnologia que se mantêm por hábito; o exercício é inverter cada "verdade" e avaliar se o oposto poderia ser válido.
Roadmap pessoal — plano de carreira em ciclos curtos, com marcos revisados periodicamente, em oposição a um plano rígido de longo prazo.
Modelo Dreyfus — modelo de cinco estágios de aquisição de habilidade (novato, iniciante avançado, competente, proficiente, especialista), aplicado por habilidade e não por pessoa.
Modo L e modo R (metáfora) — dois estilos de processar informação: deliberado/linear/verbal (L) e intuitivo/holístico/espacial (R); metáfora útil, não uma divisão anatômica rígida.
Efeito Dunning-Kruger — tendência de quem sabe pouco a superestimar a própria competência por não conhecer o que ignora.
Viés cognitivo — padrão sistemático de erro de julgamento causado por atalhos mentais (autoatribuição, correlação confundida com causa, efeito do observador).
Objetivo SMART — meta Específica, Mensurável, Atingível, Relevante e Temporal.
SQ3R — método de leitura ativa: Survey, Question, Read, Recite, Review.
Repetição espaçada — revisar o conteúdo em intervalos crescentes para combater a curva do esquecimento (Anki, SuperMemo).
Mapa mental — diagrama não linear com o tema no centro e ramos de palavras-chave, cores e desenhos, usado para estudar e planejar.
GTD (Getting Things Done) — método de produtividade que captura tudo num sistema confiável e transforma cada item em uma próxima ação concreta.
Jogo interior (Inner Game) — ideia de que o desempenho é prejudicado pelo diálogo mental autocrítico; observar sem julgar melhora a aprendizagem.
Neuroplasticidade — capacidade do cérebro de reorganizar conexões com prática e experiência ao longo da vida.
DUAL — tabela de uma linha e uma coluna do Oracle, usada para consultas sem tabela real (SELECT 1+1 FROM DUAL).
ROWNUM e FETCH FIRST — formas do Oracle de limitar linhas: ROWNUM <= n (aplicado antes da ordenação, exige subconsulta) e FETCH FIRST n ROWS ONLY (12c+).
Sequence (Oracle) — objeto gerador de números únicos (NEXTVAL, CURRVAL), independente de tabela; pode ter lacunas.
Sinônimo (Oracle) — apelido para um objeto; privado ou público. Não concede acesso: o acesso vem do GRANT.
Schema — conjunto de objetos pertencentes a um usuário do Oracle.
Role — agrupamento de privilégios que pode ser concedido a usuários como um só e ativado ou desativado por sessão.
Privilégio de sistema x de objeto — de sistema permite ações como CREATE TABLE e CREATE SESSION; de objeto permite operar sobre um objeto específico (SELECT, UPDATE, EXECUTE).
Soft parse x hard parse — soft parse reaproveita um plano já em memória; hard parse recompila o comando e escolhe novo plano (caro). Variáveis bind reduzem hard parses.
CTAS (CREATE TABLE AS SELECT) — cria uma tabela a partir do resultado de uma consulta, copiando estrutura e dados.
Tabela temporária global — tabela cujo conteúdo existe só durante a transação ou a sessão (ON COMMIT DELETE/PRESERVE ROWS).
SQL*Plus e SQL Developer — SQL*Plus é o cliente de linha de comando do Oracle; SQL Developer é a interface gráfica oficial.
Tuning de SQL — conjunto de técnicas para fazer instruções SQL gastarem menos tempo e recursos (CPU, memória, I/O).
Otimizador (CBO x RBO) — componente do banco que escolhe o plano de execução; o CBO usa custo estimado com base em estatísticas, o RBO (obsoleto) usava regras fixas.
Plano de execução — árvore de passos que o otimizador escolheu: ordem das tabelas, métodos de acesso e de junção; lê-se de dentro para fora.
Seletividade e cardinalidade — seletividade é a fração das linhas que um filtro devolve (0,0 a 1,0); cardinalidade é a quantidade de linhas (efetiva, de junção, distintas).
Estatísticas do otimizador (DBMS_STATS) — dados sobre tabelas, colunas e índices que permitem estimar custos; precisam estar atualizadas.
Histograma — estatística da distribuição dos valores de uma coluna, essencial quando os dados são desbalanceados.
Nested loops, hash join, sort merge, cartesian — métodos de junção: laço com índice, tabela hash em memória (só igualdade), ordenar e intercalar, e produto cartesiano (geralmente erro).
Full table scan x index scan — ler a tabela inteira x usar um índice; o full scan pode ser melhor quando o filtro devolve grande parte da tabela.
Driving table (tabela de condução) — primeira tabela processada numa junção; define quantas linhas alimentam o restante.
Semijoin e antijoin — junções geradas por EXISTS/IN (sem duplicar linhas) e por NOT EXISTS/NOT IN (linhas sem correspondência).
Hint — comentário /*+ ... */ que sugere ao otimizador um comportamento para uma instrução; é ignorado se estiver errado.
EXPLAIN PLAN, AUTOTRACE, TKPROF — ferramentas para ver o plano teórico, o plano com estatísticas de execução e o relatório de tempo de uma sessão traçada.
Shared pool / library cache — memória do Oracle onde ficam cursores e planos reaproveitáveis (soft parse) quando o texto é idêntico.
LAN — rede local de alcance limitado (casa, escritório), normalmente Ethernet ou Wi-Fi.
UTP x STP e categorias (CAT5e, CAT6) — cabos de par trançado sem e com blindagem; a categoria define a velocidade e a qualidade suportadas.
T568A / T568B — duas ordens padronizadas dos fios no conector RJ-45; cabo direto usa o mesmo padrão nas duas pontas, crossover usa um em cada.
Cabo crossover — cabo com A em uma ponta e B na outra, que liga dois computadores diretamente; placas com Auto MDI-X dispensam-no.
Hub x switch x roteador — hub repete o sinal a todas as portas (camada 1); switch encaminha pelo endereço MAC (camada 2); roteador liga redes diferentes pelo IP (camada 3).
Gateway padrão — roteador para onde vai o tráfego destinado a outras redes.
Máscara de sub-rede — define quais bits do IP identificam a rede e quais o dispositivo (ex.: 255.255.255.0 ou /24).
DHCP — serviço que distribui automaticamente IP, máscara, gateway e DNS aos dispositivos.
NIC (placa de rede) — interface que liga um computador à rede; precisa de driver.
Rede ad hoc — Wi-Fi direto entre computadores, sem ponto de acesso.
ClassLoader — objeto da JVM que carrega classes na memória; uma classe é identificada por nome completo mais o ClassLoader que a carregou.
Classloader hell — conjunto de problemas (NoSuchMethodError, ClassCastException estranho, LinkageError) causados por versões conflitantes de JARs e hierarquias de ClassLoaders.
Delegação ao pai (parent-first) — o ClassLoader pergunta primeiro ao pai se consegue carregar a classe; contêineres Web costumam inverter isso para a aplicação.
Referência fraca (WeakReference) — referência que não impede o GC de coletar o objeto; útil em caches.
Tier x layer — tier é divisão física da execução (máquinas/processos); layer é divisão lógica do código em responsabilidades.
Primeira Lei dos Objetos Distribuídos — "não distribua seus objetos" (Fowler): chamadas remotas são caras e frágeis; distribua só quando inevitável e com granularidade grossa.
Remote Facade — padrão que expõe uma operação remota de granularidade grossa devolvendo DTOs, para reduzir round-trips.
MOM / JMS / store-and-forward — middleware orientado a mensagens; JMS é a API Java; store-and-forward persiste a mensagem antes de confirmar o envio.
Proxy dinâmico — classe gerada em tempo de execução (java.lang.reflect.Proxy, CGLIB, ByteBuddy) que delega chamadas acrescentando comportamento (transação, segurança, lazy loading).
Must Ignore (leitor tolerante) — o consumidor valida só o que usa e ignora campos desconhecidos, para que o contrato evolua sem quebrá-lo.
SOAP / WSDL — protocolo de mensagens XML e linguagem de descrição de serviços com contrato formal e rígido.
ROA (Resource Oriented Architecture) — estilo de integração baseado em recursos, URIs, representações e hipermídia como controle.
Impedância objeto-relacional — diferenças entre o modelo orientado a objetos e o relacional que o ORM tenta esconder.
Open EntityManager in View — padrão que mantém a sessão JPA aberta durante a renderização da view para evitar LazyInitializationException; tem custo de conexão e de consultas escondidas.
Arquitetura sociotécnica — visão de que software e organização formam um só sistema; alinhar a arquitetura técnica à estrutura de times permite escalar o software e manter a organização adaptável.
Lei de Conway — organizações projetam sistemas que copiam a própria estrutura de comunicação; se arquitetura e organização conflitam, a organização vence.
Manobra Inversa de Conway — desenhar deliberadamente a estrutura de times para produzir a arquitetura desejada.
Carga cognitiva (intrínseca, extrínseca, pertinente) — esforço mental para entender e executar o trabalho: o inerente ao assunto, o causado pela forma de trabalhar e o útil para aprender; time sobrecarregado entrega menos.
Cynefin — framework de Dave Snowden que classifica problemas em simples, complicados, complexos, caóticos e confusos, para escolher a resposta adequada.
Team Topologies — modelo com quatro tipos de time (stream-aligned, platform, enabling, complicated-subsystem) e três modos de interação (colaboração, X-as-a-Service, facilitação).
Thinnest Viable Platform (TVP) — a menor plataforma interna que ajuda de fato os times de produto.
Métricas DORA — frequência de deploy, lead time de mudanças, taxa de falha de mudanças e tempo de recuperação.
Subdomínio core, de suporte e genérico (DDD) — core é o diferencial competitivo; suporte apoia o core; genérico é comum a qualquer empresa (compra-se ou usa-se SaaS).
Capacidade de negócio — o que a empresa faz (cobrar, entregar, detectar fraude), independente de como; base para dividir times e sistemas por valor.
Greenfield x brownfield — projeto novo sem legado x evolução de um sistema existente.
Strangler Fig (figueira-estranguladora) — modernização incremental: criar novas capacidades ao redor do legado e desviar o tráfego aos poucos até desligá-lo.
Engenharia de plataforma / golden path — disciplina de oferecer plataformas internas como produto, com caminhos pavimentados que reduzem a carga cognitiva.
AI Factor (antipadrão) — IA introduzida sem preparo, que aumenta a carga cognitiva e a dívida técnica das equipes.
Custo de oportunidade — valor do que se deixa de ganhar ao escolher uma alternativa em vez de outra.
Startup — instituição humana desenhada para criar um novo produto ou serviço sob extrema incerteza, em busca de um modelo de negócio repetível e escalável.
Startup de crescimento x de estilo de vida — a primeira busca escala rápida e grande retorno (em geral com investimento); a segunda, receita suficiente para sustentar os fundadores.
Produto de software — software em que o usuário é reconhecido quando volta e os dados são armazenados; quase todo site ou sistema web é um produto.
MVP (Minimum Viable Product) — primeira versão com o mínimo viável para testar a hipótese central com usuários reais e aprender.
Landing page de validação (smoke test) — página que descreve um produto ainda não construído e capta interessados, para medir demanda antes de programar.
NPS (Net Promoter Score) — percentual de promotores (notas 9-10) menos percentual de detratores (0-6) na pergunta "recomendaria a um amigo?".
Freemium — modelo com versão gratuita para atrair usuários e planos pagos para converter parte deles.
Funil AARRR — Aquisição, Ativação, Retenção, Receita e Indicação (referral): etapas medidas para entender onde se perdem usuários.
Churn — taxa de perda de clientes (ou de receita) em um período; corrói negócios de assinatura.
Upsell — levar o cliente a um plano maior ou a um aditivo pago, gerando receita de expansão.
LTV e CAC — valor do cliente ao longo da vida e custo de adquiri-lo; regra de bolso: LTV/CAC de pelo menos 3.
Pivot — mudança estruturada de direção (valor, segmento, canal, produto) quando os dados mostram que a hipótese atual não funciona, preservando o aprendizado.
Money (objeto de valor monetário) — objeto de valor que encapsula BigDecimal com arredondamento técnico e invariantes; nunca use double para dinheiro.
Política de domínio (Strategy) — regra volátil de negócio (taxa, promoção) isolada em um serviço de domínio plugável, que devolve resultado com motivo e valor.
Resultado em vez de exceção — falhas de negócio esperadas (cupom expirado, pagamento recusado) modeladas como tipos explícitos (sealed interface) que o chamador precisa tratar.
Notification Pattern — acumular várias falhas de validação numa coleção em vez de lançar a primeira exceção.
Presenter — porta de saída de apresentação que cada canal (HTTP, fila, GraphQL) implementa para formatar a resposta de um caso de uso.
Chave de idempotência — identificador único por tentativa enviado ao gateway para que repetir a requisição não duplique a cobrança.
Correlation / Trace ID — identificador gerado na entrada e propagado entre casos de uso e adaptadores para reconstruir a jornada de uma requisição.
Pensamento crítico — processo de analisar, avaliar e compreender informações de forma lógica, objetiva e fundamentada: questionar, buscar evidências, ver outras perspectivas, checar a lógica e refletir.
Curadoria estratégica — processo de selecionar, organizar, contextualizar e apresentar conteúdos para um objetivo e um público, ligando as partes por uma narrativa.
Storytelling — técnica de comunicar uma mensagem por meio de uma história que conecta emocionalmente com o público.
Jornada do herói (monomito) — estrutura narrativa de Joseph Campbell em três atos (separação, iniciação, retorno) e doze passos.
Método STAR — estrutura de resposta comportamental: Situação, Tarefa, Ação e Resultado.
PDCA — ciclo de melhoria contínua: Plan (planejar), Do (fazer), Check (verificar), Act (agir/corrigir).
Design Thinking — abordagem centrada no ser humano com cinco fases: empatia, definição, ideação, prototipagem e teste.
Estratégia do Oceano Azul — criar espaço de mercado inexplorado em vez de competir em mercados lotados ("oceanos vermelhos").
Intraempreendedorismo — aplicar atitude empreendedora e inovadora dentro de uma organização existente.
Arquétipo x estereótipo — arquétipo é um padrão universal de comportamento ou situação; estereótipo é uma generalização simplificada, muitas vezes preconceituosa.
Algoritmo — sequência finita, precisa e não ambígua de passos que resolve um problema; todo programa combina sequência, decisão e repetição.
Fluxograma e pseudocódigo — representações gráfica e textual de um algoritmo, usadas antes de codificar.
Laço while x for — while repete enquanto uma condição for verdadeira (quantidade desconhecida); for percorre um intervalo ou coleção (quantidade conhecida).
Modularização (funções) — dividir um programa em subprogramas que resolvem problemas específicos, com parâmetros e retorno, facilitando leitura, reuso e testes.
ndarray (NumPy) e DataFrame (Pandas) — vetor/matriz de tipo único com operações vetorizadas; tabela com colunas de tipos diferentes.
JSF (Jakarta Faces) — framework web baseado em componentes: a tela é uma árvore de componentes ligada a managed beans; o framework cuida de ciclo de vida, conversão, validação e renderização.
Managed bean / CDI bean (JSF) — objeto Java que guarda o estado da tela e trata ações, ligado ao XHTML por Expression Language (#{bean.propriedade}).
Facelets — tecnologia de visão do JSF (arquivos .xhtml), com templates e componentes compostos.
Ciclo de vida do JSF — seis fases: restaurar a view, aplicar valores da requisição, validar, atualizar o modelo, invocar a ação e renderizar a resposta.
Escopos de bean (request, view, session, application) — duração do estado de um bean; view dura enquanto o usuário fica na mesma tela.
Composite component — componente reutilizável criado em XHTML a partir de outros componentes.
PhaseListener — ouvinte notificado antes e depois de cada fase do ciclo de vida do JSF.
Cache de primeiro e segundo nível (JPA) — primeiro: por EntityManager, automático; segundo: compartilhado entre EntityManagers, para dados lidos com frequência e alterados raramente.
Servlet container x servidor de aplicação — o contêiner (Tomcat, Jetty) hospeda servlets e JSP; o servidor de aplicação (WildFly, WebLogic) inclui o contêiner e mais serviços Jakarta EE.
WAR e WEB-INF — pacote de aplicação web Java; WEB-INF guarda configuração e classes e não é acessível pelo navegador.
Servlet — classe Java que atende requisições HTTP; uma única instância atende todas as requisições em threads diferentes, então deve ser thread-safe.
JSP, EL e JSTL — página compilada para servlet; linguagem de expressões ${...}; biblioteca padrão de tags (c:forEach, c:if, fmt).
Forward x redirect — forward encaminha dentro do servidor (mesma requisição); redirect manda o navegador fazer nova requisição.
Front Controller / Command — servlet única que despacha para ações; cada ação é uma classe que implementa uma interface comum.
Filter (filtro de servlet) — classe que intercepta requisição e resposta para tratar preocupações transversais (log, autenticação, transação por requisição).
Quarkus — pilha Java Kubernetes-native, otimizada para GraalVM e HotSpot, que faz grande parte do trabalho em tempo de build para iniciar rápido e gastar pouca memória.
Dev Services (Quarkus) — contêineres de apoio (banco, Kafka, Keycloak) iniciados automaticamente em desenvolvimento e testes.
Panache — camada sobre o Hibernate ORM (Quarkus) com padrões Active Record e Repository para reduzir código repetitivo.
Imagem nativa (GraalVM native image) — executável compilado antecipadamente: inicialização instantânea e pouca memória, com build lento e restrições a reflexão.
Mutiny (Uni/Multi) — biblioteca reativa do Quarkus: Uni emite um item, Multi emite vários.
Dropwizard — kit leve que reúne Jetty, Jersey, Jackson, Metrics e outras bibliotecas para serviços REST em um único JAR, com health checks e porta administrativa.
Fat JAR (shade) — JAR que inclui todas as dependências, executável com java -jar.
ASP.NET Web API / ASP.NET Core — framework .NET para serviços HTTP/REST com controladores, ações, rotas por atributo, injeção de dependência e serialização JSON.
Entity Framework (Code First) e migrações — ORM do .NET: o modelo em classes gera e evolui o banco; migrações versionam o esquema e aplicam só o que falta.
LINQ — linguagem de consulta integrada ao C#, com consultas fortemente tipadas que viram SQL.
Data Annotations ([Required], [Key]) — atributos de validação e mapeamento nas propriedades do modelo.
[Authorize] e bearer token — atributo que exige autenticação e papéis; o cliente envia o token no cabeçalho Authorization.
Azure App Service — hospedagem PaaS de aplicações web e APIs na Azure.
Google App Engine (GAE) — plataforma PaaS do Google para hospedar aplicações sem gerenciar servidores; ambientes standard (sandbox, escala a zero) e flexible (contêineres).
Cloud Datastore / Firestore (modo Datastore) — banco NoSQL de entidades do Google Cloud, sem servidor, com transações atômicas e consultas indexadas.
Cloud Run e Cloud Functions — contêineres sem servidor que escalam a zero; funções acionadas por eventos.
Firebase Cloud Messaging (FCM) — serviço do Google para enviar notificações push a apps Android, iOS e Web.
Cloud Scheduler, Cloud Tasks e Pub/Sub — agendamento, filas de tarefas assíncronas e mensageria no Google Cloud.
HTTP Basic Authentication — esquema em que o cliente envia usuário e senha em base64 no cabeçalho Authorization; só aceitável com HTTPS.
SRI (Subresource Integrity) — atributo integrity com o hash de um arquivo externo (script ou CSS); o navegador só o executa se o conteúdo bater, protegendo contra CDN comprometida.
CDN (Content Delivery Network) — rede distribuída que serve arquivos estáticos (CSS, JS, imagens) perto do usuário.
Burp Suite e spidering — proxy de interceptação usado em pentest para capturar e alterar requisições e para mapear automaticamente URLs e formulários (spider).
X-Content-Type-Options: nosniff — cabeçalho que impede o navegador de adivinhar o tipo de um arquivo, reduzindo ataques por tipo errado.
Sistema operacional (SO) — software que gerencia o hardware e oferece serviços padronizados a programas e usuários.
Kernel e modos usuário/kernel — núcleo do SO; no modo kernel executam-se instruções privilegiadas, e programas pedem serviços por chamadas de sistema.
Processo x thread — processo é um programa em execução com seu espaço de memória; thread é uma linha de execução dentro do processo, que compartilha a memória.
Escalonamento e troca de contexto — o SO alterna processos em fatias de tempo, salvando e restaurando o estado de cada um.
Race condition e deadlock — resultado errado por disputa de um recurso sem sincronização; processos esperando um pelo outro indefinidamente.
Memória virtual, paginação e swap — cada processo vê um espaço de endereços próprio, dividido em páginas; páginas pouco usadas vão para o disco (swap), o que é mais lento (thrashing se excessivo).
Sistema de arquivos (FAT32, NTFS, ext4) — organização dos dados no disco; journaling registra mudanças para recuperar após falhas.
Compilador, interpretador, montador e ligador — traduzem o código-fonte; o ligador junta o código objeto às bibliotecas.
Hipervisor e máquina virtual — hipervisor divide o hardware entre VMs; tipo 1 roda sobre o hardware, tipo 2 sobre um SO.
Hardware, firmware e barramento — parte física; software gravado em chip (BIOS/UEFI); caminho comum de dados entre componentes.
BIOS/UEFI e POST — firmware que inicia o computador e testa o hardware antes de carregar o SO.
ULA, UC e cache — unidade lógica e aritmética, unidade de controle e memória rápida dentro/ao lado da CPU.
SSD x HD, NVMe — armazenamento em memória flash sem partes móveis x discos magnéticos; NVMe usa o barramento PCIe.
GiB x GB — prefixo binário (2^30 bytes) x decimal (10^9 bytes).
PAN, LAN, CAN, MAN, WAN — redes por alcance: pessoal, local, de campus, metropolitana e de longa distância.
Three-way handshake (TCP) — SYN, SYN-ACK, ACK: o estabelecimento de conexão TCP.
NAT e CIDR — tradução de endereços privados para um IP público; prefixos de tamanho variável (/24) no lugar das classes de endereço.
SMTP, POP3 e IMAP — envio de e-mail; download das mensagens; sincronização com a caixa no servidor.
SGBD (níveis de abstração e independência de dados) — o banco é visto em três níveis: físico (como se armazena), conceitual (tabelas e relações) e visões (o que cada usuário enxerga); independência física e lógica permitem mudar um nível sem quebrar os de cima.
DDL, DML, DCL e TCL — subconjuntos do SQL: definição (CREATE, ALTER, DROP), manipulação (INSERT, UPDATE, DELETE, SELECT), controle de acesso (GRANT, REVOKE) e controle de transações (COMMIT, ROLLBACK).
Regras de Codd — 12 regras (mais a regra zero) propostas por Edgar Codd para um banco ser de fato relacional; por exemplo, toda informação é representada por valores em tabelas e NULL indica informação ausente.
Plano de manutenção de banco — conjunto de tarefas agendadas (backup, teste de restauração, verificação de integridade, reconstrução de índices, atualização de estatísticas, limpeza) que mantém o banco íntegro e rápido.
Gerações de linguagens (1GL a 5GL) — máquina, assembly, alto nível (COBOL, Java), quarta geração declarativa (SQL) e quinta geração baseada em restrições (Prolog).
JAD (Joint Application Design) — oficinas em grupo com usuários e desenvolvedores, conduzidas por um facilitador, para levantar e validar requisitos rapidamente.
HTML, CSS e DOM — linguagem de marcação que estrutura a página; folhas de estilo que definem a aparência; árvore de objetos que representa o documento e que o JavaScript manipula.
XML — linguagem de marcação extensível para descrever dados com tags próprias; base de integrações como SOAP e RSS, hoje concorrida pelo JSON.
.NET, CLR e CIL — plataforma da Microsoft; máquina virtual que executa o código gerenciado e faz coleta de lixo; código intermediário gerado pelo compilador C# e traduzido pelo JIT.
ADO.NET — camada base de acesso a bancos do .NET (SqlConnection, SqlCommand, SqlDataReader), equivalente ao JDBC do Java.