个人介绍

个人介绍

面试官你好,我叫崔中闯,一名网络工程专业的大四学生,在校期间成绩始终保持专业第一,在整个计算机学院前3%,绩点为3.74/4.0,大学期间曾获得过校优秀毕业生,三好学生,优秀干部,校特等奖学金、一等奖学金,专利授权奖金,软著奖金,在校期间发布过四项软著并已拿到著作权,一项专利已授权,参加过多个创新创业比赛,并在团队中作为技术研发人员开发项目并申请软件著作权为团队项目做支撑,课业方面,多次作为小组长带领团队共同研发课程项目,接触过数据可视化echart图表,three.js开源3D图形库,前端语言html三件套,vue,react,数据库方面用过mysql、oracle、neo4j图数据库,后端接触过python,java语言并基于这两个语言都开发了项目并申请软著,工作经历方面,参加过两端实习,第一段科大讯飞的实习生作为负责人带领三个人的小团队共同研发公司的项目《家庭传承云平台》,第二段实习是杭州亚信公司,参与中国移动的稽核业务开发,项目经验方面,除了公司项目之外我还做了一个大乐透抽奖业务项目和分库分表组件项目,以上就是我的个人情况介绍

实习经历摘要:

在实习期间,我参与了一个重要的数据处理项目,负责实现一个高效的数据分流统计系统。该项目涉及将大量数据自动化地从总表分流到六大业务类型的分表中,以满足不同业务需求。

主要实现过程:

  1. 设计并实现了一个抽象基类 BaseSample,一个auditSample类用于统一获取总表中的数据存入List<Object> records,再定义了抽象方法 saveRecords,该方法用于将数据记录列表保存到指定的业务类型表中。

  2. 根据六大业务类型,创建了相应的子类,每个子类重写了 saveRecords 方法,实现了具体的数据插入SQL语句,确保数据正确地插入到对应的业务表。

  3. 开发了自动化类,通过实例化具体的业务类型类并调用其 auditSample 方法,实现了从总表中提取数据并自动分流到相应分表的功能。

  4. 引入了事务管理机制,通过 DBUtils 类的 startTransactioncommitTransactionrollBackTransaction 方法,确保数据库操作的原子性和一致性。

实现成果:

  • 成功实现了一个自动化的数据分流系统,提高了数据处理的效率和准确性。

  • 通过抽象工厂模式的应用,增强了代码的可维护性和可扩展性。

  • 通过事务管理,确保了数据库操作的安全性和数据的一致性。

项目介绍

大乐透项目是我对稀土掘金平台的抽奖业务进行深度分析后开发的一个采用微服务架构前后端分离的抽奖平台,前端采用react,后端框架是SpringBoot,数据库采用mysql和redis,其中用到的分布式技术栈有dubbo、nacos、rabbitmq、ElasticSearch、canal、xxl-job

关于这个项目的核心是抽奖流程的设计和库存扣减处理,抽奖前的⼈群判断采用责任链模式依次执行黑名单规则、权重规则、默认规则、之后进入抽奖的中和后,这两部的流程是相对复杂的,需要判断用户抽奖了几次,对于不同次会限定是否能获得某个奖品,同时还有库存的扣减,如果库存不足或者不满足n次抽奖得到某个奖品,则会进行兜底。那么这就是一个树规则的交叉流程,所以使用了组合模式构建一颗规则树,并通过数据库表的动态配置决定在抽奖前完成后,后续的流程要如何进行。扣减库存这块采用的是Redis decr原子操作+setnx加锁兜底,decr操作保证库存是一个一个的进行扣减,扣减完之后给扣减过的库存进行setnx加锁并设置过期时间操作,这样下次再重复扣减该库存就会不被允许,保证不会出现超卖情况。另外抽奖的算法选择也是一大亮点,我设置了一个概率范围的阈值,当概率范围较小时采用O(1)空间换时间的算法,提前将概率计算出来做成概率表存入redis,后续抽奖时直接查找即可,当概率范围较大时采用O(log(n))的时间换空间算法,log(n)的时间复杂度算法又分for循环、二分查找、多线程查找三种,也是根据概率范围的大小来选择,这样的设计保证了抽奖的快速响应

目前我是将这个项目的技术栈都部署在了服务器上,可直接访问,用grafana作为可视化面板和普罗米修斯作为数据源来实现抽奖系统的监控