Bootstrap

20个Java毕设常用问答汇总

1、系统设计和架构方面的问题

1.1你的系统的架构是什么样的?可以描述一下吗?

  学生答:该系统采用了前后端分离的架构,前端使用Vue.js框架,后端使用Spring Boot框架,前后端通信采用RESTful API。通过这种前后端分离的架构,可以实现前端和后端的独立开发和部署,提高了系统的可维护性和扩展性,同时也提供了更好的用户体验和系统性能。

1.2你是如何设计数据库的?数据库的表结构是怎样的?

  学生答:该系统主要是实现家乡特产商品的展示,家乡信息的介绍、用户可以购买商品、管理自己的购物车以及订单等功能。所以系统中需要的实体包括用户、特产、订单、购物车、地址、公告、信息介绍等。每个表负责存储特定类型的数据,例如:主键可以使用长整型Long表示、价格可以用Double类型、长文本可以用Longtext、文本可以用varchar 、时间用datetiem表示等。并且这些表之间通过关系建立连接。

1.3你的系统采用了哪些设计模式或者架构模式?为什么选择这些模式?

   学生答:1、家乡特产系统可能采用前后端分离的架构模式,即前端和后端是独立开发、独立部署的。这样可以实现前后端的解耦,提高系统的灵活性和可维护性。前端使用Vue.js等现代框架来实现用户界面,后端使用SpringBoot等框架来实现业务逻辑和数据处理。2、MVC(Model-View-Controller)模式:在MVC模式中,Model负责处理业务逻辑和数据操作,View负责展示用户界面,Controller负责接收用户请求并调用Model和View。这样可以实现前后端的分离,降低代码耦合度,提高代码的可读性和可维护性。3、RESTfulAPI:家乡特产系统可能采用RESTfulAPI作为前后端通信的方式。RESTfulAPI是一种基于HTTP协议的轻量级、灵活的通信方式,可以实现前后端的解耦,支持多种客户端,提高系统的可扩展性和可维护性。4、依赖注入(DependencyInjection):在后端代码中采用依赖注入来管理组件之间的依赖关系。通过依赖注入,可以实现组件的松耦合,提高代码的可测试性和可维护性。5、单一职责原则(Single Responsibility Principle):在设计系统的各个组件和模块时,可能会遵循单一职责原则,即每个组件或模块应该只负责一项功能。这样可以降低组件之间的耦合度,提高代码的可重用性和可维护性。选择这些设计模式或架构模式的原因是为了提高系统的灵活性、可维护性和可扩展性,降低代码的耦合度,同时也能够更好地满足系统的功能需求和性能要求。

2、功能实现

2.1你的系统有哪些主要功能?可以简要描述一下吗?

   学生答:这个系统实现的主要功能有:用户可以浏览家乡特产商品、浏览家乡景色的介绍、查看特产的详情、搜索商品、特产商品的购买、收藏特产、订单支付、浏览平台公告及参与社区讨论、管理个人信息、修改密码、修改头像等功能 管理员则可以在后台管理注册用户、商品、订单、公告、评论等信息

2.2 你是如何实现用户注册和登录的?

  学生答:对于注册功能、用户需要输入账号和密码。对输入的内容进行了正则校验、确保输入合法的信息。同时为了确保密码的正确性、需要用户两次输入密码,防止出现输入密码错误的情况。两次密码输入不一致的情况下、系统给出提示。注册信息提交到后台后、后台首先对注册的账号进行校验、确保该账号未被注册过、如果该账号已经注册、则提示用户。对密码进行加密保存、确保用户数据的安全。

  对于登录功能:用户需要输入基本的账号和密码、同时需要输入图片中的验证码、以及选择登录角色。这些登录的基本信息提交到后台后、会进行数据的校验。首优先比对验证码、从数据库拿到生成的验证码、然后和用户输入的验证码比对。如果验证码校验不通过、返回错误提示到前台。前台弹窗展示错误提示。如果通过账号和密码在在数据库查询不到用户的信息、则返回错误信息到前台。前台弹窗展示。如果查询出来的用户信息和选择的登录角色不一致、则提示用户。

