撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。
Java | MySQL | |
开源 | 庞大的用户群体和生态系统 | 免费开源 |
安全性 | 拥有许多异常处理机制,像泛型能够减少在编译时发现类型错误,迭代器中的fast-fall机制。 | 完善的权限控制和数据备份功能 |
性能好 | 许多类和框架,提高编码效率 | 大规模数据和高并发处理 |
可扩展性 | 继承、接口和多态 | 集群、复制和分组功能 |
跨平台性,通过JVM编译后能在各种平台上运行 | 可移植性:几乎支持所有的操作系统; | |
面向对象:模拟真实世界解决问题 | 引擎框架分离:在使用时根据性能、特性,以及其他需求来选择数据存储的方式 | |
支持多线程;网络编译;编译与解释并存; |
Java相当于汽车的发动机,而MySQL相当于汽车的导航仪。
Java能够写出复杂的应用程序,为整个系统提供动力和核心功能。
MySQL能够存储、管理和检索大量的数据,为开发者提供数据支持和管理能力,就像汽车导航仪为车提供导航和路线规划功能一样。
Java面向对象编程的方式,使得代码复用性高、可维护性强,有丰富的第三方库和开发框架支持,开发效率较高。
MySQl的稳定性和安全性高,可扩展性强等特点,支持大规模数据和高并发处理适合大型系统的数据管理和存储。
JVM为Java编译虚拟机,能够编译class(字节码)文件成java文件,对不同的操作系统采用针对性的实现,目的是使用相同的字节码,就能够得到相同的结果,这样则能够在各种平台上运行。
JVM只是一种规范,只要能够满足人人都能够创建专属的JVM。
JDK为Java开发工具包,包含编译时使用的javac编译器和工具(javacdoc和jdb),同时包含JRE,便于开发者能够正常使用和提高编程效率。
有些使用到Java的应用软件也会要求安装jdk才能够正常编译和运行。
JRE为Java运行环境包,能够运行已经编译的Java文件,即包括运行时所有内容集合,有JVM虚拟机,Java类库,Java命令和其他一些基本构建,但不能够创建Java。
JDK = javac编辑器+JREJava运行环境;
拥有JDK能够编辑和运行Java文件,而JVM则能够将其编译成Java文件在各种平台上使用。
字节码是只有JVM能够理解的代码,其能够通过编译器转换成不同系统都能使用的机器码。
字节码不能够直接访问系统,一定程度上避免了伤害系统的可能。
字节码编译的形式一定程度上提高了传统解释型语言运行效率低的问题,但其仍比传统编译型语言效率低。
字节码能够通过JIT即时编译来提高执行效率(没有前是解释器逐行解释执行),本质上是利用spot-hot对于二八定律的应用,主要是其在第一次编译后会留下常用的机器码,并且每次编译都会有所优化调整。
AOT为启动前将字节码全部编译再次提升了运行效率,但其会使某些动态特性失效,CGLIB 动态代理使用的是 ASM 技术,其在内存中生成并加载修改后的字节码文件,所以这也是为什么不全部使用AOT提高效率;
同时若使用AOT将丧失跨平台特性,对于不同平台需要不同的编译。
因为Java是两者皆有,先编译(javac)后解释的语言;并且其通过即时编译的功能,缩小了传统编译型和传统解释型语言的效率差距。
编译型语言运行效率高,执行效率较低;而解释型语言则执行效率高,运行效率低。
因为Java被甲骨文公司收购,该公司本身的数据库就是不开源的,所以他们对于JDK也想闭源,因此Oracle JDK是不能被修改的但其是公司专门开发性能较为稳定,而Open JDK是专门让开发者去尝试完善的开源Java开发工具包且更新频率高(三个月,Orarcle是其两倍),两者的关联是当Open JDK在市场中应用效果好的尝试会被加入到Oracle JDK中。
Java | C++ | |
语言类型不同 | Java是解释型语言 | C++是编译型语言 |
安全性: 都拥有异常机制 | 像泛型能够减少在编译时发现类型错误,迭代器中的fast-fall机制和指针不能直接操作内存。 | 指针异常 |
性能好 | 许多类和框架,提高编码效率 | 执行速度比Java更快,但编译速度可能会比Java慢。 |
可扩展性 | 单继承、多接口、多态和方法重载 | 多继承、方法重载和修饰符重载 |
跨平台性 | 通过JVM编译后能在各种平台上运行 | 需要重新编译以适应不同的平台 |
动态内存分配 和回收 | 垃圾回收机制 | 手动管理内存, 可能出现内存泄漏问题 |
面向对象:模拟真实世界解决问题 | 面向过程:站在人/熟悉的视角去一件件事情完成 |
问题和理解大部分来源为Guide哥的Java面试指南,有需要的可自行检索加入其星球获得。