html简单的网站,免费搭建商城网站,软件开发前端需要学什么,负责网站建设说在前面
在40岁老架构师 尼恩的读者交流群(50)中#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格#xff0c;遇到很多很重要的面试题#xff1a; 既然 Oracle JDK 这么好#xff0c;那为什么还要有 OpenJDK)中最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格遇到很多很重要的面试题 既然 Oracle JDK 这么好那为什么还要有 OpenJDK 最近有小伙伴在面试美团又遇到了相关的面试题。小伙伴懵了因为JDK都是架构师定的 他从来没有全面去了解过支支吾吾的说了几句面试官不满意面试挂了。
所以尼恩给大家做一下系统化、体系化的梳理使得大家内力猛增可以充分展示一下大家雄厚的 “技术肌肉”让面试官爱到 “不能自已、口水直流”然后实现”offer直提”。
当然这道面试题以及参考答案也会收入咱们的 《尼恩Java面试宝典PDF》V118版本供后面的小伙伴参考提升大家的 3高 架构、设计、开发水平。 最新《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF请关注本公众号【技术自由圈】获取 文章目录 说在前面面试官既然 Oracle JDK 这么好那为什么还要有 OpenJDK1 OpenJDK 是支持 开源的遵守GPL开源协议2 Oracle JDK 是商业免费的并不是开源的3 OpenJDK 是试错角色、炮灰角色快速更新为 Oracle JDK LTS版本打冲锋陷阵 官方答疑 OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别说在最后推荐阅读 面试官既然 Oracle JDK 这么好那为什么还要有 OpenJDK
参考答案
OpenJDK 项目主要基于 Sun 捐赠的 HotSpot 源代码。
对于 Java 7没什么太多的区别OpenJDK 被选为 Java 7 的参考实现由 Oracle 工程师维护。
从Java 7开始 后面的版本 Oracle JDK 和 OpenJDK 的核心区别如下
1 OpenJDK 是支持 开源的遵守GPL开源协议
开源意味着 可以对它根据你自己的需要进行修改、优化
比如 Alibaba 基于 OpenJDK 开发了 Dragonwell8 https://github.com/alibaba/dragonwell8
GPL是传染性协议任何用了GPL开源协议的软件都会被传染为强制开源比如你用了某一个GPL开源协议的类库那么用了该类库的所有代码都必须开源而且是用GPL开源协议开源
OpenJDK 用的是GPL with Classpath Exception协议 ,有个尾巴 with Classpath Exception。
这个尾巴 with Classpath Exception又称为with linking exception什么意思就是用它们的模块而不是去修改他的模块就可以闭源发布。比如Java代码里面常见的import语句比如import java.*, javax.*, javafx.* etc.等等这些都属于exception里面的也就是说你只是import这些类库并且使用它们的话不受GPL协议影响你大可以在此基础之上制作自己的软件并且闭源发布。
什么情况下会被强制开源呢很简单你魔改了Open JDK的实现的话比如你更改了java.base.jmod模块的源代码的话那你的代码就会被GPL传染上要求必需开源否则就违背了Open JDK的开源协议当初SUN这样做的目的很简单就是为了防止出现不同版本的Java否则IBM整一个JavaSUN整一个Java互相之间代码还不兼容那就麻烦大了违背了Java最初的承诺就是编译一次四处运行。
开源许可协议GPL、APL、BSD、LGPL、MIT等的区别
开源软件的授权许可都是基于开源许可协议的常见的开源许可协议有GPL、LGPL、APL、BSD、MIT、Mozilla Public License、Creative Commons、Eclipse Public License 1.0等。它们之前有很多相同的地方也有很多不同的地方本文将分析一下这些协议之间的区别。
GPLGNU General Public License使用源软件的类库引用源代码、改变修改了源代码的新软件也必须采用GPL进行授权。就是说只要使用了GPL开源软件的源代码或拿它的源代码进行了修改而编写的新的软件也必须加入到GPL的阵营。很明显不能拿GPL授权的开源东东来做商业软件。这个协议有个好处就是极大增加了使用GPL的软件的数量。采用GPL授权的软件有Linux、MySQL等。
LGPLLesser GPL相比GPL的严格LGPL要温和很多。可以通过引用类库的方式不是直接使用源代码拿LGPL授权的东东来重新开发商业软件。如果是要修改源代码是相应的修改和衍生出来的代码都要使用LGPL开放源代码。采用LGPL的软件有JBoss、Hibernate、FCKeditor等。
APLapache Licence vesion 2.0适用于商业软件允许修改代码后再发布不用开放源代码。采用APL的软件有Hadoop、Apache HttpServer等。
BSDBerkeley Software Distribution这个协议的要求很宽松允许他人修改和重新发布代码可以在此基础上开发出商业软件进行销售。所以此协议适用于商业软件。采用BSD协议的软件最著名的有nginx。
MITMassachusetts Institute of Technology又称X11协议。MIT与BSD类似但是比BSD协议更加宽松算是目前限制最少的协议了。这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息。适用商业软件。采用MIT的软件有jquery、Node.js
还有关于Mozilla Public License、Creative Commons、Eclipse Public License 1.0等协议这里就不一一介绍了。
2 Oracle JDK 是商业免费的并不是开源的
另外虽然 Oracle JDK 也是商业免费比如 JDK 8但并不是所有版本都是免费的。
这也是为什么 linux 通过 yum 包管理器上默认安装的 JDK 是 OpenJDK 而不是 Oracle JDK。
Oracle JDKOpen JDK是否开源完全开源部分开源是否免费是部分免费部分商用功能基本一致基本一致稳定性提供 LTSLog Tank Service服务协议BCL/OTN 协议GPL v2
Oracle JDK各个版本所用的协议
Oracle JDK版本BCL协议OTN协议6最后一个公共更新6u45之前7最后一个公共更新7u80之前88u201/8u202之前8u211/8u212之后9√10√11√12√
BCL 协议Oracle Binary Code License Agreement 可以使用 JDK支持商用但是不能进行修改。
OTN 协议Oracle Technology Network License Agreement 11 及之后新发布的 JDK 用的都是这个协议可以自己私下用但是商用需要付费。
3 OpenJDK 是试错角色、炮灰角色快速更新为 Oracle JDK LTS版本打冲锋陷阵
OpenJDK的特点是更新频繁实现快速迭代和高效试错为Oracle JDK LTS版本打下基础。
Oracle JDK 一般是每 6 个月发布一个新版本而 OpenJDK 一般是每 3 个月发布一个新版本。
为啥 Oracle JDK 更稳定了吧先在 OpenJDK 试试水把大部分问题都解决掉了才在 Oracle JDK 上发布
基于以上这些原因 OpenJDK 还是有存在的必要的 上面这个问题oracle 官方也回答过大致如下
官方答疑 OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别
答非常接近。
我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建只添加了几个部分例如部署代码其中包括 Oracle 的 Java 插件和 Java WebStart 的实现以及一些闭源的第三方组件如图形光栅化器一些开源的第三方组件如 Rhino以及一些零碎的东西如附加文档或第三方字体。展望未来我们的目的是开源 Oracle JDK 的所有部分除了我们考虑商业功能的部分。 Oracle JDK 大概每 6 个月发一次主要版本从 2014 年 3 月 JDK 8 LTS 发布到 2017 年 9 月 JDK 9 发布经历了长达 3 年多的时间所以并不总是 6 个月而 OpenJDK 版本大概每三个月发布一次。但这不是固定的我觉得了解这个没啥用处。详情参见 https://blogs.oracle.com/java-platform-group/update-and-faq-on-the-java-se-releasecadence 。 OpenJDK 是一个参考模型并且是完全开源的而 Oracle JDK 是 OpenJDK 的一个实现并不是完全开源的个人观点众所周知 JDK 原来是 SUN 公司开发的后来 SUN 公司又卖给了 Oracle 公司 Oracle 公司以 Oracle 数据库而著名而 Oracle 数据库又是闭源的这个时候Oracle 公司就不想完全开源了但是原来的 SUN 公司又把 JDK 给开源了如果这个时候Oracle 收购回来之后就把他给闭源必然会引其很多 Java 开发者的不满导致大家对 Java 失去信心那 Oracle 公司收购回来不就把 Java 烂在手里了吗然后 Oracle 公司就想了个骚操作这样吧我把一部分核心代码开源出来给你们玩并且我要和你们自己搞的 JDK 区分下你们叫 OpenJDK我叫 Oracle JDK我发布我的你们继续玩你们的要是你们搞出来什么好玩的东西我后续发布 Oracle JDK 也会拿来用一下一举两得 OpenJDK 开源项目 https://github.com/openjdk/jdk Oracle JDK 比 OpenJDK 更稳定肯定啦 Oracle JDK 由 Oracle 内部团队进行单独研发的而且发布时间比 OpenJDK 更长质量更有保障。 OpenJDK 和 Oracle JDK 的代码几乎相同OpenJDK 的代码是从 Oracle JDK 代码派生出来的可以理解为在 Oracle JDK 分支上拉了一条新的分支叫 OpenJDK所以大部分代码相同但 Oracle JDK 有更多的类和一些错误修复。因此如果您想开发企业/商业软件我建议您选择 Oracle JDK因为它经过了彻底的测试和稳定。某些情况下有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题但是只需切换到 Oracle JDK 就可以解决问题 在响应性和 JVM 性能方面 Oracle JDK 与 OpenJDK 相比提供了更好的性能 Oracle JDK 不会为即将发布的版本提供长期支持如果是 LTS 长期支持版本的话也会比如JDK 8但并不是每个版本都是 LTS 版本用户每次都必须通过更新到最新版本获得支持来获取最新版本 Oracle JDK 使用 BCL/OTN 协议获得许可而 OpenJDK 根据 GPL v2 许可获得许可。
说在最后
JVM 面试题是非常常见的面试题。
以上的内容如果大家能对答如流如数家珍基本上 面试官会被你 震惊到、吸引到。
在面试之前建议大家系统化的刷一波 5000页《尼恩Java面试宝典PDF》并且在刷题过程中如果有啥问题大家可以来 找 40岁老架构师尼恩交流。
最终让面试官爱到 “不能自已、口水直流”。offer 也就来了。
推荐阅读
《百亿级访问量如何做缓存架构设计》
《多级缓存 架构设计》
《消息推送 架构设计》
《阿里2面你们部署多少节点1000W并发当如何部署》
《美团2面5个9高可用99.999%如何实现》
《网易一面单节点2000WtpsKafka怎么做的》
《字节一面事务补偿和事务重试关系是什么》
《网易一面25Wqps高吞吐写Mysql100W数据4秒写完如何实现》
《亿级短视频如何架构》
《炸裂靠“吹牛”过京东一面月薪40K》
《太猛了靠“吹牛”过顺丰一面月薪30K》
《炸裂了…京东一面索命40问过了就50W》
《问麻了…阿里一面索命27问过了就60W》
《百度狂问3小时大厂offer到手小伙真狠》
《饿了么太狠面个高级Java抖这多硬活、狠活》
《字节狂问一小时小伙offer到手太狠了》
《收个滴滴Offer从小伙三面经历看看需要学点啥》 《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF请到下面公号【技术自由圈】取↓↓↓