<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hanniel Vieira</title>
    <description>The latest articles on Forem by Hanniel Vieira (@hanniel09).</description>
    <link>https://forem.com/hanniel09</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1165376%2F86c3bfbf-79b5-43ad-ad12-6f87ca71f1ba.jpeg</url>
      <title>Forem: Hanniel Vieira</title>
      <link>https://forem.com/hanniel09</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hanniel09"/>
    <language>en</language>
    <item>
      <title>WebSecurity e a sua importância</title>
      <dc:creator>Hanniel Vieira</dc:creator>
      <pubDate>Wed, 17 Jan 2024 18:40:43 +0000</pubDate>
      <link>https://forem.com/hanniel09/websecurity-e-a-sua-importancia-1db5</link>
      <guid>https://forem.com/hanniel09/websecurity-e-a-sua-importancia-1db5</guid>
      <description>&lt;h1&gt;
  
  
  Definição de websecurity
&lt;/h1&gt;

&lt;p&gt;Antes de começarmos, vamos definir o que é WebSecurity. WebSecurity refere-se à prática de proteger websites e aplicações web contra várias ameaças e vulnerabilidades que podem comprometer a integridade, confidencialidade e disponibilidade. Implantando medidas para proteger contra acessos não autorizados, violações de dados, malware e outros ataques cibernéticos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principais ataques:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Injection (Injeção de SQL)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nesse tipo de ataque, os invasores inserem código SQL em campos de entrada de um site para manipular o banco de dados, acessar, modificar ou excluir dados não autorizados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-Site Scripting (XSS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os ataques de XSS ocorrem quando os invasores inserem scripts em páginas web, que são então executados nos navegadores dos usuários, permitindo o roubo de informações, cookies ou controle da sessão.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-Site Request Forgery (CSRF)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nesse ataque, os invasores enganam os usuários para que executem ações indesejadas em sites nos quais estão autenticados, explorando a confiança do site no usuário para realizar ações maliciosas em nome deles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Injeção de Código (Code Injection)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esse tipo de ataque envolve a inserção de código nos sistemas da web, incluindo linguagens de script (PHP e JavaScript como exemplo) ou comandos de sistema, aproveitando brechas de segurança para executar comandos arbitrários.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distributed Denial Of Service (DDoS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os ataques DDoS visam sobrecarregar um servidor ou sistema com um grande volume de tráfego falso, tornando-o inacessível para usuários legítimos, causando a interrupção do serviço.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Man-in-the-Middle (MitM)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nesse tipo de ataque, um invasor intercepta e monitora a comunicação entre duas partes sem o conhecimento delas, possibilitando a leitura, modificação ou até mesmo inserção de dados na comunicação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phising&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embora não seja estritamente um ataque técnico, o phishing envolve enganar os usuários por meio de e-mails, mensagens ou sites falsos que se passam por legítimos para obter informações confidenciais, como senhas, números de cartão de crédito, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clickjacking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esses ataques ocultam elementos enganosos em páginas da web, fazendo com que os usuários cliquem em links ou botões sem o seu consentimento, direcionando-os para ações não intencionadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Brute Force Attack (Ataque de Força Bruta)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nesse tipo de ataque, os invasores tentam adivinhar combinações de login e senha repetidamente para acessar sistemas protegidos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eavesdropping (Espionagem)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os invasores podem interceptar e monitorar a comunicação entre um cliente e um servidor para obter informações sensíveis, como dados de login, se não estiver criptografada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de ataques:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aqui estão alguns exemplos de como se defender de alguns ataques, elas podem ser melhoradas e alteradas de acordo com o projeto e o perfil da empresa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de um ataque SQL Injection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usar parâmetros e Consultas Parametrizadas:  Utilizar consultas parametrizadas em vez de concatenar strings para formar consultas SQL pode prevenir a injeção de SQL.&lt;/li&gt;
&lt;li&gt;Validação e Sanitização de Dados de Entrada:   Validar e sanitizar rigorosamente os dados de entrada para garantir que apenas os tipos de dados esperados sejam aceitos.&lt;/li&gt;
&lt;li&gt;Utilizar Stored Procedures: Armazenar procedimentos no banco de dados que são invocados pela aplicação, limitando a exposição direta das consultas ao banco de dados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de um Cross-Site Scripting (XSS)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codificação Adequada de Dados: Implementar a codificação correta(escaping) para dados dinâmicos inseridos na página da web, impedindo a execução de scripts maliciosos.&lt;/li&gt;
&lt;li&gt;Utilização de Headers de Segurança: Configurar e utilizar headers de segurança como Content Security Policy (CSP) para restringir a execução de scripts em uma página.&lt;/li&gt;
&lt;li&gt;Validação e Sanitização de Dados: Realizar validação e sanitização de todos os dados de entrada para evitar a inserção de scripts maliciosos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de um Cross-Site Request Forgery (CSRF)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilizar Tokens Anti-CSRF: Implementar tokens de solicitação aleatórios e únicos para cada solicitação, verificando-os no servidor para garantir a legitimidade da solicitação.&lt;/li&gt;
&lt;li&gt;Headers Personalizados: Utilizar headers HTTP personalizados ou tokens específicos no cabeçalho das requisições para prevenir solicitações não autorizadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de Injeção de Código (Code Injection)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validação de Entrada de Dados: Realizar validação estrita e sanitização de todas as entradas de dados, restringindo e filtrando caracteres especiais e inesperados que possam ser usados para injetar código.&lt;/li&gt;
&lt;li&gt;Escape de Caracteres Especiais: Utilizar funções ou métodos específicos para escapar (escapar significa tornar inofensivo) caracteres especiais, impedindo que sejam interpretados como parte do código.&lt;/li&gt;
&lt;li&gt;Uso de Parâmetros Seguros: Ao trabalhar com linguagens que interagem com bancos de dados, usar consultas parametrizadas ou prepared statements para evitar a concatenação de strings que possam ser interpretadas como código.&lt;/li&gt;
&lt;li&gt;Uso de whitelists: Em vez de listas negras(blacklists) que especificam o que não deve ser aceito, utilizar whitelists(listas brancas) para permitir apenas entradas específicas que são consideradas seguras.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de um Contra Distributed Denial Of Service (DDoS)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usar Serviços de Proteção DDoS: Contratar serviços especializados que oferecem proteção contra ataques DDoS para filtrar e mitigar.&lt;/li&gt;
&lt;li&gt;Usar um Firewall para Gerenciar Conexões: Além de atuar como uma barreira de proteção contra conteúdos maliciosos, um Firewall também faz o controle e gerência todas as solicitações de conexão a um site.&lt;/li&gt;
&lt;li&gt;Utilizar um Sistema reCAPTCHA: Um Sistema reCAPTCHA irá verificar se quem está enviando dados para um determinado formulário é realmente uma pessoa de verdade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de Phishing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Educação do Usuário: Treinar e educar os usuários para identificar e evitar links, e-mails ou sites suspeitos e sempre verificar a autenticidade.&lt;/li&gt;
&lt;li&gt;Filtros de Email e Anti-Phishing: Utilizar filtros de e-mail e software anti-phishing para bloquear e identificar tentativas de phishing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de um Brute Force Attack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Política de Bloqueio de Conta: Implemente uma política de bloqueio de conta após um número específico de tentativas de login falhadas. Isso limita a eficácia de ataques de força bruta, pois um atacante teria que lidar com bloqueios temporários após várias tentativas malsucedidas.&lt;/li&gt;
&lt;li&gt;Bloqueio de Endereços IP Suspeitos: Implemente uma lista negra de endereços IP que exibiram comportamento suspeito ou fizeram um número excessivo de tentativas de login. Esses endereços podem ser temporariamente bloqueados.&lt;/li&gt;
&lt;li&gt;Autenticação de Dois Fatores: A autenticação de dois fatores é importante porque mesmo que os dados sejam comprometidos o invasor não terá sucesso no login.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como se defender de um Eavesdropping&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criptografia de Ponta a Ponta (End-to-End Encryption): Use protocolos de criptografia robustos para garantir que os dados sejam criptografados no ponto de origem e só descriptografados no ponto de destino.&lt;/li&gt;
&lt;li&gt;Protocolos Seguros (HTTPS, TLS/SSL): Sempre use HTTPS para comunicações web, especialmente ao transmitir informações sensíveis. Isso ajuda a proteger contra-ataques de interceptação ao criptografar a comunicação entre o navegador do usuário e o servidor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Como prosseguir nos estudos de websecurity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para aprimorar seus conceitos de websecurity e proteger melhor os seus projetos continue os estudos em: Fundamentos de Rede e Protocolos Web, Aprofundamento em Criptografia, ****Testes de Segurança e Penetração, Arquitetura de segurança, Tecnologias que facilitam a implementações entre vários outros.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>development</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>News about JDK 21 update</title>
      <dc:creator>Hanniel Vieira</dc:creator>
      <pubDate>Tue, 19 Sep 2023 18:18:01 +0000</pubDate>
      <link>https://forem.com/hanniel09/news-about-jdk-21-update-297e</link>
      <guid>https://forem.com/hanniel09/news-about-jdk-21-update-297e</guid>
      <description>&lt;p&gt;Hello, developer, how are you? Today, on September 19th, the JDK 21 version was released. But what can we expect from version 21?&lt;/p&gt;

&lt;p&gt;JDK 21 is the new LTS (Long-Term Support) version, which means it will receive support for a longer period than other versions, a common concept in many software products, including operating systems and programming languages. It is designed to meet the needs of organizations that want stability and continuity in their software implementations and is typically maintained for 5 years.&lt;/p&gt;

&lt;p&gt;What are the main changes?&lt;/p&gt;

&lt;p&gt;With the arrival of JDK 21, several features have been implemented. Let's talk a bit about them.&lt;/p&gt;

&lt;p&gt;Language Feature&lt;/p&gt;

&lt;p&gt;JEP 440: Records Patterns&lt;/p&gt;

&lt;p&gt;JEP 440 aims to enhance the Java programming language with record patterns for deconstructing record values. Record patterns and type patterns can be nested to allow powerful, declarative, and composable ways of navigating and processing data.&lt;/p&gt;

&lt;p&gt;But what exactly is a record pattern?&lt;/p&gt;

&lt;p&gt;A record pattern consists of a record class type and a list of patterns (possibly empty) that are used to match the values of corresponding record components. For example, given the declaration:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Record Person(String name, String lastName) {}&lt;/code&gt;&lt;br&gt;
The Person value will be recorded as an initialized value without the need for creating getters, setters, and constructors, making it very useful for DTO patterns.&lt;/p&gt;

&lt;p&gt;JEP 441: Pattern Matching for switch&lt;/p&gt;

&lt;p&gt;JEP 441 aims to enhance pattern matching for switch expressions and statements. It allows an expression to be tested against multiple patterns, each with a different action, enabling concise and safe expression of complex data-driven queries. For example, given the declaration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String formatterPatternSwitch(Object obj) {
    return switch (obj) {
        case Integer i -&amp;gt; String.format("int %d", i);
        case Long l    -&amp;gt; String.format("long %d", l);
        case Double d  -&amp;gt; String.format("double %f", d);
        case String s  -&amp;gt; String.format("String %s", s);
        default        -&amp;gt; obj.toString();
    };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In summary, JEP 441 updates and simplifies various ways of using the switch statement, making Java less verbose and cleaner, which is helpful for newcomers to the language and streamlining repetitive developer processes.&lt;/p&gt;

&lt;p&gt;Language Features Previews&lt;/p&gt;

&lt;p&gt;JEP 430: String Templates (Preview)&lt;/p&gt;

&lt;p&gt;JEP 430 enhances the Java programming language with string templates. String templates complement existing string literals and text blocks in Java by combining literal text with embedded expressions and template processors to produce specialized results.&lt;/p&gt;

&lt;p&gt;But why template strings? String templating aims to make string interpolation safer. String interpolation is a technique that allows you to embed variable values or expressions directly into a string, making the process of creating strings more convenient and readable. Instead of manually concatenating strings and variables, you can insert placeholders in the string and fill them with desired values.&lt;/p&gt;

&lt;p&gt;Unfortunately, the convenience of interpolation has a drawback: it's easy to build strings that will be interpreted incorrectly by other systems. This is what JEP 430 seeks to address.&lt;/p&gt;

&lt;p&gt;JEP 443 and JEP 445: Unnamed Patterns and Variables. Unnamed Classes and Instance Main Methods (Preview)&lt;/p&gt;

&lt;p&gt;Both JEP 443 and JEP 445 aim to reduce the verbosity of Java to simplify it for new Java programmers.&lt;/p&gt;

&lt;p&gt;Libraries Improvements&lt;/p&gt;

&lt;p&gt;JEP 444: Virtual Threads&lt;/p&gt;

&lt;p&gt;Introduce virtual threads to the Java Platform. Virtual threads are lightweight threads that dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications.&lt;br&gt;
Main objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enable server applications written in the simple thread-per-request style to scale with near-optimal hardware utilization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable existing code that uses the java.lang.Thread API to adopt virtual threads with minimal change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable easy troubleshooting, debugging, and profiling of virtual threads with existing JDK tools.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JEP 431: Sequenced Collections&lt;/p&gt;

&lt;p&gt;Introducing new interfaces to represent collections with a defined encounter order. Each of these collections has a well-defined first element, second element, and so on, up to the last element. It also provides uniform APIs for accessing their first and last elements and for processing their elements in reverse order.&lt;/p&gt;

&lt;p&gt;JEP 452: Key Encapsulation Mechanism API&lt;/p&gt;

&lt;p&gt;Introducing an API for Key Encapsulation Mechanisms (KEMs), a cryptographic technique for protecting symmetric keys using public-key cryptography.&lt;/p&gt;

&lt;p&gt;Library Improvements Previews and Incubator&lt;/p&gt;

&lt;p&gt;JEP 442: Foreign Function &amp;amp; Memory API (Third Preview)&lt;/p&gt;

&lt;p&gt;Introducing an API through which Java programs can interoperate with code and data outside the Java runtime. By efficiently invoking external functions (i.e., code outside the JVM) and safely accessing external memory (i.e., memory not managed by the JVM), the API allows Java programs to call native libraries and process native data without the fragility and danger of JNI.&lt;/p&gt;

&lt;p&gt;JEP 453: Structured Concurrency (Preview)&lt;/p&gt;

&lt;p&gt;Simplifying concurrent programming by introducing an API for structured concurrency. Structured concurrency treats groups of related tasks executed on different threads as a single unit of work, simplifying error handling, improving reliability, and enhancing observability.&lt;/p&gt;

&lt;p&gt;JEP 446: Scoped Values (Preview)&lt;/p&gt;

&lt;p&gt;Introducing scoped values, which can be safely and efficiently shared across methods without using method parameters. They are preferred over thread-local variables, especially when using a large number of virtual threads.&lt;/p&gt;

&lt;p&gt;JEP 448: Vector API (Sixth Incubator)&lt;/p&gt;

&lt;p&gt;Introducing an API to express vector computations that are reliably compiled at runtime to ideal vector instructions on supported CPU architectures, achieving superior performance compared to equivalent scalar calculations.&lt;/p&gt;

&lt;p&gt;Performance Improvements&lt;/p&gt;

&lt;p&gt;JEP 439: Generational ZGC&lt;/p&gt;

&lt;p&gt;Improving application performance by extending the Z Garbage Collector (ZGC) to maintain separate generations for new and old objects. This allows the ZGC to collect young objects which tend to die young more frequently. &lt;br&gt;
Applications running with Generational ZGC should benefit from&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reduced allocation pause times, &lt;/li&gt;
&lt;li&gt;lower heap memory overhead, &lt;/li&gt;
&lt;li&gt;lower CPU overhead for garbage collection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stewardship&lt;/p&gt;

&lt;p&gt;JEP 451: Prepare to Disallow the Dynamic Loading of Agents&lt;/p&gt;

&lt;p&gt;Issuing warnings when agents are dynamically loaded into a running JVM. These warnings are intended to prepare users for a future version that will disallow dynamic loading of agents by default to improve default integrity. Maintenance tools that load agents at startup will not trigger warnings in any version.&lt;/p&gt;

&lt;p&gt;This was a brief overview of JDK 21, the LTS version of Java. If you have any questions, I'm available to explain what I understand and to check for any new updates and documentation regarding Java JDK 21 &lt;a href="https://www.oracle.com/java/technologies/javase/21all-relnotes.html"&gt;Click here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>java</category>
      <category>oracle</category>
      <category>jvm</category>
    </item>
    <item>
      <title>Novidades sobre a atualização JDK 21</title>
      <dc:creator>Hanniel Vieira</dc:creator>
      <pubDate>Tue, 19 Sep 2023 17:54:04 +0000</pubDate>
      <link>https://forem.com/hanniel09/novidades-sobre-a-atualizacao-jdk-21-1h84</link>
      <guid>https://forem.com/hanniel09/novidades-sobre-a-atualizacao-jdk-21-1h84</guid>
      <description>&lt;p&gt;Olá, desenvolvedor, tudo certo? Hoje 19 de setembro lançou a versão 21 da JDK, mas o que esperar da versão 21? &lt;/p&gt;

&lt;p&gt;A versão 21 da JDK é a nova versão LTS, ou seja, é uma versão que receberá suporte durante um período maior do que as demais versões um conceito comum em muitos produtos de software, incluindo sistemas operacionais e linguagens de programação, e é projetado para atender às necessidades de organizações que desejam estabilidade e continuidade em suas implementações de software sendo mantida no normalmente por 5 anos. &lt;/p&gt;

&lt;p&gt;Quais as principais mudanças? &lt;/p&gt;

&lt;p&gt;Com a chegada da JDK 21 diversas funcionalidades foram implementadas, vamos falar um pouco sobre elas. &lt;/p&gt;

&lt;p&gt;Language Feature &lt;/p&gt;

&lt;p&gt;JEP 440: Records Patters &lt;/p&gt;

&lt;p&gt;O JEP 440 tem com o objetivo aprimorar a linguagem de programação Java com padrões de registro descontruindo os valores de registo. Os Padrões de registro e padrões de tipo podem ser aninhados para permitir usam forma poderosa, declarativa e combinável de navegação e processamento de dados. &lt;/p&gt;

&lt;p&gt;Mas afinal, o que é um padrão de registro?  &lt;/p&gt;

&lt;p&gt;Um padrão de registro consiste em um tipo de classe de registro e uma lista de padrões (possivelmente vazia) que é usada para comprar os valores dos componentes de registro correspondentes. Por exemplo, dada a declaração: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Record Person (String name, String lastName) {}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O valor Person será registrado como um valor iniciado sem a necessidade da criação de Getters, Setters e seu construtor, sendo muito útil para dtos patterns. &lt;/p&gt;

&lt;p&gt;JEP 441: Pattern Matching for switch &lt;/p&gt;

&lt;p&gt;O JEP 441 tem o objetivo de aperfeiçoar a correspondência de padrões para switch expressões e instruções. Permitindo que uma expressão seja testada em relação a vários padrões, cada um com uma ação diferente, para que consultas complexas orientadas a dados possam ser expressas de forma concisa e segura. Por exemplo, dada a declaração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String formatterPatternSwitch(Object obj) { 
    return switch (obj) { 
        case Integer i -&amp;gt; String.format("int %d", i); 
        case Long l    -&amp;gt; String.format("long %d", l); 
        case Double d  -&amp;gt; String.format("double %f", d); 
        case String s  -&amp;gt; String.format("String %s", s); 
        default        -&amp;gt; obj.toString(); 
    }; 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resumo, com o JEP 441 diversas formas de ultilizar o switch foi atualizado e simplificado deixado o java menos verboso e mais limpo, facilitando para quem está começando a aprender a linguagem agora e agilizando proceços repetitivos de desenvolvedores. &lt;/p&gt;

&lt;p&gt;Language Features Previews &lt;/p&gt;

&lt;p&gt;JEP 430: String Templates (Preview) &lt;/p&gt;

&lt;p&gt;O JEP 430 Aprimore a linguagem de programação Java com modelos de string . Os modelos de string complementam os literais de string e blocos de texto existentes do Java, acoplando texto literal com expressões incorporadas e processadores de modelo para produzir resultados especializados. &lt;/p&gt;

&lt;p&gt;Mas por que modelar as strings? O modelamento de strings tem com o objetivo de tornar Interpolação de strings mais segura. (A interpolação de strings é uma técnica que permite incorporar valores de variáveis ou expressões diretamente em uma string, tornando o processo de criação de strings mais conveniente e legível. Em vez de concatenar manualmente strings e variáveis, você pode inserir espaços reservados na string e preenchê-los com os valores desejados.) &lt;/p&gt;

&lt;p&gt;Infelizmente, a conveniência da interpolação tem uma desvantagem: é fácil construir strings que serão interpretadas por outros sistemas, mas que são perigosamente incorretas nesses sistemas e é isso que a JEP 430 busca resolver. &lt;/p&gt;

&lt;p&gt;JEP 443 e JEP 445: Padrões e variáveis sem nome. Classes sem nome e métodos principais de instância (preview) &lt;/p&gt;

&lt;p&gt;JEP 443: Aprimore a linguagem Java com padrões sem nome, que correspondem a um componente de registro sem indicar o nome ou tipo do componente, e variáveis sem nome, que podem ser inicializadas, mas não usadas. Ambos são indicados por um caractere de sublinhado, _. &lt;a href="https://openjdk.org/jeps/12"&gt;preview language feature. &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Evolua a linguagem Java para que os alunos possam escrever seus primeiros programas sem a necessidade de compreender os recursos da linguagem projetada para programas grandes. Longe de usar um dialeto separado de Java, os alunos podem escrever declarações simplificadas para programas de classe única e, em seguida, expandir seus programas para usar recursos mais avançados à medida que suas habilidades aumentam. &lt;a href="https://openjdk.org/jeps/12"&gt;preview language feature. &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tanto o JEP 443 e o JEP 445 têm com o objetivo diminuir a verbosidade do Java com o objetivo de simplificar para novos programadores em Java. &lt;/p&gt;

&lt;p&gt;Libraries Improvements &lt;/p&gt;

&lt;p&gt;JEP 444: Virtual Threads &lt;/p&gt;

&lt;p&gt;Introduzir threads virtuais na plataforma Java. Threads virtuais são threads leves que reduzem drasticamente o esforço de gravação, manutenção e observação de aplicativos simultâneos de alto rendimento. &lt;/p&gt;

&lt;p&gt;Principais objetivos: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Permita que aplicativos de servidor escritos no estilo simples de thread por solicitação sejam dimensionados com utilização de hardware quase ideal. &lt;/li&gt;
&lt;li&gt;Habilite o código existente que usa a java.lang.ThreadAPI para adotar threads virtuais com alterações mínimas. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Permita fácil solução de problemas, depuração e criação de perfil de threads virtuais com ferramentas JDK existentes. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JEP 431: Sequenced Collections &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Introduzir novas interfaces para representar coleções com uma ordem de encontro definida. Cada uma dessas coleções possui um primeiro elemento bem definido, um segundo elemento e assim por diante, até o último elemento. Ele também fornece APIs uniformes para acessar seus primeiros e últimos elementos e para processar seus elementos na ordem inversa. &lt;/p&gt;

&lt;p&gt;A estrutura de coleção Java não possui um tipo de coleção que represente uma sequência de elementos com uma ordem de encontro definida. Também carece de um conjunto uniforme de operações que se apliquem a essas coleções. Estas lacunas têm sido uma fonte repetida de problemas e reclamações. &lt;/p&gt;

&lt;p&gt;JEP 452: Key Encapsulation Mechanism API &lt;/p&gt;

&lt;p&gt;Introduzir uma API para mecanismos de encapsulamento de chaves (KEMs), uma técnica de criptografia para proteger chaves simétricas usando criptografia de chave pública. &lt;/p&gt;

&lt;p&gt;O encapsulamento de chave é uma técnica criptográfica moderna que protege chaves simétricas usando criptografia assimétrica ou de chave pública. A técnica tradicional para fazer isso é criptografar uma chave simétrica gerada aleatoriamente com uma chave pública, mas isso requer preenchimento e pode ser difícil de provar ser seguro. Em vez disso, um mecanismo de encapsulamento de chave (KEM) usa propriedades da chave pública para derivar uma chave simétrica relacionada, que não requer preenchimento. &lt;/p&gt;

&lt;p&gt;Library Improvements Previews and Incubator &lt;/p&gt;

&lt;p&gt;JEP 442: Foreign Function &amp;amp; Memory API (Third Preview) &lt;/p&gt;

&lt;p&gt;Introduzir uma API pela qual programas Java possam interoperar com código e dados fora do tempo de execução Java. Ao invocar com eficiência funções externas (ou seja, código fora da JVM) e ao acessar com segurança a memória externa (ou seja, memória não gerenciada pela JVM), a API permite que programas Java chamem bibliotecas nativas e processem dados nativos sem a fragilidade e o perigo de JNI. &lt;a href="https://openjdk.org/jeps/12"&gt;Esta é uma API de visualização. &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;JEP 453: Structured Concurrency (Preview) &lt;/p&gt;

&lt;p&gt;Simplifique a programação simultânea introduzindo uma API para simultaneidade estruturada. A simultaneidade estruturada trata grupos de tarefas relacionadas executadas em diferentes threads como uma única unidade de trabalho, simplificando assim o tratamento e cancelamento de erros, melhorando a confiabilidade e aprimorando a observabilidade. &lt;a href="https://openjdk.org/jeps/12"&gt;Esta é uma API de visualização.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;JEP 446: Scoped Values (Preview) &lt;/p&gt;

&lt;p&gt;Introduza valores com escopo definido, valores que podem ser compartilhados com segurança e eficiência em métodos sem usar parâmetros de método. Elas são preferidas às variáveis locais de thread, especialmente ao usar um grande número de threads virtuais. &lt;a href="https://openjdk.org/jeps/12"&gt;Esta é uma API de visualização&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;JEP 448: Vector API (Sixth Incubator) &lt;/p&gt;

&lt;p&gt;Introduzir uma API para expressar cálculos vetoriais que sejam compilados de forma confiável em tempo de execução para instruções vetoriais ideais em arquiteturas de CPU suportadas, alcançando assim um desempenho superior aos cálculos escalares equivalentes. &lt;/p&gt;

&lt;p&gt;Performance Improvements &lt;/p&gt;

&lt;p&gt;JEP 439: Generational ZGC &lt;/p&gt;

&lt;p&gt;Melhore o desempenho do aplicativo estendendo o Z Garbage Collector ( ZGC ) para manter gerações separadas para objetos novos e antigos. Isso permitirá que o ZGC colete objetos jovens – que tendem a morrer jovens – com mais frequência. &lt;/p&gt;

&lt;p&gt;Os aplicativos executados com Generational ZGC devem aproveitar &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menores riscos de paralisações nas alocações, &lt;/li&gt;
&lt;li&gt;Menor sobrecarga de memória heap necessária e &lt;/li&gt;
&lt;li&gt;Menor sobrecarga de CPU de coleta de lixo. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses benefícios devem ocorrer sem redução significativa do rendimento em comparação com ZGC não geracional. &lt;/p&gt;

&lt;p&gt;Stewardship &lt;/p&gt;

&lt;p&gt;JEP 451: Prepare to Disallow the Dynamic Loading of Agents &lt;/p&gt;

&lt;p&gt;Emita avisos quando os agentes são carregados dinamicamente em uma JVM em execução. Esses avisos visam preparar os usuários para uma versão futura que proibirá o carregamento dinâmico de agentes por padrão, a fim de melhorar a integridade por padrão. As ferramentas de manutenção que carregam agentes na inicialização não causarão a emissão de avisos em nenhuma versão. &lt;/p&gt;

&lt;p&gt;Esta foi um breve resumo da JDK 21, a versão LTS do Java. Quaisquer dúvidas estou disponível para explicar o que entendi sobre e para conferir novas notícias e a documentação do Java JDK 21 &lt;a href="https://www.oracle.com/java/technologies/javase/21all-relnotes.html"&gt;Clique aqui&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>java</category>
      <category>oracle</category>
      <category>jvm</category>
    </item>
  </channel>
</rss>
