点击蓝字 关注我们
前段时间,我看到一个问题:
为什么面试你要 15K,HR 却只给你 10K?
我与很多程序员朋友探讨过这个问题,也有部分朋友说自己曾经也遇到过这件事。
那为什么面试时,你提出的薪资要求,公司总要砍价呢?说到这里,我觉得你必须了解这 3 点:
成本
成本这件事很简单,就好比我们购物,都会精挑细选,并去还价,这就是控制成本。
HR 所处的角色就是帮助企业控制人力成本,用最少的钱找到最合适的人,所以被压价是正常操作。
稳定性
如果你期望的薪资超过了现有人员的薪资水平,那对企业整体的稳定性是不利的,这时候 HR 就会根据企业薪资现状来进行压价。
所以,在面试某家公司时,最好提前了解一下这个公司的薪资结构和整体水平,以免被压价带来自身的负面情绪。
适配性
想要拿高薪,首先对企业 JD 有很高的适配性,在某个领域非常有经验;其次专业技术要过硬。
哪怕这时 HR 想要压价,你也可以理直气壮地要求给你期望的薪资。
说到适配性,我就不由想给大家分享我整理的《Java 常见面试 80 问》,或许对大家有帮助!
01
Java 核心基础篇
问
讲讲 Java 语言的三大特性。
Java 语言的最重要三大特征是:封装、继承、多态。
其中封装指的是把一个对象属性私有化,同时提供一些可以给外界访问该属性的方法。比如写一个类时会用 private 修饰属性,用 public 修饰的 set 和 get 方法,提供外界访问和修改属性的方法。
继承是指使用已经存在的类作为基础,建立新的类。子类拥有父类的所有属性和方法,但是父类中的私有属性和方法子类无法访问。子类可以拥有自己的属性和方法。
多态是指同一个行为具有多个不同表现形式或形态的能力,Java 中有两种多态的实现形式:继承和接口。
比如 List list=new ArrayList() 这种写法就是多态的一种实现,从代码上来看,就是父类的对象变量调用了子类或者调用了接口实现类。
问
String、StringBuilder、StringBuffer 的区别?
String 类中使用 final 关键字修饰字符数组来保存字符串(Java9 以前),因为使用了 final 修饰符,因此 String 是不可变的。
每次改变 String 类型的值时,会生成一个新的 String 对象,然后将指针指向新的 String 对象。
StringBuilder 和 StringBuffer 都 是 继 承 AbstractStringBuilder 类 , 在 AbstractStringBuilder 中也是使用字符数组保存字符串,但是没有用 final 关键 字修饰,所以这两种对象都是可变的。
StringBuffer 对字符串的一些操作方法加上了同步锁,因此是线程安全的。StringBuilder 没有对方法加锁,因此是线程不安全的。
问
this 和 super 在 Java 中的含义?
this 关键字表示当前对象,在一个对象内部,可以通过 this.xxx 去访问该对象的属性或者方法。super 关键字可以理解为指向自己父类对象的指针,可以从子类访问父类的属性和方法。
02
Java 集合篇
问
List、Set、Map 之间的区别是什么?
List 和 Set 都继承于 Collection 接口,List 中的元素有序且可重复,Set 中的元素无序不可重复。Map 保存的是 Key-Value 形式的键值对。
问
ArrayList 和 LinkedList 的区别?
ArrayList 底层结构是可变数组,LinkedList 底层结构是双向链表。因此在效率上,ArrayList 增删慢,改查快;LinkedList 增删快,改查慢。
在扩容情况上,ArrayList 采用的是 1.5 倍扩容的方式,LinkedList 由于采用双层链表的底层结构,因此无需扩容。
问
Vector 和 ArrayList 的区别?
Vector 和 ArrayList 很像,底层也是一个数组,和 ArrayList 不同的是, Vector 是线程安全的,它使用了 synchronized 关键词。在扩容倍数上,ArrayList 是 1.5 倍,而 Vector 是 2 倍。
问
ArrayList 的扩容机制是怎样的?
当初始化时,ArrayList 中会初始化一个 Object 数组,容量为 0;当要添加数据时,初始容量变为 10;当第 11 个元素要进来时,容量扩容为 15;当第 16 个元素要进来时,容量扩容为 22。
当每次要扩容时,都会扩容成原来容量的 1.5 倍。
03
Java 虚拟机
问
方法区、永久代、元空间的区别?
方法区是 JVM 规范中的一个概念,在不同的 Java 虚拟机以及不同版本的 Java 虚拟机中,方法区都有各自的实现。
以最流行的 HotSpot 虚拟机为例,在 JDK1.8 之前,方法区的实现叫做永久代,放在 JVM 内存之中。
到了 JDK1.8,方法区的实现变成了元空间,放在直接内存中。
问
简单聊聊 JVM 内存分配。
为了更加高效的回收垃圾,JVM 将堆内存划分为了多个 generation(代)。
新生代和老年代是垃圾回收最主要的区域,新生代又被划分为 Eden 空间, From Survivor 空间和 To Survivor 空间。
如此划分的目的是为了更好地进行内存回收。
新生代和老年代都在堆内存中,新生代和老年代所占的默认比例为 1:2, 其中一个新生代又由一个 Eden 区+两个 survivor 区组成,默认比例为 8:1:1。
如果你想获取《Java 常见面试 80 问》,欢迎通过文末方式免费领取哦~限量 100 份哦~
▼扫码免费领取▼