// Knowledge.index — 知識庫

Conhecimento
em produção.

Artigos técnicos, exemplos executáveis e decisões explicadas sem hype. Conteúdo para quem constrói software de verdade.

76

artigos publicados
PT-BR · OPEN ACCESS

// Latest.entries — 最新記事

Últimos artigos

01 java Como barrar o PR do coding agent que só reformatou o módulo git diff --numstat e -w --numstat numa fixture: quando o PR do coding agent é só reformat, quando esconde um < virando <= e quando recusar. 10m 02 aws Redrive policy no SQS: o poison message que o retry da aplicação nunca larga Por que o retry dentro do consumidor Java segura o poison message fora da DLQ do SQS, e como validar RedrivePolicy e maxReceiveCount num JSON local. 11m 03 career Bullet de currículo no formato XYZ: impacto que se lê em 10 segundos Seu currículo lista responsabilidades e stack, e o impacto some na primeira leitura. Bullet XYZ em uma linha e um teste de 10 segundos com um colega. 8m 04 java Dois @Scheduled no Spring Boot 4.1: o segundo espera o primeiro acabar Boot 4.1.2: o TaskScheduler default tem 1 thread. Dois @Scheduled, um sleep maior que o intervalo, e o segundo método só roda depois. 12m 05 java Por que Files.readString quebra o arquivo que o colega salvou no Windows JDK 25: Files.readString(Path) é UTF-8, não o charset da JVM. Byte 0xE9, MalformedInputException, e o contrato explícito na leitura. 10m 06 java Instant.now(): o teste de prazo que nunca falha de manhã JDK 25: Instant.now() no domínio deixa o teste de prazo no relógio da máquina. Clock.systemUTC() em produção e Clock.fixed no JUnit. 8 testes, 0 falhas. 10m 07 career Como contar um caso de entrevista com STAR em 90 segundos Na entrevista comportamental o projeto inteiro come o tempo e o Result não aparece. Cartão STAR de oito linhas e 90 segundos no gravador. 7m 08 java Reentrada em computeIfAbsent: ConcurrentHashMap versus HashMap JDK 25: computeIfAbsent reentrante na mesma chave lança IllegalStateException no ConcurrentHashMap e CME no HashMap. get + putIfAbsent evita a reentrada. 9m 09 java A chamada this com @Async continua síncrona no Spring Boot 4.1 Spring Boot 4.1.2: this.asyncWork() roda na thread main; pelo proxy, em task-1. Três testes Maven, sem web e sem container. 10m 10 aws Quando a permissions boundary IAM corta o s3:* da identity Identity Allow s3:* não libera PutObject se a permissions boundary só autoriza GetObject no prefixo. Interseção no User Guide, JSON local, sem conta. 8m 11 java Como recusar -DskipTests no diff do coding agent JDK 25: mvn test -DskipTests sai 0 sem executar testes. Gate local recusa skipTests/maven.test.skip no comando, log e diff. 11m 12 java @TransactionalEventListener: o AFTER_COMMIT que o teste @Transactional nunca dispara Boot 4.1.1: @TransactionalEventListener AFTER_COMMIT fica em 0 no teste @Transactional e em 1 quando o serviço commita. Sem JPA, sem container. 11m 13 java HttpClient: o connectTimeout que não corta a resposta que nunca chega JDK 25: connectTimeout 2s no HttpClient não corta a resposta após o accept. Só HttpRequest.timeout lança HttpTimeoutException. HttpServer local, sem Spring. 10m 14 personal-growth Mentoria: a 1:1 que acaba em papo e sem experimento A 1:1 de mentoria que só troca conselho não muda a semana. Feche com um experimento de uma linha, data de reporte e relato na próxima conversa. 7m 15 personal-growth Pedido de ajuda: a thread de 20 linhas sem a pergunta de uma linha Muro de contexto no Slack sem pergunta trava a thread. Abra com uma linha decidível e um molde de quatro linhas: pergunta, tentou, decisão, prazo. 8m 16 personal-growth Feedback SBI: o "mandou bem, mas…" que o colega não consegue repetir Elogio genérico seguido de “mas” não deixa ato observável. Escreva um SBI (situação, comportamento, impacto) e peça ao colega que repita o pedido. 7m 17 career Ciclo de promoção: o "seja mais sênior" sem critério escrito Feedback de ciclo pedindo mais senioridade sem exemplo? Saia da 1:1 com três critérios observáveis, um exemplo do time e uma checagem em 90 dias. 8m 18 personal-growth Daily: o diff da IA que você não narra em 60 segundos O agente escreveu o diff e a daily pede o que você entregou. Feche o arquivo e narre intenção, área, risco e verificação em 60 segundos, sem reabrir o git. 7m 19 java BigDecimal.equals: o 10.0 que não acha o 10.00 no Map de saldo JDK 25: HashMap.get(10.00) é null após put(10.0). equals falso, compareTo 0. TreeMap acerta. long cents ou setScale(2) recuperam a chave. 8m 20 java Paginação por offset: o item que some quando a lista muda entre as páginas JDK 25: offset/subList na lista viva duplica o 2 e pula o 4 após insert no índice 0. Keyset pelo último id mantém [3,4]. Snapshot imutável ainda serve. 11m 21 java mvn test no coding agent: o *IT que o Failsafe nunca rodou JDK 25, Failsafe 3.6.0: mvn test sai verde sem rodar *IT.java e sem failsafe-reports. Com *IT no módulo, o gate do agente é mvn verify. 8m 22 java @ConditionalOnProperty sem matchIfMissing: o bean que some quando a chave não existe Boot 4.1.1 e JDK 25: com matchIfMissing=false e a chave ausente, a app sobe e o bean some. ApplicationContextRunner prova e mostra as duas saídas estáveis. 6m 23 java Duration no @ConfigurationProperties: o 10 no YAML que vira 10 milissegundos No Spring Boot 4.1.1 com JDK 25, timeout: 10 num Duration vira 10 ms e a app sobe. Veja 10s, PT10S, @DurationUnit e o que falha no bind. 9m 24 java Stream Gatherers no Java 25: a janela deslizante que o collect materializa inteira Média móvel de 3 pagamentos com Gatherers.windowSliding no JDK 25, sem preview, contra collect+subList. JUnit 6.1.3 mostra onde os dois divergem. 9m 25 aws Deny na resource policy IAM: o Allow da identity que nunca chega a valer Allow na identity policy não libera GetObject se a bucket policy tem Deny no mesmo ARN. Três JSON e o User Guide, sem conta. 8m 26 java JaCoCo no Maven: o gate de cobertura em linha que deixa o ramo de erro sem teste JaCoCo 0.8.15 / JDK 25: jacoco:check LINE 0.80 passa com 85,7% e o if de cobrança inválida nunca roda. BRANCH 0.80 falha com 0,50 no mesmo .exec. 9m 27 java Jackson no Spring Boot 4.1: o campo extra no JSON que some no bind e a API não recusa Boot 4.1.1/Jackson 3.1.5: extra no JSON some no bind e a API devolve 200. fail-on-unknown-properties vira 400; mail antigo também é unknown. 10m 28 java RestClient no Spring Boot 4.1: o 4xx que vira exceção e some com o body No RestClient 7.0.9, retrieve() no 422 lança UnprocessableContent. O JSON continua na exceção; exchange() e onStatus leem o body sem Testcontainers. 10m 29 java Coding agent que conserta o teste: o gate que pega asserção afrouxada e @Disabled no diff O agente deixa a suíte verde afrouxando o assert ou com @Disabled. Gate local lê o diff de src/test e o skipped do Surefire e só passa a correção em produção. 12m 30 java @Valid em @ConfigurationProperties aninhado: o @NotNull que passa no startup Sem @Valid no campo nested, @NotBlank não dispara no bind e o Boot 4.1.1 sobe. Com @Valid, SpringApplication.run falha no startup. 9m 31 java JUnit 5 em paralelo: o teste que só falha quando o Surefire usa mais de uma thread Com o paralelo do Jupiter ligado, dois testes que dividem um Path estático falham. Reproduza a corrida e corrija com @ResourceLock, SAME_THREAD ou @TempDir. 12m 32 aws IfExists na política IAM: o Allow que passa quando a chave de contexto não existe Chave ausente com IpAddress é mismatch e o Allow não concede. Com IfExists, a condition vira true. Três políticas IAM mostram onde o Allow fica aberto. 8m 33 java @Transactional no teste de integração: o rollback que esconde o commit Rollback automático no teste Spring Boot 4.1 deixou passar um SKU duplicado que o commit rejeita com 409. Onde ele isola e quando limpar explicitamente. 15m 34 ai-agents Vários agentes em paralelo deixam o time mais rápido? O que ainda trava no merge Dois agentes na mesma linha deram conflito e uma decisão descartada; em arquivos disjuntos, merge limpo e quase 2× tokens. Onde o fan-out vale. 12m 35 java O pinning de virtual threads acabou no JDK 24? O que ainda prende a carrier thread JEP 491 livrou o synchronized do pinning; chamada nativa ainda prende a carrier. JDK 21 vs 25 medidos, JFR e quando a regra do ReentrantLock ainda vale. 12m 36 java Benchmark com JMH: por que o loop com System.nanoTime mede errado Loop com System.nanoTime mede warmup, código morto e relógio. Veja um projeto JMH no Java 25 e como ler Score e Error antes de declarar ganho. 16m 37 aws Lint de políticas IAM offline com Parliament: achando escalonamento de privilégio antes do deploy Parliament 1.6.4 acha iam:PassRole + lambda:CreateFunction/InvokeFunction offline e falha o CI antes do deploy, sem conta AWS. 9m 38 java Fila sem limite na frente da chamada lenta: quem decide o tamanho é a GC LinkedBlockingQueue sem capacidade aceita tudo até a GC decidir o limite. Veja ArrayBlockingQueue, AbortPolicy e CallerRunsPolicy com teste JVM. 10m 39 java Recibo Surefire no coding agent: o testes-ok que não gerou XML O agente escreve 'testes ok' no chat, mas o CI quebra porque o Maven não rodou. Gate local só aceita TEST-*.xml recente do Surefire com failures=0 e errors=0. 9m 40 java ArchUnit no Maven: a dependência ilegal que o code review não viu Uma regra ArchUnit no Maven barra uma dependência ilegal de domain para adapter que passou pelo code review, com Java 25 e JUnit 6, sem Spring. 10m 41 java Construtor flexível no Java 25: validar antes do super() sem helper estático JEP 513 no Java 25: valide e normalize argumentos da subclasse antes do super(), sem helper estático. Compilação real, erro do javac e testes JUnit 5. 9m 42 java Bulkhead com Resilience4j no Boot 4.1: isolando a dependência lenta da saudável Configure Bulkhead do Resilience4j por dependência no Spring Boot 4.1 e prove com WireMock que um gateway de pagamento lento não consome as chamadas do estoque. 12m 43 aws CloudFormation Guard: validando templates com regras org-wide antes do deploy, sem tocar a conta Cfn-guard 3.2.1 local, sem credenciais AWS: regras org-wide de IAM e S3 que falham o build antes do deploy, com exit codes reais e gate de CI. 10m 44 java Rate limiting no Spring Boot 4.1 com Resilience4j: protegendo a API de picos sem Redis Configure rate limiting em memória com Resilience4j no Spring Boot 4.1: parâmetros do limiter, teste determinístico sob concorrência e 429 com Retry-After real. 13m 45 aws Testando stacks CDK sem deploy: assertions library e synth como contrato Como usar cdk synth e aws-cdk-lib/assertions para travar propriedades de uma stack CDK no CI, antes de qualquer deploy real na AWS. 12m 46 java Property-based testing com jqwik: o caso extremo que o exemplo fixo não cobre Como o jqwik 1.10.1 gera entradas aleatórias, acha overflow que exemplo fixo não pega e reduz a falha ao caso mínimo, em Java 25 puro. 11m 47 java Saga pattern: coreografia ou orquestração para transação distribuída sem 2PC Depois de cortar o serviço: como coordenar pedido, pagamento e estoque sem 2PC, escolher entre coreografia e orquestração e provar que a compensação rodou. 14m 48 ai-agents Cache de prompt em coding agents: o miss silencioso que volta a cobrar o preço cheio Reordenar tools, um timestamp no prefixo ou memória de projeto mal posicionada quebram o cache sem erro. Como medir, travar em CI e alertar antes da fatura. 11m 49 java Sealed interfaces em vez de boolean-flag soup: modelando estado em vez de configurá-lo Flags booleanas aceitam combinações impossíveis. Troque por sealed interface com records e switch exaustivo: o javac barra estados inválidos no build. 7m 50 ai-agents Sandboxing de tool calls em coding agents: isolando filesystem e rede antes do PR Isole tool calls de coding agents no filesystem e na rede com bubblewrap: teste de fuga reproduzível, evidência de kernel e o que verificar antes do PR. 10m 51 java Scoped Values no Java 25: substituindo ThreadLocal sem vazar estado entre threads reaproveitadas JDK 25 finaliza Scoped Values: reproduza o vazamento de ThreadLocal em pools, veja a API real (sem bind) e a integração com StructuredTaskScope em preview. 8m 52 java Mutation testing em Java: faça o teste falhar pelo motivo certo Configure o PIT no Maven, investigue mutantes sobreviventes e crie um gate de CI gradual com Java 25 e JUnit 6. 8m 53 ai-agents Telemetria de tool calls em agentes com MCP Registre latência, erros e payload por tool call em events.jsonl, consulte com DuckDB e aplique um gate de erro no CI sem misturar tokens. 11m 54 aws PrivateLink ou NAT Gateway: quando a conta fecha Calcule quando um VPC Interface Endpoint compensa o tráfego via NAT Gateway e configure SQS, S3 e DynamoDB com CDK e políticas restritas. 8m 55 ai-agents Coding agent com prompt versionado: o que mudou entre dois PRs? Versione prompts e ferramentas, grave seus hashes no usage.json e compare revisões de coding agents com goldens estáveis no CI. 9m 56 java Drain de verdade no Spring Boot 4.1 com SIGTERM e workers Configure e verifique o drain de HTTP e workers no Spring Boot 4.1.1, com SIGTERM, SmartLifecycle e Kubernetes sem cortar trabalho em voo. 10m 57 aws Acesso humano entre contas AWS com Permission Sets Troque access keys humanas por sessões temporárias entre contas usando IAM Identity Center, Permission Sets e AWS CLI v2. 10m 58 ai-agents Memória de projeto para coding agents: quem monta o contexto Monte o contexto de um coding agent por tarefa, com orçamento em bytes e tokens, descarte auditável e falha segura para arquivos obrigatórios. 12m 59 aws ECS Fargate vs EKS para apps Java/Spring: quando o cluster Kubernetes não vale o que custa Compare custo, operação e IAM no ECS Fargate e no EKS Auto Mode para decidir onde executar uma aplicação Spring Boot na AWS. 12m 60 ai-agents Servidor MCP com execute-verify-stop e tool gating: o que o modelo não pode decidir sozinho Recuse tools/call no servidor MCP antes do side-effect, com política versionada, auditoria e idempotência após crash. Spec 2026-07-28 + Python SDK 2.1.1. 13m 61 aws GitHub Actions na AWS com OIDC: fim das chaves longas no repositório Troque chaves estáticas do GitHub Actions por OIDC, IAM role com trust policy restrita, permissions boundary e testes de falha verificáveis. 10m 62 ai-agents Coding agent com teto de custo: token budget e circuit breaker por tarefa Defina limite mensal, encerre tarefas longas e leve tokens e custo por PR ao CI sem expor prompts nem esperar a fatura chegar. 8m 63 aws CloudFront depois do deploy: cache e invalidação sem sustos Configure cache, invalidação e OAC no CloudFront com S3 privado, headers previsíveis e comandos verificáveis para o pós-deploy. 8m 64 java Configuração externa no Spring Boot 4.1: descubra quem venceu Veja por que uma variável, um YAML ou a CLI venceu no Spring Boot 4.1 e descubra a origem do valor com um aplicativo mínimo. 9m 65 java AssertJ no Spring Boot 4.1: falhas que apontam o campo certo Use AssertJ com ProblemDetail e MockMvcTester para localizar campos divergentes em testes Spring Boot 4.1, sem adicionar dependências redundantes. 8m 66 java Idempotência e outbox no Spring Boot 4.1 sem cobrança duplicada Implemente Idempotency-Key e outbox na mesma transação JDBC com Spring Boot 4.1, Postgres e um teste real com Testcontainers. 12m 67 career Carreira técnica em 2026: o próximo passo não é outro framework Troque a corrida por frameworks por evidências de senioridade em sistemas, pessoas e comunicação, com um diagnóstico prático de 30 minutos. 7m 68 java StructuredTaskScope no Java 25: fan-out no Spring Boot Organize fan-out por request com StructuredTaskScope no Java 25, incluindo cancelamento, timeout, testes e comparação com CompletableFuture. 8m 69 ai-agents Coding agent no repositório: gates antes do primeiro PR Configure AGENTS.md, CODEOWNERS, CI e auditoria antes de permitir que um coding agent abra PRs no seu repositório. 9m 70 java OpenShift 4.22 com Java 25: Containerfile e probes na restricted-v3 Empacote Spring Boot 4.1.1 com Java 25 em UBI 9, fixe a imagem, configure probes e valide o deploy sob a SCC restricted-v3. 9m 71 java Spring Boot Actuator em produção: o que vale a pena expor Configure endpoints, health checks, readiness, segurança e métricas do Spring Boot Actuator sem abrir informações sensíveis em produção. 10m 72 architecture Bounded contexts na prática: como parar de chamar tudo de microserviço Use regras de domínio, transações e dados para decidir fronteiras antes de extrair serviços de um monólito Spring. 10m 73 java Testes de contrato com Pact no Spring Boot: parando de descobrir incompatibilidades em produção Crie contratos entre consumidor e provedor com Pact, verifique-os no Spring Boot e bloqueie deploys incompatíveis pelo Pact Broker. 10m 74 java Reactor e virtual threads: quando paralelizar no Spring Boot Entenda quando parallel e runOn ajudam no Reactor, por que subscribeOn não divide itens e como medir CPU, filas e latência no Spring Boot. 13m 75 crescimento-pessoal Por que você relê o mesmo código três vezes e não enxerga o bug: o custo da familiaridade forçada Aprenda a distinguir cansaço visual de familiaridade e teste uma rotina curta para revisar o próprio código com mais atenção. 6m 76 java Spring Boot 3 e virtual threads: o que realmente muda em APIs com I/O bloqueante Veja quando virtual threads ajudam APIs Spring MVC com I/O bloqueante, com benchmark, diagnóstico de pinning e a rota do Java 21 ao 25. 13m