Principais perguntas da entrevista do Spring Framework

Principais perguntas da entrevista do Spring Framework

Índice

 

 

 

 

 

1. Introdução

Neste artigo, veremos algumas das perguntas mais comuns relacionadas ao Spring que podem surgir durante uma entrevista de emprego.

2. Núcleo da mola

Q1. O que é Spring Framework?

Spring é a estrutura mais amplamente usada para o desenvolvimento de aplicativos Java Enterprise Edition. Os principais recursos do Spring podem ser usados ​​no desenvolvimento de qualquer aplicativo Java.

Podemos usar suas extensões para criar vários aplicativos da Web sobre a plataforma Java EE, ou podemos apenas usar suas provisões de injeção de dependência em aplicativos independentes simples.

Q2. Quais são os benefícios de usar o Spring?

Metas da Primavera para facilitar o desenvolvimento do Java EE. Aqui estão as vantagens de usá-lo:

  • Lightweight: há uma pequena sobrecarga no uso do framework em desenvolvimento

  • Inversion of Control (IoC): O contêiner Spring cuida da fiação das dependências de vários objetos, em vez de criar ou procurar por objetos dependentes

  • Aspect Oriented Programming (AOP): Spring suporta AOP para separar a lógica de negócios dos serviços do sistema

  • IoC container: gerencia o ciclo de vida do Spring Bean e configurações específicas do projeto

  • MVC framework: que é usado para criar aplicativos da web ou serviços da web RESTful, capaz de retornar respostas XML / JSON

  • Transaction management: reduz a quantidade de código clichê em operações JDBC, upload de arquivo, etc., usando anotações Java ou arquivo de configuração XML do Spring Bean

  • Exception Handling: Spring fornece uma API conveniente para traduzir exceções específicas de tecnologia em exceções não verificadas

Q3. Que subprojetos da primavera você conhece? Descreva-os resumidamente.

  • Core - um módulo chave que fornece partes fundamentais da estrutura, como IoC ou DI

  • JDBC - este módulo ativa uma camada de abstração JDBC que elimina a necessidade de fazer a codificação JDBC para bancos de dados de fornecedores específicos

  • ORM integration - fornece camadas de integração para APIs populares de mapeamento objeto-relacional, como JPA, JDO e Hibernate

  • Web - um módulo de integração orientado para a web, fornecendo upload de arquivo em várias partes, ouvintes de servlet e funcionalidades de contexto de aplicativo orientado para a web

  • MVC framework - um módulo da web implementando o padrão de design Model View Controller

  • AOP module - implementação de programação orientada a aspectos, permitindo a definição de interceptores de método limpos e pontos de corte

Q4. O que é injeção de dependência?

Injeção de Dependência, um aspecto da Inversão de Controle (IoC), é um conceito geral que indica que você não cria seus objetos manualmente, mas descreve como eles devem ser criados. Um contêiner de IoC instanciará as classes necessárias, se necessário.

Para obter mais detalhes, consultehere.

Q5. Como podemos injetar feijão na primavera?

Existem algumas opções diferentes:

  • Injeção de Setter

  • Injeção de Construtor

  • Injeção em Campo

A configuração pode ser feita usando arquivos XML ou anotações.

Para mais detalhes, verifiquethis article.

Q6. Qual é a melhor forma de injetar feijão e por quê?

A abordagem recomendada é usar argumentos de construtor para dependências obrigatórias e configuradores para opcionais. A injeção do construtor permite injetar valores em campos imutáveis ​​e facilita o teste.

Q7. Qual é a diferença entre Beanfactory e Applicationcontext?

BeanFactory é uma interface que representa um contêiner que fornece e gerencia instâncias de bean. A implementação padrão instancia os beans lentamente quandogetBean() é chamado.

ApplicationContext é uma interface que representa um contêiner contendo todas as informações, metadados e beans no aplicativo. Ele também estende a interfaceBeanFactory, mas a implementação padrão instancia os beans rapidamente quando o aplicativo é iniciado. Esse comportamento pode ser substituído por beans individuais.

Para todas as diferenças, consultethe reference.

Q8. O que é um feijão da primavera?

Os Spring Beans são objetos Java que são inicializados pelo contêiner Spring IoC.

Q9. Qual é o escopo padrão do Bean no Spring Framework?

Por padrão, um Spring Bean é inicializado comosingleton.

Q10. Como definir o escopo de um bean?

