以精准营销为例梳理短信业务
1、系统大图
2、流程图2.1、创建精准营销短信发送任务流程
2.2、短信发送流程
小程序商品库存及限购优化改造
1、商品库存1.1、修改商品库存
新建、更新商品时,更新Redis剩余库存数量
macan/spu/save 商品发布
macan/spu/update 商品更新
删除商品时,删除Redis剩余库存数量
macan/spu/del/{pkId} 商品删除
更新商品库存数据表之后更新缓存(需加redis锁)
场景
库存从 大->小
库存从 小->大
库存从不限->限库存
库存从限库存->不限库存
redis剩余库存键值对定义
键 prado:goodsStockResidue:${spuId}
值 剩余库存
数据量:3101****条数据
Redis不限库存键值对定义???
数据量:2288219条数据
商品总数:2291317 (2百万)
不限库存商品数: 2288219
限库存商品数: 3101
1.1.1、新建商品,初始化Redis剩余库存
新建商品,无需加锁
1.1.2、更新商品,更新Redis剩余库存
更新商品 ...
从恶意刷单到小程序下单流程优化
1、问题
2、目标
不超卖、不少卖
防止恶意刷单
3、系统大图
4、行动
5、重要流程5.1、库存操作流程5.1.1、下单时占用库存
校验订单是否存在“占用”库存操作流水
如果存在,则处理过,无需再次处理
对订单id加“占用”Redis锁
解决同一个订单并发请求占用库存问题
再次校验订单是否存在“占用”库存操作流水
避免在加锁的时,另外的线程产生数据
获取商品的剩余库存GoodsStockResidueCacheBizReadService.queryGoodsStockResidueFromCache
扣减redis商品剩余库存
开启事务,批量更新商品库存表、批量插入库存操作流水表,提交事务
如果出现异常,回滚事务,并恢复redis商品剩余库存
5.1.2、订单取消释放库存
根据订单id查询是否存在“确认”库存操作流水
如果存在,则表明次订单已经付款结束
根据订单id查询是否存在“释放”库存操作流水
如果存在,则处理过释放库存操作,无需再次处理
对订单id加上“释放-确认”Redis锁,解决同一个订单,并发释放、确认库存问题
...
从红包裂变活动了解活动业务
1、系统大图
2、业务模型
3、底层数据模型
4、重要流程4.1、参与活动
5、难点5.1、安全第一
从服务提醒单了解商机提醒业务
1、系统大图
2、业务分类
3、提醒单类图
3、流程图3.1、服务提醒单生成
2023重整待发
拿到大礼包,毕业了20年3月16日入职F6汽车科技,至今已有3年半。回顾这段工作经历,有哪些成长呢?以后职业规划是什么呢?程序员的职业生涯真的挺短的,得思考,得前进。
走起
平时写的东西都放在了语雀,正好抽个时间整理一下。
思考一下F6学到的东西,归纳归纳,总结总结。
准备简历。
得看看八股文。
重要的是要思考,要有想法。
微信粉丝数据同步任务引起的OOM记录
1、问题现象
2、内存分析
3、问题分析3.1、问题一根据上述内存对象分析出是同步微信客户的JOB执行时产生的数据,但是同步微信客户的JOB每天凌晨1点执行,为什么今天15:30还在执行?
根据内存快照中的数据,查询日志发现,wxfe9d9163861a7cf4(广州壳牌)公众号一共有335w+的数据,从凌晨1点一直执行到15:30
3.2、问题二内存快照中显示List中有1000w+的openId,这个数据怎么来的?
上述代码的流程是:每次查10000个openId,然后每次根据100个openId查询微信客户信息,然后处理这100个微信客户信息。看代码似乎没有内存泄漏的地方。
每次处理100个公众号粉丝时,会把这些客户的openId放入redis的队列中
全部公众号用户处理完后,会合并公众号用户和小程序用户,此时会从redis中取出队列中的所有值,按理应该是335w+的openId,但是现在内存里有1000w+的openId。
4、问题原因redis的key的有效期是12小时,但由于该公司同步微信客户耗费14.5个小时,一直到15:30才执行完,这就导致red ...
Excel文件上传超时问题定位备忘
1、问题上传带有手机号的excel文件,解析后,将手机号数据存储到oss,并返回oss地址以及手机号条数,
excel文件放开大小限制后,上传文件处理时间过过长。
文件大小:1.2M,行数:30265。
http响应504,nginx日志499。
2、定位2.1、本地跑工程,测试文件上传现有代码:
123456789101112131415<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version></dependency><dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.0.3</version>&l ...
获取文件夹下所有文件并批量替换文件内字符串
123456789101112131415161718192021222324252627282930313233public class MarkdownDemo { public static void main(String[] args) throws IOException { String blogPath = "D:\\data\\clawhub"; String oldDomain = "https://cdn.jsdelivr.net/gh"; String newDomain = "https://xxxx"; execute(Paths.get(blogPath), oldDomain, newDomain); } private static void execute(Path blogPath, String oldDomain, String newDomain) { ...
使用Jasper画打印模板
2.1、安装软件软件版本目前要求为:jaspersoft 6.3.1版本
根据自己的系统选择不同的安装包,下载链接: https://sourceforge.net/projects/jasperstudio/files/JaspersoftStudio-6.3.1/
2.2、学习Jasper软件的使用2.2.1、.jrxml与.jasper文件
.jrxml是源文件
.jasper是编译后的文件,上传打印后台管理系统也是用此格式文件
在.jrxml源文件上,鼠标右键,选择Compile Report,就会生成.jasper文件
直接双击打开.jasper文件,也会生.jrxml源文件
2.2.2、打印模板上的参数
打印模板上所有用到$P{xxx}的参数,都需要在Parameters模块下新增相应的参数
包括table组件使用的参数
注意参数的类型必须与java代码中使用的类型一致,否则通过dubbo接口获取模板pdf的时候,会报类型转换异常。
2.2.3、table的使用
每个table绑定各自的DataSet
双击table组件会进入table设置页面
每一列的参 ...