从你接触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领域的工具,如编译器,运行时环境,安全工具,诊断和监控工具.这些基本工具是日常日常工作效率的保证.而对于其他的语言平台,也是触类旁通.
原文地址:https://www.cnblogs.com/lanbofei/p/9031438.html