- 19
- 51 416
Devertelo
Brazil
Приєднався 29 лис 2018
Compartilho aqui um pouco do meu conhecimento em programação e tecnologia.
Java 21: Como funciona o Virtual Threads?
Nesse vídeo eu apresento pra vocês uma comparação entre a utilização de Threads para execução de um processo e a performance obtida com o novo Virtual Threads que chegou na versão 21 LTS do Java.
Repositório com exemplos de código: github.com/joaovertelo/code-examples/blob/main/README.md
Repositórios apresentado nesse vídeo: github.com/joaovertelo/java-virtual-threads-example
Me siga nas outras redes:
🐦 devertelo
📷 devertelo
📹 www.tiktok.com/@devertelo
👨🏽💻 github.com/joaovertelo
Melhores vídeos do canal:
Rinha de Backend ua-cam.com/video/2M-mYZD05S0/v-deo.html
Spring vs Micronaut ua-cam.com/video/t3ihqgaD7d0/v-deo.html
Como funciona o Gatling ua-cam.com/video/3DHJhAgAwPg/v-deo.html
Como executar Gatling com Java utilizando Plugin do Maven ua-cam.com/video/gkl1ZTTtff4/v-deo.html
Os melhores plugins do Intellij - Parte 1 ua-cam.com/video/IKPNNrdEDrA/v-deo.html
Como gerar uma API REST com Swagger e Spring Boot - ua-cam.com/video/zmfCS1E7oeI/v-deo.html
Como encontrar um erro com o comando GIT BISECT ua-cam.com/video/tW1hmzHNw1g/v-deo.html
Repositório com exemplos de código: github.com/joaovertelo/code-examples/blob/main/README.md
Repositórios apresentado nesse vídeo: github.com/joaovertelo/java-virtual-threads-example
Me siga nas outras redes:
🐦 devertelo
📷 devertelo
📹 www.tiktok.com/@devertelo
👨🏽💻 github.com/joaovertelo
Melhores vídeos do canal:
Rinha de Backend ua-cam.com/video/2M-mYZD05S0/v-deo.html
Spring vs Micronaut ua-cam.com/video/t3ihqgaD7d0/v-deo.html
Como funciona o Gatling ua-cam.com/video/3DHJhAgAwPg/v-deo.html
Como executar Gatling com Java utilizando Plugin do Maven ua-cam.com/video/gkl1ZTTtff4/v-deo.html
Os melhores plugins do Intellij - Parte 1 ua-cam.com/video/IKPNNrdEDrA/v-deo.html
Como gerar uma API REST com Swagger e Spring Boot - ua-cam.com/video/zmfCS1E7oeI/v-deo.html
Como encontrar um erro com o comando GIT BISECT ua-cam.com/video/tW1hmzHNw1g/v-deo.html
Переглядів: 3 490
Відео
Spring vs Micronaut: Qual o melhor framework para sua próxima aplicação?
Переглядів 1,2 тис.Рік тому
No vídeo de hoje, vamos realizar um comparativo entre os frameworks Spring e Micronaut. Para isso, vamos construir um CRUD de uma API REST utilizando os dois frameworks Java para exemplificar suas implementações. Repositório com exemplos de código: github.com/joaovertelo/code-examples/blob/main/README.md Repositórios apresentado nesse vídeo: github.com/joaovertelo/code-examples/tree/main/java/s...
Como utilizar o GATLING no JAVA? Veja como executar teste de carga com o plugin do MAVEN
Переглядів 1 тис.Рік тому
Nesse vídeo mostro como executar os testes de carga em sua apliação Java a partir do plugin do Gatling para o Maven. Link para o repositório do projeto apresentado no vídeo: github.com/joaovertelo/java-maven-gatling-example Link para o repositório de exemplos de código: github.com/joaovertelo/code-examples Me siga nas outras redes: 🐦 devertelo 📷 devertelo 📹 www.tiktok...
Como funciona o GATLING? A ferramenta utilizada no RINHA DE BACKEND
Переглядів 5 тис.Рік тому
Nesse vídeo mostro como de forma prática como utilizar a ferramenta Gatling para realizar teste de carga em sua apliação. Para esse vídeo foi utilizado o código com cenários criados para o desafio RINHA DE BACKEND. Caso queira saber mais sobre o Rinha é só assistir esse vídeo que explico como foi esse desafio: ua-cam.com/video/2M-mYZD05S0/v-deo.html Repo do desafio: github.com/zanfranceschi/rin...
Os Melhores Plugins do Intellij - Parte 2
Переглядів 2,6 тис.Рік тому
Nesse vídeo listo quais são os plugins utilitários e ferramentas que mais gosto de utilizar no Intellij. Me siga nas outras redes: 🐦 devertelo 📷 devertelo 📹 www.tiktok.com/@devertelo 👨🏽💻 github.com/joaovertelo Capítulos: 0:00 Introdução 0:53 Settings Sync 1:53 Como instalar um plugin 2:12 One Dark Theme 3:09 Mario Progress Bar 3:45 Rainbow Brackets 4:24 Indent Rainbo...
O JAVA TANKOU O RINHA DE BACKEND?
Переглядів 12 тис.Рік тому
Nesse vídeo mostro como foi minha implementação para o desafio Rinha de Backend criado pelo @zanfranceschi Repo do desafio: github.com/zanfranceschi/rinha-de-backend-2023-q3 Minhas implementações: - Spring: github.com/zanfranceschi/rinha-de-backend-2023-q3 - Micronaut: github.com/joaovertelo/rinha-backend-2023-q3-micronaut Idealizador do desafio: zanfranceschi rinhadebac...
Os Melhores Plugins do Intellij
Переглядів 8 тис.Рік тому
Nesse vídeo listo quais são os plugins utilitários e ferramentas que mais gosto de utilizar no Intellij. Me siga nas outras redes: 🐦 devertelo 📷 devertelo 📹 www.tiktok.com/@devertelo 👨🏽💻 github.com/joaovertelo Capítulos: 0:00 Introdução 1:10 Key Promoter X 2:11 Docker 3:08 Swagger e OpenAPI(Swagger) Editor 4:38 Makefile Language 5:15 Json Parser POJO to JSON RoboPOJO...
Como encontrar um erro com o comando GIT BISECT
Переглядів 249Рік тому
Nesse vídeo mostro como que podemos utilizar o comando git bisect para encontrar um commit e suas alterações em um repositório git. Documentação git bisect: git-scm.com/docs/git-bisect Artigo sobre busca binária: blog.pantuza.com/artigos/busca-binaria Me siga nas outras redes: 🐦 devertelo 📷 devertelo 📹 www.tiktok.com/@devertelo 👨🏽💻 github.com/joaovertelo Melhores víd...
Como gerar uma API REST com Swagger e Spring Boot (2023) [OpenAPI Generator]
Переглядів 6 тис.Рік тому
Como gerar uma API REST com Swagger e Spring Boot (2023) [OpenAPI Generator]
Como instalar qualquer versão do Java com SDKMAN! - Várias versões no mesmo ambiente
Переглядів 1,1 тис.Рік тому
Como instalar qualquer versão do Java com SDKMAN! - Várias versões no mesmo ambiente
Show de bola..bela explicação....mas gostaria de entender o motivo de 50000 ser mais lento que 100000 threads virtuais ?
É ELE ALIIIII, É O CABULOSO AQUI!!!!
NÃO TEM CONDIÇÃO A MAGNITUDE E A GRANDEZA QUE O CRUZEIRO ESPORTE CLUBE EXPRESSA
Cara gostei muito do seu canal, quero aprender sobre esse assunto, sou junior em java - back end spring boot, me inscrevi e dei meu LIKE. Vo dar uma olhada no seu canal, tem coisa boa sim
Muito obrigado!
Cara to chegando aqui por que vi o video do AKITA sobre a rinha, ele não participou mas...
Boa noite mano, to chegando atraves desse video, queria saber como funciona teste de carraga com GATLING, vo ta acompanhando vc
Parabéns Man
Show
O cara foi no detalhe do que eu tava precisando. Muito bom!
Tmj
Interessante! Só estou curioso sobre algo! No seu caso você utilizou o OpenAPI para gerar as interfaces! Eu poderia utilizar o OpenAPI apenas para mapear o meu sistema? no caso eu já teria toda a relação de controllers, repositories, services, entities, etc, só utilizaria o Open API para gerar minha documentação! Obrigado...
Pode sim! Nesse exemplo eu mostrei como se gera uma api a partir da documentação do swagger, mas vc consegue a partir de uma API já existente criar a documentação também. Basta fazer as configurações e utilizar as anotações para mapear o seu controller.
Kkkkk é assim mesmo. Pior é refactorzinho na sexta.
Peguei para fazer a rinha de 2023 no meu tempo livre, para mim é um oportunidade de nivelar pois trabalho sozinho, e ver as outras soluções comparar com a minha solução, é uma baita oportunidade. Seu video sobre o gatling foi bem interessante parabéns! foi meu primeiro contato com o gatling rs. Agora vou da uma olhada na doc e testar o projeto valeu!
Boa. Quando trabalha sozinho ou em projetos com stack bem limitada é bom acompanhar o mercado mesmo que a gente acaba ficando pra trás. Abraço!!
Vídeo TOP, muito obrigado por compartilhar
TMJ!!
Cara, muito bom. Aprendi, além da utilização do swagger, atalhos pro inteliJ e como fazer um Crudzinho rápido. Parabéns pelo conteúdo.
Muito obrigado!
obrigado!! tava procurando por isso, ja tinha criado meu dockerfile e o docker compose, faltava a parte de testar o gatling na minha API
Alguem ta tendo o erro de java heap space ???
Você deve tá tendo erro por falta de memória disponível pra aplicação. Da uma verificada nas config de memória alocada para rodar sua app. Colocando 2gb deve funcionar sem problemas -Xmx2048m Lá dentro da pasta do gatling -> bin tem esse script do gatling onde vc pode alterar esse argumento definindo a memória alocada.
ua-cam.com/users/shortsxS_fzLLkwBI?si=4oh5KTCdvaAjyNW0
Muito top a didática, me ajudou bastante, parabéns!! Pra achar um vídeo bem explicado sobre configurar e mexer na documentação Swagger desse jeito é difícil
Muito obrigado pelo feedback!!!
Uma dúvida, eu gero a estrutura, mas quando eu vou subir para um repositório remoto essas classes vão juntas ou eu preciso copiar pro package main?
Essas classes são geradas automaticamente pelo plugin la na pasta target. Ela só vai existir após a execução desse plugin que esta configuração no build do maven
Dúvida: Caso eu queira testar uma Controller de uma aplicação Spring eu preciso estar com o projeto rodando local ou o plugin starta o projeto automaticamente?
Não verifiquei se tem a possibilidade de executar o plugin e aplicação com apenas um comando. Pode ser que exista essa possibilidade. Mas no exemplo do vídeo eu executei a aplicação para depois executar o plugin do Gatling.
Essa abordagem de concorrência onde a runtime tem o próprio mecanismo de escalonamento de rotinas assíncronas é comum em muitas linguagens/runtimes modernas como kotlin, go e nodejs. Acredito que essa feature é um baita avanço pra o java se manter utilizável para lidar com cenários de alta concorrência. Coisa que até então se resolvia trocando de linguagem :)
Legal, gostei Só queria que essa lib também tivesse alguma forma de editar atributos message de patterns específicos, tentei procurar, mas não achei forma trivial 😢
Faz um conteudo pra integrar o swagger (com auth) para pegar um token bearer em outra aplicação apartada ?
Cara, SENSACIONAL as suas dicas.... curti muito. Parabéns pelo ótimo trabalho.
Obrigado parceiro
Pessoal, vale lembrar que esse recurso não é pra ser usado em todos os casos. Virtual Threads, como demonstrado no vídeo, são extremamente poderosas em cenários onde temos blocking das threads (por esperar um recurso do banco de dados, de outra API etc). Neste cenário, quando a thread é bloqueada, a JVM recupera o processo que está na fila e executa enquanto o recurso não é retornado (quando a thread está paranlisada aguardando, dizemos que ela está ociosa: idle). Uma vez que esse recurso é retornado, a thread pausa o processo que foi elicitado na vez e retoma o processo anterior para finalizar sua execução. E assim ocorre com todas as diversas threads que ele elicitar. A JVM tem a inteligência de fazer o manuseio desses recursos e elicitar processos novos enquanto aguarda o anterior, utilizando a mesma thread (ISSO É MUITO PODEROSO). Entretanto, a própria documentação alerta para não usar threads virtuais quando houver um processamento que não tenha blocking, pois neste cenário, a gente perde a vantagem do recurso da jvm elicitar novos processos na mesma thread enquanto aguardo o resultado. Usando threads virtuais em processo que não tenham blocking, iremos perder performance pois essa elicitação de processos na JVM rouba recursos da máquina e, neste caso, usando um recurso que na prática não servirá para nada.
👏👏👏👏👏
o que seria um cenários onde temos blocking?
Seu vídeo está excelente! Seria interessante explorar a interface ScheduledExecutorService, que oferece métodos que permitem programar um atraso para a execução de uma determinada thread. Dessa forma, você não precisaria incluir um sleep no código.
Ótima ideia amigo. Anotado!
Valeeeuuu ajudou muito!
tmj
Ótimo vídeo! Seria legal ter adicionado métricas de uso de memória também entre os comparativos para vermos como o VirtualThreads consegue gerenciar melhor o uso dela.
Mestre Devertelo A) Pensa comigo uma coisa... Me ajuda a entender... B) Estou fazendo essa pergunta, para varios JAva Influencers do YT... C) E o seguinte: - Se mock's/Mackito permite a "manipulacao do resultado", ou seja, eu dou o resultado que eu quiser. Qual o valor de um TESTE, onde eu eu defino o "resultado que eu quero"???? (manipulacao do resultado) Por exemplo: O metodo retorna uma String..... No mock, eu determino que o resultado sera 22.22 (uma Double)... E o Mock "me da o resultado de 22.22". Para que serve um teste desses? Onde ao inves de ele me dar o resultado REAL, ele me da um resulta "maquiado"???
O objetivo do teste unitário é testar justamente a menor unidade do seu código. Só que quando você tem dependencias externas no trecho de código que você está testando, você tem que criar um mock pra aquela dependência para que consiga executar o teste da sua função. Por exemplo: tenho um método que faz o calculo do retorno de um investimento de acordo com a entrada (valor investido), mas para fazer esse calculo eu tenho que buscar qual o valor da taxa no banco ou em outro serviço (dependencia externa). Eu vou realizar o mock dessa consulta da taxa e dado o valor que eu "mockei" eu configuro o que o teste deveria retornar. O teste é justamente para vc certificar que dado aquela entrada x, sua função vai retornar y. Garantindo que caso tenha alguma alteração no seu código que afete sua regra, o teste que vc escreveu irá falhar, garantindo assim a integridade do seu código. Depois vou tentar gravar um vídeo abordando testes unitários para tentar explicar na prática.
Vamos supor que você tem um service, que busca uma lista de usuários, percorre por eles e em cada um você consulta uma API para verificar qualquer coisa, como por exemplo, seu saldo. Se você for fazer o teste do seu service, você vai fazer teste daquilo que escreveu, das regras de negócio que implementou, não tem pq testar algo externo, que não faz parte daquela regra. Nesse caso, você pode mockar essa chamada de API externa para que ela retorne um valor fixo, e testar o service que foi desenvolvido. “Ah mas eu quero testar essa chamada”, nesse caso, crie um teste específico pra isso. Utilizei o exemplo de uma API, mas poderia ser por exemplo o próprio DB. Faz sentido aquilo ser testado nesse teste específico? Seu resultado de valor vai interferir? Então mocke.
Muitíssimo obrigado! Apenas sua explicação deu certo depois de infinitas tentativas para fazer uma API Rest Spring Boot & Swagger funcionar!
Fico feliz por ter te ajudado. Obrigado!
Top ajudou muito, pequena observação, essa musiquinha de fundo dá uma irritação kk
Infelizmente ficou muito alto o volume da música e só percebi depois. Obrigado pelo feedback.
Muito bom.... vlw Meu Nobre.
Muito Obrigado!!
Eu que agradeço pelo compartilhamento @@Devertelo
Antes tarde do que nunca, que continue a evoluir sempre!
tmj parceiro
Top o conteúdo mano.
Obrigado!
vlw mister
Mandou a true😂.
Show man, parabéns!!
Obg
Conteudo top demais irmão! Parabens e continue. 👌
Muito obrigado!
Sensacional, obrigado pela explicação!
Interessante, eu nunca havia dado atenção ao framework micronaut, em um dos artigos que você compartilhou foi interessante conhecer também a copilação para código nativo. Valeu!
A compilação nativa foi um dos pontos que popularizou a utilização do Micronaut nos ultimos anos. Vem crescendo bastante.
Obrigado pelo vídeo. Muito didático
Obrigado!
que video top, explicação incrível! Muita sorte e sucesso irmão
Muito obrigado 💪🏽
Lembrando que você encontra todos meus links aqui no linktr.ee/devertelo
Eu achei muito bom o vídeo, mas acho que a comparação de comparar um pool de 100 threads fixas com um pool com threads virtuais "ilimitado" não foi uma boa comparação.
Obrigado pelo feedback.
Ele deveria ter mostrado o consumo de memória. A questão é que essas 100 threads reais gastaram muito menos memória que as threads virtuais ilimitadas
@@renatocustodio1000 A ideia do vídeo não foi um benchmark, mas posso pensar em algo mais produzido pro futuro e trazer essas métricas. Mas acredito que as virtual threads consomem menos memória que as threads nativas do Java. Pelo menos alguns artigos que li mencionaram que consome mesmo memória.
Opa mano, tenho um forte conhecimento em javascript e node, porem desejo migrar pra java, poderia me informar algum curso para eu realizar ? voce pretendo soltar algum curso da linguagem?
Cara, se você tem uma base boa eu recomendo você a aprender o Java praticando mesmo. Se já tá acostumado com Javascript e Typescript vai ser bem fácil de se adaptar ao Java pois a linguagem é parecida em sintaxe. Recomendo tu ir criando projetos pessoais e assim ir aprendendo a base do Java. Vai e faz uma API REST, depois que tiver com domínio pula pro assíncrono, filas, etc. Agora se quer mesmo um curso eu recomendo consumir os conteúdos gratuitos do Guanabara e Loiane Groner
Perfeito, vou dá uma olhadinha obrigado@@Devertelo
@@Gabriel-wr5zwtmj
Como dica recomendo também o Maratona Java Virado no Jiraya do William Suane tem várias playslists foda lá desde algoritmo com Java até spring boot e muito mais...
muito massa o vídeo. Acredito que não seja algo que vamos lidar no dia a dia, mas para os frameworks é uma feature extremamente importante.
Para as grandes empresas que utilizam Java eu acredito que vai ser bem utilizado. Afinal o uso de processamento assíncrono é cada vez mais utilizado buscando performance. Agora, pra projetos pequenos talvez não necessite.
da hora. brabu. parabéns. véi. vc se ligou que o akita bateu 46.000 inserts usando 16 liguagens incluindo java. com respeito ao gosling, a história da sun, mãe da internet...'o computador é a rede' quantos inserts vc consegue rodando prevayler em java ou python no google colab, dispensando os bancos de dados e o docker mantendo o hardware e configuração e restrição da rinha?
O vídeo do Akita ta salvo aqui pra ser visto ainda. Eu acompanhei algumas implementações dele. Kotlin eu tinha visto, mas Java eu não sabia que ele tinha feito também. A sua pergunta eu não sei se entendi direito. Quantos inserts eu conseguiria sem utilizar o docker?
@@Devertelo Era uma vez, em um mundo de programação encantado 🌟, um desenvolvedor chamado H. Ele enfrentava desafios épicos todos os dias, navegando pelas terras misteriosas do Java e Python. Às vezes, ele usava Docker 🐳, outras vezes não, mas sua determinação nunca vacilava. H. tinha uma missão épica: realizar 100.000 inserções de dados com a mesma configuração de hardware da rinha de backend. 💻🚀 Ele até considerou o uso de TFLOPS/KWh e abraçou a tendência ESG, porque ser verde estava na moda 🌿. No mundo da computação em nuvem, todas as nuvens grandes eram como valentes máquinas virtuais (VMs) 🌥. Elas eram incrivelmente rápidas, a menos que você dissesse a elas para acessar fisicamente os discos, o que tornava tudo mais lento 🐌. Mas quando se tratava de memória, os bancos de dados fingiam ser velozes e ágeis, até que chegava a hora de guardar tudo no disco (emulado) 💾. Em ambos os casos, havia perda de desempenho 😔. H. se perguntou: "E se todos nós, programadores, jogássemos nossos bancos de dados no lixo e abraçássemos o Prevayler em 100% de nossos projetos, com ou sem Docker? Afinal, a recompensa é mais inserções de dados, certo? Desempenho e diversão! É simples assim? E é isso que nos paga 96.000 libras por ano como programadores!" Mas havia uma tristeza em seu coração, pois o Java não tinha vencido a batalha. "Não temos muitos programadores Java no Brasil", ele lamentou. "Mas temos o PrevaylerBR, com mais de 20 anos, o pai dos NoSQL e do SAP HANA, o herói das memórias." E então, ele decidiu realizar um teste na AWS. 🌐 "Tudo bem", ele disse aos seus colegas, "vamos todos rodar na nuvem. Afinal, não é grátis? A AWS, GCP, Tencent, Alibaba, Oracle, Azure, IBM nos oferece $300 free, não é verdade?" Para desafios épicos como esse, eles precisaram de cartões de crédito e foram para a Azure, AWS, GCP, Tencent, Alibaba ou com suas próprias nuvens, usando Ubuntu Cloud ☁. Era um novo desafio, um hackathon inspirado, com um prêmio de 96.000 libras e uma vaga na Code Miner. O Akita amava hackathons, afinal! O GCP estava causando problemas ao tentar subir o `docker-compose.yml`... 😤 Ele teimava que não aceitaria "deploy" e "resources" do `docker-compose.yml`. "GCP, você está errado!", H. protestou. "É uma restrição do desafio, caramba!" Mas então, uma voz sábia sussurrou: "Você está certo. Use o Docker Swarm, resolverá tudo, e venceremos esta batalha!" 🐝💪 E assim, a jornada de H. continuou, cheia de desafios, camaradagem e a busca constante pela excelência na programação. 🚀✨👨💻
@@Devertelo quanto os dados tratados pelo crud armazenados de 50.000 inserts representa? quanto manipular estes dados representam de 3 GB e 1,5 CPU? cheirando overhead de linhas de código gflops/watts baixo.... cheirando próxima....rinha de bot end pra corrigir as lambaças --->
Massa essa nova feature Suma importância conhecer e saber manipular Abx!
Vai ajudar bastante na performance né? top demais
Bom video!
Vlw Herberson
Rapaaaz, vídeo top!
Tmj, Lucão!
Mano que tema é esse que vc tá usando?
ua-cam.com/video/ul92f2zpLYs/v-deo.html Da uma olhada aqui que falo todos os temas que utilizo no intellij