Java 基础高频面试题(2021年最新版)

微信搜索【】,关注这个坚持分享技术干货的程序员。

我的最新文章:百万级QPS,支撑淘宝双11商品浏览需要哪些技术

前言

网上的 Java 基础面试题文章有非常多,但是大部分都比较老了。

很多题目早已不是当前的热门题目,没有必要在这些题目上花太多时间。

很多答案放现在已经不准确,可能会误导新人。

因此,我花了几天时间整理了一些时下高频的 Java 基础题目,并反复斟酌,给出符合当前版本的解析。

面试系列

我自己前前后后加起来总共应该参加了不下四五十次的面试,拿到过几乎所有一线大厂的 offer:阿里、字节、美团、快手、拼多多等等。

每次面试后我都会将面试的题目进行记录,并整理成自己的题库,最近我将这些题目整理出来,并按大厂的标准给出自己的解析,希望在这金三银四的季节里,能助你一臂之力。

面试文章持续更新中… …

内容

链接地址

面试经验分享

921天,从小厂到入职阿里

两年Java开发工作经验面试总结

4 年 Java 经验,阿里网易拼多多面试总结、心得体会

5 年 Java 经验,字节、美团、快手核心部门面试总结(真题解析)

复习2个月拿下美团offer,我都做了些啥

如何准备好一场大厂面试

简历

如何写一份让 HR 眼前一亮的简历(附模板)

Offer 选择

跳槽,如何选择一家公司

Java 基础

Java 基础高频面试题(2021年最新版)

一道有意思的“初始化”面试题

集合(HashMap)

Java 集合框架高频面试题(2021年最新版)

面试阿里,HashMap 这一篇就够了

并发编程

面试必问的线程池,你懂了吗?

面试必问的CAS,你懂了吗?

全网最硬核的 synchronized 面试题深度解析

MySQL

面试必问的 MySQL,你懂了吗?

MySQL 8.0 MVCC 核心原理解析(核心源码)

Spring

面试必问的 Spring,你懂了吗?

Mybatis

面试题:mybatis 中的 DAO 接口和 XML 文件里的 SQL 是如何建立关系的?

Redis

全网最硬核 Redis 高频面试题解析(2021年最新版)

JVM

面试必问的 JVM 类加载机制,你懂了吗?

面试必问的 JVM 运行时数据区,你懂了吗?

Java虚拟机面试题精选(二)

Java虚拟机面试题精选(一)

分布式

面试必问的分布式锁,你懂了吗?

算法

位图法:判断一个数是否在40亿个整数中?

正文

1、面向对象的三个基本特征?

面向对象的三个基本特征是:封装、继承和多态。

继承:让某个类型的对象获得另一个类型的对象的属性的方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

封装:隐藏部分对象的属性和实现细节,对数据的访问只能通过外公开的接口。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

多态:对于同一个行为,不同的子类对象具有不同的表现形式。多态存在的3个条件:1)继承;2)重写;3)父类引用指向子类对象。

举个简单的例子:英雄联盟里面我们按下 Q 键这个动作:

  • 对于亚索,就是斩钢闪
  • 对于提莫,就是致盲吹箭
  • 对于剑圣,就是阿尔法突袭

同一个事件发生在不同的对象上会产生不同的结果。

我再举一个简单的例子帮助大家理解,这个例子可能不是完全准确,但是我认为是有利于理解的。

public class Animal { // 动物
    public void sleep() {
        System.out.println("躺着睡");
    }
}
class Horse extends Animal { // 马 是一种动物
    public void sleep() {
        System.out.println("站着睡");
    }
}
class Cat extends Animal { // 猫 是一种动物
    private int age;
    public int getAge() {
        return age + 1;
    }
    @Override
    public void sleep() {
        System.out.println("四脚朝天的睡");
    }
}

在这个例子中:

House 和 Cat 都是 Animal,所以他们都继承了 Animal,同时也从 Animal 继承了 sleep 这个行为。

但是针对 sleep 这个行为,House 和 Cat 进行了重写,有了不同的表现形式(实现),这个我们称为多态。

在 Cat 里,将 age 属性定义为 private,外界无法直接访问,要获取 Cat 的 age 信息只能通过 getAge 方法,从而对外隐藏了 age 属性,这个就叫做封装。当然,这边 age 只是个例子,实际使用中可能是一个复杂很多的对象。

2、访问修饰符public,private,protected,以及不写时的区别?

3、下面两个代码块能正常编译和执行吗?

// 代码块1
short s1 = 1; s1 = s1 + 1;
// 代码块2
short s1 = 1; s1 += 1;

代码块1编译报错,错误原因是:不兼容的类型: 从int转换到short可能会有损失”。

代码块2正常编译和执行。

我们将代码块2进行编译,字节码如下:

public class com.joonwhee.open.demo.Convert {
  public com.joonwhee.open.demo.Convert();
    Code:
       0: aload_0
       1: invokespecial #1 // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_1 // 将int类型值1入(操作数)栈
       1: istore_1 // 将栈顶int类型值保存到局部变量1中
       2: iload_1 // 从局部变量1中装载int类型值入栈
       3: iconst_1 // 将int类型值1入栈
       4: iadd // 将栈顶两int类型数相加,结果入栈
       5: i2s // 将栈顶int类型值截断成short类型值,后带符号扩展成int类型值入栈。
       6: istore_1 // 将栈顶int类型值保存到局部变量1中
       7: return
}

可以看到字节码中包含了 i2s 指令,该指令用于将 int 转成 short。i2s 是 int to short

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值