刷完牛客网910道Java题目,快速总结上万字,带你扫清Java基础面试障碍

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 4、ASCII码表

  • 5、 权限修饰符

  • 6、位运算符

  • 7、静态变量和成员变量的区别

  • 8、Java创建对象的方式有几种?

  • 9、值传递和引用传递

  • 10、String和StringBuffer、StringBuilder的区别?

  • 11、重载和重写的区别?

  • 12、集合框架中的泛型有什么优点?

  • 13、final, finally, finalize的区别?

  • 14、Exception和Error的区别?

  • 15、throw 和throws 的区别?

  • 16、什么是Java反射机制?

  • 17、获取Class 对象的方法?

  • 18、什么是Java复制?

  • 19、什么是Java序列化?

  • 20、为啥要实现Serializable接口?

  • 21、Transient 关键字有什么作用?

  • 22、截止JDK1.8版本,java并发框架支持锁包括?

  • 23、JDK提供的用于并发编程的同步器有哪些?

  • 24、HttpServlet容器响应Web客户请求流程

  • 25、内部类的访问特点

  • 26、数组和集合的区别

  • 27、synchronized关键字和volatile关键字比较?

  • 28、以下哪种方式实现的单例是线程安全的

  • 29、集合结构

  • 30、服务端和客户端的Socker交互

  • 31、常用的排序

  • 32、如何判断哪些内存需要回收?

  • 33、简述 java 垃圾回收机制?

  • 34、说一下常见的垃圾回收算法?

  • 35、Minor GC 与 Full GC 分别在什么时候发生?

  • 36、classload类加载过程?

  • 37、类加载器有几种?

  • 38、说一下双亲委派?

  • 39、JAVA 中的引用类型?

  • 40、HashMap底层原理?

  • 41、如何解决HashMap碰撞问题?

1、Java关键字

在这里插入图片描述

分组一下:

关键字一律用小写字母标识,按其用途划分为如下几组。

(1)用于数据类型。

用于数据类型的关键字有 boolean、byte、char、 double、 float、int、long、new、short、void、instanceof。

(2)用于语句。

用于语句的关键字有break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。

(3)用于修饰

用于修饰的关键字有 abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile。

(4)用于方法、类、接口、包和异常。

用于方法、类、接口、包和异常的关键字有 class、 extends、 implements、interface、 package、import、throws。

还有些关键字,如 future、 generic、 operator、 outer、rest、var等都是Java保留的没有意义的关键字。

另外,Java还有3个保留字:goto、const、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。

2、向上或向下转型

Base base = new Son();

base.method();

base.methodB();

记住口诀:编译看左边,运行看右边。

意思是说编译时候,看左边有没有该方法,运行的时候结果看 new 的对象是谁,就调用的谁。

3、类初始化顺序

class A {

public A() {

System.out.println(“class A”);

}

{

System.out.println(“I’m A class”);

}

static {

System.out.println(“class A static”);

}

}

class B extends A {

public B() {

System.out.println(“class B”);

}

{

System.out.println(“I’m B class”);

}

static {

System.out.println(“class B static”);

}

public static void main(String arg[]) {

new B();

}

}

输出顺序:

class A static

class B static

I’m A class

class A

I’m B class

class B

顺序应该是:父类静态域——>子类静态域——>父类成员初始化——>父类构造块——>父类构造方法——>子类成员初始化——>子类构造块——>子类构造方法;

4、ASCII码表

在这里插入图片描述

5、 权限修饰符

在这里插入图片描述

6、位运算符

  • &逻辑与:有false则false。

  • |逻辑或:有true则true。

  • ^逻辑异或:相同为false,不同为true。

  • !逻辑非:非false则true,非true则false。

7、静态变量和成员变量的区别

  • A:所属不同

  • 静态变量属于类,所以也称为为类变量

  • 成员变量属于对象,所以也称为实例变量(对象变量)

  • B:内存中位置不同

  • 静态变量存储于方法区的静态区

  • 成员变量存储于堆内存

  • C:内存出现时间不同

  • 静态变量随着类的加载而加载,随着类的消失而消失

  • 成员变量随着对象的创建而存在,随着对象的消失而消失

  • D:调用不同

  • 静态变量可以通过类名调用,也可以通过对象调用

  • 成员变量只能通过对象名调用

8、Java创建对象的方式有几种?

(1)使用 new 关键字(最常用)

ObjectName obj = new ObjectName();

(2)使用反射的Class类的newInstance()方法

ObjectName obj = ObjectName.class.newInstance();

(3)使用反射的Constructor类的newInstance()方法

ObjectName obj = ObjectName.class.getConstructor.newInstance();

(4)使用对象克隆clone()方法

ObjectName obj = obj.clone();

(5)使用反序列化(ObjectInputStream)的readObject()方法

try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {

ObjectName obj = ois.readObject();

}

9、值传递和引用传递

答:值传递不可以改变原变量的内容和地址;

引用传递不可以改变原变量的地址,但可以改变原变量的内容;

10、String和StringBuffer、StringBuilder的区别?

答:String类是不可变类(final修饰),即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。StringBuffer是线程安全的,StringBuilder线程不安全,但效率高。

实际使用:

如果要操作少量的数据用:String

