<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java · Caique Oliveira Blog</title><link>https://caiquejh.com.br/categories/java/</link><description>Últimas publicações · Caique Oliveira Blog</description><generator>Hugo -- gohugo.io</generator><language>pt-BR</language><copyright>© 2026 Caique Oliveira</copyright><lastBuildDate>Tue, 18 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caiquejh.com.br/categories/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Spring Boot 4: o que mudou nos principais projetos do ecossistema Spring, e como migrar</title><link>https://caiquejh.com.br/blog/spring-boot-4/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><author>Caique Oliveira</author><guid>https://caiquejh.com.br/blog/spring-boot-4/</guid><description>&lt;p&gt;Spring Framework 7.0 e Spring Boot 4.0 saíram em novembro de 2025. O Spring Boot 4.1 veio logo depois, em 2026, e é a versão que este post usa em todo exemplo. A maioria dos projetos ainda está no Boot 3.x, e essa distância não é gigante, mas também não é cosmética: tem um starter trocando de nome, um comportamento de segurança mudando de padrão, e um jeito novo de gerar código de repository que muda quando um erro de query aparece.&lt;/p&gt;</description></item><item><title>Collections no Java 25: guia completo de List, Set, Queue, Deque, Map e concorrência</title><link>https://caiquejh.com.br/blog/colecoes-java-25/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><author>Caique Oliveira</author><guid>https://caiquejh.com.br/blog/colecoes-java-25/</guid><description>&lt;p&gt;&lt;code&gt;List&amp;lt;String&amp;gt; lista = new ArrayList&amp;lt;&amp;gt;();&lt;/code&gt;. Você já deve ter escrito uma linha parecida centenas de vezes. O Collections Framework é a base de praticamente todo programa Java: é ele que segura a lista de pedidos, o conjunto de permissões, o mapa de configuração, qualquer coisa que apareça agrupada. Provavelmente é a API mais usada do JDK inteiro, e por isso mesmo vale a pena revisitar com calma.&lt;/p&gt;
&lt;p&gt;Por baixo dessas classes conhecidas acontece bastante coisa interessante: um &lt;code&gt;HashMap&lt;/code&gt; reorganiza buckets inteiros conforme cresce, um &lt;code&gt;ArrayDeque&lt;/code&gt; evita realocações que uma &lt;code&gt;LinkedList&lt;/code&gt; não evitaria, um &lt;code&gt;ConcurrentHashMap&lt;/code&gt; consegue deixar duas threads escrevendo ao mesmo tempo sem se atrapalharem. Entender esses detalhes ajuda a escolher com mais segurança na hora de decidir entre &lt;code&gt;ArrayList&lt;/code&gt; e &lt;code&gt;LinkedList&lt;/code&gt;, ou entre &lt;code&gt;HashMap&lt;/code&gt; e &lt;code&gt;ConcurrentHashMap&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Java 17 para 25: o que mudou nas duas LTS mais recentes</title><link>https://caiquejh.com.br/blog/java-17-para-25/</link><pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate><author>Caique Oliveira</author><guid>https://caiquejh.com.br/blog/java-17-para-25/</guid><description>&lt;p&gt;Java 17 saiu em setembro de 2021. Java 25 saiu em setembro de 2025. São as duas LTS mais recentes, oito versões de distância uma da outra, e boa parte dos times ainda está no 17 ou acabou de sair dele. Faz sentido: LTS existe justamente para não obrigar ninguém a acompanhar release a release.&lt;/p&gt;
&lt;p&gt;O problema é que &amp;ldquo;pular&amp;rdquo; quatro anos de Java de uma vez costuma dar a sensação de estar lendo uma lista de features soltas, sem noção do que realmente vale a pena mudar num projeto real e o que ainda é experimental. Este post tenta resolver isso: cobre as mudanças de maior impacto prático entre o 17 e o 25, cada uma com um laboratório de código rodável no JDK 25. Todo o código deste post vive no repositório companion &lt;a href="https://github.com/CaiqueJhones/java17-to-25-lab"&gt;&lt;code&gt;java17-to-25-lab&lt;/code&gt;&lt;/a&gt;, com cada trecho copiado direto de lá.&lt;/p&gt;</description></item><item><title>Guia de SSO com Keycloak: OIDC, OAuth2, Autenticação Customizada, 2FA e Spring Boot</title><link>https://caiquejh.com.br/blog/guia-sso-keycloak/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><author>Caique Oliveira</author><guid>https://caiquejh.com.br/blog/guia-sso-keycloak/</guid><description>&lt;p&gt;Praticamente todo sistema com mais de um punhado de usuários chega a um ponto em que &amp;ldquo;cada aplicação com seu próprio login&amp;rdquo; para de fazer sentido. É aí que entram &lt;strong&gt;SSO&lt;/strong&gt; (Single Sign-On) e um servidor de identidade como o &lt;strong&gt;Keycloak&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Neste guia vamos primeiro entender os fundamentos: o que é SSO, como OAuth2 e OpenID Connect se relacionam, e os principais conceitos do Keycloak. Depois colocamos a mão na massa e construímos, passo a passo, um ambiente completo: tema customizado, um fluxo de autenticação próprio com 2º fator alternativo, auditoria de eventos via Kafka, e uma aplicação Spring Boot com login OIDC, sessão distribuída e autorização baseada em roles.&lt;/p&gt;</description></item><item><title>Operadores bit a bit em Java</title><link>https://caiquejh.com.br/blog/operadores-bit-a-bit/</link><pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate><author>Caique Oliveira</author><guid>https://caiquejh.com.br/blog/operadores-bit-a-bit/</guid><description>&lt;p&gt;Na carreira de desenvolvedor, seja back-end ou front-end, não é muito comum a utilização de operadores bit a bit. Porém, conhecê-los é parte importante para a resolução de muitos problemas. Neste artigo conheceremos o conceito e avaliaremos uma aplicação prática.&lt;/p&gt;
&lt;p&gt;Os operadores bit a bit (&lt;em&gt;bitwise&lt;/em&gt;) são utilizados para a manipulação individual dos bits de um número inteiro (&lt;code&gt;byte&lt;/code&gt;, &lt;code&gt;short&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt; e &lt;code&gt;long&lt;/code&gt;). Vamos analisá-los para entender como cada um funciona.&lt;/p&gt;</description></item><item><title>Java 8</title><link>https://caiquejh.com.br/blog/java-8/</link><pubDate>Sun, 19 Jul 2015 00:00:00 +0000</pubDate><author>Caique Oliveira</author><guid>https://caiquejh.com.br/blog/java-8/</guid><description>&lt;p&gt;O Java 8, lançado em março de 2014, trouxe diversas melhorias no design da linguagem e novas APIs, como &lt;em&gt;Streams&lt;/em&gt; e &lt;em&gt;Java Time&lt;/em&gt;. Neste artigo analisaremos as principais mudanças no design da linguagem que prometem deixar o código mais conciso, reduzindo grande parte do &lt;em&gt;boilerplate&lt;/em&gt; e abraçando conceitos oriundos do paradigma de programação funcional.&lt;/p&gt;
&lt;h2 id="conteúdo"&gt;Conteúdo&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#expressoes-lambdas"&gt;Expressões Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#interfaces-funcionais"&gt;Interfaces funcionais&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#default-methods"&gt;Default Methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#method-references"&gt;Method References&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#conclusao"&gt;Conclusão&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="expressões-lambda"&gt;&lt;a name="expressoes-lambdas"&gt;Expressões Lambda&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Uma das principais características implementadas na linguagem foi a expressão lambda. Com ela podemos implementar o método abstrato de uma interface de maneira muito mais concisa do que com classes anônimas. Vejamos uma nova forma de iterar sobre coleções:&lt;/p&gt;</description></item></channel></rss>