Para definir o escopo do Spring Bean, podemos usar a anotação@Scope ou o atributo "escopo" nos arquivos de configuração XML. Existem cinco escopos suportados:

  • singleton

  • protótipo

  • solicitação

  • sessão

  • sessão global

Para diferenças, consultehere.

Q11. Os Singleton Beans são seguros para threads?

Não, os beans singleton não são seguros para threads, pois a segurança do thread é sobre execução, enquanto o singleton é um padrão de design focado na criação. A segurança do encadeamento depende apenas da própria implementação do bean.

Q12. Como é o ciclo de vida do Spring Bean?

Primeiro, um bean Spring precisa ser instanciado, com base na definição de bean Java ou XML. Também pode ser necessário executar alguma inicialização para colocá-la em um estado utilizável. Depois disso, quando o bean não for mais necessário, ele será removido do contêiner de IoC.

Todo o ciclo com todos os métodos de inicialização é mostrado na imagem (source):

image

Q13. O que é a configuração baseada em Spring Java?

É uma das maneiras de configurar aplicativos baseados em Spring de maneira segura. É uma alternativa à configuração baseada em XML.

Além disso, se você deseja migrar seu projeto da configuração XML para Java, consulteto this article.

Q14. Podemos ter vários arquivos de configuração do Spring em um projeto?

Sim, em grandes projetos, é recomendável ter várias configurações do Spring para aumentar a manutenção e a modularidade.

Você pode carregar vários arquivos de configuração baseados em Java:

@Configuration
@Import({MainConfig.class, SchedulerConfig.class})
public class AppConfig {

Ou carregue um arquivo XML que conterá todas as outras configurações:

ApplicationContext context = new ClassPathXmlApplicationContext("spring-all.xml");

E dentro desse arquivo XML você terá:


Q15. O que é Spring Security?

O Spring Security é um módulo separado da estrutura do Spring que se concentra no fornecimento de métodos de autenticação e autorização em aplicativos Java. Ele também cuida da maioria das vulnerabilidades de segurança comuns, como ataques de CSRF.

Para usar Spring Security em aplicativos da web, você pode começar com uma anotação simples:@EnableWebSecurity.

Você pode encontrar toda a série de artigos relacionados asecurity on example.

Q16. O que é Spring Boot?

O Spring Boot é um projeto que fornece um conjunto pré-configurado de estruturas para reduzir a configuração padrão, para que você possa ter um aplicativo Spring em funcionamento com a menor quantidade de código.

Q17. Cite alguns dos padrões de design usados ​​no Spring Framework?

  • Singleton Pattern: Feijões com escopo único

  • Factory Pattern: Classes de fábrica de feijão

  • Prototype Pattern: Beans com escopo de protótipo

  • Adapter Pattern: Spring Web e Spring MVC

  • Proxy Pattern: Suporte à Programação Orientada a Aspectos da Primavera

  • Template Method Pattern:JdbcTemplate,HibernateTemplate, etc.

  • Front Controller: Spring MVCDispatcherServlet

  • Suporte para DAO SpringData Access Object:

  • Model View Controller: Spring MVC

Q18. Como funciona o protótipo do escopo?

Escopoprototype significa que toda vez que você chamar uma instância do Bean, o Spring criará uma nova instância e a retornará. Isso difere do escopo padrãosingleton, onde uma única instância de objeto é instanciada uma vez por contêiner Spring IoC.

3. Spring Web MVC

Q19. Como obter objetosServletContexteServletConfig em um Spring Bean?

Você pode fazer:

  1. Implementando interfaces compatíveis com o Spring. A lista completa está disponívelhere.

  2. Usando a anotação@Autowired nesses beans:

@Autowired
ServletContext servletContext;

@Autowired
ServletConfig servletConfig;

Q20. O que é um controlador no Spring Mvc?

Simplificando, todas as solicitações processadas porDispatcherServlet são direcionadas para classes anotadas com@Controller. Cada classe de controlador mapeia uma ou mais solicitações para métodos que processam e executam as solicitações com as entradas fornecidas.

Se você precisar dar um passo para trás, recomendamos dar uma olhada no conceito deFront Controller in the typical Spring MVC architecture.

Q21. Como funciona a anotação @Requestmapping?

A anotação@RequestMapping é usada para mapear solicitações da web para métodos Spring Controller. Além de casos de uso simples, podemos usá-lo para mapear cabeçalhos HTTP, vinculando partes do URI com@PathVariable,e trabalhando com parâmetros de URI e a anotação@RequestParam.

Mais detalhes sobre@RequestMapping estão disponíveishere.

For more Spring MVC questions, please check out Spring MVC Interview Questions article.

4. Spring Data Access

Q22. O que é classe Spring Jdbctemplate e como usá-la?

O modelo Spring JDBC é a API principal através da qual podemos acessar a lógica de operações do banco de dados em que estamos interessados:

