拼团3
MySQL
1234567<update id="updateAddLockCount" parameterType="java.lang.String"> <![CDATA[ update group_buy_order set lock_count = lock_count + 1, update_time= now() where team_id = #{teamId} and lock_count < target_count ]]></update>
MyBatis报错2
为了拆分库表,为了省事在xml文件中直接注释:
12345678910 <select id="queryValidGroupBuyActivityId" resultMap="GroupBuyActivityMap"> SELECT activity_id, activity_name,-- source, channel, goods_id, discount_id, group_type, take_limit_count, target, valid_time, status, start_time, end_time, tag_id, tag_scope FROM group_buy_activity-- WHERE source = #{source} AND channel = #{channel} WHERE activity_id = #{acti ...
MyBatis报错1
👍 很好,这一步你已经精准定位到“真正的根因”了。而且这个问题非常典型、非常高级,不是新手能一下子意识到的。
我给你把这件事一次性讲透👇
一、结论先行(你这次为什么会 NPE)
❌ 不是 SQL 查不到数据
❌ 不是多线程问题
✅ 是 MyBatis 映射方式用错了:resultType vs resultMap
你原来的 SQL 能查到行,但是 MyBatis 没有把字段正确映射到 Java 对象里,导致:
123groupBuyActivityRes != null但groupBuyActivityRes.getDiscountId() == null
于是后面必炸 💥
二、你现在这两段 SQL 的“本质区别”❌ 原来(有问题的)12<select id="queryValidGroupBuyActivity" resultType="cc.jxlll.infrastructure.dao.po.GroupBuyActivity">
✅ 现在(正确的)12<select id="query ...
拼团-人群标签节点过滤
设计模式
先看左侧,
1234策略路由抽象类 AbstractStrategyRouterT 入参类型D 上下文参数R 返参类型
1234567891011121314public abstract class AbstractStrategyRouter<T,D,R> implements StrategyHandler<T,D,R>,StrategyMapper<T, D, R> { StrategyHandler<T,D,R> defaultStrategyHandler = StrategyHandler.DEFAULT; public R router(T requestParameter, D dynamicContext) throws Exception { StrategyHandler<T,D,R> strategyHandler = get(requestParameter, dynamicContext); if(null != strate ...
拼团1
新增TagNode节点,进行过滤:过滤逻辑:
没配置tag_id,就是不筛选人群,所以用户全都可见可参与;配置了tag_id,就是要筛选人群
如果用户在人群标签中直接放行,可见可参与;不在此人群标签中要看tag_scope的配置
如果tag_scope为空就是不做限制,所以也全都可见可参与;如果tag_scope有值,则代表做限制
包含 “1” → 不可见(visible=false)
包含 “2” → 不可参与(enable=false)
动态配置开关操作何不停车就给汽车换个轮子?
这是互联网应用程序中经常干的事情,在程序运行过程中,直接动态变更某些属性配置。这些动态变更的配置包括降级和切量的开关,也包括一些功能程序的白名单用户测试。
那么对于配置中心,有 SpringCloud Config + Event Bus,也有 Nacos,还有各个大厂中会基于各类组件做的自研实现。那么本节我们先来做一个基于 Redis 发布/订阅处理动态配置的自研的实现,之后对于 SpringCloud 的动态配置变更已经有案例,小伙伴也可以学习。
1.引入两个概念:降级和切片 ...
Git用法
你这个描述非常关键,而且我可以明确告诉你一句话:
你之前的 Git 使用流程在“逻辑上是错误的”,但 Git 又“纵容”了你,所以才会出现现在这种看似诡异、其实完全可解释的结果。
我按 发生了什么 → 为什么会这样 → 正确理解 → 如何补救 给你一次讲透。
一、先给你一句“定性结论”(非常重要)
Git 从来不会“推送未提交的代码”。你之前那些“只 push 不 commit 的分支”,实际上远程什么都没保存。
二、我们把你之前的真实流程“还原一遍”(这是关键)你说你的流程是:
从 master 新建分支 A
在分支 A 写代码
❌ 只 push,没有 commit
再从 master 新建分支 B
发现 B 里居然有刚刚写的代码
重复这个流程很多次
最后一次:在某个分支 commit + push
再从 master 新建分支,发现之前写的内容全没了
👉 这一切,其实完全符合 Git 的工作原理
三、关键真相 1:你之前写的代码,从来没进过 Git 历史Git 的铁律(请牢牢记住)1❗ 没有 commit = Git 当作这段代码从未存在
你之前做的其实是:
写 ...
公众号扫码登录逻辑
公众号扫码登录
用户在网页点“微信登录”,网页先去你服务端要一个“登录二维码”。你服务端为了能调用微信接口,先拿(或从缓存取)公众号的 access_token,然后调用微信的“创建带参数二维码”接口 /cgi-bin/qrcode/create,把一个你生成的参数(通常叫 scene,你可以理解为一次性的 ticket/登录编号)塞进请求里。微信返回一个 ticket(以及过期时间),网页拿到这个 ticket 后,不是让你服务端自己画二维码,而是直接用微信的展示地址 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxx 当作图片链接显示在 <img> 上,浏览器就能看到二维码了(注意这个接口返回的是图片二进制,不是 JSON)。
接着用户用微信扫码。扫码后微信会把这个二维码里携带的参数(EventKey,就是你当初的 scene/ticket)连同用户身份(FromUserName,也就是 openid)以 XML 回调到你配置的公众号服务器地址。你服务端收到回调后,做一件最关键的事:把 ticket ↔ ope ...
web
错误点:
LocalDate vs LocalDateTime
类型
包含信息
适配场景
前端传参格式
转换复杂度
LocalDate
年 / 月 / 日
仅日期维度的查询(如入职日期)
2010-01-01
极低(无冗余)
LocalDateTime
年 / 月 / 日 / 时 / 分 / 秒
需精确到时间的场景(如订单创建时间)
2010-01-01 12:00:00
高(需补时分秒)
致命错误:@DateTimeFormat 的 pattern 格式(核心)
❌ 错误写法:
pattern = “yyyy-mm-dd” mm是分钟(minute),MM才是月份(month)!此错误会导致:前端传2010-01-01→ 被解析为2010-00-01(分钟 00,月份错误),触发时间转换异常。
✅ 正确写法:
pattern = “yyyy-MM-dd”
匹配前端的2010-01-01 纯日期格式,正确解析月份。
请求参数过多定义一个实体类,来封装这几个请求参数
动态SQLSQL语句不应该是写死的,而应该根据用户输入的条件的变化而变化。 那 ...
Big Data Review
Chapter 1 - Introduction to Big Data Mining1. What’s Big Data?大数据是指那些规模巨大、增长迅速、类型多样,而传统数据处理工具难以有效处理的数据集合。 Big Data refers to datasets that are too large, fast, or diverse for traditional data-processing software to manage efficiently.
2. The 4Vs of Big Data(四个特性)
Volume(体量):数据规模巨大(如 Walmart 每小时 2.5PB);
Velocity(速度):数据产生速度快(如传感器、社交平台);
Variety(多样性):数据形式丰富(文本、图像、音频、视频等);
Veracity(真实性):数据存在不确定性、缺失、噪声问题。
3. What’s Data Mining?数据挖掘是从大量数据中自动发现有价值的模式和知识的过程。 Data mining is the process of automa ...
SLADE
文献地址:SLADE: Detecting Dynamic Anomalies in Edge Streams without Labels via Self-Supervised Learning
代码地址:SLADE
1 引言(Introduction)在现实场景中进行图异常检测面临以下挑战:
挑战 C1:检测延迟(Time Delay in Detection)尽管大多数异常检测方法假设输入图是静态的,但现实中的图是随着交互事件不断演化的。因此,及时识别异常事件变得尤为重要。如果检测存在延迟,就有可能在此期间让恶意节点对正常节点造成损害。
然而,如果每次交互事件发生时都重新运行一次静态图异常检测算法,那么巨大的计算成本会造成严重的延迟。为此,我们应当将交互事件建模为边流(edge stream),并使用增量计算(incremental computation)方式,在常数时间内评估每条新边是否异常。
过去一些研究(如文献[4,12])已经提出了用于边流异常检测的增量算法。然而,这些方法大多只针对某一类异常(例如突发行为),缺乏可学习的模块,难以识别复杂的行为偏移模式。
挑战 C ...
地图可视化
现在需要根据所给经纬度的范围,绘制对应的实际地图
有三种方法
