面试项目

自我介绍

  • 面试官你好,我叫代澳旗,今年六月份毕业,本科就读于武汉晴川学院,专业是软件工程,我主要使用的语言是java,在之前实习的公司中开发也用到了python,平时很多脚本也是用python写的,在校期间,我开发过一个个人博客网站,并且现在也在坚持更新文章,主要是记录一下日常工作学习中所踩的坑以及一些工作总结,目前原创文章也有80多篇了,还有一个校园社区网站,这是和实验室的同学一起做的,在实习过程中,有过一次独立开发,项目的一个大迭代,其中要支持mongoDB数据源的接入,这块就是我负责的,有些东西不太熟悉,所以原本排期两周的工作,最后开发+测试完成大概花了三周,不过也保证了质量,上线后也没怎么出现问题。我本次来应聘的是java后台开发,大致情况是这样,谢谢!

项目介绍

DMC数据接入

负责功能

  • DMC(Data manager Center)数据管理中心,是我之前实习公司的主要产品。属于内网产品,主要客户都是一些各地的公安部门以及金融机构,还要个人版的产品,业务线是:将客户的数据源接入进来,进行数据清洗加工,以及建模,最终通过可视化分析,将数据展示在大屏上。技术栈主要就是SpringBoot,后端的核心模块是建模,因为我是实习生的身份,对这个额核心模块的接触并不多,不过在改过两个bug时,把整体代码的框架看了看,也了解过不少。我在实习期间主要负责的模块是数据接入,就是将客户的数据同步到我们的系统中,开发工作就是支持mongodb数据源接入,优化API数据源接入,还有写了不少对接其他数据服务的脚本。数据接入这个模块,基本上就是我在维护着。

遇到的问题

  • 难点:由于mongodb存储的松散性,mongo中是以文档为存储单位的,就像mysql中一行一行的,而且数据类型也有很多不同,然而jdbc的驱动并没有一个像mysql那样的结果集进行操作,mongo的驱动只会返回一个迭代器对象。难点就在于将对方数据库中的数据对接到我们的系统中来的同时,要保证数据格式的完整性,其实最重要的一点就是获得比较完整的字段信息,字段类型,我给出的技术方案是,获取前1000个文档,对字段取并集,可以设定每次同步的条数,并使用mongo的游标进行查询,这样很好的解决了大数据量的问题。

晴川社区

负责功能

  • 最热标签:
  1. 使用redis存储热门标签。由于帖子的标签是确定不变的,很多帖子也有相同的标签,所以就想过做一个热门标签的功能,也方便用户查看。
  2. redis缓存标签,这个标签就相当于热门关键词,存储结构是list。
  3. 设置一个定时任务,每5小时更新一次热点标签,不需要用户手动刷新。每次更新将每篇帖子的标签取出来,以帖子下的评论数作为这个标签的权重,再利用Collectionssort排序方法,重写里面的compareTo比较器。将标签根据权重排序,得到新的排序结果,再将之前的缓存清除,将新的排序结果存入redis中,并将返回的list交给前端页面显示。
  • 热门推荐: 也是根据浏览量,点赞评论数,从数据库中查询前几个帖子并进行分组排序。
  • 头像上传: 因为用户注册的时候会选择性别,系统会根据性别来分配默认头像,加上文件上传功能,对接阿里云图床的接口,将头像上传,将返回的头像链接存入数据库中,前端页面刷新显示。
  • 集成了swagger和druid数据源监控

问题与解决

  • docker中数据库的问题
  1. 问题描述:在本地数据库测试是好的,但是部署在docker中的时候,数据库连接就不正常了?

  2. 解决:docker中安装数据库之后,还要进行配置,才能访问数据库,需要将mysqld.cnf中的bind-address = 127.0.0.1注释掉,具体做法就是从docker中将这个文件复制出来,因为在docker中没有vi编辑器,所以只能复制出来,改好之后在替换进去。

  • 编码过程中的问题
  1. 编码过程中遇到最多的问题在mapper中xml文件的编写上,一点都不能出错。所有字段都要一一对应,逗号也必须是英文的,这就体现了mybatis-plus的好处

博客网站

负责功能

权限控制

  1. 这个主要是用spring的aop实现的,用的是security权限认证框架。
  2. 首先在数据库中三张表,用户表,权限表,用户权限表。自定义一个注解,存放用户角色的值,这个值就对应着表中的权限。
  3. 在那些需要登录后才能进行操作的逻辑中,将登录方法和用户角色采用环绕通知的方式切入进去,当一个请求来的时候,会对用户的权限进行验证,在登录之前会有一个方法进行验证。

redis

  1. 在redis中保存手机号验证码,并设置一个过期时间为五分钟。
  2. 消息通知:发表评论成功之后,在数据库中存入评论的信息,在redis中也存入条消息,采用String的存储结构,用户查看的时候,也是从redis中取未读消息,点赞也是这个逻辑。
  3. 总访问数和访客量:总访问量通过页名获取,Session生命周期内没有浏览过该page,则增加访客量或文章访问人数,并将访问量存储到redis中,以hash的结构存储,设置一个24小时的定时任务,每天0点清空redis中当日网站访问记录,但保存总访问数、和访客量,存入redis中,并将redis中的所有访客记录更新到数据库中,也就是说redis中只存每天的访客记录,最终更新访问量和访客数。

待改善

  • 由于之前操作不规范,将docker中的数据库镜像删掉了,由于没有映射到本地服务器上面,导致数据库被覆盖了,数据文件丢失。这算是吃一堑长一智了。
  • 采用显性域名,由于docker中部署了两个网站,只有一个80端口,所以才想到采用显性域名的方式,这样出现的问题就是,能看到端口号,而且不美观,解决方案就是:nginx反向代理,在nginx中将域名映射到指定的端口。
  • 安全问题:访问时显示不安全,访问时也并不是https访问,解决方案:加ssl证书
  • reids数据的备份问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值