首页 文章 精选 留言 我的

精选列表

搜索[搜索增强],共10000篇文章
优秀的个人博客,低调大师

Mybatis-Milu 1.2.0 正式发布,Mybatis 增强框架

Mybatis-Milu 1.2.0 现已发布,具体更新内容如下: 增加自定义短配置注解功能 。 使用@SnowflakeId注解在主键上,将会在insert时自动使用snowflakeId注入值。 使用@CreateTime注解在日期属性上,将会在insert时自动使用当前日期。 开发者可以自定义自己的注解别名使用。内置的别名注解及自定义方式见文档。 typeHandler声明支持。 现在可在@AttributeOptions上声明字段typeHandler以及jdbcType。 starter引用依赖 <dependency> <groupId>com.yuehuanghun</groupId> <artifactId>mybatismilu-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency>

优秀的个人博客,低调大师

Apply Changes 在 Android 11 中的增强特性

简介 Apply Changes 是 Android Studio 中的一项功能,我们在 Android Studio 3.5 中引入了这项功能,以帮助开发者快速迭代您对应用所做的更改。Apply Changes 通过 JVMTI API 来判断是否可以使用此方式进行变更。在 Android 11 上,ART (Android 运行时) 扩展了 JVMTI API,引入了一个名为 Structural Class Redefinition (类的结构性重定义) 的新功能。该功能使 Apply Changes 在 Android 11 设备上增加了一类新的应用场景。现在,可以使用 Apply Changes 将更复杂的修改快速部署到正在运行的应用上,这包括: 增加方法 (Android Studio 4.1) 增加资源文件 (Android Studio 4.2) 增加静态字段 (Android Studio 4.2) 这可以使您减少研发周期,最大化生产效率。本文我们将探讨在 Android Studio 中该功能是如何实现的。 通过 Android Studio 实现更强的功能 Apply Changes 基于 Android Runtime 特性从头设计,所以可以利用其升级更新的功能不断发展。 对于类的结构性重定义而言,将具有新增方法的类发送到 ART,这与之前的 Android 版本没有什么不同。如今新增了一个入口 API,为此您需要将 Android Studio 升级到 4.1 或更高版本,以利用动态在运行中添加新方法的优势,包括静态方法和虚方法。 但是,增加变量需要在 Android Studio 中进行新的分析。当增加一个新的变量时,ART 不会尝试为其分配具体的值。(请持续关注后续关于 ART 实现类的结构性重定义的文章)。取而代之的是,被增加的变量仅会被初始化为默认初始值或 null,并且如何初始化将由 Android Studio 决定。 此过程较为复杂,考虑这样一种情况: 将 long 类型静态变量 y 添加到类中 (y 的初始化发生在类加载期间)。例如: public class example { public final static long x = System.currentTimeMillis(); public final static long y = System.currentTimeMillis(); } 如果该类被加载,x 和 y 的值将会非常接近。在通过使用 Apply Code Changes 增加 y 的情况下,很难计算出正确的 y 值。事实上对 y 的赋值,即使采用最接近的模拟类加载和初始化 y 的程序,也是有争议的。因为两个 curentTimeMillis() 在静态初始化 (<clinit> 方法) 中调用,Apply Changes 将继续遵守不重新执行 <clinit> 方法任何部分的策略,所以新增的 y 值为 0。 幸运的是,Apply Changes 已经 使用了 D8 分析 DEX 文件,并且作为该过程的一部分,在最新版本的 Android Studio 中,Apply Changes 能够利用 D8 新引入的 Inspector API。这种轻量级的检查 API 能够在 DEX 比较过程中计算出一些额外的信息,而仅需增加少量开销 (仅检查发生修改的 Java 类)。一系列有关新增变量的元信息将被附加在发送到对应设备的 Apply Changes 请求的 ProtoBuf 消息中。 在设备上,Android Studio 将我们的更改传达给 VM 之前,Java Agent 将检查即将被替换的当前加载类。通过比较当前加载类和新编译类的字段,即可计算出新增字段列表及每个字段的初始值。然后,代理程序将暂时挂起所有其他线程,防止未初始化的新增字段在替换前被访问。如果替换请求成功执行,它将使用合适的变量初始化新增字段。 局限与即将推出的新功能 在 Android Studio 4.2 Canary 3 中,此功能仅支持新增静态原语的应用场景。作为衍生功能,这有助于在 R.class 中新增值,使 Apply Changes 支持新增资源。 对于所有使用 Apply Changes 的场景中,需要记住一点: 当您重新编译并重新运行一个程序,任何语义和之前都是不同的。试想这样的一个例子: 构造函数发生了变化,但是所有基于原来的构造函数初始化的对象并没有重新初始化。同样的,该规则也适用于静态变量,因为 <clinits> 不会被重新调用。 希望 Android Studio 中这一新功能可以为开发者带来生产力的提高。我们一如既往地欢迎大家给我们 反馈,并让我们知道您希望看到哪些改进。

优秀的个人博客,低调大师

Rust 1.49.0 发布,增强对 ARM 架构的支持

Rust 团队在2020年最后一天发布了 Rust 1.49,更新内容主要是提升对多个系统架构的支持级别。 简单介绍一下 Rust 编译器对不同架构平台的支持级别。虽然 Rust 编译器支持多平台,但 Rust 团队无法为所有目标平台提供相同级别的支持,为了清楚地标记对每个平台的支持级别,他们采用 3 个层级进行区分: Tier 3:Rust 编译器对 Tier 3 级别平台只提供技术性的初级支持 (technically support),并不检查运行于这些平台之上的代码能否构建或通过测试,也不会提供任何预构建的二进制文件作为发布的一部分。 Tier 2:Rust 编译器对Tier 2 级别平台的支持程度是“保证构建”,并提供预构建的二进制文件,但编译器不会在这些平台上执行测试套件,因此生成的二进制文件可能无法工作,或者可能有错误。 Tier 1:Rust 编译器为 Tier 1 平台提供最高级别支持的保证,对于这些平台,编译器会为合并到其中的每一个变化运行完整套件,并提供可用的预构建二进制文件。 可以看到,从 Tier 3 到 Tier 1,Rust 编译器对它们编译和运行的保证程度逐级递增。 对 64 位ARM Linux 的支持级别升级为 Tier 1 Rust 1.49 对aarch64-unknown-linux-gnu架构平台的支持级别已升级为 Tier 1,为运行 Linux 的 64 位 ARM 设备提供了最高级别的编译支持。此项变更是一个重要的里程碑,因为这是非 x86 架构平台首次获得 Tier 1 级别的支持。 ※注意,Android 不受这项变更的影响,因为它应用了不同的Tier 2 target。 对 64 位 ARM macOS 和 Windows 的支持级别升级为 Tier 2 Rust 1.49 对aarch64-apple-darwin和aarch64-pc-windows-msvc架构平台的支持级别已升级为 Tier 2,两者对应的设备就是搭载 Apple M1 的 Mac 和运行 Windows on ARM 的 64 位 ARM 设备。 计划放弃支持 Windows XP 目前 Rust 编译器对 Windows XP 提供 Tier 3 级别的支持,在讨论放弃支持 Windows XP 的 issue 中,可以看到 Rust 团队已通过放弃支持 Windows XP 的提案。 Rust 1.49 还新增了 3 个稳定的函数: slice::select_nth_unstable slice::select_nth_unstable_by slice::select_nth_unstable_by_key 详情查看https://blog.rust-lang.org/2020/12/31/Rust-1.49.0.html。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册