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
Pre 并发编程-12线程安全策略之常见的线程不安全类 ---- 模拟SimpleDateFormate线程安全问题 package com.artisan.java8.testDate; import TODO * @date 2021/3/5 0:22 * @mark: show me the code , change the world */ public class DateInJava8 ---- LocalDate https://nowjava.com/docs/java-api-11/java.base/java/time/LocalDate.html LocalDate 是final The assumption from this API is that all the calendar system uses the same way of representing the time
来自 维基百科 以API LEVEL 的更新维度排列 Android 版本 API LEVEL 名称 Linux 内核 首次发布日期 9.0 28 Pie 4.4.107、4.9.84、4.14.42 Gingerbread 2.6.35 2011-02-09 2.3、2.3.1、2.3.2 9 Gingerbread 2.6.35 2010-12-06 2.2、2.2.1、2.2.2、2.2.3 8 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 GINGERBREAD_MR1 Platform Highlights Android 2.3/2.3.1/2.3.2 9 GINGERBREAD Platform Highlights Android 2.2.x 8 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的新的方法时。 else { 7 // TODO 使用老的方式 8 } 9} 10 11@SuppressLint("NewApi") 12public void doOthers() { 13
java 8 通过发布新的Date-Time API (JSR 310)来进一步加强对日期和时间的处理。 Java 8 日期时间 API 在旧版本的Java中,日期时间API存在诸多问题,其中有: 非线程安全 - java.util.Date 是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一 Java 8 在java.time包下提供了很多新的API。以下为两个比较重要的API: Local(本地) - 简化了日期时间的处理,没有时区的问题。 代码如下 public class Java8Tester{ public static void main(String args[]){ Java8Tester java8Tester ,就可以使用时区的日期时间API: public class Java8Tester { public static void main(String args[]) { Java8Tester
Java8的Stream就是典型的例子,Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 一、Stream API filter 1、统计 long count = data.stream().filter(i -> i > 20).count(); 结果:5 2、过滤转换 List<Integer 8, 15, 16, 19, 23, 27, 56, 99, 232] [232, 99, 56, 27, 23, 19, 16, 15, 8, 8, 5, 4, 3] [ 3, 4, 5, 8, 8, 15, 16, 19, 23, 27, 56, 99, 232] [232, 99, 56, 27, 23, 19, 16, 15, 8, 8, 5, 4, 4).name("DDD").age(20).build(), Demo.builder().id(5).name("EEE").age(21).build()); 二、日期时间 API
Stream API是Java8中处理集合的关键组件,提供了各种丰富的函数式操作。
了解Stream Java8中有两个最为重要的改变,一个是Lambda表达式,另一个就是Stream API,针对常见的集合数据处理,Stream API 提供了一种高效且易于使用的数据处理方式。 Java 8给Collection接口增加了两个默认方法,它们可以返回一个Stream default Stream stream() { return StreamSupport.stream 使用Stream API处理集合类代码更加简洁易读. Stream API : Java Platform SE 8 Stream API 使用 中间操作 终止操作 输出结果为: 田:[Employee [id=105, name=田七, age=38 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。
下面主要聊一聊在业务快速发展过程中,产品不断迭代,服务端在兼容不同版本客户端的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 8 26 Oreo Android 7.1 25 Nougat Android 7.0 24 Nougat Android 6.0 23 Marshmallow Android 5.1 22 LOLLIPOP_MR1 HONEYCOMB Android 2.3.3、2.3.4 10 GINGERBREAD_MR1 Android 2.3、2.3.1、2.3.2 9 GINGERBREAD Android 2.2.x 8
Java8 在 java.time 包下新增了全新的日期和时间 API。新的 Date API 与 Joda-Time 库有点相似,但又有不一样。 某个特定的时间点可以使用 Instant 类来表示,Instant 类也可以用来创建旧版本的 java.util.Date 对象。 12T08:46:42.588Z System.out.println(legacyDate); // Tue Mar 12 16:32:59 CST 2019 Timezones(时区) 在新 API