面试官:说一说你的第一个Java程序是怎么跑起来的
面试官:“说一说你第一个Java程序是怎么跑起来的?”
我:“啊,您是说Hello World吗?”
面试官:“嗯,没错,几十年过去了,还是hello world......”
我:“好滴!且听俺给您唠一唠”
话不多说,直接上一段代码:
/**
* class 关键字:用于在 Java 中声明一个类
*/
public class StaffApplicationTests {
/**
* public 关键字:一个表示可见性的访问修饰符
* static 关键字:我们可以用它来声明任何一个方法,被 static 修饰后的方法称之为静态方法。
* void 关键字:表示该方法无返回值。
* main 关键字:表示该方法为主方法,也就是程序运行的入口。main() 方法由 Java 虚拟机执行,配合上 static 关键字后,可以不用创建对象就可以调用。
* String [] args:main() 方法的参数,类型为 String 数组,参数名为 args。
* @param args
*/
public static void main(String[] args) {
//System.out.println():一个 Java 语句,一般情况下是将传递的参数打印到控制台。
System.out.println("welcome to java world");
}
}
这就是Java中最简单,也是大部分同学在刚接触Java时看到的第一个程序代码,运行结果就是在编译器(IDEA)的控制台打印出“welcome to java world”:

那么开头面试官的问题,回答到这里就算完了吗?当然不是!很明显面试官想要不止如此。
整个java程序,从编写的java文件到展出的结果,可以画一个流程图,根据流程图向面试官展开回答

第一步:通过javac命令调用java编译器,将上述的代码编译成.class字节码文件(命令:javac HelloWorld.java);
第二步:通过java命令调用jvm解释器,将第一步生成的字节码文件解释成机器可以识别的机器码(命令:java HelloWorld),而字节码文件是面向JVM的,而不是面向操作系统的,故我们只要选则对应系统(windows、MacOS、Linux)的Java虚拟机,就可以实现跨平台运行Java代码;

