案例17-在线人员列表逻辑混乱-ThreadLocal、继承、索引失效
创始人
2025-05-28 12:35:32

目录

    • 背景介绍
      • 现状:
    • 思路&方案
      • 一、类中公共变量由于线程共享,导致的数据混乱(公共变量)
        • 解决方法:使用ThreadLocal变量
        • 结论: ThreadLocal 定义的变量是线程安全的
    • 二、后端本身逻辑漏洞
      • 四、索引失效
    • 总结

背景介绍

本篇博客是对在线人员列表逻辑混乱,前端数据显示出现问题,反例进行的总结和进行的改进。

现状:

在这里插入图片描述

1、类中写了公共变量最后导致数据混乱现象
2、保存数据没有考虑业务的隔夜覆盖导致的逻辑漏洞
3、涉及到继承,对于this,如果父类有同样的成员最终使用哪一个?
4、参数不一致导致后续维护混乱
5、mysql由于关联字段类型不一致导致产生索引失效问题,进而产生慢sql
6、sql不考虑业务导致有明显的逻辑漏洞

上述问题可以分为四类:
1、变量作用域太大
2、后端逻辑本身有问题
3、继承问题,this.属性,和方法具体使用的是哪个
4、mysql索引失效

思路&方案

一、类中公共变量由于线程共享,导致的数据混乱(公共变量)

在这里插入图片描述
所有线程都可以修改全局变量的数据
当咱们不使用多线程的时候不会出现数据错乱的问题,但是当使用多线程且同时修改这个全局变量的时候,就会出现问题了。

解决方法:使用ThreadLocal变量

创建了一个 ThreadLocal类型名为localVar的变量,并且赋初值为 默认localVar
一个打印 localVar值的print()方法
main方法 创建了两个线程:
1、第一个线程操作修改了localVar的值
2、第二个线程直接打印了localVar的值

