本人总结:

面向对象(封装,继承,多态)

平台无关性(jvm运行,class文件)

语言(泛型,lambda)

类库(集合,并发,网络,io/nio)

jre(java运行环境,JVM,类库)

JDK(java开发工具,包括JRE,javac,诊断工具)

"一次编译,到处执行"java平台依靠JVM和.class字节码文件屏蔽不同平台软件硬件差异.认为C/C++是面向操作系统的编程,java是面向虚拟机的编程.

通过增加一个间接地中间层来"解耦"是计算机领域常用的一门"艺术手法".如:虚拟机,操作系统,http等.

从你接触java开发到现在,你对java最直观的印象是什么呢?是他宣传的"write once ,run anywhere"还是目前看已经有些形式主义的语法呢?你对于java平台到底了解到什么程度?请先停下来总结思考一下.

今天我要问你的问题是,谈谈你对java平台的理解?"java是解释执行"这句话正确吗?

典型回答.

java本身是一种面向对象的语言,最显著地特征有两个方面,一是所谓的"书写一次,到处运行.write once,run anywhere"能够非常容易的获得跨平台能力,另外就是垃圾回收,java通过垃圾回收器,回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收.我们日常会接触到JRE或者JDK,jre就是java的运行环境,包括:jvm和java类库,以及一些模块等.jdk可以看做jre的一个超集,提供更多工具,如:编译器,各种诊断工具.

对于"java是解释执行"这句话并不准确,我们开发的java源代码,首先通过javac编译成字节码,然后运行时,通过java虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码,但是常见的jvm,比如我们大多数情况下使用的oracleJDK提供的hotspot jvm,都提供了jit编译器,就是通常所说的动态编译器,jit能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行.

考点分析;

其实这个问题,问的有点笼统.题目本身是非常开放的,往往考察的是多个方面,比如,基础知识理解是否清晰,是否掌握java平台主要模块和运行原理,很多面试者会在这种问题上吃亏,稍微紧张一下,就不知从何说起.

对于这类笼统的问题,你需要尽量表现出自己的思维深度和系统化理解,java知识理解也要全面.避免让面试官觉得是"知其然而不知其所",毕竟明白基本组成和机制,是日常工作中进行问题诊断或者性能调优等多方面事情的基础,相信没人会不喜欢"热爱学习和思考"的面试者.

即使觉得自己的回答不是非常完善,也不用担心,我个人觉得这种笼统的问题,回答的片面写也是正常,大多数有经验的面试官,不会因为一个问题轻易对面试者下结论.会尽量引导面试者展示他的真实水平.这种问题是开场热身,然后根据你的回答拓展问题.

知识拓展

回归正题,对于java平台的理解,可以从很多方面简明扼要的谈,例如;java语言特性包括泛型,lambda等语言特性.基础类库,包括集合,io\nio,网络,并发,安全等基础类库.对于我们日常工作应用较多的类库,面试前可以系统总结,有助临场发挥.

或者谈谈jvm的一些基础概念和机制,比如java的类加载机制,常用版本jdk的内嵌的class-loader,例如bootstrap,application,和extension  class-loader,类加载大致过程;加载,验证,连接,初始化(周志明<深入理解java虚拟机>很好的jvm上手书籍)自定义class-loader等.还有垃圾收集的基本原理,最常见的垃圾收集器,如cms,g1等对于适用于什么样的工作负载也要心理有数,这些都是可以拓展的领域,在后面专栏进行更系统介绍.

jdk或java领域的工具,如编译器,运行时环境,安全工具,诊断和监控工具.这些基本工具是日常日常工作效率的保证.而对于其他的语言平台,也是触类旁通.

这是总结的一个宽泛蓝图

回到前面讨论的解释执行和编译执行,有些面试官喜欢刨根问底.因为这是了解面试者知识深度的有效方法,我们进行深入探讨.

我们将java分成:编译时期和运行时期.java的编译不同于c/c++生成可以直接执行的机器码的编译.

java源码编译生成".class"文件,此文件实际为字节码,并非可以直接执行的机器码.

java通过字节码和java虚拟机(JVM)这些跨平台的抽象,屏蔽了操作系统和硬件的细节.这是实现"一次编译,到处执行"的基础.

在运行时,jvm会通过类加载器加载字节码,解释或者编译执行..java虚拟机启动时可以指定不同的参数对运行模式进行选择.

java虚拟机启动时,可以指定不同的参数对运行模式进行选择.

jvm作为一个强大的平台.不仅可以运行java语言,本质上字节码都可以运行.有大量jvm语言活跃在不同场景.

简单介绍java平台,提纲挈领构建整体印象,包括java语言,核心类库,java虚拟机.等

woj:

