003-005:Java平台相关的面试题
本文首发于公众号:javaadu
003:字节码是什么?
在java中,字节码存放于以.class结尾的二进制文件。
字节码之于java,类似于汇编语言之于c/c++。对于c/c++语言来说,不同的平台需要不同的编译器,以应对不同的操作系统和机器指令集;对于java来说,只需要一个编译器(javac),编译形成的字节码是一种通用的代码,可以运行在任何安装了jvm的机器上,也就实现了所谓的“一次编写、到处运行”。
使用字节码和虚拟机的语言不只有java一种,java是现在最出名的语言,lisp是更古老的语言(该语言主要用于人工智能和科学计算);其他使用类似于字节码的语言有icon和prolog
004:比较下jdk、jvm和jre的不同
jvm是运行java应用的虚拟机,主要模块有:类加载子系统、运行时数据区、即时编译(jit)子系统、垃圾收集子系统等;
jre是java运行时环境,主要包括java se api(基础类库和ui类库)和java应用的部署套件。
jdk是最大的概念,包括:jvm + jre + java语言 + jdk辅助工具(javac、jmap等)
005:c++和java之间最大的不同是什么?
java和c++的设计目标不同:(1)c++最初的设计目标是为了扩展c语言的能力,主要的应用场景是系统应用开发,跟c语言相比,c++增加了面向对象能力、异常处理、强大的资源管理能力、泛型编程、模板编程以及stl库等能力;(2)java的设计目标是更加普遍,是纯粹的oop语言、支持并发、更好的可移植性(跨平台能力),java利用jvm实现了较高的安全性和可移植性。
我认为,c++和java最主要的几个不同可以列举如下(其他语言特性的不同在此不做讨论):
| | c++ | java |
| --- | --- | --- |
| 平*立性 | c++是平台相关性语言 | java是平台无关性语言 |
| 指针 | c++支持指针变量,因此我们可以将任何变量的地址存放在一个指针变量中 | java不支持指针变量 |
| 语言级别 | c++既可以当作是高级语言,也可以当作是机器级别的语言 | java是纯粹的高级语言 |
| 内存管理 | c++需要程序员手动管理内存的分配和释放 | java在大多数情况下不需要关心内存的分配和释放 |
参考资料
本号专注于后端技术、jvm问题排查和优化、java面试题、个人成长和自我管理等主题,为读者提供一线开发者的工作和成长经验,期待你能在这里有所收获。
上一篇: 忍住,别动手
下一篇: 不想狗子乱跑把他栓桌子上