50个高频答辩问题-技术篇

提要

答辩过程中,老师间的问题一般都和你的设计有关,特别是设计中的一些关键技术,比如:数据库链接方式,数据库设计中的 ER 图、范式等。一般不会太难,都是一些学过的知识。

(回答一定要温柔,不要顶嘴)!

遇到不会的问题 坚定原则:“只答不辩,问就道歉”

项目

项目源码(前后端)+ 数据库 + 论文PPT等文档 点我查看

TIP:项目非免费,谢谢理解

往期

计算机答辩问题及答案

正片

dto层是什么

dto 层(也称为 model、entity 层)作用就是定义实体类,对数据表中的对象的映射,包含实体类的属性和对应属性的 get、set 方法;

dao层是什么
(也称为 mapper 层)dao 层会调用 dto 层,dao 层会定义方法对数据库进行增删改查。一般会有一个放xml 文件的文件夹,xml 文件下就是写 sql 语句。

service层是什么

做相应的业务逻辑处理,service 层会调用 dao 层和 dto 层,service 层也会对数据进行一定的处理,比如条件判断和数据筛选等等。

controller层是什么

controller 会调用前面 3 层,一般会和前端的 js 文件进行数据的交互,前端调用对应接口,controller 层接受前端传来的参数,处理好的数据也是通过controller 层传递到前端显示的。

项目架构以及项目技术选型

我是选择了 springboot 技术,然后前台采用了 vue 和 uniapp 技术,加上 mysql 数据库做的数据存储。

软件测试有哪些方法?你采用了什么方法?

我是采用了单元测试和功能测试两种测试的方法对该系统做了功能做了测试,使用单元测试时,对该某些类进行了测试,比如一些获取前台登录信息,查看数据库等,还做了一些功能测试,主要是系统的增删改查进行了简单的测试。

如何设计的数据库?设计数据库时你又如何考虑的?

首先我是先采用问卷调查方法,对本设计确定需求后,再结合参考文献,从而确定需求后设计的数据库,在设计时候我根据数据库的三要素数据结构、数据操作、数据的完整性约束,还根据三范式结合,减少代码冗余性,第一范式(确保每列保持原子性)、第二范式(确保表中的每列都和主键相关)、第三范式(确保每列都和主键列直接相关,而不是间接相关)

请解释主键和外键的作用并说明它们的区别?

主键是必不可少的键,如 id 键。外键就是需要联合的键,比如一个图书管理系统,我查询我的订单时,在订单表里查询订单的同时,要关联我的外键 user 表里的 id 键。

某个功能是怎么实现的?

首先我采用 mvc 设计模式,在前端视图层留有响应路径,request 发送给后端 Controller 后–>Service 层处理数据–>mapper>>Dao->MySQL,请求到数据后:Dao->Service->Controller

你采用了哪些功能进行测试?

我才用了单元测试,对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 Java 里单元指一个类,总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

黑白盒子测试是什么?

白盒测试也称为结构测试,主要用于检测软件编码过程中的错误。程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。

黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。

数据库?你的数据为什么选用此数据库?

体积小,易安装,速度快,Mysql 性能卓越,服务稳定

为什么要进行答辩?

首先是毕业设计,是我为时三个月写的毕业设计,论文是自己熬夜至三点加班加点写出来的,首次查重率是 4.9 后来又修改了写东西,我觉得自己可以胜任此次一辩,其次是很荣幸遇见各位答辩老师,聆听我的毕业设计,并给予指导和建议,使我的毕业论文更加完善清晰。

你觉得你的毕业设计创新点是什么?(从人力物力财力考虑)

1 无人自助购买,节省人力,降低管理成本
2 面向学生群体,安全系数高
3 线上线下相结合,节约时间成本
4 方便快捷,省去大量时间成本

ssm 和 Springboot 区别?

SSM:面相 XML 编程。SpringBoot:面相注解编程
1、SpringBoot 提供极其快速和简化的操作,让 Spring 开发者快速上手。
2、SpringBoot 提供了 Spring 运行的默认配置。
3、SpringBoot 为通用 Spring 项目提供了很多非功能性特性,例如:嵌入式 Serve、Security、统计、外部配置

