当前位置: 首页 > news >正文

做淘宝美工和网站设计那个好中信建设有限责任公司盐城高铁城

做淘宝美工和网站设计那个好,中信建设有限责任公司盐城高铁城,炉石卡牌制作网页,网站多语言解决方案假ArrayList导致的线上事故… 线上事故回顾 晚饭时,当我正沉迷于排骨煲肉质鲜嫩,汤汁浓郁时,产研沟通群内发出一条消息,显示用户存在可用劵,但进去劵列表却什么也没有,并附含了一个视频。于是我一边吃了排…

假ArrayList导致的线上事故…

线上事故回顾

  • 晚饭时,当我正沉迷于排骨煲肉质鲜嫩,汤汁浓郁时,产研沟通群内发出一条消息,显示用户存在可用劵,但进去劵列表却什么也没有,并附含了一个视频。于是我一边吃了排骨,一边查看消息点开了视频,en~,视频跟描述一样。但没有系统告警,用户界面也没有明显的报错提示,怀疑是小部分特殊情况导致的,查看消息后几秒,我直接被@来处理问题,擦,只好把外卖盒重新盖好,先去处理问题。

处理经过

  • 通过群内产品发的用户邮箱查到了用户id,再根据接口的相关日志结合uid在日志平台进行关联查询,查到日志后,再拿到traceId进行链路查询,果不其然,发现了异常日志,如下部分日志所示

  • java.lang.UnsupportedOperationException: nullat java.util.AbstractList.add(AbstractList.java:148) ~[na:1.8.0_151]at java.util.AbstractList.add(AbstractList.java:108) ~[na:1.8.0_151]
    
  • UnsupportedOperationException是个什么玩意

  • @Slf4j
    @SpringBootTest
    public class Demo {public void test(Context context) { context.getList().add("皮皮虾");}}@Data
    class Context {private List<String> list;}
    
  • 基本操作就是拿到上下文中的List,然后再add一个元素

  • 讲道理,add操作是不会有问题的,有问题的还得是List,追根溯源,让我康康这个List是怎么来的于是我一顿狂点,来到了set这个list的位置

  • @Slf4j
    @SpringBootTest
    public class Demo {public void test(Context context) {context.setList(Arrays.asList("皮皮虾"));}}@Data
    class Context {private List<String> list;}
    
  • context.setList(Arrays.asList("Code皮皮虾")); 这行看起来好像没问题啊Arrays.asList(T... a)我们平时也会用,传入一个数组,返回出一个List没啥问题呀

  • 那我再试试add方法 ,擦,问题复现了,还真是Arrays.asList(T... a)生成的List的add方法报错,由于线上存在问题,则先修改为以下代码上线,也就是修改为我们平时正常的写法, 上线后,观察了下日志,群里回复已解决问题,也让用户重试,发现没问题,自此问题解决。

追根溯源

  • 进入asList方法,发现底层new了一个ArrayList,并将数组传入作为List的元素

  • @SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
    }
    
  • emm,看起来很简单啊,没问题啊,咋会报错呢?别着急,咱们在点开这个ArrayList瞅瞅

  • private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable
    {private static final long serialVersionUID = -2764017481108945198L;private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}// ... 省略
    }
    
  • 擦,这ArrayListArrays类的一个静态内部类,不是我们经常用的java.util.ArrayList 继续看,这个静态内部类ArrayList继承了AbstractList,而且默认是没有实现add方法的.也就是说调用add方法会直接调用父类,也就是AbstractListadd方法,源码点开一看,真相大白了.AbstractListadd方法直接抛出UnsupportedOperationException异常,跟线上报错一模一样!!

http://www.15wanjia.com/news/177495.html

相关文章:

  • 注册网站模板怀化租房网站
  • 网站内容营销微信公众号小程序怎么做
  • 囊谦县公司网站建设江西h5响应式网站建设设计
  • 哪有做网站的定单wordpress 插件站
  • 网站简繁转换代码wordpress黑镜主题2.0下载
  • 网站备案每年一次吗长沙市建设工程集团网站
  • 商城网站服务器租用济南房产网安居客
  • 腾云网建设网站登录入口网址
  • 苏州的网站建设网站开发文档撰写模板
  • 做网站是干什么用的辽源市住房和城乡建设局网站
  • 大理工程建设信息网站手机访问pc网站跳转
  • qq刷赞网站推广软件老酒街wordpress
  • 专做电子产品评测的网站wordpress 建企业网站
  • 罗马柱 东莞网站建设视频号怎么经营
  • 辽宁网站建设价格物流网站平台建设
  • 网站文明建设工程包括影视广告网站
  • 网站开发工具 下载那些网站能够做推广
  • 淘宝客网站备案流程软件开发培训机构培训出来的
  • 企业商城网站多少钱优设网app安卓下载
  • 网站qq登录原理免费营销课程培训
  • 深圳网站建设哪里便宜宜昌市住房和城乡建设局网站
  • 做网站需要哪些技术知乎原来做网站后来跑国外了
  • 重庆媒体网站建设单价cnu摄影官网
  • 百度采购网官方网站网络建设公司方案
  • php完整电商网站开发源码潍坊网站建设费用
  • 北海建设网站常熟网站建设都找聚尚网络
  • 网站应急响应机制建设军队采购网官网
  • 快速搭建个人网站网站怎么做移动图片大全
  • 专业网站建设网站价格企业网站建设的方法
  • 做微站比较好的网站佛山市和城乡建设局网站首页