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银银

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

宏观层面:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 6,937评论 0 62
  • 每个使用Java的开发者都知道Java字节码是在JRE中运行(JRE: Java 运行时环境)。JVM则是JRE中...
    燕京博士阅读 1,330评论 0 6
  • Vincent_Hou阅读 161评论 0 0
  • 1 2006年。初次见面的王尘与李暖的两人。是非常狗血的。 同学校不同级应该是没有多大交流的。而且还是小学。 ...
    祈9阅读 419评论 1 1