周五论文答辩
老师可能提问的问题及参考答案:
1. 什么是MVC模式?在系统中是如何应用的?
答:
MVC(Model-View-Controller)是一种将应用程序分为模型(Model)、**视图(View)和控制器(Controller)**的设计模式。
- 模型负责管理数据和业务逻辑(如学生信息的增删改查);
- 视图负责展示用户界面(使用FreeMarker(是一款基于模板的 Java 视图引擎,用于将后端数据动态地填充到 HTML 页面中,生成最终的网页。)模板引擎生成HTML页面);
- 控制器接收用户请求,调用模型处理数据,并选择视图返回结果。
在系统中的具体应用:
例如,用户查询学生信息时,控制器(StudentController
)接收请求,调用模型(StudentService
)从数据库获取数据,最后通过视图(FreeMarker模板)渲染结果页面。
2. 为什么选择Spring Boot作为开发框架?它有哪些优势?
答:
选择Spring Boot的原因包括:
- 简化配置:通过自动配置(如内嵌Tomcat(服务器))减少XML配置,提升开发效率;
- 快速开发:提供“starter”依赖包,集成MyBatis、FreeMarker等组件;
- 维护便捷:代码耦合度(可以理解为关联程度)低,支持模块化开发;
- 分布式支持:结合Zookeeper中间件(ZooKeeper 是一个开源的 分布式协调服务框架,用于解决分布式系统中的数据一致性问题,常用于实现注册中心、配置中心、分布式锁、主从选举等功能。),解决高并发问题。
- 数据一致性概念: 数据一致性是指在分布式系统或数据库系统中,**多个副本或多个组件所看到的数据必须是统一、正确的。**它是系统正确性的核心指标之一。
- 没有保证数据一致性带来的问题:
你在微信群发了一个红包,系统提示已扣款;
但朋友反馈没有收到红包!
📌 问题: 红包扣款成功但数据未及时写入红包服务的数据库,造成用户资产混乱。
优势举例:
系统中通过Spring Boot的@RestController
注解快速定义API,并通过Spring Data
简化数据库操作。
3. MyBatis(我们是使用这个框架操作数据库(Mysql))在系统中起什么作用?与JDBC相比有什么优势?
答:
MyBatis作为持久层框架,作用包括:
- SQL映射:通过XML或注解将Java对象与SQL语句绑定;
- 简化数据库操作:封装JDBC代码,减少重复工作;
- 动态SQL支持:灵活处理复杂查询(如模糊搜索学生信息)。
对比JDBC的优势:
- 代码简洁:避免手动处理连接和结果集;
- 缓存机制:提升查询性能;
- 解耦SQL与代码:便于维护和优化。
4. 系统如何解决高并发问题?
答:
采用分布式架构和Zookeeper中间件:
- 分布式服务器集群:将功能模块部署到多台服务器,分担请求压力(举一个例子就是,你使用微信聊天时对应的聊天服务器有多个,当你登陆时会选择一个负载压力最小的一个进行访问,不然就一个服务器支持不了这么多用户访问);
- Zookeeper:协调服务器节点,确保数据一致性和服务高可用性;
- FastDFS文件服务器(一个开源项目,就说是一个开源项目就行):分离图片存储,降低数据库负载。
举例:在选课高峰期,用户请求被分配到不同服务器处理,避免单点瓶颈。
5. 系统测试中黑盒测试和白盒测试有什么区别?
答:
- 黑盒测试:关注功能是否符合需求,不关心内部实现。例如,测试用户登录功能是否正常。
- 白盒测试:检查代码逻辑和结构,如分支覆盖率和异常处理。例如,测试学生信息删除时的数据库事务回滚机制。
系统中的应用:
黑盒测试验证了用户注册、信息修改等业务流程;白盒测试通过代码审查确保逻辑正确性。
6. 为什么选择B/S(B是浏览器的缩写,也就是网页版应用)架构而不是C/S(C可以理解为需要安装应用)架构?
答:
- B/S架构优势:
- 跨平台:用户只需浏览器,无需安装客户端;
- 维护便捷:服务端更新后所有用户即时生效;
- 成本低:减少客户端部署和维护成本。
系统中的应用:教师和学生通过浏览器即可访问系统,管理员通过Web界面统一管理数据。
7. 未来可以从哪些方面优化系统?
答:
- 云服务器部署:采用阿里云或AWS,提升扩展性和可靠性;
- 安全增强:防御DDoS(发送大量无效请求使得服务器负载过高导致瘫痪(CPU烧了))攻击,引入OAuth2.0(OAuth 2.0 是目前最流行的授权协议(Authorization Framework),用于第三方应用安全地访问用户在某一平台上的资源,让第三方应用在用户授权的前提下,访问用户在其他服务平台上的资源(如头像、邮箱、联系人等),无需暴露用户密码。)认证;
- 功能扩展:集成选课管理、成绩分析模块;
- 智能化:结合大数据分析学生行为,提供预警功能。
8. 数据库设计中为什么要分多张表?如何保证数据一致性?
答:
- 分表原因:
- 规范化设计:减少冗余(如学生表与专业表通过外键关联);
- 提升性能:单表数据量过大时,分表可优化查询效率。
- 数据一致性:
- 外键约束:如学生表的
p_id
关联专业表; - 事务管理:通过Spring的
@Transactional
注解保证操作原子性(原子性:一个操作要么全部完成,要么全部不执行)。
- 外键约束:如学生表的
其他技术的概念:
以下是这些技术的简要概念:
-
jQuery(和后端交互):
- jQuery 是一个快速、简洁的 JavaScript 库。它简化了 HTML 文档的遍历、事件处理、动画以及 Ajax 操作等。jQuery 提供了一个跨浏览器的解决方案,极大地简化了 JavaScript 编程,尤其是在处理 DOM 操作和事件绑定时。
-
Bootstrap:
- Bootstrap 是一个开源的前端框架,旨在简化网页设计的过程。它提供了一组现代化、响应式的网页组件,涵盖了布局、按钮、导航、表单、卡片等常用元素,并且采用了 HTML、CSS 和 JavaScript(jQuery)构建。Bootstrap 帮助开发者快速构建美观且易于适配不同屏幕尺寸的网页。
-
JSON (JavaScript Object Notation):
- JSON 是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它基于 JavaScript 的对象表示法,但是与语言无关的,可以在多种编程语言中使用。JSON 通常用于 Web 应用中的数据交换,它主要由键值对和数组组成。
-
Dubbo:
- Dubbo 是一个高性能的 Java RPC 框架,最初由阿里巴巴开源,广泛应用于分布式系统中。Dubbo 提供了服务治理、负载均衡、容错、路由等功能,支持多种协议(如 HTTP、RPC、Dubbo 协议等),并支持通过注册中心进行服务发现。它帮助开发者实现高效、可靠、灵活的微服务架构。