Preparação da entrevista: Resumo das perguntas comuns da entrevista para o Spring / Spring MVC

1. Quais são as vantagens do framework Spring?

  1. Leve: design pouco invasivo com poluição de código extremamente baixa
  2. O mecanismo de DI da Spring reduz a complexidade da substituição de objetos de negócios, melhora a dissociação entre componentes e facilita a integração.Por meio da configuração e da injeção simples de objetos, outras estruturas como Mybatis, Hibernate, Shiro ...
  3. O suporte AOP da Spring permite o gerenciamento centralizado de algumas tarefas comuns, como segurança, transações, logs, etc., proporcionando assim uma melhor reutilização
  4. O ORM e DAO da Spring fornecem boa integração com a estrutura da camada de persistência de terceiros e simplificam o acesso ao banco de dados subjacente
  5. O Spring não força os aplicativos a depender completamente do Spring, os desenvolvedores são livres para escolher parte ou toda a estrutura do Spring

2. O que é AOP?

AOP: Programação Orientada a Aspectos, para programação orientada a aspectos.
"Aspecto" é encapsular a lógica ou a responsabilidade que não está relacionada aos negócios, mas geralmente é chamada pelo módulo de negócios, o que é conveniente para reduzir o código repetitivo do sistema e o acoplamento entre os módulos, propício à operacionalidade e manutenção.

3. Como implementar AOP? Como o Spring AOP é implementado?

  • AOP estático:

Durante a compilação, o aspecto é compilado diretamente no arquivo de bytecode de destino na forma de bytecode. A inserção da lógica do AOP no código durante a compilação requer um compilador e um tecelão proprietários.

Vantagens: O desempenho das classes tecidas não é afetado.
Desvantagens: não é flexível o suficiente

  • AOP dinâmico (proxy dinâmico do JDK):

No tempo de execução, após o carregamento da classe de destino, uma classe de proxy é gerada dinamicamente para a interface e o aspecto é incorporado na classe de proxy. Java introduziu proxies dinâmicos a partir de 1.3 . O princípio de implementação é gerar uma classe de proxy para a interface comercial do proxy , gravar a lógica do AOP na classe de proxy, tecer AOP dinamicamente no tempo de execução e usar a reflexão para executar a lógica de tecelagem.
A implementação principal depende das classes InvocationHandler e Proxy no pacote java.lang.reflect.

Vantagens: Suporte nativo da biblioteca padrão Java, fácil de usar, sem necessidade de fazer referência a pacotes adicionais. É mais flexível que a AOP estática.
Desvantagens: a classe com proxy deve ser uma interface, a flexibilidade é limitada; o uso da reflexão afetará algum desempenho.

  • Geração dinâmica de bytes de código (CGLib):

No tempo de execução, após o carregamento da classe de destino, um arquivo de bytecode é criado dinamicamente para gerar uma subclasse da classe de destino e a lógica do aspecto é adicionada à subclasse.
O CGLib é uma implementação da geração dinâmica de bytes de código. Encapsula a ferramenta de geração de código de bytes Asm. O princípio é gerar uma subclasse da classe de destino após o carregamento do bytecode de destino durante a operação e adicionar lógica de aspecto à subclasse, portanto, use Cglib A implementação do AOP não requer interface .

Vantagens: Pode ser tecida sem interface e possui alta flexibilidade.
Desvantagens: Quando o método de instância da classe de extensão é final, ele não pode ser tecido .


Lógica de uso de proxy no Spring AOP:

  • Se o objeto de destino implementar a interface, o proxy dinâmico do JDK será usado para implementar o AOP por padrão;
  • Se o objeto de destino não implementar a interface, a biblioteca CGLIB será usada e o Spring converterá automaticamente entre o proxy dinâmico JDK e o proxy dinâmico CGLIB.

4. Como implementar proxy dinâmico?

Referência: Java Design Pattern-Agent Pattern

A razão pela qual os proxies dinâmicos suportam apenas interfaces é porque o Java não suporta herança múltipla.
Especificamente, você pode verificar a implementação da classe Proxy .

