首页 > 编程语言 >JAVA 基础面试题(框架)

JAVA 基础面试题(框架)

时间:2023-06-07 22:07:13浏览次数:50  
标签:面试题 调用 服务 框架 Spring 事务 bean mybatis JAVA

一、mybatis

       首先,mybatis是一个对象关系映射(orm)框架,是为了解决面向对象与关系数据库的存在互不匹配的现象。也就是说mybatis的关注点在于对象与数据库之间的映射,mybatis会把从数据库中拿到的松散数据进行封装,使开发者直接拿到一个对象。mybatis其实就是对jdbc操作数据库进行的一个封装,使关注者只需要关注sql本身。

      Mybatis需要手写Sql语句,对jdbc的封装程度不如hibernate,但因此也灵活得多; 在使用mybatis时,只需要关注三个部分(1.sql语句 ;2.输入参数; 3.输出参数)。

mybatis实现数据的持久化:

1)开发持久化类po,编写持久化操作Mapper,定义sql语句;

2)获取sqlseesionfactory;

3)获取sqlseesion;

4)用面向对象的方式操作数据库;

5)关闭事务,关闭sqlseesion。

#{}和¥{}

    #{}解析传递的参数数据,sql语句预编译处理,防止sql注入 , 先将#{}替换成 ?再调用preparedStatement的set方法来赋值;

  ${}传递过来的参数原装拼接到sql语句中,${}字符串替换 ,直接替换成变量的值;

如何实现动态sql原理

  使用OGNL从sql参数中计算表达式的值,根据表达式的值拼装动态sql。

二、spring

       spring是一个非常庞大的体系,在它的体系下有熟知的springframework、springdata、springsecurity、springboot、springclouod……

       spring的核心概念有bean、ioc(di)、aop。Spring通过BeanFactory来获取这些类的对象,在配置文件中通过节点将类交给Spring进行管理,ApplicationContext的实现类通过getBean()方法从Spring容器中获取对象,默认为单例的。

ioc:

     将需要创建的对象以池的方式管理,注入到需要的对象中去。

方式: setter注入,接口注入,构造方法注入。

aop:

       面向切面 :把为业务模块所共同调用的逻辑或责任封装起来;减少重复代码,降低耦合,便于后期维护与开发。

      使用场景:事务、错误处理、日志信息 、权限控制;

Spring bean:生命周期

   Spring Bean的生命周期分为四个阶段和多个扩展点。扩展点又可以分为影响多个Bean和影响单个Bean。整理如下:

四个阶段

· 实例化 Instantiation

· 属性赋值 Populate

· 初始化 Initialization

· 销毁 Destruction

bean 实例化过程:

1.实例化 bean 对象,类似于 new XXObject()

2.将配置文件中配置的属性填充到刚刚创建的 bean 对象中。

3.检查 bean 对象是否实现了 Aware 一类的接口,如果实现了则把相应的依赖设置到 bean 对象中。比如如果 bean 实现了 BeanFactoryAware 接口,Spring 容器在实例化bean的过程中,会将 BeanFactory 容器注入到 bean 中。

4.调用 BeanPostProcessor 前置处理方法,即 postProcessBeforeInitialization(Object bean, String beanName)。

5.检查 bean 对象是否实现了 InitializingBean 接口,如果实现,则调用 afterPropertiesSet 方法。或者检查配置文件中是否配置了 init-method 属性,如果配置了,则去调用 init-method 属性配置的方法。

6.调用 BeanPostProcessor 后置处理方法,即 postProcessAfterInitialization(Object bean, String beanName)。我们所熟知的 AOP 就是在这里将 Adivce 逻辑织入到 bean 中的。

7.注册 Destruction 相关回调方法。

8.bean 对象处于就绪状态,可以使用了。

9.应用上下文被销毁,调用注册的 Destruction 相关方法。如果 bean 实现了 DispostbleBean 接口,Spring 容器会调用 destroy 方法。如果在配置文件中配置了 destroy 属性,Spring 容器则会调用 destroy 属性对应的方法。

spring事务:

  1.事务在代码里或者数据库中都可以配置;

  2.事务是并发控制的单位,是用户定义的操作序列。这些操作要么都做,要么都不做,不可分割;

  3.事务是作为单个逻辑工作单元执行的一系列操作;

