WEB考试复习资料
WEB考试复习资料
xukun单选题(10题,共10分)
下列关于从 ORM → MVC → RPC → SOA 的演变,哪项说法是正确的?
A. ORM 完全不支持面向对象编程
B. MVC 模式只适用于前端,不适用于后端或接口层
C. RPC(远程过程调用)适合微服务之间的调用和扩展
D. SOA 与微服务完全相同,没有区别
答案:C以下哪一项是 SOA 框架的主要优势之一?
A. 强化单体架构的集中式管理
B. 降低对服务抽象与复用的要求
C. 系统间实现松耦合,易扩展与维护
D. 完全屏蔽了业务层的复杂性
答案:C在 SOA 架构中,为了实现松耦合,通常会采用的方式是:
A. 所有服务都共享同一个数据库表
B. 通过服务注册与发现,让服务调用可动态绑定
C. 不使用任何接口或协议,直接内存调用
D. 在不同服务间尽量少定义契约
答案:B关于 Restful API 的特点,下列哪项说法最准确?
A. Restful API 依赖于 SOAP 协议实现
B. Restful API 强调使用 HTTP 动词来描述操作意图
C. Restful API 中不允许使用 POST 以外的请求方法
D. Restful API 只能在微服务架构中使用
答案:BRestful API 中通常使用的五个 HTTP 动词(GET、POST、PUT、PATCH、DELETE)分别对应的操作是:
A. 注册、登录、删除、更新、查看
B. 可读、可写、可执行、可修改、可删除
C. 查询、创建、整体更新、局部更新、删除
D. 查询、删除、整体更新、局部更新、新增
答案:C关于 PUT 与 PATCH 的共同点,下列哪一项正确?
A. PUT 与 PATCH 都是“新增”操作
B. PUT 与 PATCH 都可以用于局部更新
C. PUT 与 PATCH 都是用来更新资源
D. PUT 与 PATCH 都要求幂等
答案:C关于 POST 与 PUT 的区别,下列说法正确的是:
A. PUT 一般用于部分更新,POST 一般用于全部更新
B. PUT 一般用于创建或整体更新,POST 一般用于新增资源
C. 两者都不可以用来新增
D. POST 必须幂等,PUT 不需要幂等
答案:BHTTP 状态返回码中,2xx、4xx、5xx 分别表示:
A. 2xx 服务器错误;4xx 客户端成功;5xx 网络重定向
B. 2xx 成功;4xx 客户端错误;5xx 服务器错误
C. 2xx 重定向;4xx 成功;5xx 客户端错误
D. 2xx 正在处理;4xx 重定向;5xx 不明错误
答案:B@SpringBootApplication 最常见的作用是:
A. 声明一个数据库实体类
B. 让 Spring Boot 启动类能自动扫描并加载所有配置
C. 将控制器暴露为 REST 接口
D. 指定应用程序的配置文件位置
答案:B@Configuration 注解表示该类是:
A. Java 配置类,可以替代 XML 配置
B. 数据库表对应的实体类
C. Spring Boot 的主启动类
D. 标记为 AOP 切面
答案:A@EnableAutoConfiguration 注解的作用是:
A. 开启自动切面配置
B. 开启自动装配 Bean,对项目进行自动化配置
C. 开启 Spring Security
D. 开启服务注册功能
答案:B@ComponentScan 主要用于:
A. 开启扫描数据库实体
B. 定义 Beans 的生命周期
C. 指定要扫描的包,以发现 @Component、@Service 等
D. 替代 @SpringBootApplication
答案:C@Bean 的最主要作用是:
A. 声明一个切点表达式
B. 声明一个只读的属性文件
C. 向 Spring 容器注册一个 Bean
D. 声明一个数据库事务
答案:C@RestController 注解可以:
A. 将该类识别为数据库访问层
B. 将返回值直接作为 JSON 或 XML 等格式输出
C. 将该类限制只能处理 POST 请求
D. 将该类视为 WebSocket 端点
答案:B@RequestMapping 及其变体主要用于:
A. 给控制层指定访问路径和 HTTP 方法
B. 给实体类指定表名映射
C. 给数据库字段指定映射关系
D. 给服务之间的调用指定负载均衡策略
答案:A@PathVariable 注解用来:
A. 获取 URL 查询参数
B. 获取请求体中的 JSON 数据
C. 获取 URL 中路径变量,例如 /user/{id}
D. 设置默认值给参数
答案:C@RequestBody 注解用来:
A. 直接映射请求体内容到方法参数
B. 映射 HTTP 头部信息到参数
C. 声明该方法只使用 POST 请求
D. 将返回结果以 JSON 格式输出
答案:A@RequestParam 注解的作用是:
A. 提供数据库事务支持
B. 获取请求路径中的一段信息
C. 获取 URL 中的查询参数或表单参数
D. 实现跨域请求
答案:C在 Spring MVC 中,@Valid + BindingResult 通常用于:
A. 声明日志级别
B. 校验请求参数的合法性并接收验证结果
C. 切换数据源
D. 加载外部配置文件
答案:B@Component 注解会将类注册到:
A. JDBC 连接池
B. Tomcat 容器
C. Spring 容器
D. 代码自动生成器
答案:C关于控制反转(IoC)与依赖注入(DI)的作用,下列哪项最准确?
A. IoC 与 DI 完全不相关,无法一起使用
B. IoC 是让容器控制对象的创建,DI 则是将依赖注入给对象
C. IoC 只适合小型项目,DI 只适合大型项目
D. 两者都只用于数据库层
答案:B@Autowired 与 @Resource 的区别,以下说法正确的是:
A. @Autowired 依赖 JSR-250,@Resource 依赖 Spring 自身
B. @Resource 可以精确指定 beanName,@Autowired 更倾向于按类型注入
C. 二者不能共存,必须二选一
D. @Autowired 只适用于 Java 8 以上,@Resource 无此限制
答案:B当存在多个同类型 Bean 时,为避免注入冲突,下列哪个注解可用来指定首选 Bean?
A. @Primary
B. @Override
C. @Bean
D. @Order
答案:A以下哪个注解不是 Spring AOP 中的通知类型?
A. @Before
B. @AfterReturning
C. @AfterThrowing
D. @AroundSuccess
答案:D关于切点表达式,下列哪一项说法正确?
A. 切点表达式可以随意定义,不需要符合任何语法
B. 切点表达式通常使用 execution(* com.example.service..(..)) 这类形式来指定连接点
C. @Pointcut 中不允许使用通配符
D. 切点表达式只能匹配接口,不能匹配实现类
答案:B使用 AOP 的一个主要好处是:
A. 可以彻底替代 MVC 模式
B. 直接由容器管理数据库连接池
C. 实现横切关注点的分离,如日志、事务等,减少重复代码
D. 完全取消了依赖注入
答案:C数据库连接池的主要作用是:
A. 减少频繁创建和销毁数据库连接带来的开销
B. 提供自动的 SQL 语句优化
C. 在内存中缓存所有查询结果
D. 强制每次请求都重建连接
答案:A下列哪一项不是常见的数据库访问方式?
A. JDBC
B. JPA/Hibernate
C. MyBatis
D. UML
答案:D数据库的四大特性(ACID)中,“I” 代表:
A. Inactive
B. Isolation
C. Indexing
D. Integration
答案:BSpring 中使用 @Transactional(声明式事务)的主要目的是:
A. 配置定时任务
B. 自动生成数据库索引
C. 自动对某些方法或类启用事务回滚、提交等逻辑
D. 声明一个静态资源文件
答案:CSpring Boot 默认推荐的配置文件类型是:
A. YAML 或 properties
B. XML 或 JSON
C. TXT 或 PDF
D. INI 或 CSV
答案:A要修改 Spring Boot 项目默认的启动端口,下列哪一项是正确做法?
A. 在 pom.xml 中增加8089
B. 在 application.properties 中配置 server.port=8089
C. 修改 Tomcat 源码
D. 在 @SpringBootApplication 注解里配置 port=8089
答案:B要在 Spring Boot 中提取配置文件的值并绑定到对象,下列哪种方式可行?
A. @PropertySource(“classpath:xxx”)
B. @ConfigurationProperties(prefix=”xxx”)
C. @Value(“${xxx}”)
D. 以上三种都可以
答案:D在 Spring Security 中,如果没有自定义用户名和密码配置,默认的用户名是:
A. user
B. admin
C. test
D. root
答案:A引入 Spring Security 后,访问 API 时的正确说法是:
A. 无论访问哪个接口,都无需登录
B. Spring Security 会自动创建登录表单或弹框,并拦截未授权请求
C. 只能通过命令行方式访问
D. 所有请求必须使用 HTTPS 并且只能是 GET
答案:B关于微服务架构的定义,下列哪项是正确的?
A. 微服务只适合单体项目
B. 微服务强调将整个系统打包成一个可执行文件
C. 微服务将应用拆分成小而独立的服务,服务之间通过 API 通信
D. 微服务要求每个服务都必须使用相同的技术栈
答案:C下列哪一项不是微服务架构的特点?
A. 每个服务可以独立部署和扩展
B. 大部分场景下,服务之间只通过消息或 HTTP/RPC 调用
C. 服务与服务间高度耦合,必须共同部署
D. 服务之间采用去中心化的治理方式
答案:C在 Eureka 中,下列关于角色分工的描述正确的是:
A. Eureka-Server 既是注册中心,也是服务提供方
B. Eureka-Client 只能用来消费服务,不能注册自身
C. Eureka-Server 仅用作注册中心,Eureka-Client 可以注册自身并相互消费
D. Eureka 只适用于非微服务架构
答案:CEureka-Server 的主要作用是什么?
A. 提供数据库连接池支持
B. 提供配置文件管理
C. 作为注册中心,管理各个微服务的注册与发现
D. 实现横切关注点的统一处理
答案:C当同时存在服务提供者与服务消费者时,下列关于 Eureka-Client 的描述正确的是:
A. 只有服务消费者会注册到 Eureka-Server,服务提供者不会
B. 只有服务提供者会注册到 Eureka-Server,服务消费者不会
C. 两者都可以以 Eureka-Client 身份注册到 Eureka-Server,区分靠配置和服务名
D. 二者都无法进行自我保护机制
答案:C搭建 Eureka-Server 时,通常需要在 application.properties 或 yml 中指定:
A. server.port
B. eureka.client.register-with-eureka=false
C. eureka.client.fetch-registry=false
D. 以上三项都需要
答案:D下面哪项不是常见的负载均衡实现方式?
A. 随机(Random)
B. 轮询(RoundRobin)
C. 最少连接(LeastConnection)
D. 固定节点(FixedNode)
答案:DSpring Cloud LoadBalancer(或 Ribbon)中,如果要自定义负载均衡策略,需要:
A. 实现 ReactiveLoadBalancer 接口或自定义 Rule
B. 修改 Nginx 配置文件
C. 使用 @Service 来标注需要负载均衡的类
D. 必须使用内置的轮询策略,不能自定义
答案:A若要开启 RestTemplate 的负载均衡支持,需要:
A. 在 RestTemplate 上使用 @LoadBalanced 注解
B. 修改 Eureka 配置
C. 使用 @ControllerAdvice
D. 在服务之间使用 TCP 直连
答案:A在 Spring 中,RestTemplate 最常用于:
A. 生成随机字符串
B. 实现不同微服务之间的 HTTP 调用
C. 数据库底层的查询
D. 安全框架的加密操作
答案:B使用 RestTemplate 调用微服务时,通常通过什么方式来指定目标服务?
A. 直接通过 IP 和端口号访问
B. 通过服务名(结合负载均衡)或注册中心发现
C. 修改 Windows hosts 文件
D. 必须使用 @SpringBootApplication
答案:B
填空题(每空1分,共10分)
框架演变历史依次为:从 __ → __ → __ → __。
(答案:ORM、MVC、RPC、SOA)
SOA 框架的三种典型操作是 __ + __ + __。
(答案:服务注册、服务发现、服务调用)
Restful API 的五个 HTTP 动词分别对应以下操作:
- GET:__ 数据。
- POST:__ 数据。
- PUT:__ 数据。
- DELETE:__ 数据。
- PATCH:__ 数据。
(答案:读取、创建、更新(整体替换)、删除、部分更新)
HTTP 状态返回码中:
- 2xx 表示 __;
- 4xx 表示 __;
- 5xx 表示 __。
(答案:成功、客户端错误、服务器错误)
Spring Boot 中注解 @SpringBootApplication 的作用是 __。
(答案:标记主程序类,启动 Spring Boot 应用,包含 @Configuration、@EnableAutoConfiguration、@ComponentScan)
在依赖注入中,@Autowired 和 @Resource 的区别是 __。
(答案:@Autowired 是 Spring 注解,默认按类型注入;@Resource 是 Java 注解,默认按名称注入)
AOP 中的五种通知类型分别是:______、______、______、______和 ______。
(答案:@Before、@AfterReturning、@AfterThrowing、@After、@Around)
数据库的四大特性(ACID)分别是:______、______、______和 ______。
(答案:原子性、一致性、隔离性、持久性)
Spring Security 框架中,默认用户名是 ______,默认密码存储在 ______ 日志中。
(答案:user、启动日志)
在 Eureka 架构中,Eureka-Server 的作用是 ______,Eureka-Client 的作用是 ______。
(答案:注册中心、服务提供者和消费者)
简述题(4题,共20分)
1.SOA 中的三角色及其对应的功能
- 服务提供者 :提供具体的服务并将其注册到服务注册中心。
- 服务请求者 :调用服务注册中心获取服务并消费它。
- 服务注册中心 :管理服务的注册和发现。
2.Restful Web API 的特点(★)
- 基于 HTTP 协议,使用标准的 HTTP 方法(GET、POST、PUT、DELETE)。
- 资源使用 URL 定位,并采用 JSON 或 XML 格式作为数据交换格式。
- 无状态性,每次请求都需包含完成该请求所需的所有信息。
3.POST 请求和 PUT 请求的共同点及区别(★)
- 共同点:都可以用于传递数据,通常发送请求体。
- 区别:POST 用于创建资源,PUT 用于更新资源,且 PUT 是幂等的,POST 不是。
4.PUT 请求和 PATCH 请求的共同点及区别(★)
- 共同点:都用于更新资源。
- 区别:PUT 用于完整更新,PATCH 只更新资源的部分字段。
5.Spring Boot 框架的优点(★)
- 提供快速开发环境,减少配置。
- 内置 Tomcat,无需额外部署。
- 支持自动配置和生产级监控。
- 提供大量开箱即用的 starter 依赖。
6.@Autowired 和 @Resource 的共同点及区别(★)
- 共同点:都用于注入依赖。
- 区别:@Autowired 是 Spring 提供的,按类型注入;@Resource 是 JSR 标准,按名称注入。
7.简述使用 AOP 的好处
- 实现横切关注点(如日志、权限、事务)的分离。
- 提高代码可维护性和复用性。
- 减少重复代码。
8.简述引入 Spring Security 框架后,访问 API 接口的过程
- 用户发起请求。
- 通过 Spring Security 过滤器链处理请求,完成身份验证和授权。
- 如果验证成功,访问目标 API;否则返回 401 或 403 错误。
9.以下 Eureka 架构图有什么缺点?应如何修改架构图?新架构图的优点
- 缺点:Eureka Server 间互相注册,单点故障可能导致整个注册服务不可用。
- 改进方案:采用多节点 Eureka Server 构建集群,Client 负载均衡访问多个 Server。
- 新架构图优点:提高了系统的容错性和高可用性。
10.简述 Eureka Server 的作用
- 提供服务注册和发现功能,管理各服务实例的信息。
11.简述 Eureka Client 的作用
- 注册自身服务到 Eureka Server,或者从 Server 获取其他服务的实例信息。
12.请列举五种负载均衡实现方式(★)
- 轮询:请求依次分配到各实例。
- 随机:随机选择实例处理请求。
- 最小连接数:优先选择当前连接数最少的实例。
- IP 哈希:根据客户端 IP 进行哈希分配。
- 权重:根据实例的权重比例分配请求。
代码题(共36分)
1、Restful Web API 开发 ——restful-demo-000项目
@RestController
@RequestMapping(“/api/v1”)
public class StudentServiceController {
1 |
|
}
2、配置文件的数据读取 ——springboot-demo-000项目
@Component
public class User {
1 |
|
}
3、切面类编程 ——springboot-demo-000项目
@Aspect
@Component
public class LoggingAspect {
1 |
|
}
4、接口调用编程 ——helloconsumer项目
问题1:在接口调用中,需要定义ResponseBean即HTTP响应需要转换成的对象类型,此处使用Course类接收返回数据,请完成Course类代码的编写。
//不考虑有参无参
public class Course{
1 | private String couId; |
}
问题2:调用接口1,查询C001号课程的信息,请完成GET请求调用的代码。
void testGetAPI () {
1 | RestTemplate restTemplate = new RestTemplate(); |
}
问题3:调用接口2,新增一个课程(课程号:C002、课程名:Web服务、选修学生数:50),完成POST请求的调用代码。
void testPostAPI () {
1 | RestTemplate restTemplate = new RestTemplate(); |
}
问题4:调用接口3修改C002号课程的信息(课程名改为:微服务、选修学生数改为100),完成PUT请求的调用代码。
void testPutAPI () {
1 | RestTemplate restTemplate = new RestTemplate(); |
}
问题5:调用接口4,删除C001号课程,完成 DELETE请求的调用代码。(此题要求路径参数通过Map格式传递)
void testDeleteAPI () {
1 | RestTemplate restTemplate = new RestTemplate(); |
}
采用负载均衡版答案:
1 |
|