书1_JavaEE概念/项目_22/5/29

《轻量级Java EE企业应用开发实战》-5.29-华

读书 Java EE/写课后习题

一、Java EE 概述

1-简述Java EE 的概念和发展简史。

JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
 Java EE(Java Enterprise Edition)是一种企业级应用的软件架构,同时是一种思想,一套规范。

===================================
Java Enterprise Edition的发展不知不觉已经12年了,不知道大家有没留意,一开始,Java Enterprise Edition简称“J2EE",直到版本5才改名为JavaEE,而现在最新的版本则是Java EE6。
到这里,或许有人会问,为什么会有这么多套JavaEE规范?这些版本的差别是什么?
1.J2EE1.2的出现,主要是将之前各个单独的规范绑定到一起。
2.J2EE1.3,则是继续完善J2EE体系结构。
3.J2EE1.4,主要是加入了一个重要主题:Web Service
4.而JavaEE5,主题则是“简化”,简化之前复杂的J2EE思想,改善开发体验。

2-简述传统企业级应用技术的不足之处。

1.规范太重
2.学习成本太高
3.不够灵活
4.发展缓慢

3-简述轻量级 Java EE 的技术特点,它与传统企业应用技术有哪些区别和联系

1.轻量级架构
2.符合二八定律
3.基于开源技术
4.支持微服务
5.可用性和拓展性
6.支持大型互联网应用
  • Hello World

4-在本地计算机搭建一套 Java EE 企业级应用的开发环境

二、项目管理——Maven

1-简述Maven的主要功能。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
作用
	1.简化构建过程
	2.提供统一的构建系统
	3.提供优质的项目信息
	4.提供最佳实践开发指南允许透明迁移到新功能
maven的作用是:1、在文件中添加相应的配置,maven就会自动的下载相应的jar包;2、下载依赖,只要配置的jar包所依赖的其他jar包都会被它自动下载下来; 3、可以直接通过它打包war或者jar项目。

书1_JavaEE概念/项目_22/5/29_第1张图片

2-使用 archetype:generate 来创建一个 Maven 应用,来构建该 Maven。

mvn archetype:generate -DgroupId=your groupId -DartifactId=your artifactId -DpackName=your packageName

3-Maven 有哪些内置的生命周期?

Maven提供了三套独立的生命周期:clean, default 和 site

4-举例说明 default 生命周期有哪些阶段?

八个步骤
    validate:验证工程是否正确,所有需要的资源是否可用。
    compile:编译项目的源代码。
    test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
    Package:把已编译的代码打包成可发布的格式,比如jar。
    integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
    verify:运行所有检查,验证包是否有效且达到质量标准。
    install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
    Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
举例:
    mvn test 就是在调用default生命周期的test阶段,实际执行了validate到test阶段之间的所有阶段
    mvn clean package 就是在调用clean生命周期的clean阶段和default生命周期的package阶段,实际执行clean生命周期pre-clean和clean阶段和default生命周期validate到package阶段之间的所有阶段

5-简述什么是 POM,以及 Super POM 的作用。

Maven是以项目为中心的设计。POM(project object model)是Maven对一个单一项目的描述。没有POM的话,Maven是毫无用处的——POM是Maven的核心。是POM实现的并驱动了这种以模型来描述的构建方式。
==================================
Super POM是Maven的默认POM。除非显式设置,否则所有POM都继承Super POM。

6-使用你熟悉的 IDE 来创建、运行、导入 Maven 应用。

  • 使用Eclipse创建Maven应用
  • 使用IntelliJ IEDA创建Maven应用

三、Web 应用的基石——Servlet

1-简述 Servlet 的生命周期有哪些?

(1)加载和实例化
当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。
(2) 初始化
实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。
(3)服务
初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。
(4)销毁
当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。

2-列举有哪些常用的 Servlet 容器,并说明它们之间的异同点。

TOMCAT   JETTY
    JBOSS   Resin    WebSphere
=================
TOMCAT 和 JETTY 都是 servlet 引擎,他们都支持标准的 Servlet 规范和 Java EE 的规范。
不同点:在架构上Jetty比Tomcat更为简单
在性能上,Jetty和Tomcat差异不大

3-简述什么是 Servlet 过滤器。

Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改。   
=================================
Servlet过滤器本身并不产生请求和响应对象,它只能提供过滤作用。Servlet过期能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。
================================
Servlet过期负责过滤的Web组件可以是Servlet、JSP或者HTML文件。 

4-Servlet 请求对象,响应对象里面包含哪些内容?