package org.example;public class Main {static ThreadLocal localVar = ThreadLocal.withInitial(() -> "默认localVar");static void  print(String str){//打印当前线程内存储的本地变量的值System.out.println( str +"   de~~~   " + localVar.get());}public static void main(String[] args) {//创建线程一Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {//打印一下localvar的值System.out.println("thread1线程" + localVar.get());//修改一下localvar的值localVar.set("thread1的local");//打印print("thread1");}});thread1.start();//创建线程二Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("线程二不共享localVar变量,值为默认值" + localVar.get());}});thread2.start();}
}

结论: ThreadLocal 定义的变量是线程安全的

结果:从结果上我们可以看出 第一个线程修改了我们定义的localVar的值之后,第二个线程打印的仍是我们一开始初始化设置的默认值

二、后端本身逻辑漏洞

2、保存数据没有考虑到跨天的问题
在查询的逻辑里添加了 createDate的字段,这里的createDate是按照天取得年月日。如果跨天就会出现问题。
在这里插入图片描述
4、参数不一致,导致无法维护
在这里插入图片描述
登录状态问题,这里的状态在之前的业务里,已经传入了,但是后续却用了一个魔法值表示,虽然功能上没有出现问题,但是却多了一个写死的值,不利于复用。

6、sql不考虑业务
在这里插入图片描述
此sql对应的是教师进行结课之后,将学生的最近登录时间修改。这里存在两个问题。

update_time字段的使用,这个是我们数据库建表规范必备三字段(id,create_time,update_time)之一,业务需要应该新建字段,而不是使用update_time字段
额外添加了createDate字段,用当天时间做为where条件,如果跨天的话,就会出现下线状态无法更新问题。

三、继承(this)
在这里插入图片描述
java中继承关系的父子类,相同的方法会被重写
当子类父类中的成员没有重名时,子类都可以通过this去调用。
当成员方法 重名,子类就会将父类中的方法进行重写。如果还想调用父类中的方法只能通过 super去进行调用。
当时成员变量不存在覆盖重写:在子类中只能通过super调用父类的

四、索引失效

在这里插入图片描述

索引会因为 隐示数据转换造成 索引失效的问题。在设置外键的时候,一定要保持与相对应的主键的数据类型一致,否则查询的时候,就会出现不走索引的慢sql,多表联查的时候注意条件的数据类型要保持一致。

总结

边界清晰,胆大心细,是写好代码的重中之重。

相关内容

热门资讯

反腐上强度了,多省严打违规吃喝... 作者 | 剑书国家定调,多省出手严打违规吃喝,力度之大史无前例。体制内正在掀起一股整治违规吃喝的风暴...
滚动更新丨美股三大指数集体高开... (更新中)21:30 美股开盘丨三大指数集体高开 金山云涨逾9%道指涨0.15%,纳指涨0.38%,...
“六个核桃”越来越难卖,管理层... 6月5日,“六个核桃”母公司养元饮品召开2024年度及2025年一季度业绩说明会。“经常用脑、多喝六...
遭全票否决!砸1.5亿元,“最... 作 者丨尹华禄编 辑丨曾静娇“最会说脱口秀的投资人”吴世春或将增加新的脱口秀素材——斥资1.5亿元入...
喜报!识局助力落户在安徽的食品... 文/识局君(识局微信公共账号zhijuzk)近期,由 识局助力落户在安徽的食品项目当前已正式动工!N...
安培龙:股东长盈粤富拟减持不超... 6月5日晚间,深圳安培龙科技股份有限公司(安培龙,301413.SZ)公告,持有公司8,527,67...
日御光伏拟赴港IPO,新能源企... 港交所网站显示,近日,江苏日御光伏新材料股份有限公司(下称“日御光伏”)向港交所提交上市申请书。光伏...
连收6个涨停板!ST联合收购润... 本报(chinatimes.net.cn)记者王敬 北京报道6月5日,ST联合(600358.SH)...
中药行业,或将迎来大洗牌 中药行业,或将迎来大洗牌。在现代医疗体系的冲击下,传统中药面临着诸多挑战。一方面,西药的快速发展和广...
玉禾田:股东拟合计减持不超6%... 6月5日晚间,玉禾田环境发展集团股份有限公司(玉禾田,300815.SZ)公告,持有公司5%以上股份...
2025年能源中国-青年菁英记... 今年是《巴黎协定》达成10周年。10年来,全球气候治理虽然历经风雨,但绿色低碳发展终成时代潮流。能源...
凯德北京投资基金管理有限公司:... 尽管经济不确定性阴影笼罩,美国雇主对人才的需求却依然保持强劲势头。美国劳工统计局周二发布的最新数据显...
2025秋冬淘宝服饰白皮书 今天分享的是:2025秋冬淘宝服饰白皮书 报告共计:109页 《2025秋冬淘宝服饰白皮书》指出,2...
*ST聆达:公司董事长、总裁王... 6月5日晚间,聆达集团股份有限公司(*ST聆达,300125.SZ)公告,公司董事会于6月5日收到公...
加仓追涨? 加仓追涨? 基金追... 2025.06.05微信编辑|生产队的驴(明天见)
6月5日均瑶健康(605388... 证券之星消息,沪深交易所2025年6月5日公布的交易公开信息显示,均瑶健康(605388)因有价格涨...
越南废除了计划生育,真的假的? 截至目前,越南并未废除计划生育政策。越南曾实行过计划生育政策以控制人口增长等。但随着人口结构等多方面...
排队IPO的潮玩公司,神话和泡... 对于52TOYS、TOPTOY等二线潮玩企业而言,能否构建起“IP孵化-产品创新-场景体验-文化输出...
中核钛白放弃50万吨磷酸铁项目... 锂价跌破6万元/吨,行业产能收缩趋势渐显。中核钛白(002145.SZ)近日公告,终止其“年产50万...
一盒相纸飙到1000元,摄影粉... 来源:惊蛰研究所作者:成昱图源:网络在数字影像泛滥的时代,撕拉片以其“拍一张少一张”的特性异军突起,...
富临精工:子公司与宁德时代签订... 6月5日,富临精工股份有限公司(富临精工,300432.SZ)公告,公司控股子公司江西升华新材料有限...
再见孟羽童,董明珠突然和蔼了 再见孟羽童,那场景令人颇为感慨。曾经在工作场合中,董明珠给人的印象或许是严肃而果断的。然而此刻,当再...
水滴公司2025年Q1营收7.... 6月5日,水滴公司(WDH)公布截至2025年3月31日未经审计的2025年第一季度业绩报告。202...
“小巨人”易思维首发申请获上交... 上交所官网显示,易思维(杭州)科技股份有限公司(下称“易思维”)在科创板上市的首发申请获上交所受理,...
市场回暖?IPO终止数量骤降逾... 本报(chinatimes.net.cn)记者谢碧鹭 帅可聪 北京报道进入2025年,A股IPO市场...
滴滴今年一季度核心平台订单量同... 红星资本局6月5日消息,滴滴发布2025年一季度业绩报告。报告期内,滴滴核心平台总交易额(GTV)达...
滴滴一季度核心平台订单量同比增... 新京报贝壳财经讯(记者陈维城)6月5日,滴滴发布2025年一季度业绩报告显示,一季度,滴滴核心平台总...
V观财报|东北证券:控股子公司... 【V观财报|东北证券:控股子公司渤海期货拟申请终止在新三板挂牌】东北证券5日公告,其控股子公司渤海期...
拼多多控价和淘宝类似吗?(电商... 大家好,这里是信羊谈知识产权。在电商行业蓬勃发展的当下,控价维权已成为品牌商重要的管理战略。通过稳定...