springboot

齐总笔记(代理访问)

01-SpringBoot 入门
https://docs.google.com/document/d/1zYJgqHJR6Zvuwz7Ky37n73TE6utg1Y-n6T-rjSa8AeI/edit?usp=sharing
02-SpringBoot 基础
https://docs.google.com/document/d/1hujSIJtAoijvmNN6KicHqeE2U6qjzNCgKr9JTP2fe5o/edit?usp=sharing
03-SpringBoot 进阶
https://docs.google.com/document/d/12J5ofY_IeEDaTzK3pvCoeZTklVjckRoO_9UF02c1xaU/edit?usp=sharing
04-ajax 技术应用
https://docs.google.com/document/d/1BAA37gTjXHNfgGM9ktdGaMYbS5E09DN_7tlrk_70TS8/edit?usp=sharing
05-动吧项目概述及环境配置
https://docs.google.com/document/d/1IYaHpX_GbD5ywfhkCyelstIsGoufa9vpA3PL27_PRS8/edit?usp=sharing
06-动吧日志模块实现
https://docs.google.com/document/d/1p8-bEcxgqrkmwMVV46CC4z7bP1R9Lw1Dh92tiYpIWys/edit?usp=sharing
07-动吧菜单模块实现
https://docs.google.com/document/d/1MyqUSjTuZ6JIkZxUBueifHjwgT04dPohIbvQZO2PqeQ/edit?usp=sharing
08-动吧角色模块实现
https://docs.google.com/document/d/16mU25PJjamRFiHMYnSxHMqD62A6gK1e0_dTTB_rmZ-4/edit?usp=sharing
09-动吧用户模块实现
https://docs.google.com/document/d/1_pHq7cAUloupY7UbzrMna4fCHo8DNmBUr0oZ8IbEfHM/edit?usp=sharing
10-动吧AOP应用增强
https://docs.google.com/document/d/1jq_vksxgwq2S-D06u_VODixOXheDpaP67AEgNhAJnck/edit?usp=sharing
11-动吧shiro应用增强
https://docs.google.com/document/d/12610_5zn-J8X9nZoLQdf3K5vmx-hBmHCLI3xc1gucJE/edit?usp=sharing
12-动吧项目基本业务增强
https://docs.google.com/document/d/1xd5xRq9WiLanB1djQz3qSLtaN1mXuG1k6LWKlPgRscY/edit?usp=sharing

springboot概述

背景:多年来,随着新功能的增加,spring 变得越来越复杂。只需访问
https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的
所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添
加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。
因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所
有事情。

Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架
之上
使用 spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因
此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring
功能

现在软件市场已经形成一定的规模,系统架构的复杂度也越来越高(例如有单体架构,分布式架构,微服务架构)。软件的整个架构体系正在发生很大变化,在这种变化中,企业现在更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此spring boot诞生。

springboot核心特性

Spring boot是一个脚手架,构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目),其核心主要有如下几个方面:
起步依赖(Starter Dependency)-项目创建时底层帮你关联依赖。
自动配置(Auto Configuration)。
健康检查(Actator)-监控。

springboot项目启动过程

springboot_第1张图片

SpringBoot 项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载,然后检测类上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service等)。假如有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例,假如此Bean指定了生命周期方法,还会调用生命周期方法。当实例创建以后,Spring框架还会基于类的作用域描述,将实例存储到不同作用域的容器中。以实现Bean对象的科学应用。

springboot整合数据库连接池

实际开发中应用程序与数据库交互时,“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术来重用连接Connection对象

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口然后我们的应用程序中耦合与这个接口,便可以方便的切换不同厂商的连接池,常见的连接池有DBCP、C3P0,DRUID,HikariCP等。
通过连接池获取连接的一个基本过程

用户通过DataSource对象的getConnection()方法,获取一个连接。假如池中有连接,则直接将连接返回给用户。假如池中没有连接,则会调用Dirver(驱动,由数据库厂商进行实现)对象的connect方法从数据库获取,拿到连接以后,可以将连接在池中放一份,然后将连接返回给调用方。
springboot_第2张图片
HiKariCP号称是目前世界上最快的连接池
目前在springboot工程默认推荐使用HiKariCP连接池

springboot_第3张图片

