<?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>DEV Community: Albert Ribeiro</title>
    <description>The latest articles on DEV Community by Albert Ribeiro (@albertribeirov).</description>
    <link>https://dev.to/albertribeirov</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%2F991670%2F703b94d2-ee5a-421d-9f3b-0a2a2d729726.jpeg</url>
      <title>DEV Community: Albert Ribeiro</title>
      <link>https://dev.to/albertribeirov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/albertribeirov"/>
    <language>en</language>
    <item>
      <title>Guia para Trainee e Dev Jr usando Java</title>
      <dc:creator>Albert Ribeiro</dc:creator>
      <pubDate>Sun, 22 Oct 2023 17:04:34 +0000</pubDate>
      <link>https://dev.to/albertribeirov/guia-para-trainee-e-dev-jr-usando-java-1614</link>
      <guid>https://dev.to/albertribeirov/guia-para-trainee-e-dev-jr-usando-java-1614</guid>
      <description>&lt;h2&gt;
  
  
  Conceitos
&lt;/h2&gt;

&lt;p&gt;Como pessoa iniciante, uma parte importante na entrevista técnica é saber conceitos e conseguir explicá-los. A pessoa entrevistadora pode também solicitar exemplos práticos.&lt;br&gt;
Abaixo estão conceitos que vejo serem solicitados para iniciantes e o que seria legal saber. Tudo o que está sublinhado é um link para alguma referência.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd04dwl2thhugs19fwzta.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd04dwl2thhugs19fwzta.jpg" alt="Candidato sendo entrevistado (source: pexels.com)" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;p&gt;É comum mencionarem REST API, mas é bom saber o conceito de API e qual a motivação para criar uma e sua utilidade.&lt;br&gt;
&lt;a href="https://www.redhat.com/pt-br/topics/api/what-are-application-programming-interfaces"&gt;Leitura sobre APIs.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  POO - Programação Orientada a Objetos
&lt;/h2&gt;

&lt;p&gt;Saber os 4 pilares e conseguir explicar. Como são conceitos básicos - no sentido de serem a base - é importante saber.&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/portuguese/news/os-quatro-pilares-da-programacao-orientada-a-objetos-com-javascript/"&gt;Leitura sobre POO.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MVC - Padrão arquitetural Model-View-Controller
&lt;/h2&gt;

&lt;p&gt;Saber explicar o porquê de usar arquitetura MVC - prós e contras, onde é utilizada, como se divide, como funciona.&lt;br&gt;
&lt;a href="https://www.devmedia.com.br/introducao-ao-padrao-mvc/29308"&gt;Leitura sobre MVC.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Microsserviço e Monolito - Tipos de arquitetura
&lt;/h2&gt;

&lt;p&gt;Não existe melhor nem pior, existe a solução mais adequada para o problema. O texto do link explica muito bem as diferenças.&lt;br&gt;
&lt;a href="https://www.atlassian.com/br/microservices/microservices-architecture/microservices-vs-monolith"&gt;Leitura sobre microsserviços versus arquitetura monolítica.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud Computing - Computação na Nuvem
&lt;/h2&gt;

&lt;p&gt;Saber falar por que usar cloud, quais benefícios, riscos e trade-offs. Se tiver utilizado alguma, citar a necessidade e como ela foi atendida. Se conhecer os recursos apenas teoricamente, citar os mais utilizados e o que fazem. Os mais conhecidos são da Amazon - S3, SQS, SNS, EC2, API Gateway.&lt;br&gt;
&lt;a href="https://rockcontent.com/br/blog/cloud-computing/"&gt;Leitura sobre Cloud Computing.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD - Continuous Integration/Continuous Delivery
&lt;/h2&gt;

&lt;p&gt;Saber benefícios de integração contínua e entrega contínua. É importante entender como era feito o processo antes do CI/CD ser criado, porque nessa hora tudo fará sentido.&lt;br&gt;
Existem ferramentas que fazem todo o processo, sendo o Jenkins a mais conhecida e utilizada - talvez por ser gratuita e de código aberto.&lt;br&gt;
&lt;a href="https://www.redhat.com/pt-br/topics/devops/what-is-ci-cd"&gt;Leitura sobre CI/CD.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  VCS - Version Control System - Git, CVS, SVN
&lt;/h2&gt;

