Wang Guo(汪果)
|
硕士研究生
电子信息(研究方向:计算机方向),
电子科技大学,
成都, 四川, 中国
手机: +86 188 8410 3908
邮箱: 202122280519@uestc.stu.edu.cn
[我的简历]
[GitHub]
|
关于我
我目前在电子科技大学攻读电子信息(研究方向:计算机方向)硕士学位。本人研究生期间获得电子科技大学研究生学业二等奖学金,并且被授予“电子科技大学优秀研究生”荣誉称号。【证书链接】
考研数学一:124分(全校前20%)
我的研究兴趣主要包括: Java后端开发、分布式系统、机器学习等。
教育经历
项目经历
仿抖音后端项目 | 后端开发
- 技术选型:Java、SpringBoot、MySQL、Redis、MongoDB、RabbitMQ 等
- 主要完成数据库表设计,完成视频评论模块、粉丝模块、系统消息、用户验证、视频模块等业务的开发。采用Spring Boot 框架开发,利用knife4j 对后端接口管理等。利用基于雪花算法的Idworker 实现分布式全局id。
- 优化点1:借助Redis 缓存验证码并设置过期策略,保证登录的安全性。同时利用Redis 存放Token 信息,处理前端请求时,验证Token 信息的一致性,从而实现单一设备登录并强制下线旧设备。
- 优化点2:利用Redis 缓存视频被点赞个数/评论数等缓存并计数。并在Redis 设置动态阈值参数结合Nacos 中的配置参数实现将Redis 中数据延迟持久化到数据库,减轻数据库压力。
- 优化点3:借助Redis 的Zset 数据结构对粉丝/关注的关注时间进行缓存,实现对粉丝/关注列表的时间排序,减轻后端MySQL 的压力。上线应用并完成了云端服务器的部署,接口测试链接:http://47.115.222.30:8099/doc.html。
- 优化点4:将发布视频任务放入RabbitMQ 中,实现视频发布的异步化,减少用户等待时间,同时设置重试机制,保证视频发布失败的时重试,提升系统的并发能力与可靠性。同时借助RabbitMQ 与MongoDB 实现系统消息的异步保存与展示,保证系统消息与重要数据的解耦,使重要数据不因系统消息发布失败而回滚。
基于 Raft 算法的 K-V 分布式存储实现 | 后端开发
- 技术选型:Java、Rocks-DB、SOFA-BOlt、线程池、JUC、Lombok、Slf4j
- 本项目采用Java 语言,实现Leader 选举、日志复制等功能。接收KV 值包装成日志存于服务器集群中,利用JUC 控制并发,对特定场景保证线程安全,采用Rocks-DB 存储状态机日志,SOFA-Bolt 用于节点RPC 通信。实现一致性算法模块、日志模块、选举模块等。通过Raft 算法保证与Leader 节点的强一致性,实现集群Follower 节点中日志信息与Leader 节点的同步,提升集群的可用性。
- 困难点1:要实现结点周期性选举/Leader 周期性发送心跳。通过使用线程池技术延迟队列等实现。
- 困难点2:向Leader 结点中追加日志时,需要获取多个结点复制任务的结果,以判断是否满足复制成功数的要求。通过Future/CountDownLatch/线程池技术结合实现等。
- 困难点3:在结点变成Leader 结点后,由于心跳的任务需判断结点的状态,因此必须保证结点状态status 在不同线程的可见性,通过volatile 实现等。同时存在多个需保证线程安全的场景,通过ReentrantLock 等实现。
- 困难点4:在项目中会存在参数较多、参数组合复杂的问题,同时会存在要保证某些类在任何情况下只存在一个实例,分别通过构建者模式和懒加载单例模式解决等。