解剖屎山,寻觅黄金之第二弹_速讯
大家好,我3y啊。由于去重逻辑重构了几次,好多股东直呼看不懂,于是我今天再安排一波对代码的解析吧。austin支持两种去重的类型:N分钟相同内容达到N次去重和一天内N次相同渠道频次去重。
(资料图)
在最开始,我的第一版实现是这样的:
publicvoidduplication(TaskInfotaskInfo){//配置示例:{"contentDeduplication":{"num":1,"time":300},"frequencyDeduplication":{"num":5}}JSONObjectproperty=JSON.parseObject(config.getProperty(DEDUPLICATION_RULE_KEY,AustinConstant.APOLLO_DEFAULT_VALUE_JSON_OBJECT));JSONObjectcontentDeduplication=property.getJSONObject(CONTENT_DEDUPLICATION);JSONObjectfrequencyDeduplication=property.getJSONObject(FREQUENCY_DEDUPLICATION);//文案去重DeduplicationParamcontentParams=DeduplicationParam.builder().deduplicationTime(contentDeduplication.getLong(TIME)).countNum(contentDeduplication.getInteger(NUM)).taskInfo(taskInfo).anchorState(AnchorState.CONTENT_DEDUPLICATION).build();contentDeduplicationService.deduplication(contentParams);//运营总规则去重(一天内用户收到最多同一个渠道的消息次数)Longseconds=(DateUtil.endOfDay(newDate()).getTime()-DateUtil.current())/1000;DeduplicationParambusinessParams=DeduplicationParam.builder().deduplicationTime(seconds).countNum(frequencyDeduplication.getInteger(NUM)).taskInfo(taskInfo).anchorState(AnchorState.RULE_DEDUPLICATION).build();frequencyDeduplicationService.deduplication(businessParams);}
那时候很简单,基本主体逻辑都写在这个入口上了,应该都能看得懂。后来,群里滴滴哥表示这种代码不行,不能一眼看出来它干了什么。于是怒提了一波pull request重构了一版,入口是这样的:
publicvoidduplication(TaskInfotaskInfo){//配置样例:{"contentDeduplication":{"num":1,"time":300},"frequencyDeduplication":{"num":5}}Stringdeduplication=config.getProperty(DeduplicationConstants.DEDUPLICATION_RULE_KEY,AustinConstant.APOLLO_DEFAULT_VALUE_JSON_OBJECT);//去重DEDUPLICATION_LIST.forEach(key->{DeduplicationParamdeduplicationParam=builderFactory.select(key).build(deduplication,key);if(deduplicationParam!=null){deduplicationParam.setTaskInfo(taskInfo);DeduplicationServicededuplicationService=findService(key+SERVICE);deduplicationService.deduplication(deduplicationParam);}});}
我猜想他的思路就是把构建去重参数和选择具体的去重服务给封装起来了,在最外层的代码看起来就很简洁了。后来又跟他聊了下,他的设计思路是这样的:考虑到以后会有其他规则的去重就把去重逻辑单独封装起来了,之后用策略模版的设计模式进行了重构,重构后的代码 模版不变,支持各种不同策略的去重,扩展性更高更强更简洁
确实牛逼。
我基于上面的思路微改了下入口,代码最终演变成这样:
publicvoidduplication(TaskInfotaskInfo){//配置样例:{"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}}StringdeduplicationConfig=config.getProperty(DEDUPLICATION_RULE_KEY,CommonConstant.EMPTY_JSON_OBJECT);//去重ListdeduplicationList=DeduplicationType.getDeduplicationList();for(IntegerdeduplicationType:deduplicationList){DeduplicationParamdeduplicationParam=deduplicationHolder.selectBuilder(deduplicationType).build(deduplicationConfig,taskInfo);if(Objects.nonNull(deduplicationParam)){deduplicationHolder.selectService(deduplicationType).deduplication(deduplicationParam);}}}
到这,应该大多数人还能跟上吧?在讲具体的代码之前,我们先来简单看看去重功能的代码结构(这会对后面看代码有帮助)
去重的逻辑可以统一抽象为:在X时间段内达到了Y阈值,还记得我曾经说过:「去重」的本质:「业务Key」+「存储」。那么去重实现的步骤可以简单分为(我这边存储就用的Redis):
通过Key从Redis获取记录判断该Key在Redis的记录是否符合条件符合条件的则去重,不符合条件的则重新塞进Redis更新记录为了方便调整去重的参数,我把X时间段和Y阈值都放到了配置里{"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}}。目前有两种去重的具体实现:
1、5分钟内相同用户如果收到相同的内容,则应该被过滤掉
2、一天内相同的用户如果已经收到某渠道内容5次,则应该被过滤掉
从配置中心拿到配置信息了以后,Builder就是根据这两种类型去构建出DeduplicationParam,就是以下代码:
DeduplicationParamdeduplicationParam=deduplicationHolder.selectBuilder(deduplicationType).build(deduplicationConfig,taskInfo);
Builder和DeduplicationService都用了类似的写法(在子类初始化的时候指定类型,在父类统一接收,放到Map里管理)
而统一管理着这些服务有个中心的地方,我把这取名为DeduplicationHolder
/***@authorhuskey*@date2022/1/18*/@ServicepublicclassDeduplicationHolder{privatefinalMapbuilderHolder=newHashMap<>(4);privatefinalMap serviceHolder=newHashMap<>(4);publicBuilderselectBuilder(Integerkey){returnbuilderHolder.get(key);}publicDeduplicationServiceselectService(Integerkey){returnserviceHolder.get(key);}publicvoidputBuilder(Integerkey,Builderbuilder){builderHolder.put(key,builder);}publicvoidputService(Integerkey,DeduplicationServiceservice){serviceHolder.put(key,service);}}
前面提到的业务Key,是在AbstractDeduplicationService的子类下构建的:
而具体的去重逻辑实现则都在LimitService下,{一天内相同的用户如果已经收到某渠道内容5次}是在SimpleLimitService中处理使用mget和pipelineSetEX就完成了实现。而{5分钟内相同用户如果收到相同的内容}是在SlideWindowLimitService中处理,使用了lua脚本完成了实现。
LimitService的代码都来源于@caolongxiu的pull request,建议大家可以对比commit再学习一番:https://gitee.com/zhongfucheng/austin/pulls/19
1、频次去重采用普通的计数去重方法,限制的是每天发送的条数。
2、内容去重采用的是新开发的基于redis中zset的滑动窗口去重,可以做到严格控制单位时间内的频次。
3、redis使用lua脚本来保证原子性和减少网络io的损耗
4、redis的key增加前缀做到数据隔离(后期可能有动态更换去重方法的需求)
5、把具体限流去重方法从DeduplicationService抽取出来,DeduplicationService只需设置构造器注入时注入的AbstractLimitService(具体限流去重服务)类型即可动态更换去重的方法 6、使用雪花算法生成zset的唯一value,score使用的是当前的时间戳
针对滑动窗口去重,有会引申出新的问题:limit.lua的逻辑?为什么要移除时间窗口的之前的数据?为什么ARGV[4]参数要唯一?为什么要expire?
A: 使用滑动窗口可以保证N分钟达到N次进行去重。滑动窗口可以回顾下TCP的,也可以回顾下刷LeetCode时的一些题,那这为什么要移除,就不陌生了。
为什么ARGV[4]要唯一,具体可以看看zadd这条命令,我们只需要保证每次add进窗口内的成员是唯一的,那么就不会触发有更新的操作(我认为这样设计会更加简单些),而唯一Key用雪花算法比较方便。
为什么expire?,如果这个key只被调用一次。那就很有可能在redis内存常驻了,expire能避免这种情况。
推荐项目最后再叨叨吧,很多人可能会发一段截图,跑来问我为什么要这样写,为什么要以这种方式实现,能不能以这种方式实现。这时候,我更想看到的是:你已经实现了第二种方式了,然后探讨你写的这种方案好不好,现有的代码差在哪里。
毕竟问问题很简单,我又不是客服,总不能没诚意的问题我都得一一回答吧。
如果想学Java项目的,我还是强烈推荐我的开源项目消息推送平台Austin,可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。
仓库地址(可点击阅读原文跳转):https://gitee.com/zhongfucheng/austin
我开通了股东服务内容,感兴趣可以点击下方看看,主要针对的是项目哟
VIP服务
标签:
相关推荐
-
解剖屎山,寻觅黄金之第二弹_速讯
大家好,我3y啊。由于去重逻辑重构了几次,好多股东直呼看不懂,于是我 -
云顶之弈S9亚索主C阵容推荐攻略
在云顶之弈里面有多个角色可以选择,每个角色都可以选择新的内容和丰富 -
焦点报道:iPhone14帮助拯救三名被困在充满水的峡谷中的人
iPhone14及其先进的卫星紧急求救功能帮助挽救了另外三人的生命,这次是 -
“通胀冲击”结束?IIF首席经济学家:美联储不会再加息!_播资讯
北京时间周四凌晨,美联储虽然如期暂停加息,但是其点阵图却意外暗示年 -
热议:泉果、南方等多位基金经理出手,弱市自购在释放什么信号?
泉果、南方等多位基金经理出手,弱市自购在释放什么信号? -
午评:创业板指涨1.55% 机器人概念大涨_世界热点
午评:创业板指涨1 55%机器人概念大涨 -
去看海,去观戏,去逛展…想象之中与意料之外的阿那亚戏剧节都在抖音!
今日,2023阿那亚戏剧节重磅开幕,将以戏剧为起点,掀起为期十一天的戏... -
甘肃路桥打庆项目部:DVR体验车 让安全生产教育从“说教”变为“体验”
6月10日,甘肃路桥打庆总承包项目以全国第22个安全生产月为契机,组织 -
老凤祥黄金价格今天多少一克(2023年06月15日)_环球速读
老凤祥黄金价格今天多少一克(2023年06月15日)每日更新 -
微动态丨彩金闹天宫金币价格今天多少一克(2023年06月15日)
金投网提供彩金闹天宫金币价格今天多少一克(2023年06月15日),彩金闹 -
天天热头条丨武开鑫
1、武开鑫,男,汉族,1965年7月出生,山东沂水人,省业余大学,1985年 -
新编英语文体学教程_关于新编英语文体学教程简介
1、《新编英语文体学教程》是2009年7月1日外语教学与研究出版社出版的 -
“‘粤’升湾区阔 潮涌看中国" 连通中国与世界的广州南沙港_精选
6月13日下午,“‘粤’升湾区阔潮涌看中国”线下走访团来到广州港南... -
教育系统推进“互联网+就业”模式 助力高校毕业生更好就业
北京6月14日电(记者王鹏、杨湛菲)线上推送招聘信息、举办网络招聘会 -
世界献血者日丨三分钟、200毫升,一座城市的温暖相助
3分钟,200毫升血液即可采集完成。6个小时,一份血液即可完成安全检测 -
江苏无锡: “黑科技” 全面升级 助力阳山水蜜桃“飞”得更远 世界短讯
享誉盛名的阳山水蜜桃,是专属于无锡人夏天的专属“甜蜜”,也深受... -
微头条丨湾区三分钟丨大湾区 大工程 大未来
这两天,不少湾区人的朋友圈都被这样一座超级工程的最新进展刷屏了:在 -
文明之光点燃亚运之火 杭州亚运会火种今天在良渚古城遗址成功采集
杭州亚运会迎来倒计时100天之际,今天上午,杭州亚运会火种在杭州良渚 -
河北发布高温红色预警信号
河北省气象台06月15日5时发布高温红色预警信号:预计今天白天,张家口 -
北京持续性高温,北京疾控发布提醒
据北京市气象台发布,6月14日至17日4天,本市将出现持续性高温天气,平 -
炒作“监听站”是美国自我否定式闹剧
日前,部分美媒大肆炒作所谓“中国在古巴建监听站”的言论,美国政... -
脱口秀演员李昊石演出剧院被罚10万元
6月15日消息,北京市文化市场综合执法总队网站显示,近日,中日青年交 -
世界通讯!致女儿成年礼的一封信 感动无数家长!
家长致女儿成年礼的一封信:亲爱的女儿:在你即将进入十八岁、即将步入 -
国家统计局:2023年5月份规模以上工业增加值增长3.5%-焦点滚动
据国家统计局网站消息,5月份,规模以上工业增加值同比实际增长3 5% -
环球热讯:房地产板块异动 天房发展直线拉升涨停
6月15日消息,天房发展(行情600322,诊股)直线拉升涨停,荣盛发展(行情0 -
当前快报:出手就是1公斤黄金 买金人出手阔绰牵出洗钱案
中新网上海新闻6月14日电(李姝徵朱佳杰)购买黄金进行投资,是一种常见 -
银行财眼|违反反洗钱等多项规定 贵州务川农商行被罚55.5万 全球报道
银行财眼|违反反洗钱等多项规定贵州务川农商行被罚55 5万 -
国家统计局:二季度经济增长明显快于一季度 天天头条
国家统计局:二季度经济增长明显快于一季度 -
青年人调查失业率持续攀升,统计局回应
青年人调查失业率持续攀升,统计局回应 -
最新资讯:监管部门一季度接收并转送保险消费投诉26188件,财险理赔、人身险销售纠纷为投诉“重灾区”
监管部门一季度接收并转送保险消费投诉26188件,财险理赔、人身险销售 -
市场监管总局:督促指导经营规模较大平台企业对自身协议规则进行全面自查
市场监管总局:督促指导经营规模较大平台企业对自身协议规则进行全面自 -
今日讯!哈佛医学院员工盗卖人类遗骸:买方到太平间挑选 包裹用快递寄出
海外网6月15日电据美国福克斯新闻14日消息,美国哈佛医学院日前被曝一 -
环球通讯!杜克能源以28亿美元出售可再生能源资产
杜克能源公司达成了一项协议,将其商业可再生能源业务出售给布鲁克菲尔 -
日产全新SUV曝光!四季度首发亮相/竞争理想L8-世界热讯
日前智电出行获取了日产PathfinderConcept车概念型最新消息,新车国内 -
女人到了四五十岁,试试这些显贵的夏季穿搭,减龄又有好气质 全球今亮点
女性在不同的年龄阶层,她们追求的穿衣风格是不一致的,而且越是到了年 -
今日看点:故宫参观须知6月30日起施行:禁带商拍器材、露营车等
新湖南,主流新媒体,移动新门户。-分享自@新湖南 -
全球资讯:国家统计局:5月份新建商品住宅销售价格环比整体涨幅回落 二手住宅环比下降
舜网国内频道发布国内最新鲜的新闻,国内热点事件和民生事件。 -
天天最资讯丨日本自卫队枪击案事发后 日媒曝39年前已有类似事件:枪手因抑郁症未被起诉
日本自卫队枪支(东海电视台)海外网6月15日电据日本东海电视台15日报 -
密云:监检衔接提升职务犯罪案件办理质效_热文
清风北京讯近日,密云区纪委监委与北京市人民检察院第三分院、密云区人 -
大兴:扛责在肩 纵深推进全面从严治党 热门看点
第十二派驻组:加强监督检查推动全面从严治党主体责任落实第十二派驻组 -
法国人暑期度假预算暴增 多方面缩减开支
海外网6月15日电尽管法国仍处于高通货膨胀时期,但法国人尽可能维持暑 -
埃及正式申请加入金砖国家,沙特媒体:将使金砖国家成色更足 最新
俄罗斯驻埃及大使鲍里先科14日表示,开罗已经正式申请加入金砖国家合作 -
哈佛医学院员工盗卖人类遗骸:买方到太平间挑选 包裹用快递寄出
哈佛大学(资料图)海外网6月15日电据美国福克斯新闻14日消息,美国哈 -
世界看热讯:公司休息时间搞团建,我必须参加吗?
据白鹿视频报道,广东深圳的周女士入职某公司一周后,因拒绝参加公司下 -
建生态强省 筑发展底色 全球快消息
吉林省白城市通榆县三一零碳智造产业园内,风机主机叶片整齐排列。李晓 -
天天即时看!职业俱乐部 向梦想进发
核心阅读青训为职业球队的发展提供根基与土壤。通过搭建稳定的职业化赛 -
全球要闻:三亚禁止在珊瑚礁保护区开展违规海上旅游活动
图为海南三亚珊瑚礁国家级自然保护区海域三区功能区划图(范围图)。三 -
环球速递!分享人是什么意思(分享人与分享对象的区别)
想必现在有很多小伙伴对于分享人与分享对象的区别方面的知识都比较想要 -
动态焦点:统计局:1-5月城镇固定资产投资同比增长4%
统计局:1-5月城镇固定资产投资同比增长4% -
统计局:5月新建商品住宅销售价格环比整体涨幅回落 二手住宅环比下降|环球微速讯
统计局:5月新建商品住宅销售价格环比整体涨幅回落二手住宅环比下降 -
今日热门!“降息”!中国央行将MLF利率下调10BP,净投放370亿元
“降息”!中国央行将MLF利率下调10BP,净投放370亿元 -
利好!央行重磅官宣:MLF降息10个基点
政策利率联动下调,释放了明确的稳增长信号,是货币政策加强逆周期调节 -
世界今亮点!统计局:5月社会消费品零售总额同比增长12.7%
统计局:5月社会消费品零售总额同比增长12 7% -
当前速讯:新汽车在磨合期在高速上跑多少码(新车磨合期跑高速好)
1、新车磨合期忌长时间跑高速 通常来说,新车在5000公里里程之前, -
日本5月贸易赤字13725亿日元,连续22个月现贸易逆差|世界要闻
日本财务省15日公布的初步统计结果显示,受能源价格上涨和日元贬值等影 -
每日速看!历届海峡论坛回眸:民间嘉年华 共叙两岸情
一位与会的台湾代表高举手中的相机记录下海峡职工论坛大会的场景。(资 -
前沿热点:为救人,他从落差10多米的桥上跳入钱塘江……
从落差10多米的桥上跳入钱塘江救人的外卖小哥彭清林,获得了来自各方面 -
观天下!汽车整车板块异动拉升 赛力斯涨超5%
汽车整车板块异动拉升赛力斯涨超5% -
经营现金的净流量怎么算_经营现金净流量是什么
1、一、计算公式 每股经营现金净流量=经营现金流量净额 普通股股数 -
富信科技创历史新高 融资客减仓
富信科技股价创出历史新高,截至09:36,该股上涨5 40%,股价报51 68元 -
港媒:“港独”歌曲从苹果旗下音乐平台下架
多家港媒发现:“港独”歌曲从AppleMusic及iTunes商店下架香港《星岛日 -
全球球精选!故宫参观须知6月30日起施行:禁带商拍器材、露营车等
为贯彻落实“保护第一、加强管理、挖掘价值、有效利用、让文物活起... -
世界级大赛本周末昌平开赛!部分道路采取临时交通管制
6月17日至6月18日“环西自行车中国挑战赛·北京昌平”赛事将在昌平... -
全球视点!房山:室组联动督导 推进安全隐患大排查大整治
为进一步推进落实房山区安全隐患大排查大整治工作,近日,区纪委监委第 -
工作札记丨平谷纪检监察干部巡察初体验故事 微资讯
巡察初体验区纪委监委第二派驻纪检监察组干部陈鹤婷近期,我有幸参加了 -
全球动态:日本5月份贸易赤字13725亿日元 连续22个月出现贸易逆差
日本财务省15日公布的初步统计结果显示,受能源价格上涨和日元贬值等影 -
防范短视频沉迷,还需加强“青少年关怀”
当前,短视频对青少年的影响正在逐渐加深。刷短视频,有的同学跟随专家 -
纽约华裔遭团伙抢劫:劫匪专挑亚裔下手 看见好车就拉车门
纽约白石镇地区购物中心海外网6月15日电据美国《世界日报》新闻网站14 -
今日快看!“补库存”?美国今年或购买1200万桶石油……
据路透社13日援引知情人士的消息报道,今年,美国计划在油价下跌的情况 -
海报丨必看!关于高考填报志愿
俗话说七分考三分报,志愿填报的重要性不亚于高考。2023高考生最为关心 -
迈阿密市长苏亚雷斯提交文书参加美国总统竞选
中新社华盛顿6月14日电(记者沙晗汀)美国佛罗里达州迈阿密市市长苏亚雷 -
丰立智能6月15日快速上涨
以下是丰立智能在北京时间6月15日09:48分盘口异动快照:6月15日,丰立 -
每日头条!4号球衣足球(4号球衣)
号球衣足球,4号球衣这个问题很多朋友还不知道,来为大家解答以上的问 -
梅西,一人搅动中国互联网
“兄弟们,梅西开播了!”微博、贴吧和虎扑上,无数球迷自发宣传起了... -
【快播报】退市格局三大变化带来新启示
退市格局三大变化带来新启示 -
安徽组团赴海南“取经”:现房销售“摸着石头过河”
安徽组团赴海南“取经”:现房销售“摸着石头过河” -
梅西现身14分钟,粉丝大呼不爽,两年亏10亿的遥望科技有热点必“蹭”?
梅西现身14分钟,粉丝大呼不爽,两年亏10亿的遥望科技有热点必“蹭”? -
科迪乳业破产重整完成:国资接盘成实控人,竞争加剧下高营收目标能否实现?
科迪乳业破产重整完成:国资接盘成实控人,竞争加剧下高营收目标能否实 -
速读:既然还要加息,美联储为何不一步到位?鲍威尔做了个关键的比喻
既然还要加息,美联储为何不一步到位?鲍威尔做了个关键的比喻 -
经营性净现金流是什么意思_净现金流是什么意思
1、现金净流量是现金流量表中的一个指标,是指一定时期内,现金及现金 -
京东百款牛奶大降价 承诺买贵双倍赔|热消息
6月14日,京东超市宣布百款牛奶大降价,多款产品最低1 5元一盒,呼吁网 -
6月15日生意社针叶木浆基准价为5240.00元/吨_报道
6月15日,生意社针叶木浆基准价为5240 00元 吨,与本月初(5316 00元 吨 -
6月15日生意社环氧丙烷基准价为9787.50元/吨
6月15日,生意社环氧丙烷基准价为9787 50元 吨,与本月初(9825 00元 吨 -
最新消息:北京土拍揽金超百亿元,越秀争霸
田傲云彭红侠 发自北京沉默不到一秒,瞬间全场沸腾,欢呼声、祝贺声不 -
韩外交部:建议韩游客赴日旅游不要佩戴黄金等贵重首饰-世界速读
【环球时报综合报道】据韩国《中央日报》14日报道,韩国外交部近日发布 -
【时快讯】“别以为我是科学家就不敢打击犯罪”,墨西哥女市长辞职参选总统
【环球时报特约记者刘皓然】“女性的时代已到来。”《墨西哥每日邮... -
18岁少年枪杀自卫队两队友,日本陆上自卫队幕僚长向国民道歉 全球最新
【环球时报驻日本特约记者林雪原环球时报特约记者王颖】14日上午9时10 -
300欧能买到“工程师证书”,西班牙警方破获诈骗案,20多人被捕
【环球时报驻西班牙特约记者徐永晟】近日,因涉嫌通过网络购买虚假学历 -
快报:鼓吹绝食以“在天堂满员之前进去”,肯尼亚邪教饿死303人
【环球时报综合报道】近来,肯尼亚一个邪教不断蛊惑信徒饿死自己以... -
韩国房价大跌,全租房模式受拷问
韩国房地产市场近来成为舆论的风口浪尖。中国社交媒体上近日流传韩国全 -
全球新动态:美媒:天津造空客飞机将首次交付欧洲客户
据彭博社14日报道,空中客车公司将把其天津工厂生产的一架空客A321neo -
582.9公斤!山西旱地小麦良种繁育基地创单产新高
日前,我省小麦进入集中收获期,运城、临汾、晋城小麦主产区科学调配农 -
全球观速讯丨自然资源部:坚守红线底线,杜绝拔苗砍树“一刀切”
自然资源部14日明确要求,坚决防止违法占用耕地、破坏生态和人居环境、 -
京城日间气温逼近40℃!北京这些去处欢迎“夜猫子”
京城日间气温逼近40℃,爱玩爱聚的人们爱上“夜行”——正在嗨吃畅... -
被晃醒?上海市地震局:1991年青浦也发生过3.0级地震
“被晃醒!”“我家车子警报响了”“睡着了,没感觉到”……2023年6... -
北京房山一男子驾车撞人致死逃逸,被判3年半|全球速讯
今年3月份的一个晚上,在北京房山区,一位行人在过马路时被一辆小客车 -
大场出栏计划缩量,猪肉需求继续疲软_今日视点
昨日全国生猪现货价格稳中微涨。供应端来看,月内大型养殖企业出栏计划 -
任泽平:金融数据大降,建议加大政策力度,出台短期刺激经济的组合拳
任泽平:金融数据大降,建议加大政策力度,出台短期刺激经济的组合拳 -
热点在线丨直击上影节|现实比《流浪地球3》的剧本还精彩,导演郭帆也开始担心被AI替代了
直击上影节|现实比《流浪地球3》的剧本还精彩,导演郭帆也开始担心被AI -
今年暴涨400%大牛股,控股股东股份全遭冻结!|环球快看点
今年暴涨400%大牛股,控股股东股份全遭冻结!