Java实习个人简历项目自问最终篇

文章详细描述了作者在OOPSystem和电商后台管理系统中的开发实践,包括使用JWT进行安全验证、数据CRUD操作的设计、MybatisPlus的使用、Redis缓存和消息队列、前后端数据交互及跨域处理、数据可视化的实现、接口测试的关注点和团队协作方法。
摘要由CSDN通过智能技术生成

当然是自己做的那两个CRUD的管理系统来谈

项目部分

  1. 在OOPSystem项目中,你如何确保数据的安全性和完整性?

首先我用到了jwt,我通过自定义jwt拦截器实现SpringMVC的HandlerInterceptor接口重写perhandle方法允许在处理之前调用解析Token获取观众列表的第一个元素然后转换为整数,这个整数被假定为员工的ID,通过service的方法去获取员工状态,同时利用HMAC256算法构建JWT验证器并尝试验证token,无效token会抛出异常,我在工具类中写了一个轮子生成jwt,设置负荷,签名时间一小时。同时还有一个轮子是MD5算法我设计登录和用户的业务层都会去调用处理加密的密码即破坏密文结构从首字母开始截取密码字符到第四位,以及从第29位开始截取到末尾,20-29,4-20的前一个字符。其二我的项目是采取前后端分离的架构,我在后端设计了VO层只会展示给前端所需要的字段,在后端的接口采取全局异常处理通过一个ServiceExpection自定义异常类用自己封装的dto层对象去根据传入的异常代码和消息创建一个标识错误的对象同时日志进行记录。

  1. 在电商后台管理系统中,你如何实现商品类别的添加、修改和查询功能?请描述一下你的设计思路和实现过程。

我在设计商品类别的CRUD的时候考虑到了管理员的登录状态问题,我通过自定义了事务注解@PassToken跳过令牌验证机制,在后端的接口比如add和edit我用到了SpringMVC的@RequestBody 接收商品类别对象将其进行返回序列化,我用一个flag遍历去判断service层调dao层的SQl语句根据字段属性新建分类当这个变量大于0即添加,修改成功。

 在查询方面我设计了条件查询,模糊查询,根据id,name获取类别,我在这个多个接口根据条件传递了不同的参数如根据类别名获取类别列表传入name,用列表接收传入了service做查询的方法后通过这个列表对象调用size方法去判单是否大于0如果大于0即成功用HashMap的对象把消息,货物对象,状态码以键值对的形式传入哈希表中,这里同时还用到了try catch当我获异常后会记录日志返回状态码,获取商品失败也会返回消息和状态码,而根据id查询同理,当商品类别对象不为空的时候就返回状态码为0,以及对象用了@PathVariable注解。从请求的URL中提取{id}部分的值,并将其转换为int类型,然后作为id参数传递给方法,若为空就抛出异常。前端方面用Vue3的响应式对象初始变量为空,利用El表单实现双向数据绑定,通过axios发送请求先做了验证当前类别的名字是否存在根据状态码去判断状态,用data接收后渲染到El表单上,在修改的时候先弹出对话框验证是否获取数据,若获取失败则会弹出,同时还设计了已存在商品类别名称的效验通过异步去比较数据库中信息若已存在则会提示,通过生命周期钩子第二阶段去挂载去获取商品列表。

  1. 你在两个项目中都使用了JWT实现安全验证机制登录,你能谈谈JWT的优缺点吗?以及在实际应用中你如何保证JWT的安全性?

JWT也存在安全性的缺点,如果说在客户端存储未采取适当措施可能会被xss攻击,窃据篡改jwt。

同时存在注销问题,jwt是没有状态的一旦发放到客户端,服务器无法主动让其失效。如果注销用户,通常需要采取其他机制如设置jwt黑名单。

Jwt通常保存在http请求的头部中,如果jwt过大会增大网络传输的开销。

在实际项目中我采取了设置较短的过期时间,降低风险,同时定期刷新jwt,自定义了拦截器实现SpringMVC自带的HandlerInterceptor重写perhandle方法通过request内置对象从http请求头获取token如果不是URL映射直接跳过,同时这里的自定义事务也要检查若含有自定义的事务注解则跳过同时在检查跨域注解的情况下去判断登录的时候是否有token没有就抛异常,同时用decode方法对其进行解码,最后的验证通过才把用户存储到请求中。

  1. 你在电商后台管理系统中使用了Redis,请描述一下Redis的主要应用场景以及你在项目中是如何使用它的。

