个人介绍
1、C#基础扎实,具备良好的 OOP 及 AOP 思想和编码能力,熟练使用设计模式;
熟练使用常用 UML 图来分析复杂业务,善于透过业务本质抽象核心领域模型;
熟悉垃圾回收机制,善于使用异步多线程提高系统性能,对各种锁机制、线程池机制等都有深入理解;
2、精通 Asp.Net Core 框架原理,有多年实战经验,可以快速根据需求完成项目构建,并对核心模块源码有深入
研究,如:配置系统、IOC 容器、管道中间件、Action Filter 等;熟练使用 ABP 框架快速搭建符合简洁架构
的应用程序,阅读过 ABP 核心源码,对于模块化编程思想有深刻理解;
3、精通各种常用数据结构的实现原理、时间复杂度及使用场景,如:数组、链表、哈希、跳表、队列、栈等;
熟悉常用算法的实现原理,如:归并排序、数组二分查找、常用限流算法、Raft 共识算法、时间轮调度算法、
LRU 缓存淘汰算法、Hash 一致性算法等;
4、熟练使用各种常用微服务框架及组件,如:Dapr、Consul、Ocelot、Nginx、LVS、Keeplived;
5、熟练掌握 RabbitMQ 的使用,熟悉其 5 种工作模式各自的适用场景;熟悉 Kafka 的消息持久化原理及零拷贝
原理;熟悉延迟消息的实现方案,对消息幂等性设计有实践经验。
6、熟悉分布式事务 的 2 阶段、3 阶段提交,可靠消息最终一致性,最大努力通知方案;分布式锁的使用
场景及工作原理;
7、精通 SQL 语言与 Mysql 调优,掌握常见的导致索引失效的场景,熟悉 InnoDB 引擎底层结构,熟悉索引的
底层原理及使用,熟悉事务日志、MVCC、锁机制,熟悉 binlog、
redolog、undolog 的工作原理,熟悉 MySql
中如何保证事务的 ACID 特性;
8、熟悉 Redis 的网络 IO 模型及哨兵机制工作原理,熟悉 RDB、AOF 两种持久存储的原理,熟悉 key 过期原
理;善于使用 Redis + 锁 + 布隆过滤器应对高并发场景;
9、熟练使用 MongoDB 的各种查询、管道函数用法;熟练使用 Clickhouse+Redash 实现个性化的报表业务;
熟悉 TiDB 等 NewSql 数据库工作原理;
10、熟练使用 Kettle 的各种常用组件,完成 ETL 任务;熟练使用 Docker、Jenkins、K8s 等常用 DevOps 工
具;
工作经历
2020-05-01 -至今成都易会天下科技有限公司.net高级开发工程师
公司主要从事智慧会展行业,为国内外知名药企提供智慧会议管理服务; 1、负责公司平台内消息通知服务的优化重构工作,独立设计出新的领域模型,并完成所有编码工作,使用 RabbitMq 进行逻辑解耦;核心代码采用了多种设计模式,保证了效率即扩展性。 2、负责公司公共逻辑及第三方组件的调用封装工作,通过查阅三方组件官网使用说明,结合平台的使用习惯,封 装出一套易用、灵活的公共组件库,如:Hanfire、Consul、RabbitMq 等。 3、负责各头部客户的定制化需求,根据产品的原型及自己对业务的理解,画出对应的用例图、类图、业务流程 图等,并与产品经理及客户反复沟通确认,到最终完成编码交付测试,并上线。 4、负责公司的 ETL 工作,采用 Kettle 实现客户的主数据同步及维护,结合阿里云效形成流水线,方便老租户的 维护及新租户的接入。
教育经历
2006-09-01 - 2009-07-15成都农业科技职业学院计算机应用技术专科
毕业后,从事了5年的电力设备维护工作,2014年7月正式进入开发这行业
资质认证
技能
1、企业开发中,经常需要导入一些Excel数据,并且要管理导入的历史版本,本服务主要抽象出一下几个模块:模板、主表、关联明细表、历史记录等;前端先将Excel上传至OSS,后端根据Ur拉取文件至本地,然后根据模板取解析Excel值内存,最后导入数据库,记录历史版本 2、本人独立负责改服务的所有设计开发工作 3、难点是导入的过程中,会遇到一些非法格式的数据行,导致服务出异常,解决方案是在正式导入前,先根据模板对Excel数据进行格式校验,通过后才能导入
1、客户使用我们平台的产品,需要将其组织架构数据定时同步至我们系统。主要分为数据采集、数据对比分析入库,以及定时任务模块 2、本人独立负责所有模块的设计开发工作,定时任务采用阿里云效实现 3、难点是数据量大的时候会导致Job执行超时,以及需要掌握转换与作业的区别,解决办法是分批执行对应的转换,需要顺序的用作业,否则尽量用转换,保证其性能
1、背景 平台内的原消息通知服务有以下 2 个弊端:第一,配置非常麻烦,需要配置五六张 MySql 表,并且关系 错综复杂;第二,设计思路及架构老旧,维护费劲,日志信息也比较欠缺,出错之后不易定位问题。为了解决以 上问题,决定重新开发一套简单高效且可扩展的消息通知架构。 2、设计 消息通知的本质是:把消息组装好,通过一定的发送渠道,发送到指定的终端,并记录发送日志。 基于此抽象出以下模型:消息模板、数据 Provider、发送器、全局变量、发送日志、布局页。采用订阅 RabbitMQ 消息实现逻辑解耦,以 MongoDB 作为存储。每条消息包含一个模板编号,根据编号得到消息的各组件:模板内容、 模板数据、发送通道、发送人、抄送人等。在收到消息后,需要对其进行一系列的合规校验,如模板是否存在、收 件人是否存在及合法、附件大小是否超限等,这里采用了责任链模式实现。消息渲染使用 RazorEngine 组件,获 取发送器对象采用了简单工厂模式 + 反射 + 缓存 实现(目前支持:邮件、短信、极光推送、*、Webhook、 站内消息,并易于扩展),具体发送器依赖一个消息对象,而整个构建消息对象的过程采用了 建造者模式 实现。 3、遇到的挑战 问题描述:有个租户需要在每周四下午 5 点,给指定用户发送付款通知邮件,用户的数量大约 1 万 +,这段时间集中式的向 MQ 推送消息,导致 MQ 有大量消息堆积,而且影响到了其他场景下的消息发送,最要命 的是同一条消息会推送多次,这就导致很多客户收到了很多重复的邮件,遭到客户投诉。解决方案:起初采用增加 服务节点数量,来增加消费端能力,但同一消息推送多次未能解决(最后查到是阿里云 RabbitMQ 组件那段时间有 问题),后面将这一业务场景单独调整为引用 DLL 库,直接调用发送方法,构造消息对象采用 享元模式(消息 对象池思想)即保证了性能,也解决了以上问题。 4、项目业绩 通过重构之后新的消息通知架构,在消息配置及维护方面,效率提高了 70%,新租户的消息通知需 求上线时间比原来缩短了 50%。目前公司 80%场景已改造完毕,服务运行一年多时间,经过了几次迭代打磨,功 能变得越来越强大,能满足客户各种刁钻的需求,并且多次得到老板和客户的好评。