赞
踩
方面 答辩问题类型
一 | 系统设计和架构方面问题 |
二 | 系统功能实现方面 |
三 | 技术选型和实现细节方面 |
四 | 系统性能和安全方面 |
五 | 未来展望和改善系统方面 |
01、你的系统架构是什么?描述一下?
学生:该系统采用了前后端分离的架构,前端使用Vue.js框架,后端使用SpringBoot框架,是一个完全前后端分离的框架,前后端通信采用RESTfulAPI。通过这种前后端分离的架构,可以实现前端和后端的独立开发和部署,提高了系统的可维护性和扩展性,同时也提供了更好的用户体验和系统性能。
02、数据库是如何设计的?数据库的表结构是怎样的?
学生:该系统主要是实现XXXX的展示,XXXX信息的介绍、用户可以购买商品、管理自己的购物车以及订单等功能。所以系统中需要的实体包括用户、特产、订单、购物车、地址、公告、信息介绍等。
数据库表的话,每个表负责存储特定类型的数据,例如:主键可以使用长整型Long表示、价格可以用Double类型、长文本可以用Longtext、文本可以用varchar、时间用datetiem表示 等。并且这些表之间通过外健关系建立连接,可以通过关联表来解决数据冗余问题,通过join关联查询到达数据的联表。
03、你采用了哪些设计模式或者架构模?为什么选择这些模式?
1、XXXX系统是采用完全前后端分离的架构,就是前端和后端是独立开发、独立部署的。这样可以实现前后端的解耦,提高系统的灵活性和可维护性。前端使用Vue.js等现代框架来实现用户界面,后端使用企业级应用SpringBoot等框架来实现业务逻辑和数据处理。
2、MVC(Model-View-Controller)模式:在传统的开发中,一般都会采用这种包的设计模式,在MVC模式 中,Model负责处理业务逻辑和数据操作,View负责展示用户界面,Controller负责接收用户请求并调用Model和View。它是一种软件架构模式,用于将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这种分离的设计模式有助于提高代码的可维护性、可扩展性和重用性。
模型(Model):负责处理应用程序的数据逻辑,包括数据的获取、存储、处理和验证。模型通常表示应用程序的核心业务逻辑,与数据库或其他数据源交互来获取数据。
视图(View):负责呈现模型的数据给用户,通常是用户界面的展示部分。视图可以是网页、移动应用界面、报表等形式,用于展示数据给用户并接收用户输入。
控制器(Controller):负责处理用户输入和控制应用程序的流程。控制器接收用户的请求,调用相应的模型进行数据处理,然后选择合适的视图来呈现结果给用户。
MVC模式将应用程序分为三个独立的部分,使得各部分之间的耦合度降低,提高了代码的可维护性和可测试性。同时,MVC模式也有助于团队协作开发,因为开发人员可以专注于各自的领域而不会相互干扰。
总的来说,MVC模式是一种有效的软件架构模式,适用于各种规模的应用程序开发,帮助开发人员更好地组织代码并提高开发效率。
3、RESTfulAPI:XXXX系统可能采用RESTfulAPI作为前后端通信的方式。RESTfulAPI是一种基于REST架构风格设计的API。REST(Representational State Transfer)是一种软件架构风格,用于构建分布式系统。RESTful API遵循REST原则,通过HTTP协议定义了一组规范和约束,用于客户端和服务器之间的通信。。最终实现json数据格式的交互。
4、依赖注入(DependencyInjection):在后端代码中采用依赖注入 来管理组件之间的依赖关系。通过依赖注入,可以实现组件的松耦合,提高代码的可测试性和可维护性。
5、单一职责原则(Single Responsibility Principle):在设计系统的各个组件和模块时,可能会遵循单一职责原则,即每个组件或模块应该只负责一项功能。这样可以降低组件之间的耦合度,提高代码的可重用性和可维护性。选择这些设计模式或架构模式的原因是为了提高系统的灵活性、可维护性和可扩展性,降低代码的耦合度,同时也能够更好地满足系统的功能需求和性能要求。
04、讲解一下你的主要功能?
学生:这个系统实现的主要功能有:用户可以浏览XXX商品、浏览景色的介绍、查看特产的详情、搜索商品、特产商品的购买、收藏特产、订单支付、浏览平台公告及参与社区讨论、管理个人信息、修改密码、修改头像等功能 管理员则可以在后台管理注册用户、商品、订单、公告、评论等信息,等等,自行叙说。
05、如何实现用户注册和登录的?
对于注册功能、用户需要输入账号和密码,来最终提交表单。然后对输入的内容进行了正则校验、确保输入合法的信息。同时为了确保密码的正确性、需要用户两次输入密码,防止出现输入密码错误的情况。两次密码输入不一致的情况下、系统给出提示。注册信息提交到后台后、后台首先对注册的账号进行校验、确保该账号未被注册过、如果该账号已经注册、则提示用户。对密码进行加密保存、确保用户数据的安全。
对于登录功能:用户需要输入基本的账号和密码、同时需要输入图片中的验证码、以及选择登录角色。
验证码:主要是通过三方工具接口直接生成随机字符串,通过前端传进来的字符串进行比对,这样可以减少对数据库的查询压力,减少脚本的行为,保护系统安全。
这些登录的基本信息提交到后台后、会进行数据的校验。首优先比对验证码、从数据库拿到生成的验证码、然后和用户输入的验证码比对。如果验证码校验不通过、返回错误信息到前台。前台弹窗展示。如果查询出来的用户信息和选择的登录角色不一致、则提示用户。
06、如何实现信息展示、购买和支付功能?
学生:信息展示功能的实现:后端将商品数据从数据库库中查询出来,然后返回json格式的数据给前端,前端通过html、css、js等技术 将数据具体展示。前台商品进行了模糊查询,分页查询、排序等等。在调用后端接口的时候,将分页数据一块传递到后台、后台在进行slq语句的编写时,将拿到的数据进行拼接。
带有等值查询,模糊查询,分页查询,排序,实际上会通过mybatis来实现对数据库的操纵,也就是orm映射,最终执行的sql,是这样的:
select * from table where username like %xx% limit 0,10 order by id desc;
购买功能的实现:信息详情页面、设置的的有购买按钮,用户点击购买按钮,可以将商品添加到购物车。添加商品到购物车这个过程、前端将用户的主键、商品的主键以及购买商品的数量数据一块发送给后端,后端将这些数据插入到数据库。将插入数据的结果、成功或者失败返回给前端。前端弹窗提示执行的结果。在购物车中,通过查询数据库,展示自己的商品。
支付功能的实现:用户已经填写购买商品的基本信息、例如联系人、联系方式、联系地址。生成一个待支付的订单、在点击订单表中的支付按钮的时候,前端将商品数据提交到后台、后台处理。后台具体的处理过程:1、首先查询用户的账户信息、如果余额不足,则返回提示信息给前端。如果账户余额足够、账户余额在减去购买商品的总价格后,修改用户的信息到数据库,同时需要查询商家的账号、将支付额金额打到商家的账户中。接着、需要扣除商品的库存和销量。扣除和添加销量数据之后,修改商品数据到数据库。将订单数据插入数据库。这个过程需要使用事务管理、确保每个操作都执行成功,如果执行失败、则数据需要回滚。
07、如何搜索和浏览?
学生:搜索功能的实现、用户在前台页面 输入商品的名称,然后点击搜索按钮,将数据发送到后端。后端进行数据的处理、在进行sql语句编写的时候,通过商品名称进行模糊查询。将查询出来的商品列表返回给前端、前端拿到数据后进行展示。如果没有查询到商品、后台也给出提示给前端。前端弹窗提示未查询到商品数据
08、你选择了哪些技术来开发这个系统?为什么选择这些技术?
1、Spring Boot :Spring Boot是一个用于快速开发基于Spring框架的应用程序的开源框架。它简化了Spring应用程序的配置和部署过程,提供了一种快速、简单的方式来构建独立的、生产级别的Spring应用程序。
2、Vue.js:作为前端框架,Vue.js是一个流行的JavaScript框架,用于构建用户界面和单页面应用程序。它是一种轻量级、灵活的框架,主要关注视图层的开发,可以与现有的项目整合,并且易于学习和使用。
3、MyBatis:作为持久层框架,MyBatis是一个开源的持久层框架,用于简化数据库访问操作。它通过将SQL语句与Java代码分离,提供了一种优雅的方式来操作数据库,同时避免了传统的ORM框架中的一些限制。
4、Shiro:作为安全框架,Apache Shiro是一个强大且易于使用的Java安全框架,用于身份验证、授权、加密和会话管理等安全功能。它提供了一套全面的安全解决方案,帮助开发者构建安全可靠的应用程序。
5、Axios:作为前端HTTP库,Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 环境中发起 HTTP 请求。它是一个流行的 JavaScript 库,常用于前端开发中进行 AJAX 请求和与后端 API 进行通信。
6、MySQL:MySQL是一种流行的关系型数据库管理系统(RDBMS),是由MySQL AB公司开发的,后来被Oracle公司收购。MySQL以其高性能、可靠性和易用性而闻名,被广泛应用于Web应用程序和其他各种类型的软件开发中。
我选择这些技术的原因主要包括以下几点:成熟稳定:这些技术都是成熟稳定的开源技术,有着广泛的应用和良好的重技术都有着丰富。
Vue js框架: 它的优势:易于上手,可以逐步应用到项目中的不同部分,组件化开发能够将页面拆分成独立的组件,提高了代码的可重用性和可维护性。响应式数据绑定:能够实时更新页面上的数据,提高了用户体验。劣势:缺少官方支持: Vue.js的官 方文档和社区支持相对其他框架较少
MyBatis框架: MyBatis是一个持久层框架,主要用于简化数据库操作和SQL编写。它具有以下优势:
1)灵活性:MyBatis允许开发者使用XML或注解来编写SQL语句,提供了灵活的配置方式,可以根据需求选择适合的方式进行SQL编写。
性能优化:MyBatis提供了一系列性能优化功能,如缓存机制、延迟加载等,可以有效提升数据库操作的性能和效率。
2)简化SQL编写:MyBatis通过SQL映射文件将Java对象和数据库表进行映射,简化了SQL语句的编写和管理,减少了重复代码。
3)易于学习和上手:MyBatis的API设计简洁明了,易于学习和上手,开发者可以快速上手并开始使用MyBatis进行数据库操作。
4)与传统JDBC兼容:MyBatis与传统的JDBC兼容,开发者可以直接使用JDBC的功能,同时又能够享受MyBatis提供的便利和优势。
5)动态SQL支持:MyBatis支持动态SQL,可以根据条件动态生成SQL语句,灵活应对不同的查询需求,减少了冗余代码。
6)可插拔式插件:MyBatis提供了可插拔式插件机制,开发者可以通过插件扩展MyBatis的功能,实现自定义的功能和逻辑。
7)与Spring等框架集成:MyBatis与Spring等主流框架集成良好,可以与其他框架无缝结合,实现更复杂的应用程序开发。
8)开源社区支持:MyBatis拥有活跃的开源社区,提供了丰富的文档、教程和支持资源,开发者可以在社区中获取帮助和交流经验。
总的来说,MyBatis是一个功能强大、灵活性高、易于学习和使用的持久层框架,适用于各种规模和类型的Java应用程序开发。通过使用MyBatis,开发者可以简化数据库操作、提升性能、减少重复代码,提高开发效率。
Shiro优势:强大的安全功能: Shiro提供 了身份验证、授权、加密等强大的安全功能,能够帮助保护系统的安全性。劣势:文档相对较少:相比于SpringSecurity等安全框架,Shiro的官方文档和社区支持相对较少,在使用和学习过程中需要花费更多的时间
选择这些技术的原因主要包括以下几点:成熟稳定:这些技术都是成熟稳定的开源技术,有着广泛的应用和良好的社区支持。
生态丰富: 这些技术都有着丰富的生态系统和文档资源,可以满足系统开发和维护的需求。易用性:这些技术都具有良好的易用性和学习曲线,能够帮助开发团队快速上手并高效开发。
可扩展性: 这些技术都具有良好的可扩展性,能够满足系统未来的需求变化和扩展。通过选择这些技术,可以有效地提高系统的开发效率、稳定性和安全性,同时也能够更好地满足XXXX系统的功能需求和性能要求。
09、你的系统如何处理交互和数据传输?
学生:前端交互:前端负责与用户进行交互,收集用户的输入信息,展示数据,并将用户的请求发送给后端。
后端处理:后端接收前端发送的请求,处理用户的请求并返回响应数据。使用SpringBoot等后端框架编写控制器(Controller)来处理请求,实现业务逻辑和数据处理。通过MyBatis等持久层框架与数据库进行交互,进行数据的增删改查等操作。
数据传输:前后端之间通过RESTful API或者其他通信协议进行数据传输。前端发送HTTP请求给后端,请求中包含了用户的操作信息或者查询条件。后端处理请求,根据请求的内容进行相应的业务处理,将处理结果封装成JSON格式的数据返回给前端。
状态管理:使用Vuex等状态管理T具在前端进行状态管理,统一管理前端应用的状态,实现数据共享和状态持久化。在后端使用Session或者Token等方式进行用户身份认证和状态管理,确保用户的安全访问和数据隔离。
异常处理:在前后端都要进行异常处理,捕获可能发生的异常情况,返回合适的错误信息给用户。在后端可以通过异常处理器统一处理异常,返回统一的错误响应给前端,以提高系统的容错性和用户体验。
10、如何处理图片和描述信息?
图片通过资源映射的方式,将图片的访问路径存放到数据图、避免将整个图片放到数据库,减少数据库的访问压力。特产的描述信息在数据库中使用长文木的形式立现据的右储
11、使用了哪些框架和库?它们的优劣势是什么?
学生:使用到了Spring Boot、优势:快速开发:
Spring Boot提供了快速开发的特性,可以快速搭建基于Spring的应用程序,简化了配置和开发流程。高度集成: Spring Boot集成了大量的第三方库和框架,如Spring Security、Spring Data等,能够方便地实现各种功能需求劣势:对于新手来说、需要一定的时间来学习使用,部署复杂性:部署和运维方面可能会有一定的复杂性。
Vue.js框架: 优势:易于上手,可以逐步应用到项目中的不同部分,组件化开发能够将页面拆分成独立的组件,提高了代码的可重用性和可维护性。响应式数据绑定:能够实时更新页面上的数据,提高了用户体验。劣势:缺少官方支持: Vue.js的官 方文档和社区支持相对甘他木匡加太小。
12、在开发过程中遇到了哪些挑战?如何解决的?
学生: 在技术选型方面,我选择涉及的技术有很多。我选择了当前社会上较为主流的框架应用开发、采用前后端分类开发、前端使用Vue框架,后端使用SpringBoot框架。另一方面就是系统功能的分析、需要分析该系统所具有的功能以及功能的大致实现思路、这部分主要在网上查找相类似的系统,查看他们具有哪些功能和业务的具体流程。
对于我来说,数据安全性问题、安全漏洞和数据泄露,保护系统的安全性也是一个重要挑战。我的解决方法是实施多层次的安全机制,比如说包括身份认证、授权、密码加密存储、输入验证和过滤、使用HTTPS协议等措施。
13、你是如何设计用户界面的?是否进行了用户测试?
----------
14、用户对你的系统有什么反馈?是否有过改进?有什么创新?有什么亮点?等等
---------
在答辩时,对这些问题的准备是很重要的。不仅要了解系统的技术细节,还要对系统的整体架构有一个整体把握,说白了就是老师在考察你对你自己的系统的学习程度,熟悉程度,看一下你是想努力毕业还是想蒙混过关,老师是知道你的项目来源的,所以更多考察是你对它学习的程度和对待老师的态度。
1、项目准备:
老师觉得首先你要对你的项目有一个差不多的了解,怎么着也得自己把程序跑两遍过一下核心功能吧?你总得能说清楚你的系统出于什么的目的,为什么样的客户服务,完成什么样的功能吧?如果不清楚,看看论文,上面一般会有描述。
2、论文观看:
这个论文其实一般的格式就是将你项目开发的背景、目的、需求、设计、实现、测试、总结几大块全写上了,所以你认真看一遍论文,也会让你对整个软件系统的整体或局部都有一个相对清晰的认知。
3、技术查看:
比如论文会有你项目所涉及技术的描述,Springboot框架,SSM框架,Shiro 框架等等,可能还有前端的什么EasyUI,Bootstrap,Vue,Layui等等,还有我们新爱的MYSQL数据库,先有个大概的了解。答辩不是面试,所以一般不会问你具体的技术,但一般会考察你系统的实现。
4、核心模块:
这是我们准备的重点,你必须要将项目中的二三个你认为是亮点的地方,或者值得一提的地方能说个大概。比如可能你项目中大部分都有这个登陆功能,但它是不是核心功能呢?我觉得值得商榷,因为它基本是每个系统都有的,能有什么亮点?但你说这么一个普通的功能,如果老师问了,你答不上来,尴尬不?所以我觉得你可以看一看,通过个登陆把整个系统的交互流程搞明白了。然后就是准备核心业务模块和系统的核心技术应用。对大部分系统来讲。
其实大多的功能还是基本的增删改查,这个你熟悉一个模块即可。但像其它的,比如系统中所拥有的图形报表功能、数据导入导出功能,这些是不是值得一说?我觉得是可以的。当然这要看每个系统的具体情况,比如你的是基于XXX的推荐系统,那就主要准备介绍一下你这个推荐的算法,业务流程的实现;比如你的是基于XXX的大数据分析,那你可能就主要放在你这个大数据是如何分析的业务模块和流程上了。
5、答辩PPT:
这是一个最终的总结性步骤,你前面的所有的努力,其实都可以汇总到这个PPT上,它是你展示项目和进行答辩的一个思路凝聚,也是你答辩时因为不熟练而忘记时给你救场的救星。一般来讲,一个答辩PPT的制作无法这么几个环节,项目介绍,技术说明,功能实现,主要亮点,项目展示,最后总结。你准备的越充分,胜率也就越大,但是你的导师不可能让你把整个论文都粘贴上去的,所以它就是一个答辩的思路的梳理,你可以把核心的一些东西放上去给自己做提醒。
6、对回答不出的问题,不可强辩。
答辩委 员会的老师对答辩人所作的回答不太满意,还会进-一步提出问题,以求了解论文作者是否切实搞清和掌握了这个问题。遇到这种情况,答辩人如果有把握讲清,就可以申明理由进行答辩:如果不太有把握,可以审慎地试着回答,能回答多少就回答多少;如果确实是自己没有搞清的问题,就实事求是地讲明自己没有搞清楚,表示今后- -定认真研究这个问题,切不可强词夺理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。