vlambda博客
学习文章列表

【限量100份】Java 面试都只是背答案吗?

点击蓝字 关注我们
【限量100份】Java 面试都只是背答案吗?

前段时间,我看到一个问题:


为什么面试你要 15K,HR 却只给你 10K?


我与很多程序员朋友探讨过这个问题,也有部分朋友说自己曾经也遇到过这件事。


【限量100份】Java 面试都只是背答案吗?


那为什么面试时,你提出的薪资要求,公司总要砍价呢?说到这里,我觉得你必须了解这 3 点:

  • 成本

    成本这件事很简单,就好比我们购物,都会精挑细选,并去还价,这就是控制成本。

    HR 所处的角色就是帮助企业控制人力成本,用最少的钱找到最合适的人,所以被压价是正常操作。

  • 稳定性

    如果你期望的薪资超过了现有人员的薪资水平,那对企业整体的稳定性是不利的,这时候 HR 就会根据企业薪资现状来进行压价。

    所以,在面试某家公司时,最好提前了解一下这个公司的薪资结构和整体水平,以免被压价带来自身的负面情绪。


  • 适配性

    想要拿高薪,首先对企业 JD 有很高的适配性,在某个领域非常有经验;其次专业技术要过硬。

    哪怕这时 HR 想要压价,你也可以理直气壮地要求给你期望的薪资。


【限量100份】Java 面试都只是背答案吗?


说到适配性,我就不由想给大家分享我整理的《Java 常见面试 80 问》,或许对大家有帮助!


【限量100份】Java 面试都只是背答案吗?

【限量100份】Java 面试都只是背答案吗?
01

Java 核心基础篇


讲讲 Java 语言的三大特性。

Java 语言的最重要三大特征是:封装、继承、多态。 


【限量100份】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 份哦~


▼扫码免费领取▼