Mybatis&SpringBoot&Spring cloud

目录

一、Mybatis

1.什么是mybatis?

2.Mybatis的优缺点?

(1)优点:

(2)缺点:   

3.#{}和${}的区别是什么?

4.通常一个mapper.xml文件,都会对应一个Dao接口,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时?方法能重载吗?

5. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

6.Mybatis是如何进行分页的?分页插件的原理是什么?

二、SpringBoot

1.什么是SpringBoot?优点?

2.SpringBoot的核心注解是哪个?它主要由那几个注解组成的?

3.SpringBoot的自动装配原理 

        3.1SpringBoot自动配置原理是扫描?

        3.2 SpringBoot中的start到底是什么?

4.如何理解SpringBoot配置加载顺序?

        4.1什么是yaml?优势?

        4.2Spring Boot 是否可以使用 XML 配置 ?

        4.3bootstrap.properties和application.properties有何区别?

        4.4spring boot 核心的两个配置文件:

5.如何实现Spring Boot应用程序的安全性?

6.什么是CSRF攻击 ?

7.SpringBoot如何实现热部署?

三、Spring cloud

1.SOA、分布式、微服务之间有什么关系和区别?

2.怎么拆分微服务?

3.怎么设计出高内聚、低耦合的微服务?

五、熔断机制(服务挂了怎么处理?)        

1.什么是服务雪崩?什么是服务限流?

2.什么是服务熔断?什么是服务降级?区别是什么?



一、Mybatis

1.什么是mybatis?

        首先是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。其次作为一个半ORM框架,Mybatis可以使用XML或者注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

2.Mybatis的优缺点?

(1)优点:

        <1>与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;

        <2>基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。

        <3>很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。

        <4>能够与Spring很好的集成;

        <5>提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

(2)缺点:   

        <1>SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。

        <2>SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

3.#{}和${}的区别是什么?

${}是字符串替换,#{}是预编译处理使用#{}可以有效的防止SQL注入,提高系统安全性。

Mybatis在处理${}时,就是把${}直接替换成变量的值。而Mybatis在处理#{}时,会对sql语句进行预编译处理,将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
 

4.通常一个mapper.xml文件,都会对应一个Dao接口,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时?方法能重载吗?

        Mapper 接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapper接口生成代理对象 MappedProxy,代理对象会拦截接口方法,根据类的全限定名+方法名,唯一定位到一个MapperStatement并调用执行器执行所代表的sql,然后将sql执行结果返回。

        Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。

(1)Dao接口,就是Mapper接口。
(2)接口的全限名,就是映射文件中的namespace的值;
(3)接口的方法名,就是映射文件中Mapper的Statement的id值;
(4)接口方法内的参数,就是传递给sql的参数。
        当调用接口方法时,通过 “接口全限名+方法名”拼接字符串作为key值,可唯一定位一个MapperStatement,因为在Mybatis中,每一个SQL标签,都会被解析为一个MapperStatement对象。

举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面 id 为 findStudentById 的 MapperStatement。

5. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

        不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;原因就是namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。


6.Mybatis是如何进行分页的?分页插件的原理是什么?

        Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

       分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
 

二、SpringBoot

1.什么是SpringBoot?优点?

        SpringBoot是Spring开源组织下的子项目,是Spring组件的一站式解决方案,主要简化了使用Spring的难度,省区了繁重的配置过程,提供了各种启动器,开发者能够快速上手。它的优点的话大概有以下几种:(1)首先就是开箱即用,远离繁琐的配置;(2)提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和玩不化配置等;(3)没有代码生成,也不需要XML配置。

2.SpringBoot的核心注解是哪个?它主要由那几个注解组成的?

核心注解作用
@SpringBootConfiguration

@SpringBootConfiguration就是对@Configuration注解的封装,主要作用就是用来代替xml进行配置,其主要包括以下三个注解:

@Bean:将配置对象交给Spring容器进行管理;

@ImportResource:无法通过@Configuration方式配u之的对象,可以通过此诸结引入额外的xml配置;

@Import:用于引入一个或者多个@Configuration修饰的配置文件类;

@ComponentScan@ComponentScan注解的作用就是开启组件扫描,可以自动扫描指定包路径下的@Component注解类并将Bean对象注册到context容器中。
@EnableAutoConfiguration
自动装配的核心注解
@EnableAutoConfiguration注解的主要作用就是提供自动装配功能,注解的关键是AutoConfigurationImportSelector(自动配置文件收集器),用于收集配置文件的配置工厂类,然后通过springfactories机制加载配置文件,具体就是从classpath类路径下,找到配置文件META-INF/spring.factories来配置加载AutoConfigure类,并根据注解@Conditional注解的条件进行去重与过滤,进行自动配置并将Bean注入到Spring Context中;