"一次编译,到处执行"说的是java语言跨平台的特性,java的跨平台特性与java虚拟机的存在密不可分.java通过字节码和java虚拟机(JVM)这些跨平台的抽象,屏蔽了操作系统和硬件的细节.这是实现"一次编译,到处执行"的基础.不同平台的java运行环境不同但是运行的字节码文件(.class)是相同的.因此才有了java一次编译到处执行的效果,跨平台语言不止java一种但是java是比较成熟的一种.java虚拟机和dos类似,相当于一个供程序运行的平台.

magict4;
我对"compile once ,run anywhere"这个宣传语提出的背景很感兴趣.似乎在暗示c语言的一个缺陷,对于每一个不同的平台,源代码都要被再次编译,但是不同的平台可执行的机器码必然不同,源代码必然需要依据不同平台再次被编译.所以这并不是焦点.

焦点并不是在编译上,而是在对源文件的修改上,c语言经常需要调用系统层面的API.但不同系统的api一般不同,因此为了支持不同的平台c语言的源代码需要根据不同的平台修改源代码,这是一个非常大的通电.

三军;

java特征:

面向对象(封装,继承,多态)

平台无关性(jvm运行,class文件)

语言(泛型,lambda)

类库(集合,并发,网络,io/nio)

jre(java运行环境,JVM,类库)

JDK(java开发工具,包括JRE,javac,诊断工具)

java是解析运行的吗?

两种都有.

1.java源代码经过javac编译成.class文件

2..class文件经过jvm编译或解析运行.

①解析:.class文件经过jvm内嵌的解析器解析执行.

②编译:存在JIT编译器(即时编译器)把经常运行的代码作为热点代码,编译为与本地平台相关的代码,并进行各种层次的优化.

③AOT编译器,java 9提供的直接将所有代码编译成机器码执行.

jerry银银

首先,个人觉得这个题目非常抽象和笼统,本身没有标准答案.但是答案有好坏我的理解:

宏观层面:

java面试题(杨晓峰)---第一讲谈谈你对java平台的理解的更多相关文章

  1. java面试题(杨晓峰)---第二讲Exception和Error有什么区别?

    本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何 ...

  2. java面试题(杨晓峰)---第三讲谈谈final、finally、finalize有什么不同?

    java语言有很多看起来相似,但用途却完全不相同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点. 今天我要问你一个基础的java经典题目,谈谈final.finally.finali ...

  3. java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功

    java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度, ...

  4. java面试题(杨晓峰)---第七讲谈谈int和integer有什么区别?

    理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针 ...

  5. java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?

    我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...

  6. java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?

    Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...

  7. java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?

    在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助. 今天问题:强引用.软引用.弱引用.幻想引 ...

  8. java面试题(杨晓峰)---第五讲String、StringBuffer、StringBuilder有什么区别?

    线程 字符 操作频繁度 1 String (1)String的创建机制 由于String在java世界中使用过于频繁,java为了避免在一个系统中产生大量重复的String对象,引入了字符串常量池,其 ...

  9. Java面试题全集(上-中-下)及Java面试题集(1-50/51-70)

    阅读量超百万级的文章,收藏并分享一下.感谢原创作者的总结 对初中级java开发人员有特别大的帮助,不论是技术点面试还是知识点总结上. Java面试题全集(上):     https://blog.cs ...

随机推荐

  1. java面试一定会遇到的56个面试题

    1.问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 2.问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传 ...

  2. android edittext 限制小数点后最多只能输入两位数字

    android:inputType="numberDecimal" private InputFilter lengthFilter = new InputFilter() { @ ...

  3. 分类---Logistic Regression

    一 概述 Logistic Regression的三个步骤 现在对为什么不使用均方误差进行分析(步骤二的) 由上图可以看出,当距离目标很远时,均方误差移动速率也很慢,不容易得到好的结果. Discri ...

  4. 2014-10-28 NOIP模拟赛

    Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...

  5. 洛谷P1587 [NOI2016]循环之美

    传送门 不会,先坑着 https://kelin.blog.luogu.org/solution-p1587 //minamoto #include<cstdio> #include< ...

  6. 前端js模糊搜索(模糊查询)

    1.html结构: <label for="searchShop" class="clear pos-a" style="top:17px;&q ...

  7. iOS风格的弹出框(alert,prompt,confirm)

    前两天,自己写了一个简单的插件,在移动端使用,不管是安卓手机还是iOS系统的手机,弹出框统一使用iOS风格的. 该弹出框是依赖于jQuery的,当然也可以将用jq写的几句代码转换为原生代码. 今天把代 ...

  8. python2与python3 版本区别

    目录 编码 输入输出 中文 除法 长整形 内置函数map xrange init reduce 字符串类型 dict字典 经典类 新式类 未完待补充 编码 python2默认编码器为ascii码(只支 ...

  9. MFS安装

    mfs github地址:https://github.com/moosefs/moosefs 一. 准备 1. 名字解释 Mfsmaster 元数据 Metalogger 元数据备份,用于恢复数据( ...

  10. JSON解析器之jackson json数据和java对象转换