java面试题(杨晓峰)---第一讲谈谈你对java平台的理解
本人总结:
面向对象(封装,继承,多态)
平台无关性(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平台的理解的更多相关文章
- java面试题(杨晓峰)---第二讲Exception和Error有什么区别?
本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何 ...
- java面试题(杨晓峰)---第三讲谈谈final、finally、finalize有什么不同?
java语言有很多看起来相似,但用途却完全不相同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点. 今天我要问你一个基础的java经典题目,谈谈final.finally.finali ...
- java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功
java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度, ...
- java面试题(杨晓峰)---第七讲谈谈int和integer有什么区别?
理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针 ...
- java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?
我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...
- java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?
Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...
- java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?
在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助. 今天问题:强引用.软引用.弱引用.幻想引 ...
- java面试题(杨晓峰)---第五讲String、StringBuffer、StringBuilder有什么区别?
线程 字符 操作频繁度 1 String (1)String的创建机制 由于String在java世界中使用过于频繁,java为了避免在一个系统中产生大量重复的String对象,引入了字符串常量池,其 ...
- Java面试题全集(上-中-下)及Java面试题集(1-50/51-70)
阅读量超百万级的文章,收藏并分享一下.感谢原创作者的总结 对初中级java开发人员有特别大的帮助,不论是技术点面试还是知识点总结上. Java面试题全集(上): https://blog.cs ...
随机推荐
- mvvm 模板中事件没有执行的解决方案
今天在wpf设计的过程中,用到了listview,数据绑定在模板中进行,其中有个按钮的click事件,一直不执行,很奇怪,找了很久才找到解决办法,原因还是暂时不清除: <ListView x:N ...
- windows7无法启动Telnet服务,出现…
windows7无法启动Telnet服务,出现错误1068 2012 年 03 月 16 日 在[控制面板--程序--打开或关闭Windows功能]中开启telnet服务器和客户端后,在运行窗口中输入 ...
- MySQL 之 导出导入数据
导出数据库(sql脚本) mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u root -p --databases db_name > test ...
- 文件解析库doctotext安装和使用
安装doctotext 1 安装GCC到4.6以上 tar jxf gcc-4.7.0.tar.bz2 cd gcc-4.7.0 编译 ./contrib/download_prerequisites ...
- 如何解决WAMP Server 与IIS端口冲突问题
PHP也是一门开发网页的语言,WAMP Server 是它的一个较好的集成开发环境,今日,小编发现好多Wamp Server 安装后启动local host 出现的却是IIS页面!为什么会这样呢? 出 ...
- ECMA 上传文件到SHarePoint 文档库
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/ ...
- GridView ,后台修改 跟新完毕,前端 未跟新处理
//Response.Redirect(Request.Url.ToString());//重新定位 GridView_dept.DataBind(); //重新绑定都可以
- MVC4 razor与aspx的区别以及用法
Model要重,Controller要轻,View要够笨,mvc不希望在开发view时还需要判断过多的与view无关的技术,所以要尽可能的保持view逻辑简单.(以下中有出现代码的地方用了什么尖括号百 ...
- 【转】mysql中set autocommit=0与start transaction的关系
在mysql中用户的任何一个更新操作(写操作)都被视为一个事务,set autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit& ...
- thinkPHP5 tablib标签库自定义方法
具体可以参照thinkphp\library\think\template\taglib\Cx.php这里面的写法我在common模块下新建了一个文件夹taglib,新建了一个Test.php文件 n ...