单线程操作字符串缓冲区下操作大量数据:StringBuilder

多线程操作字符串缓冲区下操作大量数据:StringBuffer

11、重载和重写的区别?

答:重载(Overload):在同一个类中,如果多个方法,名字相同、参数不同,即称为重载。在编译器眼里,方法名称+参数类型+参数个数,组成一个唯一键,称为方法签名,JVM通过这个唯一键决定调用哪个重载的方法。

重写(Override):方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的名字、参数、返回类型

口诀看这里:

方法重写的记忆口诀“ 一大两小两同”

  • 一大:子类的方法访问权限控制符只能相同或变大。

  • 两小:抛出异常和返回值只能变小, 能够转型成父类对象。子类的返回值、抛出异常类型必须与父类的返回值、抛出异常类型存在继承关系。

  • 两同:方法名和参数必须完全相同。

12、集合框架中的泛型有什么优点?

答:泛型提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型。泛型限制了集合容纳的对象类型,如果添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现 ClassCastException。泛型也使得代码整洁,我们不需要使用显式转换和 instanceOf 操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。

13、final, finally, finalize的区别?

答:final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

14、Exception和Error的区别?

答:Exception 和 Error 都是继承了 Throwable类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。

在这里插入图片描述

Exception:程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

Error:是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是 Error 的子类。

Exception 又分为可检查(checked)异常和不检查(unchecked)异常。

● 可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。

● 不检查异常就是所谓的运行时异常,类似NullPointerException、ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

15、throw 和throws 的区别?

答:位置不同:throws 用在函数上,后面跟的是异常类,可以跟多个;而throw 用在函数内,后面跟的是异常对象。

功能不同:

(1)throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;throw 抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并

将具体的问题对象抛给调用者。也就是说throw 语句独立存在时,下面不要定义其他语

句,因为执行不到。

(2) throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行throw 则一定抛出了某种异常对象。

(3)两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

16、什么是Java反射机制?

答:Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java 语言的反射机制。

它的功能:

(1)在运行时判定任意一个对象所属的类;

(2)在运行时构造任意一个类的对象;

(3)在运行时判定任意一个类所具有的成员变量和方法;

(4)在运行时调用任意一个对象的方法;

(5)生成动态代理;

17、获取Class 对象的方法?

答:(1)调用某个对象的getClass()方法;

Person p=new Person();

Class clazz=p.getClass();

(2)调用某个类的class 属性来获取该类对应的Class 对象;

Class clazz=Person.class;

(3)使用Class 类中的forName()静态方法(最安全/性能最好);

Class clazz=Class.forName(“类的全路径”);

18、什么是Java复制?

答:将一个对象的引用复制给另外一个对象,一共有三种方式。

第一种方式是直接赋值,第二种方式是浅拷贝,第三种是深拷贝。

(1)直接赋值

A a1 = a2,实际上复制的是引用,也就是说a1 和a2 指向的是同一个对象。因此,当a1 变化的时候,a2 里面的成员变量也会跟着变化。

(2)浅复制(复制引用但不复制引用的对象)

创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象。

(3)深复制(复制对象和其应用对象)

深拷贝不仅复制对象本身,而且复制对象包含的引用指向的所有对象。

19、什么是Java序列化?

答:序列化:将java对象转换为字节序列的过程称为对象的序列化;

在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的“状态”,即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。

为什么要序列化?

(1)持久化(2)网络传输

20、为啥要实现Serializable接口?

答:这个接口其实是个空接口,那么实现它有什么用呢?其实,当我们让实体类实现Serializable接口时,其实是在告诉JVM此类可被序列化,可被默认的序列化机制序列化。

21、Transient 关键字有什么作用?

答:简而言之,被transient修饰的变量不参与序列化和反序列化。

22、截止JDK1.8版本,java并发框架支持锁包括?

● 自旋锁:自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁

● 阻塞锁:被阻塞的线程,不会争夺锁。

● 可重入锁:多次进入改锁的域

● 读写锁

● 互斥锁:锁本身就是互斥的

● 悲观锁:不相信,这里会是安全的,必须全部上锁

● 乐观锁:相信,这里是安全的。

● 公平锁:有优先级的锁

● 非公平锁:无优先级的锁

● 偏向锁:无竞争不锁,有竞争挂起,转为轻量锁

● 对象锁:锁住对象

● 线程锁

● 锁粗化:多锁变成一个,自己处理

● 轻量级锁:CAS 实现

● 锁消除:偏向锁就是锁消除的一种

● 锁膨胀:jvm实现,锁粗化

● 信号量:使用阻塞锁 实现的一种策略

● 排它锁:X锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

一线互联网大厂Java核心面试题库

image

正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等已整理上传,感兴趣的朋友可以看看支持一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

● 锁粗化:多锁变成一个,自己处理

● 轻量级锁:CAS 实现

● 锁消除:偏向锁就是锁消除的一种

● 锁膨胀:jvm实现,锁粗化

● 信号量:使用阻塞锁 实现的一种策略

● 排它锁:X锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

一线互联网大厂Java核心面试题库

[外链图片转存中…(img-mXKLuKCC-1715504805456)]

正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等已整理上传,感兴趣的朋友可以看看支持一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值