`
cheng.xinwei
  • 浏览: 79658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【坑】自己山寨缓存出现的坑自己踩

    博客分类:
  • JAVA
阅读更多
    就在前两天,在编写一段业务逻辑的时候,考虑到数据库中的数据值是固定的,为了提高效率,自己做了一个Map的缓存,大致代码如下。
   
      //缓存类
      @service
      public class CacheService{
        private Map<String,List<Object>> cache = new Concurrenthashmap<>();
  
        public List<Object> get(String key){
           return cache.get(key);
        }

        public void put(String key, List<Object> list){
           cache.put(key,list);
        }

        public void del(String key){
           cache.remove(key);
        }
      }
    


    如上代码,乍看下来不会有什么问题,功能也可以正常实现。但是其实他是极其不安全的。
    为什么怎么说?当我们其他的service把这个cache依赖注入的时候,如果要执行如下代码。执行之后会有什么问题?

   
       List<Object> list = cacheService.get("A");
       for(int i = list.size()-1 ; i >=0 ; i -- ){
          if(needRemove){
             list.remove(i);
          }
       }
    


    执行完之后,当下次另外一个地方也需要去取cacheService中的“A”的时候,会发现LIST中元素的内容变少了,原因是,cacheService在放入和取出的时候都没有做copy,没有做copy导致的外部获取的list和内部cacheService中list的地址是同一个,外部修改的话,会同时修改掉内部的list的元素。这样的做法是极其不安全的。所以,只需要在get 和 put方法中添加collections.copy() 就不会出现如上的问题了。同样的问题还会出现在其他类似的集合中。

    注:可以依赖一些代码规范检查的服务器或者插件,他们也可以帮你检查出类似的问题,比如获取数组的时候,需要clone等等
  

   
分享到:
评论

相关推荐

    山寨版qq源码.素材

    8. **消息协议解析**:QQ有自己的私有协议,山寨版QQ可能模拟了这个协议,解析源码有助于理解消息传递的逻辑。 9. **兼容性处理**:为了让软件能在不同设备和操作系统上运行,源码中可能包含了各种兼容性处理代码,...

    山寨版别踩白块儿

    "山寨版别踩白块儿"是一款基于HTML5技术开发的休闲游戏,灵感来源于流行的"别踩白块儿"。这款游戏的核心玩法是玩家需要在屏幕上快速点击黑色方块,同时避免点击到白色方块,以此来挑战自己的反应速度和手眼协调能力...

    山寨版QQ,聊天通信

    7. **消息协议**:QQ有自己的消息传输协议,山寨版QQ需要模仿或实现类似协议。这涉及到消息的序列化和反序列化,以及心跳机制以保持连接状态。 8. **实时通信(RTC)**:实现即时通讯需要实时通信技术,如Long ...

    山寨主板的BIOS ROM

    山寨主板的BIOS ROM

    山寨网线显形记山寨网线显形记

    ### 山寨网线显形记:揭秘与防范 #### 一、网线的基本类型及其特点 在了解山寨网线之前,我们首先需要对正规网线的类型有所认识。正规网线主要分为屏蔽双绞线(Shielded Twisted Pair, STP)和非屏蔽双绞线...

    E盾山寨E盾E语言的源码

    山寨E盾,将需要登陆的程序山寨到本地,或者指定的服务器上

    山寨版qq源码+素材

    山寨版qq源码素材山寨版qq源码+素材山寨版qq源码+素材山寨版qq源码+素材

    山寨手机刷机工具

    3. 个性化定制:刷机可以让用户根据自己的需求调整系统设置,安装第三方主题,甚至更换不同的操作系统。 三、刷机步骤 1. 准备工作:确保手机电池电量充足,备份重要数据(因为刷机会清空所有数据),并下载对应...

    山寨APP的危害以及防止山寨APP的方法

    ### 山寨APP的危害以及防止山寨APP的方法 #### 山寨APP的危害 ##### 对用户的危害 1. **窃取账号**:山寨APP通过各种手段获取用户的登录信息,进而非法访问用户的账户,可能导致资金被盗或其他隐私泄露。 2. **...

    山寨QQ Version2.0.zip

    【山寨QQ Version2.0.zip】是一个编程学习资源,由知名IT...通过学习和实践这个项目,开发者不仅可以提升编程技能,还能对即时通讯系统的架构有深入的理解,这对于未来从事相关工作或者开发自己的通讯应用非常有价值。

    山寨机java游戏

    "山寨机java游戏"指的是为非原装或非正规品牌手机(通常被称为“山寨机”)设计的Java游戏。这些游戏通常具有较低的硬件要求,能够兼容各种非主流或低成本设备。 1. **Java技术基础**:Java是一种跨平台的编程语言...

    山寨版QQ源代码

    从描述来看,开发者强调了其正规模式的构架,这意味着尽管是“山寨”版本,但在开发过程中可能遵循了一定的设计规范和标准,以确保软件的稳定性和安全性。 在分析这个项目时,我们可以关注以下几个重要的知识点: ...

    java版山寨QQ项目源码

    java版山寨QQ项目 里面有四个压缩包 QQ服务器端.rar QQ客户端.rar 改进QQ客户机服务器视频实现.rar Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理...

    山寨HTC VIVA刷机教程(图文)

    【标题】:“山寨HTC VIVA刷机教程(图文)”是指针对非官方版本的HTC VIVA手机进行系统升级或修复的操作指南,通常这类设备在市场中被称为“山寨机”。这个教程是通过图文并茂的方式,帮助用户了解如何对搭载海思K3...

    山寨智能手机ROM制作工具

    总的来说,【山寨智能手机ROM制作工具】为那些热衷于手机定制和探索的爱好者提供了一个途径,让他们能够根据自己的需求和喜好调整手机的操作系统。尽管这个过程需要一定的技术门槛,但同时也带来了满足个人化需求的...

    韩顺平山寨版qq源码.素材

    通过阅读和学习这样的源码,开发者可以提升自己的技能,同时也为社区贡献了自己的学习成果。 通过研究和实践"韩顺平山寨版qq源码.素材",你可以深化对Java编程的理解,提高解决实际问题的能力,同时也能体验到开源...

    山寨手机制造大揭密

    1. **Android系统的开放性**:解释Android作为开源项目如何成为山寨手机的首选操作系统,因为它允许制造商根据自己的硬件条件进行定制。 2. **源码修改**:讲述如何调整和优化Android源代码以适应低成本硬件,比如...

    山寨QQ2003java源码

    【标题】"山寨QQ2003java源码"揭示了这是一个基于Java编程语言的项目,目的是模仿...通过研究这个项目,开发者不仅能深化Java编程能力,还能了解到即时通讯软件背后的原理和技术,为未来开发自己的IM应用打下坚实基础。

    mtk 山寨手机驱动下载

    这些文件通常会提供详细的操作步骤,包括如何解压文件、如何启动设备进入特定模式(如下载模式或恢复模式),以及如何避免安装过程中可能出现的问题。 总结起来,这个压缩包提供的内容似乎涵盖了MTK山寨手机驱动的...

Global site tag (gtag.js) - Google Analytics