JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

Posted Java面试那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK14最新号外,你又有面试吹牛逼的资本了,别不信...相关的知识,希望对你有一定的参考价值。


最近,逛dzone的时候,看到一位老外写了一篇文章,说 Mark Reinhold 为JDK14提交了5个JEP建议不一定会出现在JDK14中)。编号分别是 305, 343, 359, 366, 368。

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

接下来,我就带着你来盘他,达到面试吹牛逼的目的。

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

为什么这么说呢?因为无论大小厂都希望高p候选人对技术永远保持着前瞻性和好奇感,然而,你进去后,才发现接手的大多数项目还在JDK8,甚至有的项目还在JDK7(刚好14的一半^_^)。如果你身边都是一群积极上进的小伙伴,说不定在你的带动下,还真能推动,要是身边都是一群老油条,你还没推动起来,你却因不合群而被他们踢出局了。


我们先来聊聊这位大佬Mark Reinhold是谁?

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

他是JDK 1.2和5.0版本的首席工程师,Java SE 6的规范制定的负责人,还是JDK 7,JDK 8和JDK 9 项目和规范的负责人,目前,他主要在OpenJDK社区领导JDK项目,归根结底,两个字:牛逼。


好了,我们回归到正文,来拆解一下这5个JEP。


首先,建议读一读之前的一篇文章,JDK的发展史:


说明一下JDK14目前还在开发中,估计正式发布还需要等好几个月,来看一下Mark Reinhold邮件里的发布计划(具体发布时间见红框):

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...


5个针对性的JEP建议分别是:


1、JEP305:instanceof的模式匹配;

2、JEP343:打包工具;

3、JEP359:record关键字;

4、JEP366:弃用Parallel Scavenge+Serial Old垃圾收集算法的组合

5、JEP368:文本块。


# JEP305:instanceof的模式匹配


这个功能是对instanceof关键字加强,通过模式匹配来简化逻辑,使得操作更简单,比如下面两种写法。


我们熟悉的写法:

if (obj instanceof String) {String s = (String) obj;// use s}

新的写法:


突出了绑定变量的范围是由包含的表达式和语句的语义确定,下面这种写法,如果obj是String类型,那么s可以在true代码块中使用,但在else代码块中不能使用s变量。

if (obj instanceof String s) {// 这里可以使用s变量} else {// 这里不可以使用s变量}

又比如下面这种写法:

if (!(obj instanceof String s)) { .. s.contains(..) ..} else { .. s.contains(..) ..}

上面这种写法,true代码块中s引用的是obj;false代码块中s引用的是绑定变量。


同样,它还能与&& ||操作符一起使用,比如:

if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}
if (obj instanceof String s || s.length() > 5) {.. s.contains(..) ..}

说白了,就一个目的:简化逻辑,丰富instanceof的语义。


# JEP343:打包工具


这个没有什么说的,说白了就是提供一种跨平台的打包工具,支持的平台分别是:


Linux: deb and rpm

macOS: pkg and dmg

Windows: msi and exe


# JEP359:record关键字


这个record关键字的语义,是简化bean,省略掉繁琐的构造函数、equals()、hashCode()、toString()等,如下面这种格式:

record Point(int x, int y) { }

跟Lombok有点类似,之前有篇文章介绍过(参考:),这个Lombok工具实际上只是给了你一种没有写这些函数的假象,背后它默默帮你做了,它是怎么做的呢?它会在编译期动手脚,将相应的功能注入到jar包。这个record关键字到底会怎么做,就不得而知了。


JEP366:弃用Parallel Scavenge+Serial Old垃圾收集算法的组合


通过邮件得出的大概意思,就是这个GC算法的组合很少使用,但需要大量维护工作,因此弃用。


# JEP368:文本块


这个特性对应JDK13中JEP 355: Text Blocks (Preview)的补充(参考:),但我不论怎么看,都觉得跟Python有点像,我挺期待这个功能,之前字符串处理方法的,转义太烦了,可读性太差了!


简单举例说明一下,老写法:

String html = "<html>\n" +" <body>\n" +" <p>Hello, world</p>\n" +" </body>\n" +"</html>\n";

新写法如下:

String html = """ <html> <body> <p>Hello, world</p> </body> </html> """             ;


# 总结


JDK14到底有那些新功能呢?


可以确定的JEP如下:


  • JEP 345: NUMA-Aware Memory Allocation for G1

  • JEP 349: JFR Event Streaming

  • JEP 352: Non-Volatile Mapped Byte Buffers

  • JEP 358: Helpful NullPointerExceptions

  • JEP 361: Switch Expressions (Standard)

  • JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector

  • JEP 364: ZGC on macOS

  • JEP 367: Remove the Pack200 Tools and API


待确认的5个JEP建议:


  • JEP 305: Pattern Matching for instanceof (Preview)

  • JEP 343: Packaging Tool (Incubator)

  • JEP 359: Records

  • JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination

  • JEP 368: Text Blocks (Second Preview)


最后,你可以获取JDK14的尝鲜版本。

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

官网:http://jdk.java.net/14/


你要用正式版,唯一能做的就是默默等待...


兄弟,我敢打赌你们还有部分项目还在JDK7,要是JDK14出来了,它们之间可是差了一倍哦!

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

逃逃逃~~~


热文推荐





JDK14最新号外,你又有面试吹牛逼的资本了,别不信...



觉得不错,请给个「在看」

分享给你的朋友!


- End -


以上是关于JDK14最新号外,你又有面试吹牛逼的资本了,别不信...的主要内容,如果未能解决你的问题,请参考以下文章

深入虚拟DOM和DOM-diff,让它成为你的装逼的资本

源码解读JDK1.8 中 ConcurrentHashMap 不支持空键值对源码剖析

分享互联网2021年最新Java面试题汇总整理-附详细答案解析

生命的意义,大家来说说30年前的你经历了哪些选择?30岁现在的你又有哪些思考?

生命的意义,大家来说说30年前的你经历了哪些选择?30岁现在的你又有哪些思考?

近 100 场专题演讲14 大沉浸式应用场景…别不信!这是真·烧脑技术盛会