&lt;p&gt;Aqui o importante mesmo é entender o Git e como ele funciona. CVS e SVN são antigos e é raro encontrar lugares que ainda o utilizem. Pessoas entrevistadoras não costumam se aprofundar nesse tema, costumam apenas perguntar se você sabe se seguir em frente.&lt;br&gt;
&lt;a href="https://www.zup.com.br/blog/git-github-e-gitlab"&gt;Git e Github&lt;/a&gt; não são a mesma coisa. É importante conhecer e saber quando utilizar as operações rotineiras - criar branches, abrir MR, trocar de branch, enviar código, resolver conflitos. PR (pull request) e MR (merge request) são a mesma coisa - Gitlab chama de MR e Github chama de PR.&lt;br&gt;
&lt;a href="https://blog.geekhunter.com.br/git-svn-e-cvs-comparacao-dos-principais-vcs/"&gt;Leitura sobre Git e outros VCSs.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Análise estática de código - Qualidade
&lt;/h2&gt;

&lt;p&gt;É legal conhecer alguma ferramenta que faça esta análise. A mais utilizada por onde passei foi o Sonarqube. Consiga explicar o que ele faz, por que é bom e citar que ele pode ser incluído no processo de CI/CD como uma barreira que impede que códigos com bugs ou baixa qualidade cheguem aos ambientes.&lt;br&gt;
&lt;a href="https://medium.com/cwi-software/o-sonarqube-n%C3%A3o-%C3%A9-seu-inimigo-6e3c96b9c25b"&gt;Leitura sobre análise estática com Sonarqube.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testes - Unitários e de Integração
&lt;/h2&gt;

&lt;p&gt;Projeto sem testes é um erro, então saiba criar testes unitários e tenha algum conhecimento de testes integrados. O unitário faz parte da base, o integrado dá pra conseguir entender sob demanda e em pouco tempo. Com Java utilizamos muito jUnit e Mockito, mas também existem Wiremock, Faker, Fixture Factory etc. Saiba diferenciar a utilidade de cada um.&lt;br&gt;
Faker, Instancio e Fixture Factory servem para criar objetos falsos, então não precisa estudar todos, só saber quando e por que utilizar.&lt;br&gt;
&lt;a href="https://mmarcosab.medium.com/criando-mocks-e-escrevendo-testes-unit%C3%A1rios-com-junit-5-f54e6407bd7c"&gt;Leitura sobre testes.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Padrões de Projeto, do inglês Design Patterns
&lt;/h2&gt;

&lt;p&gt;Saber que existem pra resolver problemas da área de desenvolvimento de software comum a vários projetos. O &lt;a href="https://refactoring.guru/pt-br/design-patterns"&gt;Refactoring Guru&lt;/a&gt; ajuda bastante com texto. Se quiser um curso, recomendo &lt;a href="https://pt.coursera.org/learn/desenvolvimento-agil-com-padroes-de-projeto"&gt;este aqui do ITA&lt;/a&gt;.&lt;br&gt;
Na entrevista, saber o que são e para que servem. É comum pedirem para citar e explicar 3, e os mais simples que prefiro são Singleton, Façade e Builder. O Strategy é uma excelente resposta, então se você souber, só vai.&lt;/p&gt;

&lt;h2&gt;
  
  
  Java - Versões, recursos e APIs
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Podem solicitar as novidades que você mais gostou desde o Java 8, porque foi a versão que trouxe mais recursos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;É comum perguntarem sobre Collections (List, Set, Map etc), então saiba para que servem, o que fazem e como. Se for o caso, saber algumas implementações dessas interfaces e dar algum exemplo de uso. &lt;br&gt;
Exemplo de pergunta: quero agrupar objetos que não podem se repetir e que estejam ordenados por sua chave natural, qual seria a melhor coleção de dados? Por quê?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sobre recursos novos, citar nova DateTime API, que veio no Java 8. Consiga comparar alguns recursos antigos com os novos.&lt;br&gt;
Stream API (Fluent API) também chegou no Java 8 e é muito utilizada, então saiba dizer o que ela facilita e simplifica. Se souber falar de Lambdas, melhor ainda.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O &lt;a href="https://www.baeldung.com/"&gt;Baeldung &lt;/a&gt;é meu site preferido para aprender e explorar novidades de Java e Kotlin. Ele também tem uma newsletter maravilhosa. Recomendo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spring
&lt;/h2&gt;