在项⽬中使⽤的安全措施以及其作⽤?

使⽤Spring Security 等认证和授权框架进⾏⽤户身份认证和权限控制,保证只有合法的⽤户能够访问系统的资源,避免未授权的访问还有就是数据库加密的方式进行注册时用户的密码进行 MD5 加密功能,在登录时再实现 MD5 解密功能。

你对自己项目有哪些优化建议?

前后端异常处理⽅式?

1 后端异常处理:在后端使⽤Spring Boot 的异常处理机制,例如使⽤@ControllerAdvice和@ExceptionHandler 注解,捕获全局异常,并返回相应的错误信息给前端。后端还可以通过⽇志记录异常信息,便于后续的排查和处理。
2 前端异常处理:前端通过 Vue 的错误处理机制,例如使⽤try-catch 语句捕获前端请求程中的异常,通过弹窗 500 或者错误提示展示给⽤户,帮助⽤户理解异常情况并进⾏相应操作

如何在 Spring Boot 中处理⽂件上传?

通过调用 uploadFile 类里的方法,获取文件扩展名,重新生成文件名,判断是否存在
返回文件访问路径。

分页是如何实现的?

分页是如何实的首先从数据库中查询时用 limt 限制 10 条数据,出相应的数据的总数量,在代码中设定每页显示的数据数量 pagesize.就能计算出总共的页码,通过在点击下一页、上一页、首页、尾页时携带页码变量滚动数据进行相应的判断完成分页显示

前如何支付页面?(适合所有支付页面说)

因为我这个是本地运行的项目,所以就默认支付了,但是我在这里留有 api 接口,到时候如果上线了,可以加上微信支付功能。

首页的轮播图图片会动态的变化,这是什么技术?如何实现的?

通过 js 脚本和 样式控制实现图片的循环播放,图片的轮播使用定时器,通过定时器改变 list 的 Left 值使得图片循环展示。或者说 Swiper 控件构成的。

服务器是哪个,如何配置的?

服务器本地运行的,因为 springboot 是封装 tomacat 所以不用再配置 tommcat,直接启动main 类运行即可。

数据库设计分为几个阶段

1、需求分析:了解用户的数据需求、处理需求、安全性及完整性要求
2、概念设计:通过数据抽象,设计系统概念模型,一般为 E-R 模型
3、逻辑结构设计:设计系统的模式和外模式,对于关系模型主要是基本表和视图
4、物理结构设计:设计数据的存储结构和存取方法,如索引的设计
5、数据库实施:组织数据入岸、编制应用程序、试运行
6、数据库运行维护:系统投入运行,长期的维护工作

程序和数据库怎么连接的

通过配置 ymal 文件连(“com.mysqljdbc.Driver”)实现 JDBC 连接数据库,利用了微软提供的mysqloonnectorjava-5.0.4-bin.jar 包完成连接数据库。通过 3306 端口访问数据库,同时通过在配置文件设置数据库的账户和密码完成数据库的访问

批量删除是如何实现的?

前端按钮获取 id 数组,后台通过 String id 取到 d 组后遍历数组,在循环遍历的时候进行修改或者删除操作

用户怎么查看历史订单?

首先获取这个用户的 id,然后右链接订单表里 id 查询此 id 在订单表里的 id,索引后返还给前台。

日期如何显示在窗口上?

@JsonFormat(),并且通过参数 pattern,来格式化我们的想要的格式实例,是固定的方法类,获取本地时间,存入数据库

数据库密码加密功能如何实现?

合法的⽤户能够访问系统的资源,避免未授权的访问还有就是数据库加密的方式进行注册时用户的密码进行 MD5 加密功能,在登录时再实现 MD5 解密功能

varchar 和 char 的区别?

char 的长度是不可变的,而 varchar 的长度是可变的,也就是说,定义一个 char[10]和varchar[10],如果存进去的是‘csdn’,那么 char 所占的长度依然为 10,除了字符‘csdn’外,后面跟六个空格,而 varchar 就立马把长度变为 4 了,取数据的时候,char 类型的要用 trim()去掉多余的空格,而 varchar 是不需要的。

