对Switch表达式进行了优化
以前写法
int i;
switch (x) {
case “1”:
i=1;
break;
case “2”:
i=2;
break;
default:
i = x.length();
break;
}
现在支持
String formatted =
switch (obj) {
case Integer i -> String.format(“int %d”, i)
case Byte b -> String.format(“byte %d”, b);
case Long l -> String.format(“long %d”, l);
case Double d -> String.format(“double %f”, d);
case String s -> String.format(“String %s”, s);
default -> obj.toString();
};
int eval(Node n) {
switch(n) {
case IntNode(int i): return i;
case NegNode(Node n): return -eval(n);
case AddNode(Node left, Node right): return eval(left) + eval(right);
case MulNode(Node left, Node right): return eval(left) * eval(right);
default: throw new IllegalStateException(n);
};
}
2.2 新的api
2.2.1 java.nio.file.FileSystems
添加了FileSystems.newFileSystem(Path,Map <String,?>)方法
添加了三种新方法,java.nio.file.FileSystems
以使使用文件系统提供程序的文件系统提供程序更容易使用。
newFileSystem(Path)
newFileSystem(Path, Map<String, ?>)
newFileSystem(Path, Map<String, ?>, ClassLoader)
2.2.2 java.nio.ByteBuffer
java.nio.ByteBuffer 新增若干对于buffer的批量的数据get/put,而且不影响buffer位.
java.nio.ByteBuffer``java.nio
现在,其他缓冲区类型定义了绝对批量get
和put
方法来传输连续的字节序列,而不考虑或影响缓冲区位置。
2.2.3 dom sax
dom sax解析有关的新api
官方的说法是为初始化dom sax工厂时提供了创建带有默认命名空间的api,特点是方法名上带有NS,三个方法分别是:
newDefaultNSInstance()
newNSInstance()
newNSInstance(String factoryClassName, ClassLoader classLoader)
相应的,使用jdk13,这段代码:
DocumentBuilder db = DocumentBuilderFactory.newDefaultNSInstance().newDocumentBuilder();
等效于:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
2.3 unicode12.1 支持
最近每个版本都会扩大字符集支持.
2.4 ZGC取消提交未使用的存储器
ZGC已得到增强,可以将未使用的堆内存返回给操作系统。这对于关注内存占用的应用程序和环境很有用。
默认情况下启用此功能,但可以使用明确禁用此功能-XX:-ZUncommit
。此外,不会取消分配内存,以使堆大小缩小到最小堆大小(-Xms
)以下。这意味着,如果最小堆大小(-Xms
)配置为等于最大堆大小(-Xmx
),则将隐式禁用此功能。
可以使用以下命令配置未提交的延迟-XX:ZUncommitDelay=<seconds>
(默认为300秒)。此延迟指定在可以取消提交之前应使用多长时间的内存。
注:简单介绍下ZGC,可能我们目前在使用的是CMS垃圾回收器或者是G1垃圾回收器或者什么没有设置使用的是jdk默认的垃圾回收器。
ZGC回收机在jdk11支持,ZGC目前仅适用于Linux / x64 。和G1开启很像,用下面参数即可开启:
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
ZGC垃圾收集器,也称为ZGC,是一个可扩展的低延迟垃圾收集器,有如下特性:
-
暂停时间不超过10毫秒
-
暂停时间不会随堆或实时设置大小而增加
-
处理堆范围从几百M到几TB。
ZGC的成绩是,无论你开了多大的堆内存(1288G? 2T?),硬是能保证低于10毫秒的JVM停顿,远胜前代的G1。
2.5 添加了-XXSoftMaxHeapSize标志
可管理的命令行标志-XX:SoftMaxHeapSize=<bytes>
已添加。当前,它仅在启用Z垃圾收集器(-XX:+UseZGC
)时有效。
设置后,GC将努力不使堆增长超出指定的大小,除非GC决定有必要这样做,以避免OutOfMemoryError。不允许将最大软堆大小设置为大于最大堆大小(-Xmx
)的值。如果未在命令行上设置,则默认为等于最大堆大小的值。
这个值可以在运行时调整其值。例如,可以通过使用jcmd VM.set_flag SoftMaxHeapSize <bytes>
或通过HotSpot MXBean 来调整其值。
在一些特定的场景下我们需要这个新的特性,如非常在意资源使用,希望保持低堆内存占用,但同时又想同时能应付临时的,偶发的内存空间突增,尤其是在并发场景下无法预知的对象分配速率的突增.设置软最大堆内存将鼓励gc维护一个小堆,这样gc会更积极的进行垃圾回收,对于应用程序突发地增加对象分配速度也能更加从容应对.
2.6 ZGC支持的最大堆变化
ZGC支持的最大堆大小从4TB增加到16TB。
2.7 动态CDS归档
CDS的功能在进化一步,就是动态CDS功能。说白了,可以在运行期间动态保存类数据,也就是所谓的归档。
应用程序class-data Sharing(AppCDS)在JDK13新版本里已经简化。在应用程序退出时,可以动态存档类数据。动态生成的归档文件将在与正在运行的JDK映像一起打包的默认系统归档文件上创建生成,并保存数据。
#创建存档文件
% bin/java -XX:ArchiveClassesAtExit=helloworld.jsa -cp helloworld.jar Hello
使用存档文件
% bin/java -XX:SharedArchiveFile=hello.jsa -cp helloworld.jar Hello
使用动态存档,在老文档基础上
% bin/java -XX:SharedArchiveFile=:helloworld.jsa -cp helloworld.jar Hello
2.8 CRL的可配置读取超时
com.sun.security.crl.readtimeout
系统属性设置为CRL检索的最大读取超时,单位为秒。如果尚未设置该属性,或者该属性的值为负,则将其设置为默认值15秒。值为0表示无限超时。
2.9 新增TLS配置信息命令
keytool -showinfo -tls
添加了显示TLS配置信息的新命令。
2.10 支持下一代MS密码学(CNG)
SunMSCAPI提供程序现在支持读取下一代加密(CNG)格式的私钥。这意味着可以从Windows密钥库(例如“ Windows-MY”)中加载CNG格式的RSA和EC密钥。与EC(签名算法SHA1withECDSA
,SHA256withECDSA
等等)也支持。
2.11 SunPKCS11提供升级与PKCS#11 V2.40支持
SunPKCS11提供程序已更新,支持PKCS#11 v2.40。当基础PKCS11库支持相应的PKCS11机制时,此版本增加了对更多算法的支持,例如AES / GCM / NoPadding密码,使用SHA-2消息摘要系列的DSA签名以及RSASSA-PSS签名。
以上为新增功能,部分新增安全相关的功能因为和开发可能没有太大关系,没有介绍。想了解的可以点击官方文档进行查看。
三、删除功能
======
3.1 删除awt.toolkit系统属性
历史上(直到JDK 1.8),java.awt.Toolkit
该类的文档称为“ awt.toolkit”系统属性,该属性设置为平台实现子类的名称。
3.2 删除运行时跟踪方法
过时的方法traceInstructions(boolean)
,traceMethodCalls(boolean)
已经从删除java.lang.Runtime
类。这些方法在许多发行版中都无法使用,它们的预期功能由Java虚拟机工具接口(JVMTI)提供。
3.3 不再支持JDK 1.4之前的SocketImpl实现
java.net.SocketImpl
在此发行版中已删除了对为Java SE 1.3和更早版本编译的自定义实现的支持。此更改对SocketImpl
为Java SE 1.4(2002年发布)或更高版本编译的实现没有影响。
3.4 删除VM选项-XX + AggressiveOpts
-XX:+AggressiveOpts
在JDK 11中不建议使用VM选项,在JDK 12中删除了对VM的支持(在该选项中,它的使用被忽略,除了生成警告之外)。现在,使用此标志将导致VM初始化错误。
3.5 重复的RSA服务不再受SunJSSE提供支持
为支持RSA KeyFactory
,RSA KeyPairGenerator
,MD2withRSA
,MD5withRSA
,和SHA1withRSA Signature
已经从SunJSSE提供商删除。
从JDK 5开始,SunRsaSign
引入了提供程序来支持这些与RSA相关的算法。SunJSSE提供程序支持这些功能的唯一原因是与JDK 5之前的应用程序向后兼容。删除只会影响明确要求SunJSSE提供者提供这些RSA服务的应用程序。应用程序应删除硬编码的“ SunJSSE”提供程序名称。
3.6 证书删除
因为过期,以下证书被删除删除两个DocuSign根CA证书 , 删除两个Comodo根CA证书,删除T-Systems德国电信根CA 2证书
3.7 删除com.sun.net.ssl软件包
内部软件包com.sun.net.ssl
已从JDK中删除。在Java SE 1.4之前,当JSSE作为独立产品交付时,com.sun.net.ssl
就支持这些API,但是自Java SE 1.4起,该软件包已被弃用,仅供内部使用。自Java SE 1.4开始,软件包中已提供标准的替代API,如HostNameVerifier
,KeyManager
和。尽管应用程序应该已经过渡到标准API,但是此注释是最终警告,这些非标准API已被删除。TrustManager``javax.net.ssl
3.8 FIPS 140兼容模式去除
FIPS 140兼容模式已从SunJSSE提供程序中删除。旧版应用程序可能已通过以下方法之一使用了实验模式:
1.更新java.security
文件并为SunJSSE提供程序指定加密提供程序(例如,security.provider.4=com.sun.net.ssl.internal.ssl.Provider SunPKCS11-NSS
)
2.使用JDK内部类并使用指定的加密提供程序(例如,new com.sun.net.ssl.internal.ssl.Provider(cryptoProvider);
)创建提供程序。
因为SunJSSE提供程序使用JDK默认密码提供程序,所以应用程序可以配置security.provider
安全属性以使用符合FIPS 140的密码提供程序。
四、不推荐使用的功能和选项
=============
4.1 StringBuilder和StringBuffer参数为负引发的异常
StringBuilder和StringBuffer参数为负长度数组时抛出NegativeArraySizeException .
4.2 Linux上的默认进程启动机制
linux系统下,进程的默认开启机制使用posix_spawn,这一块需要参考linux创建进程的四种方式,fork(), fork()-exec(), posix_spawn()是异步进程,多进程可以并行执行,和system这种同步方式,多进程不能同时执行.从官方给的链接来看,原来用的似乎是fork/vfork?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
MySQL50道高频面试题整理:
.(img-TlqO9zbg-1711640552342)]
[外链图片转存中…(img-UMW6A17a-1711640552343)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-l0nJPKKc-1711640552344)]
总结
本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
MySQL50道高频面试题整理:
[外链图片转存中…(img-BA6BFEMb-1711640552344)]