2.3 你的系统如何实现特产的展示、购买和支付功能?

   学生答:特产展示功能的实现:后端将商品数据从数据库库中查询出来,然后返回json格式的数据给前端,前端通过html、css、js等技术 将数据具体展示。前台商品进行了分页查询、在调用后端接口的时候,将分页数据一块传递到后台、后台在进行slq语句的编写时,将拿到的数据进行拼接。

  购买功能的实现:商品详情页面、设置的的有购买按钮,用户点击购买按钮,可以将商品添加到购物车。添加商品到购物车这个过程、前端将用户的主键、商品的主键以及购买商品的数量数据一块发送给后端,后端将这些数据插入到数据库。将插入数据的结果、成功或者失败返回给前端。前端弹窗提示执行的结果。在购物车中,通过查询数据库,展示自己的商品。

  支付功能的实现:用户已经填写购买商品的基本信息、例如联系人、联系方式、联系地址。生成一个待支付的订单、在点击订单表中的支付按钮的时候,前端将商品数据提交到后台、后台处理。后台具体的处理过程:1、首先查询用户的账户信息、如果余额不足,则返回提示信息给前端。如果账户余额足够、账户余额在减去购买商品的总价格后,修改用户的信息到数据库,同时需要查询商家的账号、将支付额金额打到商家的账户中。接着、需要扣除商品的库存和销量。扣除和添加销量数据之后,修改商品数据到数据库。将订单数据插入数据库。这个过程需要使用事务管理、确保每个操作都执行成功,如果执行失败、则数据需要回滚。

2.4 用户如何搜索和浏览特产?

  学生答:搜索功能的实现、用户在前台页面 输入商品的名称,然后点击搜索按钮,将数据发送到后端。后端进行数据的处理、在进行sql语句编写的时候,通过商品名称进行模糊查询。将查询出来的商品列表返回给前端、前端拿到数据后进行展示。如果没有查询到商品、后台也给出提示给前端。前端弹窗提示未查询到商品数据

3、技术选型和实现细节

3.1你选择了哪些技术来开发这个系统?为什么选择这些技术?

   学生答:1、Spring Boot:作为后端框架,Spring Boot提供了快速开发和简化配置的特性,能够快速搭建基于Spring的应用程序,同时提供了丰富的生态系统和良好的文档支持。2、Vue.js:作为前端框架,Vue.js是一个流行的JavaScript框架,具有轻量级、易学易用的特点,能够快速构建交互式的用户界面,并且支持组件化开发,有助于提高代码的可重用性和可维护性。3、MyBatis:作为持久层框架,MyBatis提供了灵活的SQL映射和强大的查询功能,能够方便地与各种数据库进行交互,并且能够有效地避免SQL注入等安全问题。4、Shiro:作为安全框架,Shiro提供了身份验证、授权、加密等安全功能,能够帮助保护系统的安全性,防止未经授权的访问和数据泄露。5、Axios:作为前端HTTP库,Axios能够在浏览器中发起异步HTTP请求,与后端进行通信,并处理请求和响应数据。它是基于Promise的,使用起来简单方便。6、MySQL:作为关系型数据库,MySQL是一个开源的、稳定的、成熟的数据库系统,能够满足家乡特产系统对数据存储和管理的需求。

    选择这些技术的原因主要包括以下几点:成熟稳定:这些技术都是成熟稳定的开源技术,有着广泛的应用和良好的社区支持。生态丰富:这些技术都有着丰富的生态系统和文档资源,能够满足系统开发和维护的需求。易用性:这些技术都具有良好的易用性和学习曲线,能够帮助开发团队快速上手并高效开发。可扩展性:这些技术都具有良好的可扩展性,能够满足系统未来的需求变化和扩展。通过选择这些技术,可以有效地提高系统的开发效率、稳定性和安全性,同时也能够更好地满足家乡特产系统的功能需求和性能要求。

3.2 使用了哪些框架和库?它们的优劣势是什么?

   学生答:使用到了Spring Boot 、优势:快速开发:Spring Boot提供了快速开发的特性,可以快速搭建基于Spring的应用程序,简化了配置和开发流程。高度集成:Spring Boot集成了大量的第三方库和框架,如Spring Security、Spring Data等,能够方便地实现各种功能需求 劣势:对于新手来说、需要一定的时间来学习使用,部署复杂性:部署和运维方面可能会有一定的复杂性。

  Vue.js框架:优势:易于上手,可以逐步应用到项目中的不同部分,组件化开发能够将页面拆分成独立的组件,提高了代码的可重用性和可维护性。响应式数据绑定:能够实时更新页面上的数据,提高了用户体验。劣势:缺少官方支持:Vue.js的官方文档和社区支持相对其他框架较少

  MyBatis框架:优势、MyBatis提供了灵活的SQL映射和强大的查询功能,能够方便地与各种数据库进行交互、MyBatis可以通过手动编写SQL来控制数据库操作,灵活性高,能够满足复杂的查询需求、MyBatis提供了多种性能优化手段,如缓存、批量操作等,能够提高数据库操作的效率。劣势:XML配置繁琐:MyBatis的XML配置文件相对繁琐,可能会增加开发和维护的复杂性

   Shiro优势:强大的安全功能:Shiro提供了身份验证、授权、加密等强大的安全功能,能够帮助保护系统的安全性。劣势:文档相对较少:相比于Spring Security等安全框架,Shiro的官方文档和社区支持相对较少,在使用和学习过程中需要花费更多的时间

