首页系统综合问题谁再悄咪咪的吃掉异常,我上去就是一 JIO

谁再悄咪咪的吃掉异常,我上去就是一 JIO

时间2023-03-26 23:36:04发布分享专员分类系统综合问题浏览244

今天小编给各位分享initialize的知识,文中也会对其通过谁再悄咪咪的吃掉异常,我上去就是一 JIO和悄咪咪问下,北方物价那么便宜吗?为什么能买食物每次买那么多,不会给吃穷了吗等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 谁再悄咪咪的吃掉异常,我上去就是一 JIO
  • 悄咪咪问下,北方物价那么便宜吗?为什么能买食物每次买那么多,不会给吃穷了吗
  • 请问:“悄咪咪”是什么意思?谢谢
  • 虞书欣7月又呆在剧组!新剧悄咪咪开机,你会期待吗?
  • 一、谁再悄咪咪的吃掉异常,我上去就是一 JIO

    又到周末了,周更选手申请出站~

    这图太魔性了啊

    这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。

    这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~

    哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~

    下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!

    好了,本文可不是水文,看完本篇文章,你可以学到以下知识点:

    Arthas 排查技巧啥是 NoClassDefFoundErrorDubbo 异常内部处理方式

    好了,同学们,打开小本子,准备记好知识点~

    先赞后看,养成习惯~微信搜索「程序通事」,关注就完事了!

    起因

    我们有个业务系统,应用之间调用链如下所示:

    A 应用是业务发生起始应用,在这个应用中将会根据一定规则选择最后的通讯渠道 C,然后将这个渠道标识传递给 B 应用。

    B 应用的功能类似网关,这个应用将会根据 A 应用传递过来的渠道标识,将会请求路由下发到具体的 C 应用,起到服务路由的功能。

    C 应用是与外部应用交互的应用,我们将其称为渠道通讯机。

    假设一次业务中,A 应用根据规则选择 C2 的渠道标识,然后传递给 B 应用。B 应用根据这个标识选择使用 C2 进行通讯,最后 C2 调用外部应用完成一次业务调用。

    上述所有应用都基于 Dubbo 进行远程通讯,B 应用实现原理在小黑哥之前文章「支付路由系统演进史」中有写过,感兴趣的同学可以查看一下。

    介绍完业务的基本情况,现在我们来看下到底发生了啥事。

    一次业务需求中,需要改动 C2 应用,这次改动功能点真的很小,很快就完成了。小黑哥想着闲着也是闲着,于是就把之前 C2 应用中打印的日志中一些没有脱敏的信息,进行脱敏处理。

    由于之前日志框架脱敏处理存在一些问题,于是就将日志框架从 Log4j 升级为 LogBack。升级之后,为了防止不同日志框架中之间的产生冲突,于是使用 IDEA Maven Helper 插件,统一将应用中所有的 Log4j 相关依赖都给排除了。

    改动完成之后,将 C2 应用发布到测试环境,再次从 A 应用发起测试, B 应用返回异常提示未找到 C2 应用

    B 应用业务代码类似如下:

    publicResponsepay(Requestreq){try{if(!isSupport(req.getChnlCode())){returnnewResponse("ERROR","未找到相关渠道应用");}returndoPay(req);}catch(Exceptione){returnnewResponse("ERROR","未找到相关渠道应用");}}

    正常情况下,若是配置存在问题,B 应用将会返回未找到具体渠道,请求也会在 B 应用结束,不会调用到 C2 应用(也没办法调用)。

    然而此次配置什么都没问题, 而且最诡异的是 C2 应用居然收到了请求,并且成功处理了业务请求。

    排查问题

    由于 B 应用异常处理时,将异常吃掉了,我们没办法得知这个过程到底发生了啥事,所以第一要紧的事获取异常信息。

    最简单的办法就是,将 B 应用改造一下,加入打印异常日志。不过当时比较懒,不想改造应用,就想获取异常信息,于是想到使用 **Arthas**[1]

    Arthas 排错技巧

    Arthas 是Alibaba开源的Java诊断工具,这里就不再详细介绍这个工具,主要讲下这次排错用到的命令-**watch**[2]

    watch 命令可以方便观察指定方的调用情况,可以具体观察方法的返回值、抛出异常、入参,另外还可以通过 OGNL表达式查看对应的变量。

    这里我们主要为了查看方法抛出的异常信息,执行命令如下:

    watchcom.dubbo.example.DemoServicedoPay-e-x2'{params,throwExp}'

    上述命令将会在方法异常之后观察方法的入参以及异常信息。

    注意,我们需要查看 doPay 方法,而不是 pay 方法。这是因为 pay方法中我们将异常捕获,不太可能会抛出异常哦~

    异常信息如下所示:

    真正引起此次错误的异常信息为:

    java.lang.NoClassDefFoundError:Couldnotinitializeclassxx.xxx.xx.GELogger

    由于此次 B 应用不存在改动,所以推测这个异常实际发生在 C2 应用,于是在 C2 应用处再次使用 Arthas watch 命令,同样观察到相同的错误信息。

    NoClassDefFoundError

    NoClassDefFound,从名字上我们可以推测是因为类不存在,从而引发的这个错误。按照这个思路,我们首先可以简单查看一下 B 应用中是否存在 GELogger 相关类。

    查看 B 应用相关依赖包,从中发现了这个类文件,这说明这个类确实存在。

    在 IDEA 反编译查看 GELogger类相关源码,从中发现了问题。

    privatestaticLoggerlogger;static{System.out.println("staticinit");logger=Logger.getLogger(NoClassDefFoundErrorTestService.class);System.out.println("Loggerinitsuccess");}

    GELogger存在一个静态代码块,用于初始化一个 org.apache.log4j.Logger日志类。

    然后在上面改动中,全部的 Log4j依赖都被排除了,所以这里运行时应该会抛出另外一个找到 org.apache.log4j.Logger 错误。

    执行以下代码,模拟抛错过程。

    System.out.println("模拟第一次Error");try{NoClassDefFoundErrorTestServicenoClassDefFoundErrorTestService=newNoClassDefFoundErrorTestService();}catch(Throwablee){e.printStackTrace();}System.out.println("模拟第二次Error");try{NoClassDefFoundErrorTestServicenoClassDefFoundErrorTestService=newNoClassDefFoundErrorTestService();}catch(Throwablee){e.printStackTrace();}

    异常信息如下所示:

    异常信息

    第一次创建 NoClassDefFoundErrorTestService实例时,Java 虚拟机读取加载时,将会初始化静态代码块时。由于 org.apache.log4j.Logger类不存在,静态代码块执行异常,从而导致类加载失败。

    第二次再创建 NoClassDefFoundErrorTestService 实例时,Java 虚拟机不会再次读取加载,所以直接返回了以下异常。

    java.lang.NoClassDefFoundError: Could not initialize class com.dubbo.example.NoClassDefFoundErrorTestService

    找到问题真正原因,解决办法也很简单,直接排除 GELogger 所在依赖包。

    Dubbo 内部异常处理

    虽然问题到此解决了,但是这里还有一个疑问,为何 C2 应用发生了异常,却没有相关错误日志,并且 C2 业务逻辑也正常处理完成。

    这就要说到 Dubbo 内部异常错误处理方式,上面 GELogger 其实作用在一个 Dubbo 自定义 Filter 中,用来记录结果,模拟代码如下:

    @Activate(group={"provider","consumer"})publicclassErrorFilterimplementsFilter{@OverridepublicResultinvoke(Invoker<?>invoker,Invocationinvocation)throwsRpcException{Resultresult=invoker.invoke(invocation);NoClassDefFoundErrorTestServicenoClassDefFoundErrorTestService=newNoClassDefFoundErrorTestService();//处理业务逻辑returnresult;}}

    这个自定义 Filter 中首先执行 invoker 方法,这个方法将会调用真正的业务方法,这就是为什么 C2 应用逻辑是正常处理完成。

    业务方法处理完成之后,然后执行后续逻辑。由于 NoClassDefFoundErrorTestService将会抛出 Error,最终这个 Error,将会在 HeaderExchangeHandler#handleRequest 被捕获,然后将会把相关异常信息返回给调用 Dubbo 消费者。

    Dubbo 2.7

    而在 Dubbo 消费者接受到服务提供者返回信息之后,将会在 DefaultFuture#doReceived转化成 RemotingException。

    dubbo consumer 2.7

    而 RemotingException 最终将会在 FailoverClusterInvoker#doInvoke 转换成 RpcException返回给业务代码。

    总结

    好了,说了这么多,总结一下本文知识点

    异常捕获之后,一定要记得打印日志,并且要记得输出堆栈信息。运行时类不存在,将会导致 NoClassDefFoundError,类加载过程失败,也会导致 NoClassDefFoundError。对外提供的二方包,最好不要依赖特定日志框架,如 Log4j,Logback 等,应该使用 Slf4j 框架。参考资料

    [1] Arthas: https://alibaba.github.io/arthas/index.html

    [2] watch: https://alibaba.github.io/arthas/watch.html

    [3] 当Dubbo遇上Arthas:排查问题的实践: https://dubbo.apache.org/zh-cn/blog/dubbo-meet-arthas.html

    [4] java.lang.NoClassDefFoundError 的解决方法一例: https:///原创-java-lang-noclassdeffounderror-的解决方法一例/

    [5] noclassdeffounderror-could-not-initialize-class-error: https://stackoverflow.com/questions/1401111/noclassdeffounderror-could-not-initialize-class-error

    一、悄咪咪问下,北方物价那么便宜吗?为什么能买食物每次买那么多,不会给吃穷了吗

    我不确定题主所指的南方是哪里,我是湖北人也称南方,也可以说中部地区,但是目前我接触的绝大多数更南方的同学说菜场的价格自己做都很划算。我先解释买的多的原因:

    1. 北方买的多主要是因为北方吃零食等副食少,而且天气寒冷,菜可以天然冷冻在屋外,最好是减少出门次数,一次购买一个月的物资:比如全家男人一起出动,去菜场扛150斤白菜回家都是常态,并不在乎新鲜。(黑龙江和吉林同学告诉我的)

    2. 南方买的少主要是天气暖且潮湿,不适宜久存,尤其当地人做菜很注意新鲜。(广东等地甚至会去屠宰场买牛肉,主要是为了新鲜)凡是新鲜,散养,野生,原生态等词缀都会作为加分点而增加物品的价格。

    再解释北方物价便宜的原因:

    1. 北方人口更少,潜在客户少,你因为价格赶走一个就少一个,因此商人更希望商品可以快速出货,因此让利走量。

    2. 绝大多数北方地区经济不如南方,(除开北京,青岛,大连)因此,你东西太贵了,大家买不起,食物又不能久放,会导致经济损失。

    3. 这人不实在的评价,在北方是一种对人的侮辱。

    二、请问:“悄咪咪”是什么意思?谢谢

    解释:

    悄咪咪的意思是,偷偷地,悄悄地,毫无声息的。

    出处:

    1、《西厢记》第一本第三折

    玉宇无尘,银河泻影……侧著耳朵儿听,蹑著脚步儿行:悄悄冥冥,潜潜等等。这里的“冥冥”是“暗地里”的意思。

    2、四川方言里有“悄悄咪咪”这个词,意思是“偷偷地,悄悄地”。

    例句:

    1、我悄咪咪的给喜欢的女生准备了一份早餐。

    2、他悄咪咪的亲了我一下。

    扩展资料:

    同义词解析

    1、悄悄冥冥

    悄悄冥冥是汉语词汇,解释为静悄悄,一声不响。出自元·王实甫《西厢记》。

    2、悄然而至

    形容寂静无声地到来。

    例句:春天就这样悄然而至了。

    3、悄悄咪咪

    意思是小心翼翼的,不发出任何声音。

    三、虞书欣7月又呆在剧组!新剧悄咪咪开机,你会期待吗?

    那在THE9发出的这一张妹妹的行程表中,此番可以看到虞书欣有一个综艺的录制,除此之外的时间,就是在剧组呆着了。在这一张行程表中,最下面一行写的是“虞书欣,许佳琪,谢可寅,赵小棠其余时间,剧组拍戏”。这样看来,虞书欣七月的最主要的工作就是拍戏了。虞书欣在前段时间拍完了《苍兰诀》,很多小伙伴都知道吧!这部剧杀青后,虞书欣很快又接演新作品了,这资源可真好。

    分析

    如果杨超越的成功有一部分是部分男性对单纯甜美长相出众女孩的喜爱所致,那虞书欣的人设真是完全符合了某些想作又怕现实生活被打的部分年轻女孩们的内心:以自我为中心作天作地不顾他人感受只要自己出风头,管你是谁只要我开心就很好,情商什么都根本不需要,问就是单纯,就是家庭环境保护得好,无论这个时候该是谁是主角,只要我在我就要出风头。

    首先,作为已经演了几部剧的演员,我不相信没有接受过表情仪态方面的培训,面对镜头应该会相对从容,况且客观讲她确实长得不错,属于自信那一挂的。但是从进门开始,有在酝酿情绪的意思,自我介绍眼神上上下下飘忽不定,演技确实还没好到让人看不出来的地步,虽然有眉毛下撇,抠手指等象征紧张的动作,但紧张其实是会传染的,她整体上让人感觉用力过猛了。

    感觉

    首先,欣欣子从小到大都是小公主,家世优渥没毛病,但不代表出身在平凡家庭的女孩就不值得被疼爱,大部分粉丝不会过度敏感,但为什么被“误会”的总是你呢?一次两次三次都可以,但为什么总是你呢?我们喜欢的女孩也是我们心目中的小公主,人都有心啊...其次,微表情,不能说明什么,但能说明很多。成年人之间的交往是微妙的,更何况在镜头前,难道所有的想法都要说出来

    女生之间的小团体一句话不讲也可以把你搞得足够难受了(当然我觉得老刘不至于被排挤)。原来澄清就是,我没有...这澄清了个寂寞?看到微博上说拿微表情分析是不礼貌的,那你和你CP,做出那些令人膈应的表情,用白眼翻别人就是礼貌的?如果表情这么不重要,爱豆还做什么表情管理?表情难道不是最能传达精神世界的渠道?公众人物怎么可能连这点都做不到?更何况她还是演员啊...不会的,大家年龄都不小了...

    总结

    虽然知道不太可能吧,但我还是真的希望这些人能有一点点的社会责任感,毕竟每一个爱豆都是其粉丝的精神世界领袖,我希望这些人真的能给青少年传递一些正能量,甚至是一点鸡汤也行,告诉他们各行各业的人都是通过努力和坚持才能得到成果。而不是靠着一些虚无缥缈的人设,哗众取宠,我背后有金钱和资本就可以为所欲为,之前也看到过一些粉丝说,人家就是可爱就是有钱就是讨人喜欢,在我看来这些都不是能够成为偶像的理由,真的太空洞了...他们说我这样的才不正常...

    关于initialize的问题,通过《请问:“悄咪咪”是什么意思?谢谢》、《虞书欣7月又呆在剧组!新剧悄咪咪开机,你会期待吗?》等文章的解答希望已经帮助到您了!如您想了解更多关于initialize的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    initialize
    内存条玄学之四槽插满就这么难么? 《索尼克未知边境》PC配置公布:最低仅需GTX 660