  • criação e fechamento de conexões

  • executando instruções e chamadas de procedimento armazenado

  • iterando sobreResultSete retornando resultados

Para usá-lo, precisaremos definir a configuração simples deDataSource:

@Configuration
@ComponentScan("org.example.jdbc")
public class SpringJdbcConfig {
    @Bean
    public DataSource mysqlDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
        dataSource.setUsername("guest_user");
        dataSource.setPassword("guest_password");

        return dataSource;
    }
}

Para obter mais explicações, você pode acessarthis quick article.

Q23. Como você habilitaria transações na primavera e quais são seus benefícios?

Existem duas maneiras distintas de configurarTransactions - com anotações ou usando Programação Orientada a Aspectos (AOP) - cada uma com suas vantagens.

Os benefícios de usar Spring Transactions, de acordo comofficial docs, são:

  • Forneça um modelo de programação consistente em diferentes APIs de transação, como JTA, JDBC, Hibernate, JPA e JDO

  • Suporte ao gerenciamento declarativo de transações

  • Forneça uma API mais simples para gerenciamento de transações programáticas do que algumas APIs de transações complexas, como JTA

  • Integra-se muito bem com as várias abstrações de acesso a dados do Spring

Q24. O que é Spring Dao?

Spring Data Access Object é o suporte do Spring fornecido para trabalhar com tecnologias de acesso a dados como JDBC, Hibernate e JPA de uma maneira fácil e consistente.

Você pode, é claro, aprofundar-se mais na persistência, comentire series discutindo a persistência no Spring.

5. Programação Orientada a Aspectos da Primavera (AOP)

Q25. O que é programação orientada a aspectos?

Aspects permite a modularização de interesses transversais, como gerenciamento de transações que abrangem vários tipos e objetos, adicionando comportamento extra ao código já existente, sem modificar as classes afetadas.

Aqui está o exemplo deaspect-based execution time logging.

Q26. O que são Aspect, Advice, Pointcut e Joinpoint no Aop?

  • Aspect: uma classe que implementa questões transversais, como gerenciamento de transações

  • Advice: os métodos que são executados quando umJoinPoint específico comPointcut correspondente é alcançado na aplicação

  • Pointcut: um conjunto de expressões regulares que são combinadas comJoinPoint para determinar seAdvice precisa ser executado ou não

  • JoinPoint: um ponto durante a execução de um programa, como a execução de um método ou o tratamento de uma exceção

Q27. O que é tecelagem?

De acordo comofficial docs,weaving é um processo que vincula aspectos a outros tipos de aplicativos ou objetos para criar um objeto aconselhado. Isso pode ser feito em tempo de compilação, tempo de carregamento ou em tempo de execução. Spring AOP, como outras estruturas Java AOP puras, executaweaving no tempo de execução.

6. Primavera 5

Q28. O que é programação reativa?

A programação reativa trata de aplicativos orientados a eventos, não bloqueadores, que escalam com um pequeno número de threads, com a contrapressão sendo um ingrediente-chave que visa garantir que os produtores não sobrecarreguem os consumidores.

Os principais benefícios da programação reativa são:

  • aumento da utilização de recursos de computação em hardware multicore e multi-CPU

  • e aumento do desempenho, reduzindo a serialização

A programação reativa geralmente é orientada a eventos, em contraste com os sistemas reativos, que são orientados por mensagens. Assim, usar programação reativa não significa que estamos construindo um sistema reativo, que é um estilo arquitetônico.

No entanto, a programação reativa pode ser usada como um meio para implementar sistemas reativos se seguirmos oReactive Manifesto, que é muito importante entender.

Com base nisso, os sistemas reativos têm quatro características importantes:

  • Responsive: o sistema deve responder em tempo hábil

  • Resilient: caso o sistema enfrente alguma falha, ele deve permanecer responsivo

  • Elastic: os sistemas reativos podem reagir às mudanças e permanecer responsivos sob carga de trabalho variável

  • Message-driven: os sistemas reativos precisam estabelecer um limite entre os componentes contando com a passagem de mensagens assíncronas

Q29. O que é Spring Webflux?

Spring WebFlux é a estrutura da web de pilha reativa do Spring e é uma alternativa ao Spring MVC.

