随笔 - 1688  文章 - 632 评论 - 451 trackbacks - 0

本文来源:http://www.yu833.com/www_tida_sh_cn/

申博在线娱乐登入,所以千万不要依赖于这些,我买一个茉莉香,玫瑰香。6.开胃健脾俗话说饭不香,吃生姜,吃饭没胃口的话,在饭前吃几片生姜就可以起到很好的开胃作用。“护肤”早已不再是女性们的专属名词了。其实,现实中很多肿瘤在早期都缺乏典型症状,甚至到晚期也没有症状,而确诊时往往已失去治疗意义。

主持人:腾讯网友大家好,欢迎收看腾讯健康名医堂,每年11月是国际肺癌关注月,从这样一个关注的力度可以看出,肺癌可能在生活当中已经显得越来越严重了。缔造明亮肌肤,建议使用含有维他命C的产品。目前社会上瑞丽杂志社、瑞丽杂志、"瑞丽网"及我社"瑞丽"专有标识的名义从事商品销售或者服务的机构与我社没有任何关系。如果需要每日多次卸妆及清洁的话,使用丝塔芙真是再好不过了,它既能很好的清洁面部彩妆,而且绝对不伤害肌肤。

外界普遍认为中国和日本都有意竞标新隆高铁的建设项目。但这还不是重点,在时装周上它的正确涂抹方式会让你更惊艳,那就是将勃艮第红同黑色混合。所以,糖尿病患者在出现有不明原因的胃肠道症状时,需要提高警惕,尤其是老糖友,由于老人们的消化器官会随着年龄的增长而发生一定的退行性改变,胃肠道分泌和蠕动功能均会有不同程度的减退,同时病史较长,血糖控制不理想,血管及神经系统并发症较多,这些不利因素都可能会对胃肠道蠕动功能产生一定的不良影响,因此,当老友们出现有如饱胀、腹痛、呕吐时,应及时到医院检查,一旦确诊为因糖尿病而并发的胃轻瘫时,应积极配合医生的治疗。相关企业已被责令停产、彻查药品质量问题。

故事背景

自古以来,做买卖、特别是供大于求情况下,市场游戏总会出现乙方有求于甲方的现象。

 

 

 在现在的市场经济机制下,甲方和乙方的地位更难平等,小王是深有体会。小王是一家软件外包公司的员工,他们为一家国企提供软件服务,最近小王比较烦,因需求变更,甲方大爷软件中引用的一个jar中的常量发生了变化,他们更新了jar包,但甲方只同意将新jar包替换掉旧的jar包,导致系统出现执行异常!甲方限令必须尽快找到问题并解决掉!

为了防止公司信息泄露,我们模拟一下这个场景:

public class BinaryCompatibilityTest {

    public static void main(String[] args) {
        System.out.println(DefineConstants.FIRST + " " +
                DefineConstants.SECOND + " " +
                DefineConstants.THIRD);
                }
}

其中DefineConstants来自甲方对乙方的引用:

import com.test.constants.Words;

public class DefineConstants {
    private DefineConstants() { }; / Uninstantiable
    public static final String FIRST = Words.FIRST;
    public static final String SECOND = Words.SECOND;
    public static final String THIRD = Words.THIRD;

}

其中,Words是引用的公用jar包

 

 

 类实现如下:

package com.test.constants;

public class Words {
    private Words() {
    }; / Uninstantiable

    public static final String FIRST = "the";
    public static final String SECOND = null;
    public static final String THIRD = "set";
}

 

原先打印结果为

the null set

 

现在乙方小王修改了jar包后,代码变成了

package com.test.constants;

public class Words {
    private Words() {
    }; / Uninstantiable

    public static final String FIRST = "physics";
    public static final String SECOND = "chemistry";
    public static final String THIRD = "biology";
}

他将重新打包后的jar包传给甲方,让甲方在tomcat上替换原来的jar包,结果运行后打印的结果却为:

the chemistry set

小王百思不得其解。

 

 

 反复确认了jar包是否正确,都是最新的jar包。

万般无奈之下只好请出被辞退的中老年技术大神"老司机",并答应老司机1w/d的辛苦费。

 

 老司机了解了情况后,就找到了原因,通过jd-gui反编译了代码给小王看:

 

 替换了jar包后,DefineConstants并没有被重新编译,导致FIRST和THIRD的结果没有发生改变,

但因SECOND本身为null,在编译期常量表达式(compile-time constant expression)[JLS15.28]的精确定义中找到。它的定义太长了,就不在这里写出来了,但是理解这

个程序的行为的关键是null 不是一个编译期常量表达式。运行时就会执行新的结果:chemistry

解决办法是

1. 需要重新编译DefineConstants后,替换到新的class

2.重新编译整个项目的打包文件,提供新的包文件替换旧的打包文件

第一个方案

   优点: 线上改动小,影响小,速度快

   缺点:只能解决当前问题,如果项目中还有别的地方引用这个变量,将还会出错。

第二个方案

   优点:从根本上解决问题

   缺点:线上影响稍微大一些。

 

小王入司刚两年,是个勤奋好学的家伙,项目搞定后请老司机吃饭喝酒,趁老司机酒醉,趁机问解决这个问题的诀窍,老司机喝迷糊后道出了本质:

原来java考虑到升级的问题,有二进制兼容性规范,。。。。。。。。。

因老司机喝的有点多,描述的不是很清楚,小王只记住了在jsl规范了有明确的描述:jsl 13章,申博在线娱乐登入/docs_oracle_com/javase/specs/jls/se12/html/index.html

 

 

 

 

参考资料:

【1】申博在线娱乐登入/blog_sina_com_cn/s/blog_4c408e27010009ae.html

【2】java解惑

【3】/docs_oracle_com/javase/specs/jls/se12/html/index.html

【4】/docs_oracle_com/javase/specs/jls/se12/html/jls-15.html#jls-15.28

posted on 2019-09-28 08:28  一天不进步,就是退步  阅读(...)  评论(...编辑  收藏
申博电子游戏直营网 www.55psb.com 申博太阳城66msc登入 申博代理管理网手机登入 申博怎么申请提款 www.66sbc.com
申博手机APP版登入 申博会员开户 申博太阳城登入 新版申博开户直营网 申博太阳城直营网 电子游戏微信支付充值
申博太阳城游戏帐号登入 www.687.net 菲律宾申博官方直营网 www.sun8066.com 申博太阳城娱乐中心直营网 太阳城官方直营网登入