前两天看到一个话题很有意思。
年薪不同的程序员,在能力上能有多大的区别?
有的程序员年薪 50 万、70 万;有的程序员打工一年,收入堪堪十万。十倍的差距,真的是能力上有本质差别吗?
虽然我们总吐槽说世界是个巨大的草台班子,但薪资也不是靠吹就能决定的。
除了我们常常在营销号上看到的,老板要什么 / 我觉得可以做什么、发现解决问题 vs 预见、预防问题一类的说法。我这次看到一个新的说法,觉得很有意思,年薪 10w 到年薪 70w,是信任度的区别。
优秀的年薪 10w,基本上没有严重的 bug,代码的可靠性较高。
年薪 30w,你来兜底写代码主力,但是大多数就是写点关键代码,或者帮人解决问题。有 bug 你保证修改好,不一定是你写,你保证就行。
年薪 50w,可以最大程度保证 IT 架构的安全。
年薪 70w,不干技术活,需要对 CTO 吹的牛逼负责落地。
其中本质差异就是,上面相信你可以干你就可以干。
大家觉得这个说法有没有道理呢?欢迎来评论区讨论。
....
我也为大家准备好了今天的面试题:
Java 里的对象在虚拟机里面是怎么存储的?
回答重点
Java 对象在虚拟机中的存储由以下几个部分组成:
对象头(Header):包含对象的元信息和运行时数据。主要由以下三部分构成:
- Mark Word:用于存储运行时数据,例如对象的哈希码(HashCode)、GC 标记信息、锁状态标志等。它是一个多功能字段,会根据对象的状态动态变化。
- 类型指针(Class Pointer):指向对象对应的类的元数据,用于确定该对象的类型。
实例数据(Instance Data):存储对象的实际数据,即类的字段(包括从父类继承的字段)。
对齐填充(Padding):为了满足内存对齐要求(一般是 8 字节对齐),JVM 可能会在对象末尾添加填充字节。例如,一个对象大小为 12 字节,JVM 会增加 4 字节填充,使其达到 16 字节对齐。
存储位置
堆(Heap):大多数对象分配在堆中,堆是 JVM 管理的内存中最大的一块区域。堆内部分为以下区域:
- 新生代(Young Generation):刚创建的对象通常存放在 Eden 区,经过一次或多次 GC 后可能晋升到 Survivor 区或老年代。
- 老年代(Old Generation):存放生命周期较长的对象,经过多次 GC 后未被回收的对象会晋升到老年代。
扩展知识
64 位 MarkWord 在不同状态下的内存布局
MarkWord 结构之所以搞得这么复杂,是因为需要节省内存,让同一个内存区域在不同阶段有不同的用处。
这道题目也可以在我们的面试刷题小程序《面试鸭》上阅读:
网页端:mianshiya.com
👇🏻 点击下方阅读原文,获取鱼皮的编程学习路线、原创项目教程、求职面试宝典、编程交流圈子。