springboot整合mybatis框架

Mybatis是一个优秀的持久层框架,底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展

springboot_第4张图片
添加mybatis依赖时,一定指定其版本(version),因为在springboot默认配置中没有设置mybatis框架版本

添加了mybatis依赖以后,spring框架启动时会对mybatis进行自动配置。例如SqlSessionFactory工厂对象的创建。假如需要对mybatis框架进行简易配置,可以打开application.properties文件,在此文件中进行基本配置

springboot_第5张图片
:@Mapper是由MyBatis框架中定义的一个描述数据层接口的的注解(所有的注解只起到一个描述性的作用),用于告诉Spring框架此接口的实现由mybatis创建,并将其实现类对象存储到spring容器.

springboot_第6张图片
在MyBatis框架中定义SQL映射的方式有两种:一种是将SQL映射定义在我们的xml映射文件中,一种方式是借助注解将其声明在接口方法上。我们在实际项目中对于简单的SQL映射可以直接以注解方式进行声明即可,复杂SQL还是要写到xml中,充分利用动态SQL进行设计会更好一些。

批量删除

int deleteObjects(@Param("ids")Integer... ids);




   
       delete from tb_goods
       
       where id in 
       
               #{id}
       
   


springboot 整合springmvc

MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。目的是通过这样的设计使程序结构更加简洁、直观,降低问题的复杂度。其中各个组成部分的职责
为:

视图(View) - UI设计人员进行图形界面设计,负责实现与用户交互。
控制器(Controller)- 负责获取请求,处理请求,响应结果。
模型(Model) - 实现业务逻辑,数据逻辑实现。

我们在软件设计时,通常要遵循一定的设计原则。MVC架构模式的设计中,首先基于单一职责原则(SRP-Single responsibility principle)让每个对象各司其职,各尽所能。然后再基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。这样可以更好提高程序的可维护性和可扩展性

JavaEE技术体系中,MVC设计思想的实现
springboot_第7张图片
**Servlet充当MVC中的Controller,**负责调用model处理业务,负责转发或重定向某个页面,在页面(view)上呈现数据。
模块封装了对Servlet的技术的应用,简化了程序员对请求和响应过程中数据的处理。Spring MVC 是Spring 框架中基于MVC设计思想实现的一个用于处理Web请求的模块。

springboot_第8张图片
DispatcherServlet :前端控制器, 处理请求的入口。
HandlerMapping:映射器对象, 用于管理url与对应controller的映射关系。
Interceptors:拦截器,实现请求响应的共性处理。
Controller:后端控制器-handler, 负责处理请求的控制逻辑。
ViewResolver:视图解析器,解析对应的视图关系(前缀+viewname+后缀)。

Web依赖(提供了Spring MVC核心API,同时会嵌入一个Tomcat服务器)
Thymeleaf依赖(提供了一个视图解析器对象以及数据绑定机制)
Spring Web Starter 提供Spring MVC 依赖支持,并会自动添加一个tomcat依赖,作为嵌入式web服务器使用.thymeleaf是一个html模板引擎,提供了与Spring MVC进行整合的API,可作为MVC架构中Web应用的View层。

springboot综合应用分析

第三篇

Ajax

Ajax (Asynchronous JavaScript and XML) 是一种Web应用技术,可以借助客户端脚本(javascript)与服务端应用进行异步通讯,获取服务端数据以后,可以进行局部刷新。进而提高数据的响应和渲染速度。

Ajax技术最大的优势就是底层异步,然后局部刷新,进而提高用户体验,

Ajax 技术在Jquery中应用

jQuery是一个快速、简洁的JavaScript库框架,是一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

项目分层架构

应用层基于MVC设计思想,进行分层架构设计,其核心目的是将复杂问题简单化,实现各司其职,各尽所能.然后基于“高内聚,低耦合”的设计思想,再实现各对象之间协同,从而提高系统的可维护性,可扩展性

springboot_第9张图片

