时隔几个月,我又拿起了springboot…

前言
时隔几个月,我又拿起了后端。之前接触前端比较多,后来被要求学后端,本来为做毕设学的框架这就又拿出来了…

正文

1.MVC三层架构

表现层(controller) :展现给用户的界面

业务逻辑层(service) :针对具体问题的操作,对数据业务逻辑处理;

数据访问层(Dao) :该层对所做事务直接操作数据库,针对数据的增删改查等。


2.H2内存数据库

用Java开发的嵌入式数据库,本身是个类库,可以直接嵌入到应用项目。

用途:同应用程序打包在一起发布,这样可以方便地存储少量结构化数据;另一个用途是用于单元测试;还可以作为缓存。

3.JDBC, ORM, JPA

3.1JDBC

Java数据库连接,即利用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

3.2ORM

对象关系映射,通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中,本质上就是把数据从一种形式转换到另一种形式。具体映射:数据库的表(table)->类(class),记录(record,行数据)->对象(object),字段(field)->对象的属性(attribute)。

3.3JPA

是Spring提供的一种ORM。使用H2存放用户表,并通过JPA操作用户数据。


4.热部署,热加载

热部署和热加载是在应用正在运行的时候,自动更新(重新加载或替换class等)应用的一种能力。

4.1热部署

在服务器运行时重新部署项目,它是直接重新加载整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时更费时间。

4.2热加载

在运行时重新加载class,从而升级应用,热加载的实现原理主要依赖Java的类加载机制,实现方式可以概括未在容器启动时起一条后台线程,定时检测类文件的时间戳变化,如果类的时间截变了,则将类重新载入;对比反射机制,反射是在运行时获取类信息,通过动态的调用来改变程序行为,热加载则是在运行时通过重新加载改变类信息,直接改变程序行为。

5.devtool的原理

spring-boot-devtools使用了两个类加载器,一个加载不会发生更改的类,另一个加载会更改的类(restartclassLoader)后台启动一个文件监听线程,检测的目录中的文件发生变动时,原来的restart classLoader将被丢弃,将会重新加载新的restartclassLoader因为变动后,第三方jar包不再重新加载,只重新加载自定义的类,加载的类比较少,所以重启比较快。自动重启会记录日志,排除一些不需要自动重启的资源,自定义重启类加载器


6.常用注解

SpringBootApplication: 定义在main方法入口处,用于启动spring boot项目;

EnableAutoConfiguration: tspringboot根据类路径中的jar包依赖当前项目进行自动配置;

ImportResource: 加载xml配置,般是放在启动main类上;

value: application.properties定义属性,直接使用@value注入即可;

ConfigurationProperties (prefix="person") ,可以新建一个properties文件, ConfigurationProperties的属性prefix指定properties的配置的前缀,通过location指定properties文件的位置;

restController: 组合controller和responseBody,当开发和一个页面交互数据的控制时,比如bbs-web的api接口需要此注解;

RequestMapping ("/api2/coppe

r“):用来映射web请求(访问路径和参数)、处理类和方法,可以注解在ImportResource: 加载xml配置,一般是放在启动main类上;

value: application.properties定义属性,直接使用@value注入即可;

produce属性:定制返回的response的媒体类型和字符集,或需返回值是json对象;

RequestParam:获取request请求的参数值;

@ResponseBody: 支持将返回值放在response体内,而不是返回一个页面,比如Ajax接口,可以用此注解返回数据而不是页面。此诸结可以放置在返回值前或方法前;

Bean:定义在方法上,在容器内初始化一个bean实例类;

service: 用于标注业务层组件;

Controller: 用于标注控制层组件;Repository: 用于标注数据访问组件,即DAO组件;

Component: 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注;

PostConstruct: spring容器初始化时,要执行该方法;

PathVariable:用于获得请求url中的动态参数;

Autowired: 默认情况下使用@Autowired注释进行自动注入时, spring容器中匹配的候选Bean数目必须有且仅有一个,当找不到一个匹配的Bean时,spring容器将抛出异常,并指出必须至少拥有一个匹配的Bean。

Configuration: 表明这是一个配置信息类。

7.接口

REST:所有web应用都应该遵守的架构设计指导原则,面向资源是它最明显的特征。REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。为什么统一封装接口:现在大多数项目采用前后端分离的模式进行开发,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息。

状态码封装: responseCode和description两个属性;

返回内容封装:包含公共的接口返回时间,状态status, 消息message,以及数据data不优雅的参数校验:后端对前端传过来的参数也是需要进行校验的,如果在controller中直接校验需要用大量的if else做判断。校验的规范出现,hibernate validation是对这个规范的实现, spring validation是对hibernatevalidation的二次封装,用于支持spring mvc参数自动校验。

@validate和@Valid的区别: validate提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制; validate可以用在类型、方法和方法参数上,但是不能用在成员属性上,valid可以用在方法、构造函数、方法参数和成员属性上。

异常统一处理: @ControllerAdvice

8.用到的设计模式

8.1工厂设计模式: spring使用工厂模式

可以通过BeanFactoryApplicationContext创建bean对象。两者对比: BeanFactory, 使用到某个Bean时才会注入,会占用更少的内存,启动速度更快; ApplicationContext, 容器启动时,一次性创建所有bean。

8.2单例设计模式:对于频繁使用的对象,可以省略创建对象所花费的时间,由于new操作的次数减少,因而对系统内存的使用频率也会降低,将减轻GC压力。springPbean的默认作用域就是单例的。实现单例的方式: xml,和注解@scope (value"singleton“)

8.3代理设计模式:在AOP中的应用, spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么spring AOP会使用JDK Proxy, 去创建代理对象,而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理了,这时候spring AOP会使用Cglib,生成一个被代理对象的子类来作为代理。

8.4模板方法:是一种行为设计模式,它定义一个操作中的算法的骨架,而将些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤的实现方式。

8.5观察者模式:是一种对象行为型模式。表示的是对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。

8.6适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,别名为包装器。

8.7装饰者模式:可以动态地给对象添加一些额外的属性或行为。相比于使用继承,装饰器模式更加灵活。

9.spring bean的生命周期

spring对bean进行实例化,默认bean是单例; spring对bean进行依赖注入;如果bean实现了BeanNameAware接口, spring将bean 的id传给setBeanName方法;如果bean实现了BeanFactoryAware接口, spring将调用setBeanFactory()方法,BeanFactory实例传进来;如果bean实现了解释JDBC抽象和DAO模块

通过使用JDBC抽象和DAO模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题,它在各种*不同的数据库的错误信息之上,提供了一个统一的异常访问层。它还利用spring的AOP模块给spring应用中的对象提供事务管理服务。


找工作的同学快收藏起来呀~

#后端##后端开发##高频知识点汇总##秋招##面经#
全部评论
点赞 回复 分享
发布于 2022-08-22 11:36 陕西
哈哈哈哈哈哈,我怀疑你这个是用手机码的
点赞 回复 分享
发布于 2022-08-22 18:35 北京
点赞 回复 分享
发布于 2022-08-23 11:09 江苏

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
3 6 评论
分享
牛客网
牛客企业服务