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 份哦~


▼扫码免费领取▼