Para atingir esse modelo reativo e ser altamente escalável, toda a pilha é sem bloqueio. Confira nossotutorial on Spring 5 WebFlux para detalhes adicionais.

Q30. Quais são os tipos Mono e Flux?

A estrutura WebFlux no Spring Framework 5 usaReactor como sua base assíncrona.

Este projeto fornece dois tipos principais:Mono para representar um único valor assíncrono eFlux para representar um fluxo de valores assíncronos. Ambos implementam a interfacePublisher definida na especificaçãoReactive Streams.

Mono implementaPublishere retorna 0 ou 1 elementos:

public abstract class Mono implements Publisher {...}

Além disso,, Flux implementaPublishere retornaN elementos:

public abstract class Flux implements Publisher {...}

Por definição, os dois tipos representam fluxos, portanto, ambos são preguiçosos, o que significa que nada é executado até consumirmos o fluxo usando o métodosubscribe(). Ambos os tipos são imutáveis, portanto, chamar qualquer método retornará uma nova instância deFlux or Mono.

Q31. Qual é o uso de Webclient e Webtestclient?

WebClient é um componente na nova estrutura Web Reactive que pode atuar como um cliente reativo para executar solicitações HTTP sem bloqueio. Por ser um cliente reativo, ele pode lidar com fluxos reativos com contrapressão e tirar o máximo proveito das Java 8 lambdas. Ele também pode lidar com cenários de sincronização e assíncrona.

Por outro lado, oWebTestClient é uma classe semelhante que podemos usar em testes. Basicamente, é uma camada fina em torno doWebClient.. Ele pode se conectar a qualquer servidor por meio de uma conexão HTTP. Também pode se conectar diretamente a aplicativos WebFlux usando objetos de solicitação e resposta simulados, sem a necessidade de um servidor HTTP.

Q32. Quais são as desvantagens de usar fluxos reativos?

As principais desvantagens do uso de fluxos reativos são:

  • A solução de problemas em um aplicativo reativo é um pouco difícil; certifique-se de verificar nossotutorial on debugging reactive streams para algumas dicas úteis de depuração

  • Há suporte limitado para repositórios de dados reativos, pois os repositórios de dados relacionais tradicionais ainda não adotaram o paradigma reativo

  • Há uma curva de aprendizado extra ao implementar

Q33. O Spring 5 é compatível com versões anteriores do Java?

Para aproveitar os recursos do Java 8, a base de código do Spring foi reformulada. Isso significa que versões mais antigas do Java não podem ser usadas. Portanto, a estrutura requer um mínimo de Java 8.

Q34. Como o Spring 5 se integra com a modularidade Jdk 9?

No Spring 5, tudo foi modularizado, portanto, não seremos forçados a importar jars que podem não ter as funcionalidades que estamos procurando.

Por favor, dê uma olhada em nossoguide to Java 9 modularity para uma compreensão profunda de como essa tecnologia funciona.

Vamos ver um exemplo para entender a nova funcionalidade do módulo em Java 9 e como organizar um projeto Spring 5 com base neste conceito.

Para começar, vamos criar uma nova classe que contém um único método para retornar umString “HelloWorld”. Colocaremos isso em um novo projeto Java -HelloWorldModule:

package com.hello;
public class HelloWorld {
    public String sayHello(){
        return "HelloWorld";
    }
}

Então vamos criar um novo módulo:

module com.hello {
    export com.hello;
}

Agora, vamos criar um novo projeto Java,HelloWorldClient, para consumir o módulo acima, definindo um módulo:

module com.hello.client {
    requires com.hello;
}

O módulo acima estará disponível para teste agora:

public class HelloWorldClient {
    public static void main(String[] args){
        HelloWorld helloWorld = new HelloWorld();
        log.info(helloWorld.sayHello());
    }
}

Q35. Podemos usar Web Mvc e Webflux no mesmo aplicativo?

A partir de agora, o Spring Boot permitirá apenas o Spring MVC ou o Spring WebFlux, pois o Spring Boot tenta configurar automaticamente o contexto, dependendo das dependências existentes em seu caminho de classe.

Além disso, o Spring MVC não pode ser executado no Netty. Além disso, MVC é um paradigma de bloqueio e WebFlux é um estilo sem bloqueio, portanto, não devemos misturar os dois, pois eles têm finalidades diferentes.

7. Conclusão

Neste extenso artigo, exploramos algumas das perguntas mais importantes para uma entrevista técnica sobre o Spring.

Esperamos que este artigo o ajude na sua próxima entrevista da Primavera. Boa sorte!