一:响应对象的作用
	针对请求完成数据的响应向页面输出信息,包括文本,图片,视频,音频等。
    响应行  响应头   响应体
    请求行  请求头   请求体

简述什么是 Servlet 会话,有哪些常见的会话跟踪机制。

直接使用这些会话跟踪机制是困难或麻烦的。因此,Servlet规范定义了一个简单的HttpSession接口,该接口允许Servlet容器使用多张方法来跟踪用户的会话,而无须让应用开发者感觉到使用这些方法的差别。
会话简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话。
==========
1.Cookie  2.SSL会话  3.URL重写  4.会话的完整性

Servlet 事件有哪些类型?

更改对象的状态称为事件,事件基本上都是发生什么的东西。
    Context生命周期    
    Context属性改变
    Session生命周期  
    Session属性改变 
    Request
    Request属性改变  

用你熟悉的技术实现一个内嵌 Servlet 容器的应用。

  • 创建基于Servlet的Web应用
  • 在应用里面内嵌Tomcat容器
  • 在应用里面内嵌Jetty容器(Maven插件方式)
  • 在应用里面内嵌Jetty容器(Server方式)

四、流行的开源关系型数据库——MySQL

1-简述MySQL名字的由来。

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。

2-简述MySQL有哪些特点。

1.MySQL是一个数据库管理系统
2.MySQL数据库是关系型的
3.MySQL软件是开源的
4.MySQL非常快速、可靠、可拓展且易于使用
5.MySQL能在客服端/服务器或嵌入式系统工作

3-在本地计算机安装MySQL。

不演示

4-使用MySQL客户端工具实现对数据库的基本操作。

不演示

五、Java操作数据库——JDBC

1-简述JDBC操作数据库需要经过哪几个步骤。

1)加载(注册)数据库驱动(到JVM)。
2)建立(获取)数据库连接。
3)创建(获取)数据库操作对象。
4)定义操作的SQL语句。
5)执行数据库操作。
6)获取并操作结果集。
7)关闭对象,回收数据库资源(关闭结果集–>关闭数据库操作对象–>关闭连接)。

2-简述JDBC两层模型、三层模型的区别。

JDBC支持两层模型,也支持三层模型访问数据库。 两层模型中,一个java Appple或者一个JA-va应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。这个网络可是intranet,比如连接全体雇员的企业内部网,当然也可以是internet。

在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们 返回用户。MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。

3-为什么要使用PreparedStatement来代替Statement?

一.代码的可读性和可维护性.
二.PreparedStatement尽最大可能提高性能.
三.最重要的一点是极大地提高了安全性.

4-简述事务隔离级别。

数据库提供的四种隔离级别:
01:Read uncommitted(读未提交):最低级别,任何情况都会发生。
02:Read Committed(读已提交):可避免脏读的发生。
03:Repeatable read(可重复读):可避免脏读、不可重复读的发生。
04:Serializable(串行化):避免脏读、不可重复读,幻读的发生。
默认为Repeatable read

5-编写一个应用,使用连接池技术来操作数据库。

不演示
  • 使用JDBC操作数据库
  • 使用数据库连接池DBCP

六、一站式应用框架——Spring

1-简述Spring的广义与狭义。

狭义上的 Spring, 是特指 Spring 框架(Spring Framework)。
广义上的 Spring 是指以 Spring 框架为核心的 Spring 技术栈。这些技术栈涵盖了从企业级应用到云计算等各个方面的内容

2-列举Spring涉及哪些设计模式。

1.单例模式
2.工程模式
POJO模式的强大功能来实现企业应用程序的轻量级和最小侵入性的开发
依赖注入(DI模式)实现松耦合,并使系统可以更加全面接口编程。
Decorator和Proxy设计模式进行声明式编程。
使用Template设计模式消除样板代码。

3-简述依赖注入与控制反转是什么关系。

IoC(Inversion of Control):控制反转
DI(Dependency Injection):依赖注入
总结来说,控制反转是一种设计思想,而依赖注入是实现控制反转的方式。

4-为什么我们需要IoC容器?

IOC就为我们带来更大的方便性,比如一个接口的多个实现,我们只需要配置一下就ok了,而不需要再一个个的写工厂来来获取了。这就是IOC为我们带来的模块的松耦合和应用的便利性
为了耦合度降低

5-Spring默认的bean scope是什么?

scope属性可以理解成bean的生命周期
1、默认的值是singleton(単例),spring容器只会创建一个相应的bean实例,所有的对该bean的请求,spring容器都只返回这个实例。
2、还可取值proptotype(原型) ,每次请求都会获得新的bean实例。
3、还可取值request、session、global session等(不常用)