3.3如何处理用户之间的交互和数据传输?

   学生答:前端交互:前端负责与用户进行交互,收集用户的输入信息,展示数据,并将用户的请求发送给后端。

  后端处理:后端接收前端发送的请求,处理用户的请求并返回响应数据。使用SpringBoot等后端框架编写控制器(Controller)来处理请求,实现业务逻辑和数据处理。通过MyBatis等持久层框架与数据库进行交互,进行数据的增删改查等操作。

  数据传输:前后端之间通过RESTful API或者其他通信协议进行数据传输。前端发送HTTP请求给后端,请求中包含了用户的操作信息或者查询条件。后端处理请求,根据请求的内容进行相应的业务处理,将处理结果封装成JSON格式的数据返回给前端。

  状态管理:使用Vuex等状态管理工具在前端进行状态管理,统一管理前端应用的状态,实现数据共享和状态持久化。在后端使用Session或者Token等方式进行用户身份认证和状态管理,确保用户的安全访问和数据隔离。

   异常处理:在前后端都要进行异常处理,捕获可能发生的异常情况,返回合适的错误信息给用户。在后端可以通过异常处理器统一处理异常,返回统一的错误响应给前端,以提高系统的容错性和用户体验。

3.4如何处理特产的图片和描述信息?

   学生答:特产图片通过资源映射的方式,将图片的访问路径存放到数据图、避免将整个图片放到数据库,减少数据库的访问压力。特产的描述信息在数据库中使用长文本的形式,实现数据的存储。

4、性能和安全性

4.1 你的系统在性能方面有哪些考虑?如何处理高并发和大数据量?

    学生答:并行处理和分布式架构:我的系统被设计为可以在分布式环境中运行,这意味着我可以在多个计算节点上同时处理请求。这种架构允许我更有效地处理高并发情况,因为请求可以分散到多个处理单元上。

      缓存机制:为了提高性能,我使用缓存来存储已经计算过的结果,这样可以避免重复计算相同的请求。对于常见的查询或计算结果,缓存可以显著减少响应时间。

      异步处理:我可以异步处理一些长时间运行的任务,这样可以避免阻塞并发请求。例如,在处理大数据量时,可以将数据分批处理,并在后台异步执行,从而提高响应速度。

      负载均衡:我的系统可以利用负载均衡技术,将请求均匀地分配到不同的服务器或处理单元上,从而避免某个节点过载而影响整体性能。

     优化算法和数据结构:我使用了各种优化算法和数据结构,以提高查询和计算的效率。例如,使用哈希表或树结构可以加快数据检索速度,而优化的算法可以降低计算复杂度

     资源管理和监控:我会对系统资源进行管理和监控,以确保资源的有效利用和系统的稳定性。这包括对内存、CPU和网络使用情况的监控,以及在需要时动态调整资源分配。

4.2 你的系统有哪些安全机制?如何防止SQL注入、XSS攻击等安全漏洞?

 学生答:项目中使用到了Shiro安全框架进行身份认证和授权。前后端数据交互通过token进行身份的有效核验,确保只有经过验证的用户才能访问系统资源。密码加密存储:对用户的密码进行加密存储,确保用户密码的安全性。可以使用哈希算法(如 SHA-256)对密码进行单向加密存储,并且加盐处理以增加安全性

   输入验证和过滤:对用户输入的数据进行验证和过滤,防止 SQL 注入、XSS 攻击等安全漏洞。可以使用参数化查询、ORM 框架(如 MyBatis)等技术来防止 SQL 注入,同时对用户输入的特殊字符进行转义或过滤来防止 XSS 攻击。

5.在开发过程中遇到了哪些挑战?如何解决的?

 学生答:技术选型方面、计算机涉及的技术也很多。自己选择了当前社会上较为主流的单体应用开发、采用前后端分类开发、前端使用Vue框架,后端使用SpringBoot框架。另一方面就是系统功能的分析、需要分析该系统所具有的功能以及功能的大致实现思路、这部分主要在网上查找相类似的系统,查看他们具有哪些功能和业务的具体流程。数据安全性问题、安全漏洞和数据泄露:保护系统的安全性是一个重要挑战,。我的解决方法是实施多层次的安全机制,包括身份认证、授权、密码加密存储、输入验证和过滤、使用 HTTPS 协议等措施。

注意点

答辩时,对这些问题的准备是很重要的。不仅要了解系统的技术细节,还要对系统的整体架构和功能有清晰的理解,并能够清晰、自信地回答老师的问题。

;