程序员血泪史:上线出错后,我做了这三件事儿...

简介: 小米,29岁程序员,分享了系统上线遇到的两个问题及其解决方法:一是限售规则错误导致非配置地区也能购买,通过改进匹配逻辑和细化地区限制解决;二是商品详情页信息被误清空,采用深拷贝对象避免直接影响JPA缓存。总结了代码精确匹配、谨慎处理持久化对象及重视用户反馈的重要性。



哈喽大家好,我是小米,一个对技术充满热情的29岁程序员!最近我们系统上线遇到了一些问题,解决之后觉得特别有收获,今天就和大家分享两件事儿,希望对你们也有帮助。

第一件事:限售问题

背景回顾

上线后运营配置了北京、天津等20个省的限售规则,但后来发现,即便新疆没有在配置范围内,用户依然能进行购买!这不禁让我们挠头了,于是开始定位问题。

首先,我们检查了限售逻辑,发现代码大致如下:

在这个逻辑里,只要请求的地址以某个配置省的编号开头,就允许购买。但问题在于,数据库里天津的编号是2,而新疆是28,所以startsWith("2")直接把新疆也算进去了!

解决方案一:改用equals写法

我们的第一反应是将startsWith改为equals,代码如下:

测试的时候,我们发现仍然有问题!比如请求参数是"27|2386|2387|13185",按理应该取到27,但结果却一直是2。这时候我们翻看了split方法的源码,发现它支持正则表达式,而单个竖线|是正则里的“或”操作符,实际分割根本没有生效。

于是,我们改成了:

这个修改后,split能够正确分割出27了,经过测试没问题。

解决方案二:细化到区县级

然而,这样的修改仍然只能匹配到省级,假如北京市大兴区允许购买,而北京市海淀区不允许购买,还是无法满足需求。

最终,我们将限售地区存储的结构改为数组形式,将请求参数也转换为数组,然后对数组内容进行比对:

通过这样细化到区县级的匹配,彻底解决了限售问题。

第二件事:商品详情页信息清空

问题现象

上线后,用户发现多数商品的详情页信息变成了空数据。经过排查,我们发现,当用户点击某个商品时,详情页就被清空了!

最终定位到如下代码:

问题在于,goods对象被JPA缓存管理,当我们设置goodsDetail=null时,这一修改直接影响了缓存中的实体对象,导致数据库中的商品详情也被清空!

解决方案:深拷贝对象

为了避免直接修改JPA的实体对象,我们改成了深拷贝的方式:

这里的KsBeanUtil.convert是我们团队的一个工具方法,用于深拷贝对象。这样一改后,生产环境终于稳定了!

JPA缓存机制解析

JPA的EntityManager会自动管理实体对象的生命周期,默认情况下,查询到的对象会被缓存。如果直接修改查询到的实体对象属性,这种变化会被自动同步到数据库,导致意外的问题。所以,在需要修改返回值但不希望影响数据库时,深拷贝是一个安全的选择。

总结

以上就是这次上线遇到的两件事儿,虽然过程一波三折,但最终通过团队的协作和不断摸索,问题都顺利解决。总结几个教训:

  • 代码中多用精确匹配,减少模糊逻辑引发的问题。
  • 谨慎操作持久化对象,尤其在JPA中。
  • 上线后多关注用户反馈,快速响应问题,快速迭代。

END

每一次系统上线,问题的背后都是对代码和业务的深刻洞察。这次分享的两件事,包含了限售规则的优化和JPA缓存机制的深入理解,希望能给大家带来启发!如果你也遇到类似的问题,欢迎留言和我讨论哦~

小米会持续分享更多技术干货,咱们下次见!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
5月前
|
JSON 文字识别 并行计算
自动识别图片点击脚本,文字识别自动点击器, 能识别屏幕内容并自动点击
本方案采用OCR文字识别+图像匹配双模式识别技术: OCR引擎识别屏幕文字内容 OpenCV模板匹配识别图形元素 PyAutoGUI实现
|
9月前
|
人工智能 算法 数据处理
算法为舟 思想为楫:AI时代,创作何为?
本文探讨了AI时代创作领域的变革与挑战,分析了人类创作者的独特价值,并展望了未来创作的新图景。随着生成式AI技术的发展,创作的传统认知被颠覆,评价体系面临革新。然而,人类创作者凭借批判性思维、情感智能、创意直觉和伦理自觉,依然具有不可替代的价值。文章呼吁创作者转变思维,从竞争走向合作,提升复合能力,关注作品的社会影响,并持续学习进化。在AI助力下,创作将更加民主化、多样化,推动文明进步。最终,人机协同或将成为未来创作的核心模式,共同开创文化发展的新纪元。
|
小程序
看图猜成语微信小程序源码
后台可以自行设置关卡、等级、也可以一键部署, 开通流量主之后实现躺赚,你懂得。 个人号也可以开通,审核一次性必过。 类目选择 教育,源码仅供您参考!
263 2
|
10月前
|
机器学习/深度学习 自然语言处理 算法
Transformer 学习笔记 | Decoder
本文记录了笔者学习Transformer的过程,重点介绍了填充(padding)和掩码(masking)机制。掩码确保解码器只依赖于之前的位置,避免信息泄露,保持因果关系及训练与推理的一致性。通过线性层和softmax函数生成输出概率,并使用梯度下降和反向传播进行训练。评估指标包括BLEU、ROUGE、METEOR和困惑度等。欢迎指正。
|
机器学习/深度学习 人工智能 运维
未来后端技术发展趋势探析
【2月更文挑战第10天】随着科技的不断进步和应用领域的扩展,后端技术在互联网时代发挥着越来越重要的作用。本文将探讨未来后端技术的发展趋势,包括分布式系统、容器化技术、云原生架构以及人工智能在后端开发中的应用,旨在为读者提供对未来后端技术的全面了解。
508 0
|
机器学习/深度学习 自然语言处理 并行计算
[Bert]论文实现:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[Bert]论文实现:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
586 1
|
计算机视觉 C++ Windows
OpenCV 3.1.0编译与添加扩展模块
OpenCV 3.1.0编译与添加扩展模块
260 0
|
存储 安全 算法
光伏逆变器在环测试解决方案
本文介绍了光伏行业的背景及其在全球清洁能源发展中的重要性,随着技术进步,光伏组件成本下降,效率提升,分布式系统普及,储能技术的应用解决了光伏发电的不稳定性。光伏变流器的入网检测至关重要,涉及并网检测、电气参数、动态响应、防电击保护和电网保护功能等方面。EasyGo提供的基于CPU+FPGA的HIL实时仿真器用于光伏变流器的半实物仿真测试,支持拓扑结构研究、工况测试、电能质量验证和控制算法验证。文中还提到了基于PXIBox 5442的储能变流器实时仿真方案及相关的测试内容,如频率扰动、高/低电压穿越、孤岛预防和电能质量测试等。
343 3