O diagrama de herança dessas classes de proxy geradas dinamicamente, elas estão destinadas a ter uma classe pai comum chamada Proxy . O mecanismo de herança de Java condenou essas classes de proxy dinâmico por não poderem implementar proxy dinâmico para a classe, porque a herança múltipla não é viável em Java.

5. Como o PageHelper é implementado?

Consulte o código-fonte para entender o PageHelper .

6. O que é IoC? O que é DI?

IoC, Inversão de Controle.

Inversão de controle (IOC) é entregar os direitos de chamada de objetos tradicionalmente controlados diretamente pelo código do programa para o contêiner e montar e gerenciar os componentes do objeto através do contêiner.

Dessa maneira, os objetos são fracamente acoplados, fáceis de testar e reutilizáveis ​​funcionalmente (reduzindo a criação de objetos e o consumo de memória), para que a manutenção, a flexibilidade e a escalabilidade de toda a estrutura do programa se tornem mais altas.
Vantagens:

  1. A injeção de dependência reduz a quantidade de código do aplicativo.
  2. Isso torna o aplicativo fácil de testar, os testes de unidade não precisam mais de singletons e mecanismos de pesquisa JNDI.
  3. O custo mínimo e a intrusão mínima permitem um acoplamento solto.
  4. O contêiner do IOC suporta inicialização com estilo e carregamento lento ao carregar serviços.
  • O Spring fornece três maneiras principais de configurar os beans no contêiner IoC com
    base na configuração do arquivo XML com
    base na configuração da anotação com
    base na configuração explícita da anotação + código java

A injeção de dependência de DI (Injection Dependency) é uma maneira de montagem de contêiner de IoC e injeção de objetos.

Por meio do mecanismo de injeção de dependência, a configuração simples pode injetar os recursos necessários para concluir sua própria lógica de negócios, sem precisar se preocupar com a origem e a implementação específica dos recursos.

Método de injeção DI: A
mola suporta injeção de setter e injeção de construtor.Em geral, a injeção de construtor é usada para injetar as dependências necessárias.Para dependências opcionais, a injeção de setter é uma escolha melhor. A injeção de setter requer classes para fornecer construtores sem parâmetros ou fábricas estáticas sem parâmetros para criar objetos.

7. Como a IoC funciona?

Consulte a seção Inicializando o contexto do aplicativo .

O princípio de realização da IoC é o modo de fábrica mais o mecanismo de reflexão .

8. Quais são os principais módulos da primavera?

Sete módulos do framework Spring

1.
A parte mais básica da estrutura Spring Core fornece um contêiner de IoC para gerenciar beans.

2. O Spring Context
fornece informações de contexto com base em beans e estende as funções JNDI, EJB, email, internacionalização, verificação e programação.

3) O Spring DAO
fornece uma camada de abstração para o JDBC, que elimina a codificação JDBC demorada e analisa os códigos de erro específicos do fornecedor do banco de dados, além de fornecer métodos declarativos de gerenciamento de transações.

4. O Spring ORM
fornece uma camada de integração para as APIs de mapeamento de "objeto / relação" comumente usadas. Isso inclui JPA, JDO, Hibernate, MyBatis etc.

5. O Spring AOP
fornece uma implementação de programação orientada a aspectos que está em conformidade com as especificações da AOP Alliance.

6. Spring Web
fornece informações básicas do contexto de desenvolvimento da Web, que podem ser integradas a outras webs .

7. O Spring Web MVC
fornece a implementação completa do Model-View-Controller para aplicativos da Web.

9. O feijão na mola é seguro?

A mola não garante a segurança do fio nos grãos.
O bean no contêiner de mola padrão é singleton. Quando há uma condição de corrida no singleton, há um problema de segurança do encadeamento.

10. O Spring suporta o escopo de vários beans?

  • singleton: modo singleton, em todo o contêiner Spring IoC, há apenas uma instância do bean definida com singleton
  • prototype: modo Prototype, toda vez que o bean definido por prototype é obtido pelo método getbean do contêiner (injete-o em outro bean ou chame o método getBean () do contêiner programaticamente), uma nova instância do bean