1.开放接口层:可直接封装 Service 方法暴露成 RPC (远程过程调用)接口;也可通过 Web 封装成 http 接口;同时也可进行网关安全控制、流量控制等。
2.终端显示层:负责各个端的模板渲染并显示。当前主要是 thymeleaf 渲染,JS 渲染,移动端展示等。
3.Web请求处理层:主要是对访问控制进行转发,请求参数校验,响应结果处理等
4.Service 层:相对具体的业务逻辑服务层(核心业务,扩展业务)。
5.Manager 层:通用业务处理层,它有如下特征:
1) 对第三方平台封装的层,预处理返回结果及转化异常信息;
2) 对 Service 层通用能力的下沉,如缓存方案、中间件通用处理;
3) 与 DAO 层交互,对多个 DAO 的组合复用。
6.DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 等进行数据交互。
7.外部接口或第三方平台:包括其它部门RPC开放接口,基础平台,其它公司的 HTTP 接口

总之:分层的目的就是将复杂问题进行拆解,然后分而治,进而提高系统的可扩展性以及可维护性。

项目环境准备

数据库初始化

set names utf8;
source d:/jtsys.sql

IDE配置初始化

统一工作区编码(UTF-8)
统一JDK版本(JDK1.8)
统一MAVEN配置(3.6.3)

项目页面访问流程

springboot_第10张图片

项目

重难点

1.分页处理
分页对象PageObject定义

2.Controller类实现
控制层对象主要负责请求和响应数据的处理,例如,本模块首先要通过控制层对象处理请求参数,然后通过业务层对象执行业务逻辑,再通过VO对象封装响应结果(主要对业务层数据添加状态信息),最后将响应结果转换为JSON格式的字符串响应到客户端

定义控制层值对象(VO),目的是基于此对象封装控制层响应结果(在此对象中主要是为业务层执行结果添加状态信息)

Spring MVC框架在响应时可以调用相关API(例如jackson)将其对象转换为JSON格式字符串。
springboot_第11张图片
3.接口中参数 @Param注解 (用于复数形式的参数?)

4.ip地址获取需要提供一个如下的工具类

public class IPUtils {
	private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
public static String getIpAddr() {
	HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
		String ip = null;
		try {
			ip = request.getHeader("x-forwarded-for");
			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("Proxy-Client-IP");
			}
		if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("WL-Proxy-Client-IP");
			}
			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("HTTP_CLIENT_IP");
			}
			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("HTTP_X_FORWARDED_FOR");
			}
			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getRemoteAddr();
			}
		} catch (Exception e) {
			logger.error("IPUtils ERROR ", e);
		}
		return ip;
	}
}

5.删除数据时,先删除关系数据,再删除自身数据

AOP

AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。

应用场景

实际项目中通常会将系统分为两大部分,一部分是核心业务,一部分是非核业务。在编程实现时我们首先要完成的是核心业务的实现,非核心业务一般是通过特定方式切入到系统中,这种特定方式一般就是借助AOP进行实现

AOP就是要基于OCP(开闭原则),在不改变原有系统核心业务代码的基础上动态添加一些扩展功能并可以"控制"对象的执行。例如AOP应用于项目中的日志处理,事务处理,权限处理,缓存处理等等

应用原理

代理机制
假如目标对象(被代理对象)实现接口,则底层可以采用JDK动态代理机制为目标对象创建代理对象(目标类和代理类会实现共同接口)。
假如目标对象(被代理对象)没有实现接口,则底层可以采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)。

springboot_第12张图片

aop相关术语

切面(aspect): 横切面对象,一般为一个具体类对象(可以借助@Aspect声明)。
通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),例如around,before,after等。
连接点(joinpoint):程序执行过程中某个特定的点,一般指向被拦截到的目标方法。
切入点(pointcut):对多个连接点(Joinpoint)一种定义,一般可以理解为多个连接点的集合。

springboot_第13张图片

业务实践

添加一个简单的日志操作

package com.cy.pj.common.aspect;
@Aspect
@Slf4j
@Component
public class SysLogAspect {
	 @Pointcut("bean(sysUserServiceImpl)")
	 public void doLogPointCut() {}
 
	 @Around("doLogPointCut()")
	 public Object around(ProceedingJoinPoint jp)
	 throws Throwable{
		 try {
		   log.info("start:{}"+System.currentTimeMillis());
		   Object result=jp.proceed();//最终会调用目标方法
		   log.info("after:{}"+System.currentTimeMillis());
		   return result;
		 }catch(Throwable e) {
		   log.error("after:{}",e.getMessage());
		   throw e;
		 }
	 }
}

