当前位置: 首页 > 编程日记 > 正文

Atitit.软件兼容性原理与实践 v3 q326.docx

Atitit.软件兼容性原理与实践 v3 q326.docx

 

 

1. 架构兼容性1

2. Api兼容性1

2.1. api  vs  修改旧的api1

3. Web方面的兼容性(jshtml1

3.1. Threadlocal2

4. 数据库表兼容性2

4.1. 2. 扩展表模式2

5. 兼容性策略2

5.1. Atitit.兼容性的“一加三”策略2

5.2. 3. 同时运行模式3

5.3. 3.1. 完美的后向兼容性3

5.4. 3.2. 虚拟机模式3

5.5. 3.3. 版本兼容性模式3

5.6. 4. 向前兼容(为升级预留足够余地)5

5.7. 5. “向前兼容理念5

5.8. 6. 专门处理的软件列表5

6. ref5

 

 

1. 架构兼容性

 

 

2. Api兼容性

2.1. api  vs  修改旧的api

最好是增加新的api。。这样不用调整老的api..添加测试工作...

当然一些很小的的调整可以直接调整老的api

 

3. 接口兼容性

.接口和抽象类在C#和java中都差不多,这里提一下接口设计和抽象类设计的区别之处。如果你更改了一个接口的设计,比如增加了一个方法,使用你以前的代码的用户将不得不改变他们的代码,否则不能运行和编译。但是如果是一个抽象类,你可以提供一个含默认实现的方法,用户的代码则不需要改变。

 

批注:这个事实在Java和C#中都是一样的。但是,就接口和抽象类(即使包括骨架类)的选用依据可不是这个,这只是一个表现而已。再有,接口一旦发布了,就是你对外的一种承诺。之后即使是版本升级也不能再做任何改动,哪怕是增加新方法。那非要增加怎么办?如果同时提供的骨架类也控制在你的手里,可以通过在这个骨架类(其实就是抽象类的一种用法,骨架类实现接口,实际类再继承这个骨架类,骨架类中可以为实际类实现一些通用的、或默认的方法)提供一份新增方法的默认实现来达到目的。但这并不是明智的,因为版本升级时需要增加的新方法,往往是一些实实在在的干活儿的方法,在骨架类中给出一个默认实现往往没什么实际意义。更好的做法,是写一个新的接口去继承原来的接口,把新增的方法在子接口中声明。这样可以保持100%向前兼容,需要实现新方法的类属于伴随此次接口升级或日后要取实现的类。

 

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

 

4. Web方面的兼容性(jshtml

 

 

4.1. Threadlocal

 

它还有一些类似的方式用来使用,就是在框架级别有很多动态调用,调用过程中需要满足一些协议,虽然协议我们会尽量的通用,而很多扩展的参数在定义协 议时是不容易考虑完全的以及版本也是随时在升级的,但是在框架扩展时也需要满足接口的通用性和向下兼容,而一些扩展的内容我们就需要 ThreadLocal来做方便简单的支持。

简单来说,ThreadLocal是将一些复杂的系统扩展变成了简单定义,使得相关参数牵连的部分变得非常容易,以下是我们例子说明:

 

 

5. 数据库表兼容性

5.1. 2. 扩展表模式

 

6. 兼容性策略

6.1. Atitit.兼容性的“一加三”策略

 

“通过移除陈旧代码降低编译器维护成本,Java9 javac 将不再支持Java 1.5以及更早的代码。JDK9的“一加三”策略意味着该版本的javac会支持1.9/9, 1.8/8, 1.7/7和1.6/6 中的选项。该策略会在JDK10中延续。”

标题是我对新闻的解读。以下是我的理解。
这意味着,许多java最初的设计不合理会修改了。
将带来许多源代码级的不兼容性。
一些表达式,可能在早期编译结果false,以后可能变成true了。
比如String的==
也意味着Integer i = new Integer(0);Integer j = new Integer(0);
i==j以后也可能是true了。

 

作者::  (attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

6.2. 3. 同时运行模式

 

 网上冲浪,用户用的最多的当然是浏览器,而Windows中内置的IE浏览器却着实让用户用的不爽,于是呼,在国内许多双核浏览器便大行其道。这 不,微软也觉得不好意思了,在Windows 10中新增加了一个浏览器-Spartan,这款整合了微软自家 Cortana 数字助理的新浏览器有桌面和移动两个版本,并深度融合了 Bing 搜索服务,让用户的搜索体验更加无缝。 

  它将集成OneNote功能,方便用户进行记录,标注与分享,支持PDF文件显示,此外还有阅读模式等等的特性有消息称它将支持Chrome扩展程序。全新游览器开发代号斯巴达 

不过消息显示,新老浏览器初期将会共存,一方面是避免突然切换造成兼容性问题,另一方面也可以给用户更灵活的选择,直到微软确定新浏览器足以取代IE,才会彻底转换过去。

 

6.3. 3.1. 完美的后向兼容性

6.4. 3.2. 虚拟机模式

6.5. 3.3. 版本兼容性模式

 

 

6.6. 4. 向前兼容(为升级预留足够余地)

6.7. 5. “向前兼容理念

 

 

以对于已经处于垄断地位的公司,要居安思危,更是要敢于革自己的命,方能迎来更长久的成功。比如早期的英特尔公司虽然在存储领域占有垄断地位,但是其看到 CPU市场更长久的未来,毅然投入到CPU的研发之中,才有了今天的成功。但是同样是英特尔公司,在CPU方面抱着“向前兼容”理念,让Atom芯片背着 枷锁而跳舞,在全球嵌入式芯片的市场,让ARM的芯片独领风骚。同样微软在移动操作系统领域,背着兼容Windows操作风格的负担,让微软的移动操作系 统远远落后于专为移动设备而设计的iOS和安卓系统。相反谷歌却是让人称道,其在保持自己在搜索领域优势的基础上,不仅成功推出了安卓操作系统,目前又在 机器人、智能汽车、可穿戴设备等领域提前布局。

6.8. 6. 专门处理的软件列表

 我首先是从一个流行的游戏-模拟城市的开发者那边听到这样的事情的。他说模拟城市有个很致命的bug:它在释放完内存之后便立刻重新使用内存。在DOS环境下,这样的做法幸好不会是个什么问题。但是,在Windows下面,一个程序释放的内存,很可能会立即被另一个程序获取并使用,所以这样的做法是绝对不允许的。Windows开发团队的测试 员测试了若干个流行的应用程序,并且搞定了它们,但是模拟城市一直出现问题。他们将问题反映给了开发人员。后者将模拟程序给研究了个彻底,找出问题的根 源,并添加了特殊的代码去检查模拟城市是否有运行,如果有运行的话,便将内存管理器运行为特殊模式,在此模式下,程序能够使用释放过的内存。 

  这并不是什么稀罕的事情。Windows的测试团队是庞大的,而他们最重要的责任就是要确保所有人都可以顺利的升级他们的操作系统,不管他们安装了哪些应用软件,无论这些应用软件是否使用了不公开的旧系统接口还是依赖有问题的系统资源。实际上,如果你去查阅Windows注册表中的软件兼容性部分,你会发现里面有很长的一个被专门处理的软件列表。新版Windows会专门模拟一些旧系统中的bug使得这些软件可以正常运作。

 

 

7. ref

JavaThreadLocal无锁化线程封闭实现原理 – 码农网.htm

atitit.提升兼容性最佳实践 p825.doc - attilax的专栏 - 博客频道 - CSDN.NET.htm

 

读《C# Java 的比较》有感 - Java看编程 - ITeye技术网站.html

 

atiend

转载于:https://www.cnblogs.com/attilax/p/5922373.html

相关文章:

用PULL解析器解析XML文件

第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 import org.xmlpull…

iOS端Socket(二)ProtocolBuffer使用

ProtocolBuffer使用 一、环境及ProtocolBuffer的安装 分别在终端执行以下命令: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew install protobuf-swift brew install automake brew install libtoo…

Wireshark分析实战:某达速递登录帐号密码提取

“使用某达速递的官网登陆及APP登录,来学习Wireshark的使用。”在如今这个HTTPS深入人心的情况下,作为一个也不算很小的快递,某达速递,不但全站HTTP,而且登录帐号密码明文未加密传输,也算是技术落后到了一定…

【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构

多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我《从零开始做OpenCL开发》系列文章的第一篇。 1 异构计算、GPGPU与OpenCL OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片 异构计算&#xf…

使用 fcntl 函数 获取,设置文件的状态标志

前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 )。那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志。 解决思路 1. 对于获取文件状态标志&#xff0c…

UILabel显示带颜色边的文字

需求如图,UILabel要实现带红色边的文字显示。 1、新建UILabel的子类JXBorderLabel 2、重写drawRect:方法 #import "JXBorderLabel.h"implementation JXBorderLabel- (void)drawRect:(CGRect)rect {//1.获取上下文CGContextRef context UIGraphicsGe…

协议分析中的TCP/IP网络协议

“ TCP/IP协议作为互联网的基础,在协议分析中不可或缺,本文介绍在对协议进行分析还原的过程中的一些要点,快速掌握协议还原的精髓。” 注意,本文比较枯燥乏味,若非需要了解TCP/IP协议相关信息,建议绕行。 …

忠告初学者学习Linux系统的8点建议

忠告初学者学习Linux系统的8点建议新手或者说即将要入坑的小伙伴们,常常在QQ群或者在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:如何给添加的用户归属用户组,复制整个文件到另一个目录下面&#x…

iOS显示gif图片的几种方法

方法一、传统方式 //1.加载Gif图片,转换成Data类型NSString *path [NSBundle.mainBundle pathForResource:"demo" ofType:"gif"];NSData *data [NSData dataWithContentsOfFile:path];//2.将data数据转换成CGImageSource对象CGImageSourceRe…

简单文件传输协议TFTP分析还原

“ 介绍TFTP协议及传输内容的还原。”TFTP,全称为Trivial File Transfer Protocol,即简单文件传输协议,是一个用来在客户端与服务器之间进行简单文件传输的协议,UDP承载,它真的很简单。其协议标准为RFC1350&#xff0c…

Oracle中的字符处理方法

向左补全字符串lpad(字段名,填充长度,填充的字符) select lpad(1,4,0) from dual; 向右补全字符串rpad(字段名,填充长度,填充的字符) select rpad(1,4,0) from dual; 返回字符串小写select lower(STUDENT) from dual; 返回字符串大写select upper(admin) from dual; 单词首字符…

fwt优化+树形DP HDU 5909

1 //fwt优化树形DP HDU 59092 //见官方题解3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/4 5 #include <bits/stdc.h>6 // #include <iostream>7 // #include <cstdio>8 // #include <cstdlib>9 // #include <algorithm> 10 // #inclu…

iOS直播(二)GPUImage音视频采集

上文中介绍了用AVFoundation实现音视频采集&#xff08;https://blog.csdn.net/dolacmeng/article/details/81268622&#xff09; &#xff0c;开源的基于GPU的第三方图像处理库GPUImage对AVFoundation进行了进一步的封装&#xff0c;打开GPUImgeVideoCamera.m查看代码&#xf…

Wireshark使用技巧:提取VOIP通话中的音频流

“Wireshark的RTP流分析功能实战。”在VOIP协议的分析过程中&#xff0c;常常会遇到一些标准协议承载的语音传输&#xff0c;如以SIP、H.323为控制协商协议&#xff0c;RTP为语音数据协议的VOIP传输情况。在语音协议的分析过程中&#xff0c;需要提取的一个重要项是语音内容&am…

在预装win8的电脑上换win7系统讲解

现在买电脑&#xff0c;如果电脑预装的系统是win8系统&#xff0c;那么这个电脑的默认启动模式应该就是UEFI模式&#xff0c;现在UEFI模式正在逐渐取代传统模式。UEFI启动需要一个独立的分区&#xff0c;它将系统启动文件和操作系统本身隔离&#xff0c;可以更好的保护系统的启…

iOS直播(三)GPUImage音视频采集并写入文件

上一篇介绍了用GPUImage图像处理库进行图像采集&#xff0c;从而避免了直接使用AVFoundation&#xff08;AVKit&#xff09;时繁琐的代码&#xff0c;同时不用熟悉OpenGL ES也可以快速地对图像进行美颜、添加滤镜等。这一篇介绍如果使用多个滤镜以及录制视频&#xff0c;并保存…

使用Wireshark进行DNS协议解析

“ DNS协议格式解析及说明。”DNS即域名系统&#xff08;Domain Name System&#xff09;&#xff0c;是用来将域名与IP地址建立映射的协议&#xff0c;通过DNS协议&#xff0c;可以方便记忆。DNS可基于TCP或UDP&#xff0c;使用53号端口&#xff0c;常见的是使用UDP承载&#…

iOS直播(四)对视频进行压缩编码

1.为什么要进行编码? 不经过压缩编码的原视频&#xff0c;所占空间大&#xff0c;不便于保存和网络传输&#xff0c;所以视频录制完后&#xff0c;需要先编码&#xff0c;再传输&#xff0c;解码后再播放。 2.视频为什么可以被压缩&#xff1f; 视频存在冗余信息&#xff0…

nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战

前天在玩OLED时想完成一直想弄得一个东西&#xff0c;就是简单的单片机游戏。因为STM32和nRF51822的内存足够&#xff0c;所以就用缓存数组的方法来显示图像&#xff08;我也不知道术语是啥&#xff0c;反正就是在内存中建立一个128X64的二维数组&#xff0c;更新显示时将整个数…

.net卸载程序制作

.net卸载程序制作 原文:.net卸载程序制作方法一&#xff1a; 在打包项目中添加文件msiexec.exe(一般在c:\windows\system32(系统目录中)找到)。 在文件系统视图中选择应用程序文件&#xff0c;在msiexec.exe上单击右键选择“创建快捷方式”&#xff0c;重命名快捷方式为“unins…

Windows下的DNS命令用法

“Windows下DNS相关命令的用法。”在协议分析过程中&#xff0c;经常会遇到一种情况&#xff0c;一次对某域名抓包的过程中&#xff0c;抓到了某个域名的DNS请求&#xff0c;之后再抓包&#xff0c;却抓不到的情况。这时候就需要DNS命令出马了&#xff0c;本文介绍Windows下的D…

Kafka集群配置说明

#kafka数据的存放地址&#xff0c;多个地址的话用逗号分 log.dirs/tmp/kafka-logs #broker server服务端口 port9092 #这个参数会在日志segment没有达到log.segment.bytes设置的大小&#xff0c;也会强制新建一个segment会被 topic创建时的指定参数覆盖 log.roll.hours24 #是否…

Tomcat漏洞说明与安全加固

Tomcat是Apache软件基金会的一个免费的、开放源码的WEB应用服务器&#xff0c;可以运行在Linux和Windows等多个平台上&#xff0c;由于其性能稳定、扩展性好、免费等特点深受广大用户的喜爱。目前&#xff0c;互联网上绝大多数JAVA WEB应用都运行在Tomcat服务器上。 Tomcat作为…

《人性的优点》笔记

1.相信自己&#xff0c;做一个成功的人 2.《圣经》中说&#xff1a;“攻克己心&#xff0c;强如攻城” 3.人最大的敌人&#xff0c;不是别人&#xff0c;正是自己 4.不要为木已成舟的事情耗费太多的心血&#xff0c;你无法改变它 5.忧虑是健康的大敌&#xff0c;它只会让你的生…

SIP协议分析

“ 音视频通话控制协议SIP介绍。”SIP&#xff08;Session Initiation Protocol&#xff09;&#xff0c;即会话发起协议&#xff0c;在RFC2543、RFC3261等中被定义&#xff0c;是一个VOIP信令协议&#xff0c;其目的是在IP网络中实现电话功能&#xff0c;即软电话功能。在互联…

Struts2的工作原理

Struts2是在Struts1的基础上发展而来的&#xff0c;Struts是WebWork和Struts1的集合&#xff0c;采用的正是WebWork的核心&#xff0c;更多的是WebWork。 下载的Struts2源代码文件 主要的包和类&#xff1a; 包名 说明 org.apache.struts2. components 该包封装视图组件&…

Tiny4412 Uboot

1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境变量PATH&#xff0c;保证可以正常使用。 b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录 tar xzf uboot_tiny4412-20130729.tgz c) 配置 uboot 并编译 cd uboot_tiny4412 m…

iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信

本文要达成如图效果&#xff0c;在一台iPhone上安装第二个微信&#xff1a; 准备&#xff1a; Xcode微信ipa&#xff08;可通过iTool进行下载&#xff09;重签名脚本 步骤 打开Xcode&#xff0c;新建Single View App项目&#xff0c;名字可以随意&#xff0c;这里就用Wech…

使用Fiddler进行HTTP流量分析

“ Fiddler抓包工具使用。”Fiddler作为一个PC端的HTTP/HTTPS协议分析工具&#xff0c;能够抓取PC上的流量&#xff0c;并且它对HTTP类数据的分析&#xff0c;要比Wireshark要简单&#xff0c;友好&#xff0c;它对数据的组织格式很好地提高了分析效率。本文介绍如何在PC上使用…

Java学习笔记(二一)——Java 泛型

【前面的话】 最近脸好干&#xff0c;掉皮&#xff0c;需要买点化妆品了。 Java泛型好好学习一下。 【定义】 一、泛型的定义主要有以下两种&#xff1a; 在程序编码中一些包含类型参数的类型&#xff0c;也就是说泛型的参数只可以代表类&#xff0c;不能代表个别对象。&#x…