O escopo de solicitação, sessão e sessão global é válido apenas ao usar o Spring em um aplicativo Web

  • request: Para cada solicitação HTTP, o bean definido com a solicitação gerará uma nova instância, ou seja, cada solicitação HTTP gerará uma instância de bean diferente.
  • sessão: a mesma sessão compartilha uma instância do bean.
  • sessão global: Ao contrário do escopo da sessão, todas as sessões compartilham uma instância do Bean.

11. Processo de execução do Spring Mvc?

Referência: fluxo de processamento DispatchServlet
Referência: fluxo de processamento Restante

12. Qual é o papel do @RequestMapping?

@RequestMapping é uma anotação usada para identificar o mapeamento entre o endereço de solicitação http e os métodos da classe Controller.

13. Qual é o papel do @Autowired?

@Autowired é uma anotação que pode anotar variáveis, métodos e construtores de membros da classe, permitindo que o spring conclua a montagem automática de beans.
O padrão @Autowired é a correspondência por classe e @Qualifier especifica a montagem de beans por nome.

14. O que é bota de mola? Por que usar isso?

boot de primavera Pacote de integração de desenvolvimento rápido baseado no framework spring.
Benefícios:

Codificação se torna simples
Configuração se torna simples
Implantação se torna simples
Monitoramento se torna simples

15. Qual é o arquivo de configuração principal da inicialização por mola?

O Spring Boot possui dois tipos de arquivos de configuração: aplicativos e arquivos de inicialização.O
Spring Boot carregará automaticamente esses dois arquivos no caminho de classe.O formato do arquivo é properties ou yml.

O arquivo * .properties está no formato de key = value
* .yml está no formato de key: value
* .yml As propriedades carregadas estão em ordem, mas a anotação @PropertySource não é suportada para importar a configuração. Geralmente, é recomendável usar o arquivo yml para parecer mais vívido

O arquivo de configuração do bootstrap está no nível do sistema e é usado para carregar configurações externas.Por exemplo, as informações de configuração no centro de configuração também podem ser usadas para definir atributos que não serão alterados.O arquivo bootstatp é carregado antes do arquivo do aplicativo
. Perfil atual do aplicativo

16. De que maneiras a inicialização por mola pode alcançar uma implantação quente?

Vou explicar em detalhes mais tarde.

17. O que é o feijão interno do Spring?

Quando um bean é usado apenas como propriedade de outro bean, ele pode ser declarado como um bean interno.Os beans internos geralmente são anônimos e seu escopo geralmente é protótipo.

Tais como:

	<!-- 利用setter注入Dog -->  
    <bean id="d1" class="com.yang.Dog">  
        <property name="name" value="lala"></property>  
        <property name="age" value="9"></property>  
        <property name="style" value="Hashiqi"></property>  
    </bean>  
    <!--利用构造器注入person-->  
    <bean id="d2" class="com.yang.person">  
        <constructor-arg index="0" value="andreny"></constructor-arg>  
        <constructor-arg index="1" value="15454"></constructor-arg>  
        <constructor-arg index="2" value="teacher"></constructor-arg>  
    </bean>  
    
    <bean id="m1" class="com.yang.myshow">  
        <!--内部bean-->
        <property name="dog" ref="d1"></property>  
        <!--内部bean-->
        <property name="p" ref="d2"></property>  
    </bean>  

18. Descreva o ciclo de vida do feijão na estrutura Spring?

1. O contêiner Spring lê a definição do bean no arquivo XML e instancia o bean.
2. O Spring preenche todos os atributos de acordo com a definição do bean.
3. Se o bean implementar a interface BeanNameAware, o Spring passará o ID do bean para o método setBeanName.
4. Se o bean implementa a interface BeanFactoryAware, o Spring passa o beanfactory para o método setBeanFactory.
5. Se houver algum BeanPostProcessors associado ao bean, o Spring os chamará no método postProcesserBeforeInitialization ().
6. Se o bean implementa IntializingBean, chame seu método afterPropertySet. Se o bean declarar um método de inicialização, chame esse método de inicialização.
7. Se houver BeanPostProcessors associado a beans, os métodos postProcessAfterInitialization () desses beans serão chamados.
8. Se o bean implementar DisposableBean, ele chamará o método destroy ().