spring中事务

事务定义

事务(Transaction)是一个业务,是一个不可分割的逻辑工作单元,基于事务可以更好的保证业务的正确性。

事务具备ACID特性,分别是:
原子性(Atomicity):一个事务中的多个操作要么都成功要么都失败。
一致性(Consistency): 例如存钱操作,存之前和存之后的总钱数应该是一致的。
隔离性(Isolation):事务与事务应该是相互隔离的。
持久性(Durability):事务一旦提交,数据要持久保存。

目前市场上在事务一致性方面,通常会做一定的优化,比方说只要最终一致就可以了,这样的事务我们通常会称之为柔性事务(只要最终一致就可以了).

spring中事务管理

spring框架中提供了一种声明式事务的处理方式,此方式基于AOP代理,可以将具体业务逻辑与事务处理进行解耦。也就是让我们的业务代码逻辑不受污染或少量污染,就可以实现事务控制。
在SpringBoot项目中,其内部提供了事务的自动配置,当我们在项目中添加了指定依赖spring-boot-starter-jdbc时,框架会自动为我们的项目注入事务管理器对象,最常用的为DataSourceTransactionManager对象。

Spring 声明式事务是 Spring 最核心,最常用的功能。由于 Spring 通过 IOC 和 AOP的功能非常透明地实现了声明式事务的功能,对于一般的开发者基本上无须了解 Spring声明式事务的内部细节,仅需要懂得如何配置就可以了。但对于中高端开发者还需要了解其内部机制。

spring中事务管理的实现

基于@Transactional 注解进行声明式事务管理的实现步骤分为两步:
启用声明式事务管理,在项目启动类上添加@EnableTransactionManagement,新版本中也可不添加(例如新版Spring Boot项目)。
将@Transactional注解添加到合适的业务类或方法上,并设置合适的属性信息。

其中,代码中的@Transactional注解用于描述类或方法,告诉spring框架我们要在此类的方法执行时进行事务控制,其具体说明如下:。
当@Transactional注解应用在类上时表示类中所有方法启动事务管理,并且一般用于事务共性的定义。
当@Transactional描述方法时表示此方法要进行事务管理,假如类和方法上都有@Transactional注解,则方法上的事务特性优先级比较高。

spring中的事务控制分析
springboot_第14张图片

Spring事务管理是基于接口代理(JDK)或动态字节码(CGLIB)技术,然后通过AOP实施事务增强的。当我们执行添加了事务特性的目标方式时,系统会通过目标对象的代理对象调用DataSourceTransactionManager对象,在事务开始的时,执行doBegin方法,事务结束时执行doCommit或doRollback方法。

spring业务的异步实现

在开发系统的过程中,通常会考虑到系统的性能问题,提升系统性能的一个重要思想就是“串行”改“并行”。说起**“并行”自然离不开“异步**”,今天我们就来聊聊如何使用Spring的@Async的异步注解。

在基于注解方式的配置中,借助@EnableAsync注解进行异步启动声明,Spring Boot版的项目中,将@EnableAsync注解应用到启动类上

Spring boot 是什么? (框架,也可以看成是框架脚手架,做了架子工要做的事情-搭建项目基础骨架的工作人员)

多年 来, 随着 新功 能的 增加 ,spring 变得 越来 越复 杂。 只需 访问https://spring.io/projects 页面 ,我们 就会 看到 可以 在我 们的 应 用 程序 中使 用的所有 Spring 项目 的不 同功 能。 如果 必须 启动 一个 新的 Spring 项目 ,我 们必 须添加构 建路 径或 添加 Maven 依赖
关系 ,配 置应 用程 序服 务器 ,添 加 spring 配置 。因此 ,开始 一个 新的 spring 项目 需要 很多 努力 ,因为 我们 现在 必须 从头 开始
做所有事 情。
Spring Boot 是解 决这 个问 题的 方法 。Spring Boot 已经 建立 在现 有 spring 框架之上 。使用 spring 启动 ,我们 避免 了之 前我 们必 须 做 的所 有样 板代 码和 配置 。因此, Spring Boot 可以 帮助 我们 以最 少的 工作 量, 更加 健壮 地使 用现 有的 Spring功能