3.SpringBoot的自动装配原理 

        自动装配简单来说就是自动去把第三方组件的Bean装载到IOC容器里面,不需要开发人员再去写Bean相关的一个配置,在Spring Boot应用里面呢,只需要在启动类上去加上 @SpringBootApplication注解就可以去实现自动装配,@SpringBootApplication是一个复合注解,真正去实现自动装配的注解是@EnableAutoConfiguration这样一个注解,自动装配的实现呢,主要依靠三个核心的关键技术,第一个,引入Starter,启动依赖组件的时候,这个组件里面必须要包含一个@Configuratiuon配置类,而在这个配置里面,我们需要通过@Bean这个注解去声明需要装配到IOC容器里面的Bean对象。第二个呢,这个配置类是放在第三方的jar包里面,然后通过SpringBoot中约定优于配置的这样一个理念,去把这个配置类的全路径放在 classpath:/META-INF/spring.factories文件里面,这样的话,SpringBoot就可以知道第三方jar包里面这个配置类的位置,这个步骤啊主要用到了Spring里面的SpringFactoriesLoader来完成的。第三个,SpringBoot拿到所有第三方jar包里面声明的配置类以后,再通过Spring提供的ImportSelector这样一个接口,来实现对这些配置类的动态加载,从而去完成自动装配这样一个动作。在我看来呢,SpringBoot是约定优于配置这一理念下的一个产物,所以在很多的地方,都会看到这一类的思想,它的出现呢,可以让开发人员可以更加聚焦在业务代码的编写上,而不需要去关心和业务无关的配置,其实自动装配的思想,在SpringFramework3.x版本里面的@Enable注解就已经有了实现的一个雏形,@Enable注解是一个模块驱动的意思,也就是说我们只需要增加@Enable注解,就能自动打开某个功能,而不需要针对这个功能去做Bean的配置,@Enable注解的底层呢,也是去帮我们自动去完成这样一个模块,相关Bean的注入的。以上就是我对Spring Boot自动装备配的一个理解。

        3.2 SpringBoot中的start到底是什么?

        使用Spring + SpringMVC框架进行开发的时候,如果需要引入mybatis框架,那么需要在xml中定义需要的bean对象,这个过程很明显是很麻烦的,如果需要引入额外的其他组件,那么也需要进行复杂的配置,因此在springboot中引入了starter;
        starter就是一个jar包,写一个@Configuration的配置类,将这些bean定义在其中,然后再starter包的META-lNF/spring.factories中写入配置类,那么springboot程序在启动的时候就会按照约定来加载该配置类;
        开发人员只需要将相应的startert包依赖进应用中,进行相关的属性配置,就可以进行代码开发,而不需要单独进行bean对象的配置,从而实现一站式开发

4.如何理解SpringBoot配置加载顺序?

在 Spring Boot 里面,可以使用以下几种方式来加载配置。

1)properties文件;

2)YAML文件;

3)系统环境变量;

4)命令行参数;

        4.1什么是yaml?优势?

        YAML 是一种可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。优势的话是相比properties配置文件,它(1)配置有序,在一些特殊场景下,配置有序很关键;(2)支持数组,数组中的元素可以是基本数据类型也可以是对象;(3)简介。相比于properties配置文件,YAML还有一个缺点激素不支持@PropertySocurce注解导入自定义的YAML配置。

        4.2Spring Boot 是否可以使用 XML 配置 ?

        Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。

        4.3bootstrap.properties和application.properties有何区别?

        单纯做SpringBoot开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。

        4.4spring boot 核心的两个配置文件:

        bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
        application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

5.如何实现Spring Boot应用程序的安全性?

        为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

6.什么是CSRF攻击 ?

        CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

7.SpringBoot如何实现热部署?

        这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。
 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

三、Spring cloud

1.SOA、分布式、微服务之间有什么关系和区别?

(1)分布式架构是指单体架构中的各个部分拆分,然后部署到不同的及其或者进程中去,SOA和微服务基本上都是分布式架构的;

(2)SOA是一种面向服务的架构,系统的所有服务都注册在总线上,当调用服务器时,从总线上查找服务信息,然后调用。甚至有excel实现。

(3)微服务是一种更彻底的面向微服务的架构,将系统中各个功能个体抽象成一个个小的应用程序,基本保持一个应用对应的一个服务的架构。

2.怎么拆分微服务?

拆分微服务的时,为了尽量保证微服务的稳定,会有一些基本的准则:

        (1)微服务之间尽量不要有业务交叉;包括所用到的表啊库啊之类的。

        (2)微服务之间只能通过接口进行服务调用,而不能绕过接口直接访问对方的数据;

        (3)高内聚,低耦合。 

3.怎么设计出高内聚、低耦合的微服务?

        高内聚低耦合,是一种从上而下直到微服务设计的方法。实现高内聚低耦合的工具主要有同步的接口调用和异步的时间驱动两种。

二、Api网关、路由问题  (服务多,客户端怎么访问问题?) 

三、微服务间通信问题?

四、服务注册与发现 (微服务治理问题?)

五、熔断机制(服务挂了怎么处理?)        

1.什么是服务雪崩?什么是服务限流?

(1)当服务A调用服务B,服务B调用服务C ,此时大量请求突然访问服务A,加入服务A本身能抗住这些请求,但是服务C抗不出,导致服务C请求堆积,从而服务B请求堆积,从而服务A不可用,这就是服务雪崩,解决方式就是服务降级和服务熔断。

(2)服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流非常重要。

2.什么是服务熔断?什么是服务降级?区别是什么?

(1)服务熔断是指,当服务A调用某个服务B不可用时,上游服务A为了保证自己不受影响,从而不再调用服务B,直接返回一个结果,减轻服务A和服务B的压力,直到服务B恢复。

(2)服务降级指的是,当系统发现系统压力过载的时,可以关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级。

相同点:都可以防止系统崩溃;都让用户体验到某些功能的暂时不可用;

不同的:熔断是下游服务故障触发的,降级是为了降低系统负载。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值