事务的四大特性:

 1、原子性:事务是一个原子操作,由一系列动作组成;事务的原子性确保动作要么全部完成,要么完全不起作用。

2、一致性:一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败;

3、隔离性:事务之间应该隔离开来;因为可能有许多事务会同时处理相同的数据,每个事务都应该与其他事务有隔离策略。

4、持久性(acid):一旦事务完成,它的结果不会收到影响。通常情况下,事务的结果被写到持久化存储器中。

commit:提交事务; rollback:回滚事务; savepoint:保存点;

三、springmvc

       springmcv是一个基于java的实现了mvc设计模式的请求驱动类型轻量级web框架,通过把model、view、controller分离,将web层进行解耦,把复杂的web应用分为逻辑清晰的几部分,减少出错,简化开发,方便组内人员互相开发配合。

springmvc的工作流程:

1.用户发送请求到前端控制器DispatcherServlet

2.DispatcherServlet通过处理器映射器选择相应的controller

3.DispatcherServlet将请求交给controller处理

4.controller处理完毕后返回modelandview给处理器映射器

5.处理映射器通过视图解析器解析试图

6.根据模型数据渲染视图回应用户

对springmvc的理解:

1.这是一个基于mvc的web框架;

2.springmvc是spring的一个模块,是spring的子容器,子容器可以拿父容器的东西,父容器不能拿子容器的东西;

3.springmvc的DispatcherServlet用于分发请求,使操作变得简单;

4.springmvc三大组件

1)handleMapping:处理器映射器

      用户请求路径到controller的映射;

2)handlerAdapter:处理器适配器

     根据handler的开发方式的不同寻找不同的处理器适配器;

3)viewResolver:视图解析器

    可以解析jsp/freemarkerr/pdf等;

四、ssm

      ssm是springmvc、spring、mybatis等框架的整合,将整个系统划分成为dao层、mapper层、service层、controller层四层。使用springmvc负责请求的转发和视图的管理,spring实现业务对象管理,mybatis作为对数据对象持久化引擎。

五、Spring Cloud

      Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

核心组件:

  Netflix Eureka 服务注册与发现

       当我们的微服务过多的时候,管理服务的通信地址是一个非常麻烦的事情,Eureka就是用来管理微服务的通信地址清单的,有了Eureka之后我们通过服务的名字就能实现服务的调用。

 Netflix Ribbon\Feign : 客户端负载均衡

       Ribbon和Feign都是客户端负载均衡器,它的作用是在服务发生调用的时候帮我们将请求按照某种规则分发到多个目标服务器上,简单理解就是用来解决微服务之间的通信问题。

Netflix Hystrix :熔断器,容错管理工具

       旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

Netflix Zuul : 服务网关

       zuul作为服务网关,我们可以把它看作是微服务的大门,所有的请求都需要经过zuul之后才能到达目标服务,根据这一特性,我们可以把微服务公共的事情交给zuul统一处理,如:用户鉴权,请求监控等。

Spring Cloud Config :分布式配置

        微服务架构中的服务实例非常的多,服务的配置文件分散在每个服务中,每次修改服务的配置文件和重新服务实例都是一个很麻烦的工作,Spring Cloud Config作为分布式配置管理中心就是用来统一的管理服务的配置文件。

Spring Cloud Bus : 消息总线

      消息总线是在微服务中给各个微服务广播消息的一个组件,我们使用消息总线构建一个消息中心,其他微服务来接入到消息中心,当消息总线发起消息,接入的微服务都可以收到消息从而进行消费。

Spring Cloud sleuth :微服务链路追踪

      当我们的应用采用微服务架构之后,后台可能有几十个甚至几百个服务在支撑,一个请求请求可能需要多次的服务调用最后才能完成,链路追踪的作用就是来监控维护之间的调用关系,让程序员方便直观的感受到一个请求经历了哪些微服务,以及服务的请求时间,是否有异常等。


spring cloud 如何实现服务的注册和发现

服务器发布时,指定了服务器的用户名端口,将服务注册到注册中心(zk,eureka),这一过程springcloud自动实现,只需要在main方法上添加。

ribbon和feign的区别

ribbon和feign都是调用其他服务,不过方式不同

1.启动类注解不同,ribbon的启动注解@Ribbonclient,feign的启动类注解@Enablefeignclient ;

2.服务指定位置不同,ribbon在启动注解上声明,feign在定义抽象接口方法上声明@feignclient ;