Spring boot 核心优势?(启动依赖,自动配置-开箱即用,健康检查-系统监控)

Spring Boot 优点非常多,如:
一、独立运行
Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只要打成一个可执行的
jar包就能独立运行,所有的依赖包都在一个jar包内。
二、简化配置
spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。
三、自动配置
Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他
配置。
四、无代码生成和XML配置
Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的
核心功能之一。
五、应用监控
Spring Boot提供一系列端点可以监控服务及应用,做健康检测

Spring boot 项目的创建方式?( https://start.spring.io)

Springboot中的核心注解有哪个 它主要由哪些注解组成

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下
3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描

如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring及其他技术,而不需要到处找示例代
码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入spring-boot-starter-data-jpa 启动器依赖就能使用了

如何使用Spring Boot实现异常处理?

Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。 我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常
springboot_第15张图片

重难点

Spring boot项目启动时,Bean的初始化过程是怎样的?(查找,加载,读和存储配置,创建和存储实例对象)
Spring boot 项目启动时,Bean对象的依赖注入过程是怎样的?(标记,查找,注入)
Spring 框架中的Bean对象有什么特性?(延迟加载,作用域,生命周期方法)
Spring 框架中单例(singleton)作用域对象特点,应用场景(频繁用)?
Spring 框架中多例(prototype)作用域对象特点,应用场景(稀少用)?
掌握基于Spring boot 实现HikariCP连接池整合与测试应用的过程
掌握基于Spring boot 实现MyBatis框架资源的整合与测试。
掌握基于Spring boot 实现Spring MVC资源的整合与测试。
掌握Mybatis框架中的核心API以及应用关系
掌握Spring MVC 中的核心API对象以及这些对象之间的调用关系。
了解基于连接池获取数据库连接的基本过程。
了解HiKariCP连接池常用API以及设计原理。
了解thymeleaf模板引擎的基本应用过程(基于官方文档可以查询使用)。
项目需求分析的基本过程(调研,分析,原型,评审)。
架构设计的基本过程(架构模式,架构类型,部署形式)。
代码实现的基本过程 (pojo,dao,service,controller)。
项目需求分析的基本过程(调研,分析,原型,评审)。
架构设计的基本过程(架构模式,架构类型,部署形式)。
代码实现的基本过程 (pojo,dao,service,controller)。
客户端与服务端通讯时的请求响应模型?(同步,异步)
Ajax编程的基本步骤(入口对象-XMLHttpRequest),Ajax应用场景?
JQuery框架中ajax函数的基本应用?(ajax(),get(),getJSON(…)…)
JS代码编写过程中断点(debugger)的应用方式?
项目需求调研,分析,原型设计,评审?
项目整体应用分层架构及API设计架构?
项目初始化环境配置(数据库,IDE,MAVEN)及运行?
-----项目部分------
日志管理整体业务分析与实现。
分层架构(应用层MVC:基于spring的mvc模块)。
API架构(SysLogDao,SysLogService,SysLogController)。
业务架构(查询,删除,添加用户行为日志)。
数据架构(SysLog,PageObject,JsonResult,…)。
日志管理持久层映射文件中SQL元素的定义及编写。
定义在映射文件”mapper/sys/SysLogMapper.xml”(必须在加载范围内)。
每个SQL元素必须提供一个唯一ID,对于select必须指定结果映射(resultType)。
系统底层运行时会将每个SQL元素的对象封装一个值对象
(MappedStatement)。
日志管理模块数据查询操作中的数据封装。
数据层(数据逻辑)的SysLog对象应用(一行记录一个log对象)。
业务层(业务逻辑)PageObject对象应用(封装每页记录以及对应的分页信息)。
控制层(控制逻辑)的JsonResult对象应用(对业务数据添加状态信息)。
日志管理控制层请求数据映射,响应数据的封装及转换(转换为json 串)。
菜单管理在整个系统中的定位(资源管理)。
菜单数据的自关联查询实现(查询当前菜单以及这个菜单的上级菜单)。
菜单管理中数据的封装过程(请求数据,响应数据)。
菜单数据在客户端的呈现。(treeGrid,zTree)
角色数据的删除操作?(关系表中数据的删除)
一对多数据的保存?(保存角色的同时也要保存角色和菜单的关系数据)
一对多数据的查询映射?(基于角色id查询角色信息并将对应的菜单信息也查询出来)
一对多数据的保存?(保存用户信息,保存用户和角色的关系数据)
多对一数据的查询映射?(查询用户时查询用户对应的部门信息)。
用户密码的加密实现?(对用户密码进行MD5盐值加密)
AOP 是什么,解决了什么问题,实现原理,应用场景。
AOP 编程基本步骤及实现过程(以基于AspectJ框架实现为例)。
AOP 编程中的核心对象及应用关系。
AOP 思想在Spring中的实现原理分析。
AOP 编程中基于注解方式的配置实现。(@Aspect,@PointCut,@Around,…)
AOP 编程中基于注解方式的事务控制。(@Transactional)
AOP 编程中异步操作的实现?(@EnableAsync,@Async)
AOP 编程中的缓存应用?(@EnableCaching,@Cacheable,@CacheEvict)

FAQ

Java中连接池对象的标准API是什么?(DataSource)
Java中基于DataSource接口定义的连接池有哪些?(DBCP,C3P0,DRUID,HiKariCP,…)
Java中标准JDBC API中哪个对象负责与数据库建立连接?(Driver)
Java 中连接池中的连接也是通过Driver对象获取的吗?
SpringBoot 内置的连接池配置是什么?(HiKariCP)
SpringBoot 连接数据库的配置没有问题,数据库连不上?(服务,驱动)
SpringBoot 整合MyBatis时,为什么需要添加mybatis版本?
@Mapper注解的作用什么?(描述数据层接口,是由mybatis框架定义的规范)
@Mapper 描述数据层接口时,底层会为接口做点什么?(创建实现类,创建实现类对象,并将对象存储到spring容器-bean池。)
框架底层基于@Mapper描述的接口创建实现类对象,其内部做什么?
SpringBoot 整合mybatis时候是否可以同时存在注解和xml的映射?
SpringBoot 整合mybatis时如何实现SQL日志的输出?
Spring MVC 核心组件对象有哪些?(DispatcherServlet,HandlerMapping,…)
Spring MVC 核心组件中DispatcherServlet的作用什么?
Spring MVC 应用中请求参数的映射过程?(直接量,pojo对象)
Spring MVC 应用的请求转发和重定向?(服务端跳转-转发,客户端跳转-重定向)
Thymeleaf 是什么,应用场景,官网的地址?(thymeleaf.org)
Thymeleaf 模板引擎中的标签属性如何使用?(查询官方docs文档)
STS 工具常用快捷键(alt+/,ctrl+shift+t,ctrl+t,ctrl+o,…)
断点操作时f5不能进入方法内部(https://blog.csdn.net/fly_sky333/article/details/79516566)
SpringBoot项目启动时哪些自动配置生效了,如何查看?(配置文件中定义debug=true)
SpringBoot项目默认支持热部署吗,什么时候使用热部署?(需要依赖)
SpringBoot项目中的热部署,会在哪些资源修改以后自动重启tomcat?
SpringBoot项目中的健康检查(监控),可以检查哪些资源?
SpringBoot项目lombok插件安装以后,注解为什么不生效?
Thymeleaf模板引擎常用标签有哪些?(th:each,th:text,th:value,th:href,…)
SpringBoot项目实现过程中遇到过什么问题?(404,400,500,NPE,依赖注入,绑定异常,.)
SpringBoot项目启动时哪些自动配置生效了,如何查看?(配置文件中定义debug=true)
SpringBoot项目默认支持热部署吗,什么时候使用热部署?(需要依赖)
SpringBoot项目中的热部署,会在哪些资源修改以后自动重启tomcat?
SpringBoot项目中的健康检查(监控),可以检查哪些资源?
SpringBoot项目lombok插件安装以后,注解为什么不生效?
Thymeleaf模板引擎常用标签有哪些?(th:each,th:text,th:value,th:href,…)
SpringBoot项目实现过程中遇到过什么问题?(404,400,500,NPE,依赖注入,绑定异常,.)
Ajax技术有什么优势,劣势?(优势:按需异步加载,局部更新,改善用户体验)
Ajax技术中最核心对象?(XMLHttpRequest-入口对象)
客户端JS问题如何调试?(打桩console.log(),debugger,排除法)
对于一些js框架你是如何学习?官网(,demo,实践-浏览器测试,搜索引擎)
项目是如何进行分层设计的?(MVC)。
项目页面是如何设计的? (BootStrap,AdminLTE-网址(adminlte.io))。
客户端向服务端发起一个请求,服务端请求处理的一个过程是怎样的?
-----项目部分------
用户行为日志表中都有哪些字段?(面试时有时会问)
用户行为日志是如何实现分页查询的?(limit)
用户行为数据的封装过程?(数据层,业务层,控制层)
项目中的异常是如何处理的?
页面中数据乱码,如何解决?(数据来源,请求数据,响应数据)
说说的日志删除业务是如何实现?
Spring MVC 响应数据处理?(view,json)
项目你常用的JS函数说几个?(data,prop,ajax,each,…)
MyBatis中的@Params注解的作用?(为参数变量指定其其别名)
Jquery中data函数用于做什么?可以借助data函数将数据绑定到指定对象,语法为data(key[,value]),key和value为自己业务中的任意数据,假如只有key表示取值。
Jquery中的prop函数用于获取html标签对象中”标准属性”的值或为属性赋值,其语法为prop(propertyName[,propertyValue]),假如只有属性名则为获取属性值。
Jquery中attr函数为用户获取html标签中任意属性值或为属性赋值的一个方法,其语法为attr(propertyName[,propertyValue]),假如只有属性名则为获取属性值。

日志写操作事务的传播特性如何配置?(每次开启新事务,没学就暂时搁置)?
日志写操作为什么应该是异步的?(用户体验会更好,不会阻塞用户正常业务)
Spring 中的异步操作如何实现?,(自己直接创建线程或者借助池中线程)
Spring 中的@Async如何应用?(没学就暂时搁置)
项目中的BUG分析及解决套路?(排除法,打桩(log),断点,搜索引擎)
菜单表是如何设计的,都有哪些字段?
菜单列表数据在客户端是如何展示的?(TreeGrid)
菜单删除业务是如何处理的?
菜单编辑页面中上级菜单数据的呈现方式?(zTree)
常用表连接方式,如图-18所示:
角色与菜单之间是什么关系?(Many2Many)
角色与用户之间是什么关系?(Many2Many)
描述一下角色删除业务的实现?
描述一下角色添加业务的实现?
描述一下角色更新业务的实现?
角色和菜单的关系数据如何更新?
用户与角色之间是什么关系?(Many2Many)
描述一下用户查询业务的实现?
描述一下用户添加业务的实现?
描述一下用户更新业务的实现?
resultMap元素应用场景?
1)表中字段名与内存中的映射对象属性不一致(set方法不匹配)
2)表关联查询映射,表嵌套查询映射。
什么是OCP原则(开闭原则)?
什么是DIP原则 (依赖倒置)?
什么是单一职责原则(SRP)?
Spring 中AOP的有哪些配置方式?(XML,注解)
Spring 中AOP 的通知有哪些基本类型?(5种)
Spring 中AOP是如何为Bean对象创建代理对象的?(JDK,CGLIB)
Spring 中AOP切面的执行顺序如何指定?(@Order)
Spring 单体架构项目中事务的控制要通过Connection对象实现,?
Spring 如何保证一个线程一个Connection对象?借助ThreadLocal实现.?
多个事务并发执行时可能会出现什么问题?(脏读,不可重复读,幻影读)
如何理解数据库中的的悲观锁和乐观锁?
你了解事务的隔离级别吗?知道具体的应用场景吗?

springboot集成mybatis的过程

添加mybatis的starter maven依赖
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0
在mybatis的接口中 添加@Mapper注解
在application.yml配置数据源信息

Spring Boot、Spring MVC 和 Spring 有什么区别?

SpringFrame
SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。
当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
SpringMVC
Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的
概念,开发 Web 应用将会变的非常简单。
SpringBoot
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

注解

@Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
@Scope 是Spring中用于定义Bean对象作用域的一个注解,其常用的值有
singleton(整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理),prototype(每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁。)等。
@PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行(是对象创建以后的初始化)。
@PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。

你可能感兴趣的:(基础资料,java)