28个案例问题分析---012---在线人员逻辑反例--ThreadLocal、继承、索引失效、
创始人
2024-06-03 12:40:23
0

一:背景介绍

本文是对项目实战中出现的6个问题进行的总结,希望通过总结的方式,提升自己的技术水平,避免类似的错误。

具体问题

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

上文涉及到的知识点主要有

  • 公共变量(1)、
  • 业务逻辑(2,4,6)、
  • 继承中的this(3)、
  • mysql索引失效(5)。

二:解决方案

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

在这里插入图片描述
线程是共享全局变量的,如果在业务过程中,对全局变量进行修改操作。在多线程的情况下,会产生全局变量数据混乱问题。

使用ThreadLocal变量

直接上代码

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的变量,并且赋初值为 默认localVar
  • 一个打印 localVar值的print()方法
  • main方法 创建了两个线程,第一个线程操作修改了localVar的值,第二个线程直接打印了localVar的值

执行结果
在这里插入图片描述
从结果上我们可以看出 第一个线程修改了我们定义的localVar的值之后,第二个线程打印的仍是我们一开始初始化设置的默认值
结论:ThreadLocal 定义的变量是线程安全的

二:在线人员逻辑(逻辑漏洞)

问题二:保存数据没有考虑业务隔夜

在这里插入图片描述
在查询的逻辑里添加了 createDate的字段,这里的createDate是按照天取得年月日。如果跨天就会出现问题。

问题四:参数不一致,导致维护混乱

在这里插入图片描述
登录状态问题,这里的状态在之前的业务里,已经传入了,但是后续却用了一个魔法值表示,虽然功能上没有出现问题,但是却多了一个写死的值,不利与复用。

问题六:sql不考虑业务,出现明显逻辑漏洞

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

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

三:继承(this)

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

四:慢sql问题(索引失效)

在这里插入图片描述
索引会因为 隐示数据转换造成 索引失效的问题。在设置外键的时候,一定要保持与相对应的主键的数据类型一致,否则查询的时候,就会出现不走索引的慢sql。
具体原因可以参考:mysql索引博客

三:总结升华

使用技术的时候,一定要清楚使用边界。出现问题要及时总结,保证不出同样的问题。

相关内容

热门资讯

我的妈妈初中作文800字【精... 我的妈妈初中作文800字 篇一我妈妈是一个温柔而坚强的女人。她照顾我和家庭的同时,也努力工作,为我们...
夜色温柔初中作文【优选5篇】 夜色温柔初中作文 篇一夜色温柔初中作文夜晚,是一天中最安静、最神秘的时刻。当太阳沉入地平线,天空渐渐...
《翡翠森林》观后感900字(... 《翡翠森林》观后感900字 篇一《翡翠森林》是一部以自然为主题的纪录片,通过展示翡翠森林的美丽景色和...
我和妈妈的故事-初中记叙文(... 我和妈妈的故事-初中记叙文 篇一妈妈是我生命中最重要的人,她是我最亲密的伙伴,也是我最坚强的支持者。...
我们是一家人初中作文【优质6... 我们是一家人初中作文 篇一我们是一家人家,是我们生活的港湾,是我们心灵的归宿。而我们,是一个幸福温馨...
初中作文:飘落的樱花【实用5... 初中作文:飘落的樱花 篇一樱花是一种美丽而短暂的花朵,它的开放总是给人们带来无尽的惊喜和美好的回忆。...
解开缚心的绳索作文(优质6篇... 解开缚心的绳索作文 篇一绳索,是一种用来束缚的工具,它可以用来捆绑、困住甚至勒死人。然而,有时候,这...
我是谁作文【最新6篇】 我是谁作文 篇一我是谁?这是一个看似简单却又复杂的问题。每个人都有自己独特的身份和故事,我也不例外。...
我们一家人初中作文(经典6篇... 我们一家人初中作文 篇一我们一家人初中作文我是一个初中生,家中有爸爸、妈妈和一个比我小两岁的弟弟。我...
初中生作文600字【推荐6篇... 初中生作文600字 篇一:我的暑假生活暑假终于到了,这是我最期待的时刻。我有一个丰富多彩的暑假计划,...
尊重的作文【优选6篇】 尊重的作文 篇一尊重是一种基本的社会道德,是我们与他人相处时应当遵循的原则。尊重他人不仅能够维护社会...
十年后的我初中作文【优秀6篇... 十年后的我初中作文 篇一我的初中生活是我成长的重要阶段,十年后回顾起来,我深深地感慨万分。初中时期,...
我的生日_(精彩6篇) 我的生日_ 篇一今天是我的生日,我迫不及待地等待着这一天的到来。在这一天,我将和家人、朋友一起庆祝,...
学会放弃的初中作文【优选6篇... 学会放弃的初中作文 篇一在我们的成长过程中,学会放弃是一个非常重要的能力。放弃并不意味着失败,相反,...
闯江湖600字作文【实用6篇... 闯江湖600字作文 篇一:我的江湖初试江湖,是一个神秘而又充满诱惑的地方。作为一个热血青年,我无法抵...
初一作文祖国颂【优选3篇】 初一作文祖国颂 篇一祖国,是我们生活的家园,是我们永远的依靠和坚实的后盾。我深深地热爱着这片土地,因...
关于季节的作文七年级作文精选... 关于季节的作文七年级作文 第一篇如果用春夏秋冬来诠释人生,那么生机是夏的代言,清爽是秋的形象,冷漠是...
由你选择作文【精选3篇】 由你选择作文 篇一标题:友情的力量友情是一种无私的情感,它可以让我们感受到温暖和力量。在我们的生活中...
争当四好少年作文(精选3篇) 争当四好少年作文 篇一争当四好少年作文作为当代少年,我们要时刻牢记自己的使命和责任,争当四好少年。四...
初一军训作文【精彩6篇】 初一军训作文 篇一军训的日子军训是我们初中生活中的一段特殊时光。虽然只有短短的十天,但对我们来说却是...