验证码如何实现?

输出流,写到 servlet 里面,哪里需要就直接调用这个 servlet

怎么确保点击一次更换一张验证码?

每次点击事件后更换 src 的地址值,要确保每次地址值都不一样还需要加上时间的毫秒值。在 servlet 中拼接其他字符需要加上英文状态下的?。

如何进行判断用户输入的验证码是否正确?

保存返回值就可以了,保存到 session 中,再比对用户输入的就可以。

阐述系统中的搜索功能是如何实现的?

通过 search 控件按钮绑定数据,然后调用 api/book 里的 getBookPage 传输给后台获取模糊查询中的数据返还给前台界面

什么是 MVC?

M:Model,模型。 JavaBean 完成具体的业务操作,如:查询数据库,封装对象
V:view 视图。JSP、HTML 等来进行数据展示
C:Controller 控制器。 Servlet 获取 View 的请求调用模型将数据交给视图进行展示

如何实现页面效果的?

我的主体开源框架是使用了若依框架,其次时 VUE、和 element 样式。

分页是如何实现的?

分页是如何实的首先从数据库中查询出相应的数据的总数量,在代码中设定每页显示的数据数量pagesize.就能计算出总共的页码,通过在点击下一页、上一页、首页、尾页时携带页码变量滚动数据进行相应的判断完成分页显示。

系统用的什么框架

后台使用了 springboot 框架,采用 springboot 框架,使其能够快速的创建 jar 包并实现以 jar 包的形式独立运行,从而减少了 spring 配置,极大的提高了开发、部署的效率。
前台使用了 element 是一个针对前端的、免费的框架,提供了按钮、导航、下拉菜单、折叠、翻页等组件功能 。

前台和后台怎么连接的

利用 axios 是由 promise 封装的一个 http 的库。 进行异步数据请求(得到的数据可以以 json格式返回,便于处理)用 json 格式进行数据传输,前台传递 json 格式的数据,我给前台发送 json 格式的数据响应

JAVA 类就是具备某些共同特征的实体的集合?

@控制层,也就是 Controller@业务层,也就是 service,图持久层,也就是 dao 层,而且包括实体类,由 MyBatis 来管理,通过 spring 来管理 mapper 接口,使用 mapper 的扫描

#{ }和${ }的区别是什么

#{}是预编译处理,${}是字符串替换。
Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用PreparedStatement 的 set 方法来赋值;
Mybatis 在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止 SQL 注入,提高系统安全性

模糊查询 like 语句该怎么写?

在 Java 代码中添加 sql 通配符
select * from foo where bar like #{value}

谈谈你对 spring 的理解

Spring 是一个轻量级 Java 开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题 。

为什么要使用 spring?

spring 提供 ioc 技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。
spring 提供了事务支持,使得事务操作变的更加方便。
spring 提供了面向切片编程,这样可以更方便的处理某一类的问题

springmvc 谈一下你对 SpringMVC 框架的理解

SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的 请求驱动类型的轻量级 Web框架,通过把 Model,View,Controller 分离,将 web 层进行职责解耦,把复杂的 web应用分成逻辑清晰 的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 在我看来,SpringMVC 就是将我们原来开发在 servlet 中的 代码拆分了,一部分 SpringMVC完成,一部分由我们自己完成

SpringMVC 的常用注解

  1. @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类
    上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
  2. @RequestBody:注解实现接收 http 请求的 json 数据,将 json 转换为 java 对
    象。
  3. @ResponseBody:注解实现将 conreoller 方法返回对象转化为 json 对象响应给
    客 户
  4. @PathVariable 用户从 url 路径上获取指定参数,标注在参数前 @PathVariable(“ 要获取的参数名”)。
  5. @RequestParam: 标注在方法参数之前,用于对传入的参数做一些限制

为什么要用 SpringBoot

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

Ajax 应用程序的优势

  1. 通过异步模式,提升了用户体验
  2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
  3. Ajax 引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载

感谢阅读