6-简述singleton bean 与 prototype bean 的区别?

singleton 只有⼀个实例,也即是单例模式。
prototype访问⼀次创建⼀个实例,相当于new。
他们的应⽤场合:
1.需要回收重要资源(数据库连接等)的事宜配置为singleton,如果配置为prototype需要应⽤确保资源正常回收。
2.有状态的Bean配置成singleton会引发未知问题,可以考虑配置为prototype。

7-简述OOP编程和AOP编程的联系和区别?

 面向对象的编程(OOP)方法是在面向过程的编程方法基础上进行的改进,而面向方面编程(AOP)方法又是在面向对象编程(OOP)方法的基础上进行改进而来的一种创新的软件开发方法。
1、区别:面向领域不同
2、关系:AOP是OOP的延续和补充。

8-Spring常用的资源接口实现有哪些?

1.常用资源接口--Spring Resource
2.内置资源借口实现--1-UrlResource 2-ClassPathResource 3-FileSystemResource 4-ServletContextResource 5-InputStreamResource 6-ByteArrayResource

9-简述表达式语言SpEL的作用。

能够更加简单,多元的装配Bean,弥补了XML静态注入的不足。
简化开发,减少了一些逻辑、配置的编写,使代码更加简洁。
SpEL表达式的格式:#{表达式}
  • 依赖注入的例子
  • 使用@AspectJ的例子
  • 基于XML的AOP的例子
  • 使用SpEL的例子

七、Spring测试

1-什么是测试金字塔?测试金字塔有哪些层次,分别有哪些特点?