3.调用方式不同,ribbon需要自己构建http请求,模拟http请求,然后调用template发送给其他服务,步骤相当的繁琐 ;

feign则是在ribbon上进行了改进,采用接口的方式,将其他需要调用的方法,定义成抽象方法即可。


标签:面试题,调用,服务,框架,Spring,事务,bean,mybatis,JAVA
From: https://blog.51cto.com/u_15558311/6434906

相关文章

  • Java基本概念介绍
    Java基本概念介绍Java是一种面向对象的编程语言,由JamesGosling等人在1995年开发而成。Java是跨平台的,这意味着可以在不同的操作系统上运行相同的程序。Java具有许多优点,包括安全性、可移植性、高效性和可扩展性。Java的基本结构Java程序在类中编写。每个Java程序至少需要一个类,并......
  • JAVA的springboot+vue企业客户信息反馈平台,附源码+数据库+文档+PPT
    1、项目介绍企业客户信息反馈平台能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知企业客户信息反馈平台的便捷高效,不仅为客户提供了服务,而且也推广了自己,让更多的客户了解自己。对于企业客户信息反馈而言,若拥有自己的平台,通过平台得到更好的管理,同时提升了形象......
  • 【深入浅出Spring原理及实战】「夯实基础系列」360全方位分析和探究SpringMVC的核心原
    SpringMVC简介SpringWebMVC是一种基于Java的轻量级Web框架,它实现了WebMVC设计模式,使用VC架构模式的思想将web层进行职责解耦。这种请求驱动类型的框架使用请求-响应模型,旨在简化Web开发过程。使用SpringWebMVC,我们可以更加高效地开发Web应用程序,而不必为了每个接口编写一个Ser......
  • JVM内存结构&Java内存模型&Java对象模型
    1.JVM内存结构Java代码是运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把管理的内存划分为若干个不同的数据区域。其中有些区域是随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。而这些区域会被划分为五个区域,具体的如下:方法区:方法区与是......
  • Java设计模式-适配器模式
    适配器模式(AdapterPattern)是一种常见的设计模式,它主要用于在不改变现有系统结构的情况下,将一个类的接口转换成客户端所期望的另一个接口。在本文中,我们将介绍适配器模式的基本概念、实现方法以及优缺点,并探讨适配器模式在Java编程语言中的具体应用。简介适配器模式是一种结构型......
  • pytest + yaml 框架 -32.re 正则解析返回结果
    前言pytest-yaml-yoyo插件可以支持3种表达式提取接口返回结果,jsonpath和jmespath适合解析返回的json数据。非json数据的结果可以用re正则表达式取值。re正则取值访问我的博客地址https://www.cnblogs.com/yoyoketang/test_re.yml用例文件内容#上海悠悠wx:2833404......
  • JDK没有JAVAX.ANNOTATION.JAR包解决方案,无法使用@RESOURCE解决方案
    高版本JDK无法使用@Resource注解解决方案1.普通项目下载javax.annotation-api-1.3.2.jar,并在lib目录中引入即可2.Maven项目Maven项目:在pom.xml中进行配置<dependency><groupId>javax.annotation</groupId><artifactId>jsr250-api</artifactId><ver......
  • Java EE考点复习
    JavaEE一、JavaEE概述javaEE结构的软件系统分层从逻辑上分:表示层、业务层、数据持久层分布式系统开发的优点基于面向对象设计思想的多层结构超强的移植性与复用性侧重于Web应用模式的设计,支持分布式开发集成了众多的信息技术,称为一个功能强大的开发平台相对独立的......
  • 关于Java中多线程
    基本概念什么是进程-->是操作系统资源分配和调度的最小(基本)单位(操作系统分配给当前进程一个内存区域供其使用)什么是线程-->是程序运行的基本单位(等待操作系统分配时间片让CPU执行该内存区域中的代码)进程和线程的关系-->一个进程可以存在多个线程线程是由进程创建的(寄......
  • java 接口
    为什么使用接口接口可以实现java中的“多继承”什么是接口接口的关键字是interface接口中的所有方法都是用抽象abstract修饰的;没有方法体;那个类要用这个接口就在那个类中写接口中的方法接口不能实例化,接口就是抽象的概念实现类中必须实现接口中的所有方法实现的关键字imple......