毕竟很多的面试都并不会让你直接的去讲述一个完整的项目的完成过程,而是对于在项目开发中经常会被程序员们忽略反而又比较重要的一些问题,甚至有时候还会拿一个看似很简单的问题来让我们交智商税。但是很多时候呢,又恰恰是那些不太起眼的面试题,却让我们与心爱的offer失之交臂。
所以考虑了很久之后,还是想在这里出一个关于Java面试的专栏,来帮助大家解决和应对在面试中可能会遇到的那些坑,同时也是在对我自己在Java学习之路进行一个记录和总结,之前我也和大家分享了几个互联网面试常见的应对技巧,感兴趣的小伙伴可以看我的这篇文章“互联网面试六大常见问题及应对技巧,2021不再入坑!”
在进行完整的学习之前,我先来和大家分享开胃小菜,Java面试中常见的几个小问题:
1、JDK、JRE、JVM是什么?
=====================
**JDK:**开发者提供的开发工具箱,是给程序开发者用的,它包括完整的jre、Java运行环境,还包括了其他供开发者使用的工具包。
**JRE:**运行时所必须的包依赖的环境都在jre中
**JVM:**当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理、垃圾回收和安全机制等,他独立于硬件和操作系统,正是java程序可以一次编写多处执行的原因。
2、什么是面向对象
=============
封装:封装把一个对象的属性私有化、同时提供一些可以被外界访问的属性的方法。
继承:
-
java是多单继承的,
-
子类拥有父类非private的属性和方法
-
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
-
子类可以用自己的方式实现父类的方法
多态:父类的引用指向子类
3、Java的数据类型有哪些?
===================
很多人都会在这个看似简单的问题中入坑,一说到数据类型,很多人第一时间想到的就是int、char等类型,但是我们仔细看题就会发现,题中所问的问题是数据类型,而不是基本数据类型。
数据类型有两种,分别是“基本数据类型”和“引用数据类型”
基本数据类型包括的内容如下表:
byte | short | int | long | double | float | char | boolean | |
字节大小 | 1 | 2 | 4 | 8 | 8 | 4 | 2 | 1 |
占位大小 | 8 | 16 | 32 | 64 | 64 | 32 | 16 | 8 |
而引用数据类型包括的是三种:类、接口、数组
那么在Java中为什么会有“基本数据类型”和“引用数据类型”?
原因是因为引用类型在堆里,基本类型在栈里,
栈空间小且连续,往往会被放在缓存。引用类型的高速缓存率高且要多一次解引用。
而且对象还要再多储存一个对象头,对基本数据类型来说空间浪费率太高。
4、解释一下构造方法
==============
构造方法有哪些规定?
-
构造方法名必须与类名一致
-
构造方法不举办任何返回值类型、关键字void也不能加入
-
任何类都有构造方法,如果没有显示的定义,则系统会为该类定义一个默认的无参构造器
-
如果显示的定义了构造器,系统就不会创建默认的不含参数的构造器了,
-
一个类中可以编写多个构造方法,构造方法之间构成重载关系。
5、如何理解方法的重载和重写?
===================
对于方法的重载和重写,这是两个非常容易混淆的概念,所以在这里做了一个表格的对比:
重载 | 重写 |
|
|
以上是几个在Java面试中常见的概念型面试题,接下来再和大家分享几个对比类的面试题
6、解释this和super关键字
=====================
在this和super关键字使用过程中有以下这些注意事项:
-
Super关键字用于从子类访问父类的变量和构造方法,也包含构造方法
-
Super调用父类中的其他构造方法时,调用时要放在构造方法的首行
-
this关键字用于引用类的当前实例,this可以调用当前类的构造方法
-
this调用本类中的其他构造方法时,也要放在首行
-
this和super都不能用在static方法中
7、解释字符串三剑客(String、StringBuilder、StringBuffer)
=================================================
可变性 | 线程安全 | 性能 | |
String | 由final修饰,不可变 | 安全的 | 进行改变时,重新指向 |
StringBuilder | char[] value 可变 | 不安全 | 比StringBuffer有10%-15%的提升 |
StringBuffer | char[] value 可变 | 加锁、安全的 |
8、equals和 == 的区别
====================
这个问题也是我们在开发时常用的两个进行比较的方法,但是这两种方法你真的了解吗?
==:判断两个基本数据类型的值是不是相等,或两个引用类型对象的地址是不是相等
equals():判断是否用一个对象,更加灵活
接下来我们来看一个经典的面试题实例:
public static void main(String[] args) {
Integer x = new Integer(500);
Integer y = new Integer(500);
System.out.println(x == y);
Integer i = 128;
Integer j = 128;
System.out.println(i == j);
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
}
上面这个实例的运行结果如下:
第一个是false,原因是因为:x和y是两个新的对象,所以这两个对象的地址是不同的
**而对于第二个和第三个,为什么第一个是false,而第二个是true呢?**原因是因为integer在常量池中的存储范围是[-128、127],127在这个范围之内,因此直接存储于常量池中,128不在这范围之内,所以会在堆中创建一个新的对象
9、解释接口和抽象类
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后总结
ActiveMQ+Kafka+RabbitMQ学习笔记PDF
关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
sjGX-1713527631278)]
关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!