&lt;p&gt;Saber que é um framework, para que serve, no que ajuda, qual a função dos módulos mais usados (Boot, Data, Security)&lt;br&gt;
Mais simples: Boot e Data&lt;br&gt;
Complexo, porém importante: Security (opinião pessoal)&lt;br&gt;
&lt;a href="https://www.baeldung.com/"&gt;Leitura sobre Spring&lt;/a&gt;. Neste site tem muita coisa, é tão bem escrito que muitas vezes pesquiso nele antes de conferir a documentação oficial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistência - Gravação de dados no banco de dados
&lt;/h2&gt;

&lt;p&gt;Saber que existe JDBC, mas falar de JPA. Geralmente pedem Spring Data ou Hibernate, sendo que o Spring Data encapsula o Hibernate e adiciona facilidades.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Banco de dados relacional&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Falar qual conhece/usou, saber que existe normalização de dados e por que é importante, saber que existem tamanhos de dados e a importância de analisar pra não haver desperdício de espaço/performance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Banco de dados não-relacional&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se tiver usado, dizer quando ele é mais recomendado que o relacional e por qual motivo, citar performance e formato de dados gravados. Famosos: MongoDB e Redis (Redis também é cache)&lt;/p&gt;

&lt;h2&gt;
  
  
  Mensageria - Event-Driven Architecture
&lt;/h2&gt;

&lt;p&gt;Este é um assunto extenso porque as tecnologias usadas neste modelo arquitetural possuem muitas configurações.&lt;br&gt;
O importante aqui é saber o que é, como funciona, quais os prós e contras. Saber quais ferramentas são mais utilizadas, qual resultado procuram atingir e as diferenças entre elas. Os termos para se atentar são publisher e subscriber - ou Pub e Sub - porque tudo o que importa no início está relacionado a eles.&lt;br&gt;
As mais utilizadas são &lt;a href="https://www.rabbitmq.com/getstarted.html"&gt;RabbitMQ&lt;/a&gt; para mensagens e &lt;a href="https://kafka.apache.org/intro"&gt;Apache Kafka&lt;/a&gt; para eventos, e ambas têm suas versões para nuvem.&lt;br&gt;
No site da Confluent tem vídeos sobre o assunto e que usam Apache Kafka como ferramenta, é bem legal. Não precisa se aprofundar muito.&lt;br&gt;
&lt;a href="https://medium.com/@marcelomg21/event-driven-architecture-eda-em-uma-arquitetura-de-micro-servi%C3%A7os-1981614cdd45"&gt;Leitura sobre event-driven architecture - EDA.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conteinerização - Docker
&lt;/h2&gt;

&lt;p&gt;Não é um assunto trivial e eu não exigiria de um iniciante.&lt;br&gt;
Caso você tenha tido tempo de estudar o assunto, costumam cair perguntas sobre os prós e contras, quais ferramentas utilizam, como os dados são salvos e onde, quais benefícios o Docker adiciona no desenvolvimento e escalabilidade.&lt;br&gt;
Recomendo ver os vídeos da &lt;a href="https://www.youtube.com/@LinuxTips"&gt;LinuxTips&lt;/a&gt; sobre Docker. O material deles é muito bom e o &lt;a class="mentioned-user" href="https://dev.to/gomex_87"&gt;@gomex_87&lt;/a&gt; escreveu um livro gratuito sobre o assunto.&lt;br&gt;
&lt;a href="https://blog.geekhunter.com.br/docker-na-pratica-como-construir-uma-aplicacao/"&gt;Leitura sobre Docker.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>softwaredevelopment</category>
      <category>roadmap</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