原始测试金字塔由您的测试套件应包含的三个层组成(从下到上):
单元测试--服务测试--用户界面测试
1.单元测试是针对代码单元(通常是类/方法)的测试,单元测试的价值在于能提供最快的反馈,在开发过程中就可以对逻辑单元进行验证。
2.接口测试是针对业务接口进行的测试,主要测试内部接口功能实现是否完整。如主要业务流是否能走通,异常处理是否正确,数据为空时校验等等。
3.集成测试从用户的角度验证产品功能的正确性,测的是端到端的流程,并且加入用户场景和数据,验证整个业务流。集成测试的业务价值最高,它验证的是一个完整的流程,但因为需要验证完整流程,在环境部署、准备用例及实施等方面成本较高,实施起来并不容易。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2j1TUDQr-1654584990908)(https://martinfowler.com/articles/practical-test-pyramid/testPyramid.png)]

2-简述Mock对象的概念。

mock又叫模拟,是Python中一个用于测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为;

3-列举有哪些测试相关的注解。

@BootstrapWith
@ContextConfiguration
@WebAppConfiguration
@ContextHierarchy

4-使用Spring TestContext 框架编写一个测试用例。

不演示

5-使用Spring MVC Test 框架编写一个测试用例。

不演示
  • 服务端测试Spring Web MVC的例子

八、Spring事务管理

1-简述事务应该具备哪4个属性。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

1.原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
2.一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
3.隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4.持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

2-简述Spring事务管理的优势。

跨越不同事务API的一致编程模型,如Java事务API(JTA)、JDBC、hibernate、Java持久性API(JPA)。
支持声明式事务管理。
用于编程式事务管理的简单API比负责事务API要简单。
与spring的数据访问抽象有极佳整合能力。

3-简述通过事务实现资源同步有哪几种方式。

1.高级别的同步方法
高级别的同步方法是首选,通常是使用spring基于模板的持久性集成API,或原生的ORM API来管理本地的资源工厂。这些事务感知型解决方案在内部处理资源创建和重用、清理、映射等,用户无需关注这些细节。用户可以专注于非模板话的持久性逻辑。通常可以使用原生的ORM API或使用JdbcTemplate模板方法来进行JDBC访问。
2.低级别的同步方法
低级别的同步方法包括DataSourceUtils(用于JDBC)、EntityManagerFactoryUtils(用于JPA)、SessionFactoryUtils(用于hibernate)等。当用户希望应用程序代码直接处理原生持久性API的资源类型时,可以使用这些类来确保获得正确的spring框架管理的实例和事务同步等。

4-声明式事务管理和编程式事务管理有什么区别?

声明式事务:通过AOP(面向切面)方式在方法前使用编程式事务的方法开启事务,在方法后提交或回滚。用配置文件的方法或注解方法(如:@Transactional)控制事务。
编程式事务:手动开启、提交、回滚事务。
通俗地去理解两者的区别,即声明式事务只需要“声明”就可以达到事务的效果;编程式事务需要“编程”才可以达到事务效果。

5-用 Spring 编写一个声明式事务管理的示例。

不演示

6-用 Spring 编写一个编程式事务管理的示例。

不演示
  • 声明式事务管理的例子

九、MVC模式的典范——Spring Web MVC

1-简述Spring Web MVC 的作用。

MVC=Model(数据类型)+View(视图)+Controller(控制器)
Spring框架主要解决了接收请求与处理响应的问题,也解决了V-C的交互问题。
传统的JavaEE开发由于Servlet组件的数量太大、代码量多,在管理项目上存在难度,并且会有大量的Servlet对象占用内存!而SpringMVC非常大的程度上简化了开发量。

2-简述 DispatcherServlet 所使用的设计模式。

策略模式+工厂模式

3-简述 Spring web MVC 过滤器的作用。

过滤器Filter是通过实现java.servlet.filter接口实现过滤器功能,作用是用于对传入的request和响应的response进行一些处理,比如对请求参数进行校验,或者设置、检验头部信息,再或者对一些非法行为进行校验。由实现的接口可知,过滤器是依赖于servlet容器。所以由于过滤器不依赖于spring容器,它也就无法获取到容器中的对象。

4-在 Spring Web MVC 中,常用的控制器有哪些?

@Controller--@RestController

5-简述Spring Web MVC 的异常处理。

Spring MVC中提供了一个通用的异常处理机制,它提供了一个成熟、简洁并且清晰的异常处理方案。当使用Spring MVC开发Web应用时,利用这套现成的机制进行异常处理也更加自然并且高效。

6-简述 Spring Web MVC 的CORS处理。

CORS=Cross-Origin Resource Sharing,跨域资源共享。它是W3C的一个标准,它允许你指定哪些类型的跨域请求被授权,而不是使用基于iframe或jsonp这类安全性与功能较弱的解决方案。
Spring MVC HandlerMapping 的实现为CORS提供了内置支持。在成功地将请求映射到处理程序之后,HandlerMapping 的实现将检查请求和处理程序的CORS配置,并采取进一步的操作。预备请求直接处理,而简单的和实际的CORS请求被拦截、验证,并设置了所需的CORS响应headers 。

7-简述 Spring web MVC 的HTTP缓存的实现方式。

Spring MVC 支持HTTP协议的 Last-Modified 缓存机制。
1. 在客户端地一次输入URL时,服务器端会返回内容和状态码200, 表示请求成功,同时会添加一个“Last-Modified”属性,表示该请求资源的最后修改时间
2. 客户端第二次请求此URL时,客户端会向服务器发送请求头 “IF-Modified-Since”,如果服务端内容没有变化,则自动返回HTTP304状态码(只返回相应头信息,不返回资源文件内容,这样就可以节省网络带宽,提供响应速度和用户体验)

8-用 Spring Web MVC 编写一个示例,以响应不同的数据格式。

不演示
  • 基于Spring Web MVC的JSON类型的处理
  • 基于Spring Web MVC的XML类型的处理

十、全能安全框架——SpringSecurity

1-简述基于角色的访问控制。

既然角色代表了可执行的操作这一概念,一个合乎逻辑的做法是在软件开发中使用角色来控制对软件功能和数据的访问。这种权限控制方法就称作基于角色的访问控制(RBAC)

2-简述 Spring Security 的认证模型。

认证:用户登录
授权:判断用户拥有什么权限,可以访问什么资源
安全防护,防止跨站请求,session攻击

3-举例 Spring Security 的新特性。

1.为OAuth 2.0 登录添加支持
2.支持初始响应式编程

4-使用 Spring Security 编写一个示例,以实现基于角色的访问控制。

不演示
  • 基于Spring Security安全认证

十一、轻量级持久层框架——MvBatis

1-简述 MyBatis 的作用。

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的POJOs(Plain Old 映射成数据库中的记录。
优点:
1、简单易学
2、灵活
3、解除sql与程序代码的耦合
4、提供映射标签,支持对象与数据库的orm字段关系映射  
5、提供对象关系映射标签,支持对象关系组建维护 
6、提供xml标签,支持编写动态sql。 
缺点: 
1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。  
2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
4、二级缓存机制不佳。

2-简述 MyBatis 与 Hibernate 对比有哪些差异。

mybatis与hibernate一样是个orm数据库框架。它与hibernate区别是非常大的,有以下几点:
总结起来:
mybatis:小巧、方便、高效、简单、直接、半自动
hibernate:强大、方便、高效、复杂、绕弯子、全自动

3-简述 MyBatis 的四大核心组件及其生命周期。

SqlSessionFactoryBuilder (构造器):它会根据配置或者代码来生成 SqlSessionFactory,采用的是分部构建的 Builder 模式。
SqlSessionFactory(工厂接口):依靠它来生成 SqlSession,使用的是工厂模式。
SqlSession(会话):一个既可以发送 SQL 执行返回结果,也可以获取 Mapper 的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是 MyBatis 提供的 SQL Mapper 接口编程技术,它能提高代码的可读性和可维护性。
SQL Mapper(映射器):MyBatis 新设计存在的组件,它由一个 Java 接口和 XML 文件(或注解)构成,需要给出对应的 SQL 和映射规则。它负责发送 SQL 去执行,并返回结果。
一、SqlSessionFactoryBuilder
SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。
二、SqlSessionFactory
SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory ,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。
由于 SqlSessionFactory 是一个对数据库的连接池,所以它占据着数据库的连接资源。如果创建多个 sqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现宕机等情况,所以尽量避免发生这样的情况。因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。
三、SqlSession
如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory ,否则数据库资源就很快被消耗完,系统就会瘫痪,所以用 try...catch...finally...语句来保证其正确关闭。
四、Mapper
Mapper 是一个接口,它由 SqlSession 所创建,所以它的最大生命周期至多和 SqlSession 保持一致,尽管它很好用,但是由于 SqlSession 的关闭,它的数据库连接资源也会消失,所以它的生命周期应该小于等于 SqlSession 的生命周期。Mapper 代表的是一个请求中的业务处理,所以它应该在一个请求中,一旦处理完了相关的业务,就应该废弃它。

img

十二、 MyBatis的高级应用

1-简述 MyBatis 配置文件包括哪些内容。

1.主配置文件 mybatis-config.xml
mybatis主配置文件,提供mybatis全局设置的,包含的内容日志,数据源,mapper文件位置
	1.1 settings部分
	1.2 typeAliases别名
	1.3 配置环境
	1.4 使用数据库属性配置文件--jdbc.properties
	1.5 mapper文件的两种指定方式

2-简述 MyBatis Mapper 映射文件包括哪些内容。

cache 设置缓存的;
cache-ref引用缓存空间的;
resultMap设置结果集对象格式的;
sql定义sql语句中可重用元素的;
insert,select,update,delete CURD的标签;

3-列举 MyBatis 支持哪些动态 SQL。

if标签
where标签
choose when otherwise标签
set标签
trim标签
bind标签
sql和include标签 foreach标签

4-列举常见的 MyBatis 插件。

Mybatis PageHelper分页插件
代码生成插件mybatis-generator
Mybatis Plus插件
Mybatis通用Mapper插件

5-编写一个 MyBatis 的示例,实现对数据库表的增删改查。

不演示

使用MyBatis操作数据库

十三、模板引擎——Thymeleaf

1-为什么选择 Thymeleaf 而不是 JSP?

第一,Thymeleaf 比 JSP 的代码更加接近 HTML,没有奇怪的标签,只是增加一些有意义的属性。
第二,Thymeleaf 支持 HTML5 标准;JSP 如果要支持 HTML5标准,就需要新版的Spring框架来支持。
第三,JSP需要部署到Servlet开发服务器上,并启动服务器,如果服务器不启动,JSP页面就不会渲染;而Thymeleaf即使不部署,也能直接在浏览器中打开它。

2-列举 Thymeleaf 标准方言有哪些内容。

Thymeleaf的可扩展性很强,它支持自定义你自己的模板属性集(或事件标签)、表达式、语法及应用逻辑,它更像一个模板引擎框架。
然而,秉着“开箱即用”的原则,Thymeleaf提供了满足大多数情况下的默认实现-标准方言(Standard and SpringStandard dialects)。你可以在模板中识别出这些被使用的标准方言,因为他们都以th属性开头,如

值得注意的是,Standard和SpringStandard方言的用法几乎相同,但是SpringStandard包括了Spring MVC集成的具体特征(比如用Spring Expression Language来替代OGNL)。
https://blog.csdn.net/mudalu626/article/details/40506809

3-简述如何设置 Thymeleaf 属性值。

1.设置属性值
我们可以在标签中设置(或修改)属性及值。
2.设置任意属性的值
使用th:attr只需要一个表达式来为html标签属性赋值。
3.为特定属性设置值
采用th:attr=“value=xx”的方式设置值,是一个相当丑陋的标记,th:attr在模板中很少使用。通常,您将使用【th:属性】标签的方式,其任务是设置特定的标签属性。
4.一次设置多个值
有两个相当特殊的属性称为th:alt-title和th:lang-xmllang,可用于同时将两个属性设置为相同的值。
5.附加和前置
Thymeleaf 还提供th:attrappend和th:attrprepend属性,将其评估结果附加(后缀)或前置(前缀)到现有属性值。
6.设置布尔属性
HTML 有布尔属性的概念,属性没有值存在意味着值是“真”。在 XHTML 中,这些属性只取 1 个值,即它本身。
7.自定义属性处理器
Thymeleaf 提供了一个默认的属性处理器,允许我们设置任何属性的值,即当该标签不存在Thymeleaf中时,可以使用自定义的属性值。
8.支持 HTML5 友好的属性和元素名称
可以使用完全不同的语法以 HTML5更友好的方式将处理器应用于您的模板。

4-简述 Thymeleaf 迭代器与条件语句的用法。

迭代器是程序中常见的设计模式,是可在容器上遍访元素的接口。
1.基本的迭代    2.状态变量
	th:each
条件语句
1.if和unless		2.switch语句		

5-简述 Thymeleaf 模版片段的用法。

一、模板片断的定义
可以是html标签,也可以使用th:fragment属性定义片断。
二、引用片断
1、使用th:insert属性插入片断,除此之外,还可以使用th:replace和th:include插入。
语法:
(1) th:insert="~{模板名称}"
插入模板的整个内容
(2) th:insert="~{模板名称::选择器}"
插入模板的指定内容,选择器可以对应th:fragment定义的名称,也可以用类似JQuery选择器的语法选择部分片断。

6-编写一个 Thymeleaf 的示例。

不演示
  • 基于Thymeleaf的Web应用

十四、锦上添花——Bootstrap

1-简述 Bootstrap 的网格系统。

Bootscript是目前比较受欢迎的前端框架。其次,它是基于HTML、CSS、JAVASCRIPT的,它使得Web开发比较的快捷。(主要是栅格系统使得布局更加的方便)。最后,它还是GitHup上发布的开源产品。
Bootstrap 的网格系统:Bootstrap包含了一个响应式地,移动设备优先的,不固定的网格系统,可以随着设备或者视口大小的增加而适当的扩展到12列。(Bootstrap代码从小屏幕设备开始,然后扩展到大屏幕设备上的组件和网格)。

2-简述 Bootstrap 的媒体查询。

Media Queries能在不同的条件下使⽤不同的样式,使页⾯在不同在终端设备下达到不同的渲染效果。具体来说,Media Queries的使⽤⽅法如下。
@media 媒体类型and (媒体特性){你的样式}

3-简述 Bootstrap 如何实现移动设备及桌面设备的切换。

你是不是不希望小屏幕设备上所有列都堆叠在一起?那就使用Bootstrap针对超小屏幕和中等哦屏幕设备而定义的class吧!
类:.con-xs*同.con-md-*(超小屏幕和中等屏幕)

4-编写一个 Bootstrap 的示例。

不演示
  • 基于Bootstrap的Web应用

十五、REST客户端

1-简述 RestTemplate 初始化的方式分别是哪几种。


2-简述 RestTemplate 方式所接受的URI模版变量有哪几种类型。


3-与 RestTemplate 相比,WebClient 具有哪些特性?


4-编写一个 RestTemplate 的使用示例。

不演示

5-编写一个 WebClient 的使用示例。

不演示
  • 基于RestTemplate的天气预报服务
  • 基于WebClient的文件上传、下载

十六、REST服务框架——Jersey

1-简述 REST 的基本概念。


2-简述 REST 的设计原则


3-简述 REST 的成熟度模型

不演示

4-简述 REST API 管理。

不演示

5-使用 Jersey 编写一个 REST 的示例。

不演示
  • 基于Jersey的REST服务
  • 基于SSE构建实时Web应用

十七、全双工通信——WebSocket

1-简述 WebSocket 的作用。

WebSocket是一种在单个TCP连接上进行全双工通信的协议。
Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。具有持久化的特性
特点:
    保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
    更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
    可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
    更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。

2-简述 HTTP 与 WebSocket 的区别和联系。

相同点
1.都是一样基于TCP的,都是可靠性传输协议。2.都是应用层协议。
区别
1.WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
2.WebSocket是需要浏览器和服务器握手进行建立连接的。而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接。
联系
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。
总结:
在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。

书1_JavaEE概念/项目_22/5/29_第2张图片

3-列举常见的 WebSocket API。

1.WebSocketHandler
2.WebSocket 握手    
3.部署

4-简述 SockJS 的作用。

SockJS是一个浏览器的JavaScript库,它提供了一个类似于网络的对象,SockJS提供了一个连贯的,跨浏览器的JavaScriptAPI,它在浏览器和Web服务器之间创建了一个低延迟、全双工、跨域通信通道。
SockJS的一大好处在于提供了浏览器兼容性。即优先使用原生WebSocket,如果浏览器不支持WebSocket,会自动降为轮询的方式。

5-简述 STOMP 的作用。

STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。
STOMP协议的前身是TTMP协议(一个简单的基于文本的协议),专为消息中间件设计。
STOMP是一个非常简单和容易实现的协议,其设计灵感源自于HTTP的简单性。尽管STOMP协议在服务器端的实现可能有一定的难度,但客户端的实现却很容易。例如,可以使用Telnet登录到任何的STOMP代理,并与STOMP代理进行交互。

6-使用你熟悉得到 WebSocket 技术编写一个 WebSocket 示例。

不演示
  • 基于STOMP的聊天室

十八、消息通信——JMS

1-列举 JMS 包含哪些常用术语。

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。

2-简述 JMS 适合的使用场景。

1.MySQL是一个数据库管理系统
2.MySQL数据库是关系型的
3.MySQL软件是开源的
4.MySQL非常快速、可靠、可拓展且易于使用
5.MySQL能在客服端/服务器或嵌入式系统工作

3-列举 JMS 的消息模型。

不演示

4-简述 JmsTemplate 的工作流程。

不演示

4-使用你熟悉的技术编写一个 JMS 示例。

不演示
  • 基于JMS的消息发送、接收

十九、消息通知——Email

1-简述 Spring 框架对于 Email 的支持。

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。

2-简述 MailSender 和 SimpleMailMessage 的基本用法。

1.MySQL是一个数据库管理系统
2.MySQL数据库是关系型的
3.MySQL软件是开源的
4.MySQL非常快速、可靠、可拓展且易于使用
5.MySQL能在客服端/服务器或嵌入式系统工作

3-简述 JavaMailSender 和 MimeMessagePreparator 的用法。

不演示

4-简述 MimeMessageHelper 的用法。

不演示

5-用你熟悉的技术实现一个 Email 服务器。

不演示
  • 实现Email服务器

二十、任务执行与调度

1-简述任务执行与调度的作用。

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。

2-列举 Spring 中关于任务执行与调度的接口和注解。

1.MySQL是一个数据库管理系统
2.MySQL数据库是关系型的
3.MySQL软件是开源的
4.MySQL非常快速、可靠、可拓展且易于使用
5.MySQL能在客服端/服务器或嵌入式系统工作

3-Spring 为了简化 Quartz Scheduler 的使用,提供了哪些常用类?

不演示

4-用你熟悉的技术实现一个任务执行与调度的示例。

不演示
  • 基于Quartz Scheduler天气预报系统

二十一、高性能之道——缓存

1-简述缓存的概念及作用。

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。

2-列举 Spring 提供了哪些声明式的缓存注解。

1.MySQL是一个数据库管理系统
2.MySQL数据库是关系型的
3.MySQL软件是开源的
4.MySQL非常快速、可靠、可拓展且易于使用
5.MySQL能在客服端/服务器或嵌入式系统工作

3-简述 JCache 注解与 Spring 缓存注解的差异。

不演示

4-列举 Spring 缓存抽象提供了哪几种存储集成。

不演示

5-用你熟悉的技术实现一个缓存的示例。

不演示
  • 基于缓存的天气预报系统

二十二、微服务基石——SpringBoot

1-简述单块架构的概念。

MVC架构将应用在逻辑上分成了三层,但它不是物理上的分层。这也意味着,即便将应用架构分成了所谓的三层,经过开发团队对不同层的代码实现,经过Compile、Package、Deploy后,不考虑负载均衡以及水平扩展的情况,最终还是运行在同一台机器的同一个进程中。对于这种功能集中、代码和数据中心化、一个发布包、部署后运行在同一进程的应用程序,通常称之为单块架构应用。

2-简述单块架构的优缺点。

优势
    易于开发
    易于测试
    易于部署
    易于水平伸缩
劣势
    维护成本增加
    持续交付周期长
    新人培养周期长
    技术选型成本高
    可扩展性差
    构建全功能团队难
Note:
	扩展分为垂直扩展和水平扩展

3-简述单块架构如何进化为微服务。

系统初始,都是内聚的,所有功能累加到一起,单体架构
以SOA为例

4-列举微服务设计原则。

微服务设计:James Lewis和Martin Fowler,服务可以运行在进程中,可以如http交互,没有太大的技术关联,可以用不同的数据存储形式
    拆分足够微,(亚马逊两个披萨原则,不能太小,管理成本)
    轻量级通信,(微服务都是跨域,跨主机的,web服务,rest,rpc,同步用rest(http,格式用json或xml),异步用消息中间件)
    领域驱动原则,(服务要体现领域业务模型,容易让团队理解上下文边界,一定要理解需求先,一定要深刻了解业务模型),就是我要跟领域专家达成一致
    单一职责原则:(高内聚,低耦合,对其它服务的依赖要低,单一界限上下文)

5-简述 Spring Boot 产生的背景

(1)在springboot技术产生以前,使用spring框架开发的程序员,配置Web应用环境时,需要大量的XML配置。
(2)且随着web项目集成软件的不断增多,XML配置也不断的增多,XML配置文件也在不断地增多,项目依赖管理也越发的复杂。随之配置文件难以理解且容易出错。
(3)XML配置文件不但复杂,而且绝大多数属于模板配置。在这个web项目里面这样配置,换到下一个项目也是同样的配置。

6-简述 Spring Boot 的目标。

①为所有Spring开发提供一个基本的,更快,更广泛的入门体验。
②开箱即用,但随着需求开始偏离默认值,快速启动。
③提供大型项目(例如嵌入式服务器,安全性,度量,运行状况检查,外部化配置)常见的一系列非功能特性。
④绝对没有代码生成以及不需要XML配置,完全避免XML配置。
⑤为了避免定义更多的注释配置(它将一些现有的 Spring Framework 注释组合成一个简单的单一注释)
⑥ 避免编写大量import语句。
⑦ 提供一些默认值,以便在短时间内快速启动新项目。

7-简述 Spring Boot 与其他 Spring 应用的关系。

1.简单理解为:Spring包含了SpringMVC,而SpringBoot又包含了Spring或者说是在Spring的基础上做得一个扩展。
2、关系大概就是这样:
spring mvc < spring < springboot
3、结论
Spring Boot只是Spring本身的扩展,使开发,测试和部署更加方便。

额外题:微服务拆分。

举例说,SpringBoot,天气预报缺乏业务有效隔离,第三方采集接口协议变了怎么办??,改了这个代码必将影响整个应用,他们是杂在一起的
微服务的意义:
易于实现
利于维护
易于部署,轻量级的(SpringBoot都是内嵌容器的,tomcat容器)
易于更新,服务是隔离的
正向反馈闭环很快: 需求==》开发==》集成==》测试==》部署==》有问题就继续需求
微服务拆分方法:
横向拆分:数据采集,数据存储,数据查询,数据展示
纵向拆分:用户界面层,应用层,领域层,基础设施层;这已经架构了,比如java的包
使用DDD,驱动设计原则: 天气预报系统:天气数据采集界限(数据采集,数据存储),天气预报(数据展示),天气数据API(数据查询),城市数据API(数据查询)

8-使用 Spring Boot 构建一个 Web 示例。

不演示
  • 开启第一个Spring Boot项目

二十三、微服务治理框架——SpringCloud

1-简述什么是微服务治理。

由于微服务数量太多导致维护成本巨大,服务治理就是来解决这个问题。服务治理就是让服务子维护,微服务做为服务提供方主动向服务治理中心注册,服务的消费者通过服务治理中心查询需要的服务并调用,如下图:
=======================
微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,springcloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,springcloud做为大管家需要管理好这些微服务,自然需要很多小弟来帮忙。

书1_JavaEE概念/项目_22/5/29_第3张图片

2-简述 Spring Cloud 与 Spring Boot 的关系。

Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,可以不基于Spring Boot吗?不可以。
Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

3-列举 Spring Cloud 有哪些子项目。

分布式系统套件版本:Spring Cloud Hoxton 2.2
服务治理注册与发现:Spring Cloud Eureka / Consul / Nacos 1.4
分布式统一配置中心:Spring Cloud Config / Nacos 1.4
熔断隔离限流降级:Spring Cloud Hystrix / Sentinel 1.8
集成阿里云组件:Nacos 注册与配置、Sentinel 流量防卫兵
网关路由代理调用:Spring Cloud Gateway (动态网关)
声明式服务调用:Spring Cloud OpenFeign
客户端负载均衡:Spring Cloud Ribbon
分布式链路追踪:Spring Cloud Zipkin 2.23 (可选组件)
分布式事务框架:TX-LCN 5.0 / Seata 1.4 (可选组件)

4-使用 Spring Cloud 实现一个微服务治理的示例。

不演示
  • 实现微服务的注册与发现——Eureka Server
  • 实现微服务的注册与发现——Eureka Client

看此书的代码

你可能感兴趣的:(#,书,java-ee,java,maven)