Code name Version API level (no code name) 1.0 API level 1 (no code name) 1.1 API level 2 Cupcake 1.5 API level 3, NDK 1 Donut 1.6 API level 4, NDK 2 Eclair 2.0 API level 5 Eclair 2.0.1 API level 6 Eclair 2.1 API level 7, NDK 3 Froyo 2.2.x API level 8, NDK 4 Gingerbread 2.3 - 2.3.2 API level 9, NDK 5 Gingerbread 2.3.3 - 2.3.7 API level 10 Honeycomb 3.0 API level 11 Honeycomb 3.1 API level 12, NDK 6 Honeycomb 3.2 API level 15, NDK 8 Jelly Bean 4.1.x API level 16 Jelly Bean 4.2.x API level 17 Jelly Bean 4.3.x API
http://mpvideo.qpic.cn/0bf2jmataaabmqancsoltnpvcs6dgbfqcmaa.f10002.mp4?dis_k=6476883157a4d36515576cc
来自 维基百科 以API LEVEL 的更新维度排列 Android 版本 API LEVEL 名称 Linux 内核 首次发布日期 9.0 28 Pie 4.4.107、4.9.84、4.14.42 Google 对外正式发布的版本,除了部分厂商(国产)会对这些版本做些修改,大部分手机预装的系统与Google正式发布版本差别不大。 API LEVEL Android开发者使用的用于开发Android应用程序的SDK 版本,因为Google会不断对外发布新Android版本,版本的修改需反映到开发者的SDK上,为了避免不同版本的做成线上异常 ,需要为不同的Android版本设立不同的API LEVEL让开发者做好适配。 如果版本更新不影响SDK的api,可以不升级API LEVEL。 系统名称 区别于Android版本,一般因为小修改或者bugfix而发布的版本不会更新系统名称。
MySQL 事务隔离级别和多版本并发控制MVCC MySQL 提供了两种事务型的存储引擎:InnoDB 和 NDB Cluster 。另外还有一些第三方存储引擎也支持事务 ---- 1. 每开始一个事务,系统版本号就会自动递增,事务开始时刻的版本号作为当前事务的版本号,用来和查询到的每行记录的版本号就行比较。 行的删除版本要么未定义,要么大于当前事务版本号。这可以确保事务读取到的行,在事务开始之前未被删除。 UPDATE InnoDB 为插入一行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识 保存着两个额外的系统版本号,使大多数读操作都可以不用加锁。 以前版本,在 MySQL 8.0.3 中将 tx_isolation 替换成了 transaction_isolation 变量替换了, 将上面的 tx_isolation 6.2 修改隔离级别 MySQL
在 Spring 项目的控制器中,有 2 个 Rest API 方法。 例如 获取用户接口:/user/getUserInfo 获取权限接口:/role/getRoleList 一个客户端正在通过 /api/v1进行访问 现在想更新其中一种方法。 即/user/getRoleList;因此新方法的版本将为 / api/v2 。但是 v1 的方法没有变化,即 /api/v1 。 如何在同一项目中使用两个版本处理其余方法呢? 意思是 /user/getUserInfo 接口应该同时支持 /api/v1 和 /api/v2。并且 /role/getRoleList 也应该应该支持两个版本,但是功能不同。 简单的说 /user/getUserInfo 将有1个方法同时支持两个版本 每个版本的 /role/getRoleList 将有2个方法 如果要对两个版本使用单独的方法,可以通过在 @RequestMapping
随着业务的发展,产品对外开放的API接口会随着业务的需要经常发生变动,考虑到快速响应新用户的需求,且不影响老用户当前使用的前提下,对开放API进行版本控制是非常有必要的。 API版本控制的优点如下: 1:降低代码冗余 2:兼容历史版本 3:新接口升级可进行增量迭代,且版本向下兼容,升级平滑,可在历史客户无感的情况下进行版本迭代更新。 @RequestMapping("api/{version}/order") public class ApiVersionTestV1Controller { @GetMapping("/save return JSONResult.OK(message); } } @ApiVersion(value = 2) @RestController @RequestMapping("api 2:通过V1版本访问V2的接口 图片 【结论:低版本无法访问高版本接口】 3:访问V1,V2 版本均包含的接口 图片 【结论】:同名接口均调用对应版本,互不影响。
快照读(提高数据库的并发查询能力)像不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑 读写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读、幻读、不可重复读。写写:有线程安全问题,可能存在更新丢失问题。 解决脏读、幻读、不可重复读等事务隔离问题,但是不能解决更新丢失问题MVCC实现原理mvcc的实现原理主要依赖于记录中的三个隐藏字段,undolog,read view来实现的。 ,而事务4提交的版本也是全局角度的最新版本。 总结在RC隔离级别下,是每个快照读都会生成并获取最新的Read View,而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View,之后的快照读获取的都是同一个Read View。
作为一个Android开发,记住Android版本、对应的名称、对应的API版本是一件必要的事情,不然每次都查对应表好累。参考官方文档做个表,方便自己记忆,实在不行自己忘记时翻出来看看也是好的?。 Platform Version API Level VERSION_CODE Notes Android 8.1 27 O_MR1 Platform Highlights Android 8.0 26 Highlights Android 1.5 3 CUPCAKE Platform Highlights Android 1.1 2 BASE_1_1 Android 1.0 1 BASE 至于这些版本的在用比例
最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为《机器学习实战》那本书的缘故,用的是python2.7.所以目前的情况是要两个版本共存,之前看到身边有人为了解决这个问题 值得注意的是,我们说virutalenv的安装是为了解决多版本python共存的问题,暗含了,你的至少有一个python版本是已经存在,并且可以正常工作的。 我这里的主环境是python2.7 ? 值得一提的是,虚拟什么版本的python,一定是这个python提前已经装好了。 4.1 新建项目,自由选择python版本 当导入已有项目时,pychar会自动选择相匹配的python版本,当然你也可以选,方法在后面。 另外python2和python3分别向下兼容,你不会除了这两个版本还有其余版本吧。 ? ? 4.2. 在pycharm中创建virtualenv的虚拟环境: ? ? ?
接口实现版本管理的意义 API版本管理的重要性不言而喻,对于API的设计者和使用者而言,版本管理都有着非常重要的意义。 首先,对于API的设计和实现者而言,需要考虑向后兼容性,但是随着业务的发展或需求的变更往往会导致兼容性实现非常复杂,因此引入API版本管理将能解决这个尴尬。 此时可以提供多个版本的API实现,不需要再为了向后兼容性而绞尽脑汁。 其次,对于API的使用者而言,也可以灵活选择使用不同版本API,而不用担心API的兼容性问题。 如何实现接口的版本管理 对API进行版本管理目前已经有许多成熟的做法,比如:将版本信息放在URL中,或者放在HTTP消息头中,甚至可以放在URL参数或者消息体中(将版本信息放在HTTP消息头里,版本信息作为 怎么做 Web API 版本控制?
随着Android SDK版本不断的迭代更新,在新的SDK上总是会出现让人眼前一亮非常方便好用的API。 但是这些新的API呢在低版本的SDK上是没有的,所以当我们的minSdkVersion的版本低于新API所在的版本时,我们直接使用新API在编译时会出现报错。 API对版本的要求。 而@TargetApi是忽略特定版本的API调用报错。 举个栗子:当你的项目minSdkVersion=9,你想使用API 11的新的方法时。 我们要清楚一点,使用上面两种注释的方式只是让lint在编译时不再报错,在低版本的手机系统中,如果直接使用高版本的API肯定会报:“NoSuchMethod”的Crash的。
下面主要聊一聊在业务快速发展过程中,产品不断迭代,服务端在兼容不同版本客户端的API遇到的问题的一些经验和心得。 image.png 方案一:The Knot 无版本——即平台的API永远只有一个版本,所有的用户都必须使用最新的API,任何API的修改都会影响到平台所有的用户。 (如下图1) 方案二:Point-to-Point——点对点,即平台的API版本自带版本号,用户根据自己的需求选择使用对应的API,需要使用新的API特性,用户必须自己升级。 兼容性版本控制应该是最常见的版本控制方式,特别是在C/S架构当中,具体的兼容性版本不同的策略总结有API版本、客户端版本号、功能参数标志等。 2)鉴权和服务隔离:除了场景需要考虑外,接口调用在分配时做好记录和鉴权以及服务隔离。比如商店的部分接口服务不仅提供给客户端,同时也会提供给手机系统应用调用。
版本升级注意项 每个版本都有废弃和移除的API,废弃的依旧可以用,所以这里只列一些常用的被移除的API及对应的替换方法。 各版本移除的API 官方文档:https://www.electronjs.org/docs/latest/breaking-changes/#removed-remote-module 14.0 remote crashReporter.getCrashesDirectory() // Replace with app.getPath('crashDumps') 9.0 <webview>.getWebContents() This API
平台版本 API 级别 VERSION_CODE Android 11 30 R Android 10.0 29 Q Android 9 28 Pie Android 8.1 27 Oreo Android
上节回顾 上篇记录了我对MySQL事务隔离级别read uncommitted的理解。这篇记录我对MySQL事务隔离级别read committed&MVCC的理解。 前言 可以很负责任的跟大家说,MySQL中的此隔离级别不单单是通过加锁实现的,实际上还有可重复的读隔离级别,其实这两个隔离级别效果的实现还需要一个辅助,这个辅助就是MVCC - 多版本并发控制,但其实它又不是严格意义上的多版本并发控制 从此隔离级别效果入手:事务只能读其他事务已提交的记录。 正是因为6中的阅读视图生成原则,导致在不同隔离级别()下,读承诺总是读最新一份快照数据,而可重复读读事务开始时的行数据版本。 一般我们认为MVCC有下面几个特点: 每行数据都存在一个版本,每次数据更新时都更新该版本修改时复制出当前版本随意修改,个事务之间无干扰保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃
最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为《机器学习实战》那本书的缘故,用的是python2.7.所以目前的情况是要两个版本共存,之前看到身边有人为了解决这个问题 值得注意的是,我们说virutalenv的安装是为了解决多版本python共存的问题,暗含了,你的至少有一个python版本是已经存在,并且可以正常工作的。 值得一提的是,虚拟什么版本的python,一定是这个python提前已经装好了。 4.1 新建项目,自由选择python版本 当导入已有项目时,pychar会自动选择相匹配的python版本,当然你也可以选,方法在后面。 另外python2和python3分别向下兼容,你不会除了这两个版本还有其余版本吧。 4.2.
MySQL的InnoDB引擎具有不同的事务隔离级别,不同事务隔离级别通过视图创建时机的不同来实现。 MySQL的两种视图 View:它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。 另一个是InnoDB在实现MVCC时用到的一致性读视图,即consistent read view,用于支持RC(Read Committed,读提交)和RR(Repeatable Read,可重复读)隔离级别的实现 Undo log与隔离级别的关系 数据可见性 一个事务在启动时声明:以我启动的时刻为准,如果一个数据版本是在我启动之前生成的,就认,如果事务在我启动后生成的,就不认,必须找到它的上一个可见的版本。 可重复读与读提交 可重复读与读提交最大的区别是: 可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后的事务里的其他查询都共用这个一致性视图;对于可重复读,查询只承认在事务启动前就已经提交完成的数据 在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。对于读提交,查询只承认在语句启动前就已经提交完成的数据。
API提供者可能面临的最大困难之一是如何管理版本和从实例到实例的构建。迭代的持续需求与组织的持续需求相匹配,使得版本控制成为现代API开发中一个有争议且经常被讨论的方面。 为什么API版本控制和金丝雀的发布如此重要? 有时,API提供者和API使用者之间可能存在某种紧张关系。API提供者可能希望在他们有新的、更好的想法时改变API。 版本是什么? 具体来说,为什么?为什么我们不应该理所当然地进行版本控制呢?让我们看看版本化api的影响。 版本控制是指在向服务添加特性时,从根本上创建现有对象的新版本。 流程从API和端点开始,这些API和端点在一个Swagger文件中声明,该文件存在于API注册表中。服务被附加到API端点,然后清单被添加到具有特定规范版本的服务中。 结论:许多行业都能从金丝雀发布中受益 最终,API提供者选择合并canary版本还是坚持传统的版本控制完全取决于API开发人员自身的具体用例。
Android 4.4 19 KITKAT Platform Highlights Android 4.3 18 JELLY_BEAN_MR2 Platform Highlights Android 4.2, 4.2.2 17 JELLY_BEAN_MR1 Platform Highlights Android 4.1, 4.1.1 16 JELLY_BEAN Platform Highlights Android 4.0.3, 4.0