第三步:机器识别机器码,响应结果。
讲到这里面试官可能会紧跟着追问:“每次都需要解释器将字节码解释成机器码,如果代码复杂性很高,岂不是效率很低?”
这时候你就可以淡淡的回一句:“我知道你很急,但请你先别急,俺还没讲完呢,嘿嘿”,虽然好贱,但面试官肯定被你逗笑啦!
作为编程语言的常青树,Java自然不会如此低效,为了解决单方面的解释过慢问题,Java引入了 JIT(Just in Time Compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。如现在常用的HotSpot就采用了解释执行和JIT即时编译相结合的方式,根据二八定律分配资源,也就是说代码执行的次数越多,速度越快。
嗑唠到这里,就又延伸出了一个考点:“Java是编译型还是解释型语言?”
其实从上面的内容我们已经可以推测答案了,但这里还是想多说几句,编程语言之所以分编译型和解释型是因为计算机并不能直接识别我们所写的任何一种语言的代码(Java,c,c++,python,php,Rust,Go等等),在计算机的世界里只有0和1,那么为了让计算机可以理解我们的代码,就需要翻译,翻译的两种方式:编译与解释。
编译型: 通过编译器将源代码一次性编译成机器码,执行速度很快,但开发效率低,常见的编译性语言有 C、C++、Go、Rust 等等。
解释型: 通过解释器将代码逐句解释为机器码后再运行,开发效率高,执行速度慢,常见的解释性语言有 Python、JavaScript、PHP 等等。
Java 是一种兼具编译和解释特性的语言,.java 文件会被编译成与平台无关的 .class 文件,但是 .class 字节码文件无法被计算机直接执行,仍然需要 JVM 进行翻译成机器语言。所以严格意义上来说,Java 是一种解释型语言。
面试官:说一说你的第一个Java程序是怎么跑起来的的更多相关文章
- 这道面试必问的JVM面试题70%的Java程序员会做错
前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友了 ...
- 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...
- 面试官:小伙子,给我说一下Java 数组吧
Java 数组 Java 语言中提供的数组是用来存储固定大小的同类型元素. 1.声明数组变量 首先必须声明数组变量,才能在程序中使用数组. dataType[] arrayRefVar; // 首选的 ...
- 《JAVA 程序员面试宝典(第四版)》之JAVA程序设计基础概念(1)类型转换
问题主题:类型转换 书页号码:37页 题目: 讨论点:答案不是D,应该是B 理由:看下面在编译器输入的结果 知识扩展:装箱与拆箱, == 与 equals 区别 之前也老是听说什么装箱.拆箱之 ...
- 面试官问,说一个你在工作非常有价值的bug
如果你去参考面试,做足了准备,面对面试官员从容不迫,吐沫横飞的大谈自己的工作经历.突然,面试官横插一句:说一个你在工作非常有价值的bug.顿时,整个空气都仿佛都凝固了!“What?”... 我想没几个 ...
- 谷歌PM面试官告诉你,如何成功拿到理想offer
快来看看大咖Nick如何甄选人才~文章转自墨刀公众号. 本文作者: Nick Baum,目前在谷歌做PM 作为谷歌的产品经理和面试官,我已经面过几百个PM的候选人了吧.这些经历能让我分享一下在PM求职 ...
- 引用面试官文章 :如何准备Java初级和高级的技术面试
本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...
- 我以为我对Mysql索引很了解,直到我遇到了阿里的面试官
GitHub 4.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 4.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 4.8k Star 的 ...
- 阿里面试官:HashMap 熟悉吧?好的,那就来聊聊 Redis 字典吧!
最近,小黑哥的一个朋友出去面试,回来跟小黑哥抱怨,面试官不按套路出牌,直接打乱了他的节奏. 事情是这样的,前面面试问了几个 Java 的相关问题,我朋友回答还不错,接下来面试官就问了一句:看来 Jav ...
- 面试一个百度T7程序员,一道简单的题没答上来!网友却都在吐槽面试官!
程序员面试时都考些什么? 一个面试官得意洋洋地说自己面了一个百度T7,出了一道coding题,结果对方连最长上升子序列都写不出来. 楼主本想嘲弄一下百度T7的代码水平低,没想到网友们炸开了锅,纷纷 ...
随机推荐
- AcWing - 闫氏DP分析法
核心思想:从集合角度来分析DP问题 在我们遇到的DP问题中,一般都是求在一个有限集内的最值,但是这些方案数量一般都是指数级别的,想要一个一个查找出来不太可能.所以DP方法是用来优化这种寻找最优方案的过 ...
- Linux第二次周总结
第三章 用户管理 3.1 用户/组概览 Linux系统是多用户.多任务的分时操作系统,系统上每一个进程都有一个特定的文件,每个文件都被一个特定的用户所拥有.每个用户都属于一个用户组或者多个组,系统可以 ...
- .NET高性能开发-位图索引(一)
首先来假设这样一个业务场景,大家对于飞机票应该不陌生,大家在购买机票时,首先是选择您期望的起抵城市和时间,然后选择舱等(公务舱.经济舱),点击查询以后就会出现航班列表,随意的点击一个航班,可以发现有非 ...
- 13. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法
用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法 项目 ++wmproxy++ gite: https://gitee.com/ ...
- 虹科干货 | 虹科Redis企业版数据库的延迟如此之小,proxy功不可没!
在Redis企业版集群的后台发生了许多事件,proxy(代理)隐藏了数据库客户端的所有活动. 大多数开发人员在构建应用程序时都会从小规模开始,使用简单的Redis开源(Redis OSS)数据库.在初 ...
- Java线程安全详解
并发与多线程 blog:https://devonmusa.github.io 1 常见概念 1.1 操作系统线程运行状态 NEW RUNNABLE RUNNING BLOCKED 1.2 Java虚 ...
- CF1523D Love-Hate 题解
抽象化题意: 一共有 \(m\) 个元素,给定 \(n\) 个集合,每个集合的元素不超过 \(15\) 个,求出一个元素个数最多的集合 \(S\) 是至少 \(\lceil \dfrac{n}{2} ...
- Odoo—货运管理—odoo时差问题
第一次踩odoo时差的坑,才知道原来odoo在存储日期数据时,是以UTC0时区存放的,和北京时间相差8个小时.只是odoo本身能很好的处理日期数据的存储和展示,所以刚开始接触odoo,不容易发现这个问 ...
- MySQL数据库的四大语言
DDL数据定义语言 DDL(Data Definition Languages) : 数据定义语言,用来定义数据库的对象(数据库,表,字段)建改库建改表 DDL代码演示 DML数据操作语言 DML(D ...
- Electron-React18-MacOS桌面管理系统|electron27+react仿mac桌面
基于React18+Electron27+ArcoDesign仿macOS桌面端系统框架ElectronMacOS. electron-react-macOs 基于electron27.x+vite4 ...