本人总结:

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

平台无关性(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. ios之Block研究

    Block的好处,我总结了下主要有2点:1.用于回调特别方便,2.可以延长对象的作用区域.但是,Block的内存管理这个模块一直不是很清楚,这个周末好好的看了下Block的原理,有些许心得. 为了性能 ...

  2. Flutter汇总贴

    Fluuter常遇到的问题 Flutter从入门到进阶实战携程网App_汇总贴 Flutter教程网 http://www.flutterj.com/ 第三季:https://jspang.com/p ...

  3. .net过滤器重写beginrequest

    在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码.判断会话信息,也可以做权限控制,总之这个过滤 ...

  4. int **指针问题

    转自:http://blog.csdn.net/u012501459/article/details/45395571 在打印二维数组时遇到了问题,二维数组可以这样定义int matrix[ROWS] ...

  5. ue4 motage

    Montage是什么 一个(可以自由拼接动画的)动画剪辑,通过slot,在任意时候由玩家主动向动画系统push自己制作的动画剪辑 Montage用途 上图是一个近身攻击动画,含有 3 个片段 [开始. ...

  6. CC07:清除行列

    题目 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零. 给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C ...

  7. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) A

    Petya is a big fan of mathematics, especially its part related to fractions. Recently he learned tha ...

  8. 命令行 IRC 客户端 irssi 的基本操作

    登录与退出 启动 irssi $ irssi 登陆 IRC 服务器/connect server port 修改昵称/nick nickname 直接带昵称登录指定的服务器$ irssi -c [se ...

  9. 转 简单聊聊IT软件项目的风险及应对

    https://www.jianshu.com/p/b347adca87a6 前言 上段时间在一家演讲俱乐部做即兴演讲主持人,聊的就是风险管理,与会的小伙伴分享了不同行业的风险问题,令人受益匪浅,今天 ...

  10. leecode-39. Combination Sum

    1.问题描述: Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all ...