Fastjson的$ref在接口参数兼容上的隐患
假设应用1给应用2提供了一个接口,需要更新参数,将Map
变为List<Map>
,很容易写出这样的兼容代码:
1 |
|
然而在部署后发现,应用2拿到的数据对象中的bbbb,没有任何数据。
假设应用1给应用2提供了一个接口,需要更新参数,将Map
变为List<Map>
,很容易写出这样的兼容代码:
1 |
|
然而在部署后发现,应用2拿到的数据对象中的bbbb,没有任何数据。
很多产品都会有积分系统:用户通过一定的行为累积积分,积分可以兑换各种权益,积分可能
会有增加(获取)、扣减(消耗)、查询余额、查看历史、过期、冻结等行为。
积分过期是一种很常见的产品功能,因为一般都不希望用户累计大量积分,造成预算不可控。
过期有2种方式:
通常业务都有控制预算或疲劳度的需求:
在产品开发,通常会有这样的场景:
问题可以归纳为:为了达成某个目标,有多种方案可以选择时,如何进行决策?
正确的做法是数据驱动,让用户来体验,看他们是用手点赞还是用脚投票,帮助进行决策。
简单来说,就是拼多多砍一刀,今日头条极速版签到领金币。
用户付出社交关系,收获一些优惠券、现金奖励;平台付出资金,收获APP渗透率、购物用户、活跃用户、新用户。
场景有很多,比如:
摇一摇功能分2种:
在接到摇一摇需求的时候需要仔细分析业务需求。如果是第1种,只是单纯的触发机制,要是前端的工作,无论是什么形式,最后都只是一个单纯的请求而已。如果是第2种,就较复杂,需要详细设计匹配算法。
和摇一摇匹配类似的场景还有:滴滴司机乘客匹配、饿了么顾客骑手匹配、王者荣耀游戏匹配。
项目开发中,我们会引入框架、工具类、SDK等依赖,这些依赖的包也会有依赖,层层嵌套。一个比较关键的问题是,如果不同依赖,都引用相同的一个底层依赖,但是是不同版本,就会出现引用冲突。
如下图,一个项目引入了Diamond 2.3.4
、HSF 1.2.3
、FastJson 1.2.0
共3个组件。Diamond组件引入FastJson 1.1.0
,HSF组件引入FastJson 1.0.0
。当我们使用com.alibaba.fastjson.JSON.toJSONString(data)方法的时候,到底调用的是FastJson 1.0.0
的方法、FastJson 1.1.0
的方法,还是FastJson 1.2.0
的方法呢?
之前分析了定时任务的数据结构演进,其中终极方案就是kafka的分层时间轮。现在实际编写一下kakfa的分层时间轮,并分析数据。
代码部分,直接按kafka 0.11.0版本进行编写,给关键语句都加了自己的注释。
java | scala |
---|---|
Poller | kafka.utils.timer.TimerTest |
SystemTimer | kafka.utils.timer.SystemTimer(Timer里) |
Timer | kafka.utils.timer.Timer(trait Timer) |
TimerTask | kafka.utils.timer.TimerTask(trait TimerTask) |
TimerTaskEntry | kafka.utils.timer.TimerTaskEntry(TimerTaskList里) |
TimerTaskList | kafka.utils.timer.TimerTaskList |
TimingWheel | kafka.utils.timer.TimingWheel |
在很多业务场景下,都需要定时任务,比如”定时推送消息”、”定时计算报表”、”定时清理数据”等等。通常业务都是集群化的,定时任务通常不能每个机器单机执行,需要有个分布式协调器感知到集群,然后选中1台机器执行,所以出现了很多定时任务平台帮助处理定时任务。
定时任务有个核心的问题:如何知道时间到了?