Redis作为一款优秀的高性能数据库内部有丰富的数据结构,Redis提供了键过期的功能和灵活的淘汰策略适合作为缓存数据库,能够提高访问速度,这些东西都是存储在内存中。在消息队列中Redis支持发布订阅机制跨域用来实现消息队列,生产者将消息发布到Redis中,消费者从Redis中订阅消息并消费,由于Redis读写速度很快,因此跨域处理高并发的消息队列。

我在项目中先引用SpringBootDataRedis依赖然后在yml中配置本地单机redis的端口和本地ip,后端接口利用自动装配redis模板对象stringRedisTemplate,使用Spring自带的工具类StringUtils把自增ID改为至少四位的字符串,同时设置流水key的过期时间会自动过期

  1. 在OOPSystem项目中,你使用了MybatisPlus进行持久层操作,你觉得它相比于Mybatis有哪些优点?

我觉得相较于Mybatis,MybatisPlus对其进行了更深层次的封装,MybatisPlus内部提供了一些接口如BaseMapper等一系列接口里面提供基本业务的CRUD,我们只需要在数据访问层用接口继承这个泛型接口接口,甚至实现0xml配置,同时MybatisPlus官网还有MybatisPlus代码生成器以及Mybatisx插件能够一键生成crud代码,比起Mybatis省去了很多配置和SQL语句编写,但是在实际业务中来谈我认为可能在企业中更多会用Mybatis和JPA,企业的业务逻辑很多需要根据需求来,MybatisPlus虽然封装crud但不一定符合业务逻辑我们还是需要利用mybatis去编写一些复杂的动态SQL代码。

  1. 你在项目中进行接口测试时,通常会关注哪些方面?有没有遇到过特别棘手的问题,你是如何解决的?

在接口验证的时候去保证接口能够被正确验证返回正确结果,这个会涉及到传参和输入结果验证。

接口的性能,因为主要是SpringBoot项目我配置了跨域时间限制有的时候也会写一些ajax去验证要考虑到接口响应时间。

接口的安全性,我会用进行SQL注入测试利用一些MySQL的关键字尝试对数据库进行一些测试操作。

从测试的参数边界值表现,这本身也是黑盒测试中比较重要的内容,我会设计一些边界值对接口进行特定的参数效验,来看看接口是否稳定可靠

  1. 在OOPSystem项目中,你提到了平台具备数据可视化功能,请问你是如何实现这一功能的?使用了哪些技术或工具?

在前端Vue开发的时候我使用了Echarts,在npm中引入依赖的后在man.js中配置使用,在需要显示的组件里面引入echarts包,准备好dom元素,通过后端这边传出来的JSON数据,对数据进行加工处理转换为name 和value的键值对。

  1. 在两个项目中,你都是如何进行前后端数据交互的?有没有遇到过跨域问题,你是如何解决的?

前后端交互的话,因为两个都是SpringBoot项目,后端都是内嵌了tomcat服务器,在yml配置端口以及数据库信息,以登录操作举例,前端通过EL表单填写数据同时进行双向数据绑定,提供axios对后端暴露的接口进行连调(看后端给出的接口文档是什么形式的)我这里是post请求,提交数据后这时候请求会发送给tomcat,此时的我在config目录下对限定接口的跨域,若匹配则运行跨域,那么此时便会执行后端的登录逻辑先去数据库查询是否存在数据,若不存在则抛出异常,存在就返回状态码给前端,前端收到后端的返回进行跳转。

在第一个项目我在config目录下编写一个配置类,自定义一个全局常量即跨域时间我这里把SpringMVC的CorsFileter注册为Bean对象,基于URL映射的一个对象以及跨域配置对象,利用跨域配置对象去配置访问源地址,请求头,方法,运行跨域的接口以及最大时长,在第二个项目中我是通过实现了SpringMVC的一个接口Webconfigurer,重写一个跨域的方法,设置映射地址,允许跨域,运行通过的方法以允许跨域的端口。

  1. 你在进行需求分析时,通常会采取哪些方法?能否举一个你在电商后台管理系统中进行需求分析的实例?

我会先查阅一定的资料,通过一些视频渠道去了解一个项目的信息,同时结合自己的思路画出一些逻辑思维图像,将自己从开发角度去带入用户去思考一个应用的开发需要具备的功能。我在那个项目中我是看了太多的视频之后在设想的应用场景根据以前的项目,再去看看别人的项目逻辑然后从0开始进行DBA设计,将实体设计出来再画图模拟敏捷开发模型对项目先一个登录和注册随后设计主页,再去对比其他的项目进行对比看看自己还差什么就继续开始开发

10. 在你的项目经历中,有没有遇到过需要与其他团队成员紧密协作的情况?你是如何与团队成员进行有效沟通和协作的?

我是自己独立完成全栈开发和测试的.

  • 34
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值