大家好,我是鸭鸭!
如果有这么一份工作,每周工作 80 小时,且需要层层选拔后的高智商人才,但报酬为零,你会报名吗?
马斯克在自家社交平台 X 上就发布了这样一份招人公告。不仅如此,公告还明言,这是一份乏味且容易树敌的工作。
在另一篇帖子中,马斯克回复到:的确,这将是乏味的工作,树敌很多,报酬为零。
要鸭鸭说,马斯克变身“马部长”以后,是越来越会玩了。
根据特朗普先前对马斯克的效率部的介绍,这个部门将“为拆解政府官僚机构铺平道路,削减多余的监管法规和浪费的开支,并重组联邦机构”。马斯克接受记者采访时也曾说,他的目标是将政府支出削减2万亿美元。
这个新部门的压力有点大啊。
不知道会有多少人报名马斯克的这个新部门,鸭鸭都有点期待起来了。
……
漂亮国的瓜吃一段落,今天为大家准备的面试题是:
Java 的类加载过程是怎样的?
回答重点
类加载指的是把类加载到 JVM 中。把二进制流存储到内存中,之后经过一番解析、处理转化成可用的 class 类。
二进制流可以来源于 class 文件,或通过字节码工具生成的字节码或来自于网络。只要符合格式的二进制流,JVM 来者不拒。
类加载流程分为:
- 加载
- 连接
- 初始化
连接还能拆分为:验证、准备、解析三个阶段。
所以总的来看可以分为 5 个阶段:
1)加载
将二进制流读入内存中,生成一个 Class 对象。
2)验证
主要是验证加载进来的二进制流是否符合一定格式,是否规范,是否符合当前 JVM 版本等等之类的验证。
3)准备
为静态变量(类变量)赋初始值,也即为它们在方法区划分内存空间。这里注意是静态变量,并且是初始值,比如 int 的初始值是 0。
4)解析
将常量池的符号引用转化成直接引用。
符号引用可以理解为只是个替代的标签,比如你此时要做一个计划,暂时还没有人选,你设定了个 A 去做这个事。然后等计划真的要落地的时候肯定要找到确定的人选,到时候就是小明去做一件事。解析就是把 A(符号引用) 替换成小明(直接引用)。符号引用就是一个字面量,没有什么实质性的意义,只是一个代表。
直接引用指的是一个真实引用,在内存中可以通过这个引用查找到目标。
5)初始化
这时候就执行一些静态代码块,为静态变量赋值,这里的赋值才是代码里面的赋值,准备阶段只是设置初始值占个坑。
扩展知识
类加载机制一问基本上就会接着问双亲委派和类加载器。
双亲委派模型
类加载器先将类加载请求委派给父类加载器处理,只有父加载器找不到类时,才由当前类加载器加载。
类加载器
类加载器负责加载类,可以是系统自带的(如 Bootstrap、Extension、Application ClassLoader),也可以是用户自定义的类加载器。