19. Como injetar array / coleção na primavera?

O Spring fornece a seguinte coleção de elementos de configuração: Os
<list>tipos são usados ​​para injetar uma lista de valores, permitindo o mesmo valor.
<set>O tipo é usado para injetar um conjunto de valores, não é permitido ter o mesmo valor.
<map>Os tipos são usados ​​para injetar um conjunto de pares de valores-chave e chaves e valores podem ser de qualquer tipo.
<props>O tipo é usado para injetar um conjunto de pares de valores-chave e a chave e o valor podem ser apenas do tipo String.

<beans>
  <bean id="at" class="test.array.ArrayTest">
    <property name="names">
      <list>
        <value>aaa</value>
        <value>bbb</value>
      </list>
    </property>
  </bean>
</beans>

20. Quais são os métodos para obter o objeto HttpSession no Spring?

	@RequestMapping("/session")
    public Map test(HttpSession session, String otherParam) {
        ...
    }

Ou

    @RequestMapping("/session")
    public String setSession(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        ...
   }

21. Quais são as maneiras de implementar o ApplicationContext?

Existem três maneiras de conseguir:

1. FileSystemXmlApplicationContext: carregue o arquivo de configuração IoC do sistema de arquivos
2. ClassPathXmlApplicationContext: carregue o arquivo de configuração IoC do sistema de arquivos
3. WebXmlApplicationContext: faça o download do WebApplicationContextUtils

        //加载单个xml文件
        ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
        //加载多个xml文件
        String[] locations = new String[]{"bean1.xml", "bean2.xml", "bean3.xml"};
        ctx = new FileSystemXmlApplicationContext(locations);
 
        //加载单个xml文件
        ctx = new ClassPathXmlApplicationContext("bean.xml");
        //加载多个xml文件
        locations = new String[]{"bean1.xml", "bean2.xml", "bean3.xml"};
        ctx = new ClassPathXmlApplicationContext(locations);
 
        
        ServletContext servletContext = request.getSession().getServletContext();
        ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

22. Quais padrões de design são usados ​​no Spring?

Modo de fábrica, modo singleton, modo proxy, modo adaptador, modo observador ...
Referência: https://www.cnblogs.com/hwaggLee/p/4510687.html

23. Liste vários métodos de montagem automática de molas?

Existem cinco métodos de montagem automática que podem ser usados ​​para instruir o contêiner Spring a usar métodos de montagem automática para injeção de dependência.
(1) não : o método padrão não é realizar a montagem automática e realizar a montagem definindo explicitamente o atributo ref.
(2) byName : ao conectar automaticamente o nome do parâmetro, o contêiner Spring descobre que o atributo de fio automático do bean é definido como byname no arquivo de configuração e, em seguida, o contêiner tenta combinar, montar e bean com o mesmo nome que o atributo bean.
(3) byType : conectando automaticamente o tipo de parâmetro, o contêiner Spring descobre que o atributo autowire do bean é definido como byType no arquivo de configuração e, em seguida, o contêiner tenta corresponder, montar e os atributos do bean têm o mesmo tipo de bean. Se vários beans atenderem às condições, um erro será gerado.
(4) Construtor: Este método é semelhante ao byType, mas precisa ser fornecido aos parâmetros do construtor.Se não houver um tipo de parâmetro de construtor determinado com parâmetros, uma exceção será lançada.
(5) detecção automática: primeiro tente usar o construtor para montar automaticamente, se não funcionar, depois use byType.

Publicado 431 artigos originais · elogiado 329 · 170.000 visualizações

Acho que você gosta

Origin blog.csdn.net/No_Game_No_Life_/article/details/105387969
Recomendado
Clasificación