面试官你好,我叫林锦权,是广东科技学院的一名大四应届生,今天是过来面试这个Java实习生的。学习的专业是软件工程专业,在学校选的方向是Java后端开发,在学校学习了Java基础,数据结构,数据库,操作系统,javaweb这些的,掌握的还行,然后也学习一些框架像ssm,springboot,也自己做过几个小项目的,就是简历上面写的那几个,然后也跟老师的团队做了一个人事管理的项目,主要负责用rabbitmq搭建一个邮件服务,负责一些薪资管理的sql语句,和websocket来搭建一个聊天室。因为项目是前后端分离的,也学习了vue框架,然后自己平时也习惯写一些笔记文档的。我的自我介绍就先这样,谢谢。

在学校跟老师做的一个人事管理系统,然后负责一个几个功能的优化,主要负责是用rabbitmq搭建一个邮件服务器,就是添加员工信息的时候会发送一份入职通知书。
这个从项目的角度去说吧,使用观察者模式来实现这个功能,降低耦合性。我是用qq邮箱来实现的,首先要开启pop3的一个服务,然后会有一个秘钥返回给我们,保存秘钥。然后要导入相应的依赖,像rabbitmq,mail这样的依赖,然后开启写rabbitmq和mail的配置文件。然后还要写这个邮件的模板。写完这里就可以搭建服务器了,写rabbitmq的配置,就是编写交换机,队列,然后通过rk路由模式来绑定队列和交换机,在启动类里面创建一个队列bean。创建发送邮件的一个服务,里面利用注解@RabbitListener来监听这个队列,就可以拿到这个队列里面的消息,利用mail的一些接口来打包含有员工信息的对象,然后放到模板那里渲染就可以发送了。这个就是消费者的,然后就是生产者,就是添加员工的时候就要把一些员工的信息放进队列里面。然后遇到的一些问题就是,消息会被重复消费,还有就是消息会发送不到到队列里面,然后就上网百度了一下,就是创建一个表然后去记录发送的情况,是就在rabbitcofig配置类里面调rabbitTemplate的一些接口去重写实现消息发送的日志,发送成功也会对这条消息进行标识,就是消息投递成功了。发送失败也会进行回调去执行邮件重复发送的任务,发送任务是设置到定时1分钟后发送一次,然后设置重新发送的次数是三次,超过三次就会被标识为发送必败了。防止队列丢失消息。

websocket面试

websocket是结合spring boot使用的,我是创建一个聊天室的,要使用websocket来进行文字的通信。
首先是服务端,导进相关的websocket依赖,然后创建websocket配置类,使用了 websocket 的子协议 -stomp,我是看网上学的,方便一些。然后消息代理既使用了 /queue ,又使用了 /topic ,主要是因为我这里既有点对点的单聊,也有发送系统消息的群聊。创建 websocket 处理类 controller,就在里面写消息协议很简单:发送来的消息,后面跟的是该条消息要发送到哪个用户,响应消息包含两个字段,一个是消息内容,一个是该条消息由谁发送。这样服务端就写好了。
然后前端的话,就是用户登录成功后,就发起 websocket 的连接,连接成功之后,就可以准备接收服务端的消息了,接收到服务端的消息后,数据保存在 localStorage 中,保存格式是 当前用户名#消息发送方用户名:[{from:’消息发送方’,msg:’消息内容’}] ,注意后面的是一个 json 数组,这两个人的聊天记录都将保存在这个数组中。在聊天展示页面,当数组中的数据发生变化时,自动更新。