2021年Java突击面试题

这是一篇关于Java面试的总结,涵盖了从基础概念到高级特性的大量面试题,包括面向对象的特征、多态、JDK与JRE的区别、==与equals()的区别、垃圾回收机制等多个主题。文章强调了面试题的实用性,旨在帮助求职者准备Java面试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


前言

作为应届生,处于找工作中ing。今年2月份刚刚整理出来的面试题,时间比较赶就没有按照模块分类排序了。总而言之,顺序比较乱,希望大家耐着性子 看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!


面试题系列文章传送门

2021年后端开发面试题整理合集


Spring突击面试题内容

1. 面向对象的特征有哪些方面?

面向对象的特征有抽象、继承、封装和多态性。

  1. 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
  2. 继承:继承是从现有类中得到继承信息来创建新类的过程,提供继承信息的类被称为父类,得到继承信息的类被称为子类。
  3. 封装:封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
  4. 多态性:多态性允许不同子类型的对象对同一消息作出不同的响应,可分为编译时的多态性和运行时的多态性。

2. Java中实现多态的机制是什么?

  1. 多态是指依靠父类或接口的引用指向子类,从而实现了一个对象有多种形态的特性。
  2. 父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量的类型中定义的方法来运行,而是根据具体的实例方法来运行。
  3. Java中实现多态的机制有继承、抽象类、接口、方法的重载、方法的重写等。编译时的多态性使用方法的重载,运行时的多态性使用方法的重写。

3. JDK 和 JRE 的区别是什么?

JRE是Java 运行时的环境和将要执行 Java 程序的虚拟机,同时包含了执行程序需要的浏览器插件。
JDK是完整的 Java 软件开发工具包,包含了 JRE,可以让开发者开发、编译、执行 Java 应用程序。

4. == 和 equals()方法的区别?

== : 它的作用是判断两个对象的地址是否相等,判断两个对象是否相等。基本数据类型通过== 比较的是值,引用数据类型通过 == 比较的是内存地址。
equals()方法 : 它的作用是判断两个对象是否相等,一般有两种使用情况:
类没有覆盖 equals() 方法,通过 equals() 方法比较该类的两个对象时,等价于通过“==”比较。
类覆盖 equals() 方法,通过 equals() 方法比较两个对象的内容是否相等时。若它们的内容相等,则返回 true ,反之返回 false。

5. 如何编译和运行Java文件?

使用javac命令来编译.java文件(比如Test.Java),运行之后会生产对应的Test.class文件
使用Java命令来运行java文件

6. Java 有哪几种基本数据类型?

整型有byte、short、int、long,浮点型有float、double,字符型有char、布尔型:boolean

7. 访问修饰符 public,private,protected以及不写(defualt)时的区别?

Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问,支持 4 种不同的访问权限。

  1. private : 在同一类内可见,使用对象:变量、方法,不能修饰外部类
  2. default : 在同一包内可见,不使用任何修饰符,使用对象:类、接口、变量、方法。
  3. protected : 对同一包内的类和所有子类可见,使用对象:变量、方法,不能修饰外部类。
  4. public : 对所有类可见,使用对象:类、接口、变量、方法

8. 静态(static)变量和普通变量有什么区别?

  1. 所属目标不同:静态变量属于类的变量,普通变量属于对象的变量
  2. 存储区域不同:静态变量存储在方法区的静态区,普通变量存储在堆区
  3. 生命周期不同:静态变量是随着类的加载而加载,随着类的消失而消失。普通变量随着对象的加载而加载,随着对象的消失而消失
  4. 调用方式不同:静态变量只能通过类名调用,普通变量只能通过对象调用

9. this和super有什么区别?

this:代表当前对象本身,super:代表当前对象的父类。

10. short s1= 1; s1 = s1+1有什么错? short s1 = 1; s1 += 1;有什么错?

对于s1=s1+1,因为1是int类型,所以当s1+1进行运算时,会把结果自动作升级转换变为int类型。而s1是short类型,会报类型转换错误。另外,由于s1+=1含有强制类型转换,所以不会错。

11. float 型 float f=3.4 是否正确?

精度不准确,应该用强制类型转换。如 float f=(float)3.4

12. 说说&和&&的区别?

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与

13. 数组有没有 length()这个方法? String 有没有 length()这个方法?

数组没有 length()方法,有 length 的属性。String 有 length()这个方法

14. 什么是值传递和引用传递?

值传递是对基本数据类型的变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。一般认为,java 内的传递都是值传递.
引用传递是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身, 所以对引用对象进行操作会同时改变原对象,

15. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容是可以改变的。总得来说,对于一个final变量,如果是基本数据类型的变量,则其数值在初始化之后便不能更改;如果是引用类型的变量,则在初始化之后便不能再指向另一个对象。

16. final、finally、finalize有什么区别?

  1. final可以修饰类、变量、方法,修饰类时表示该类不能被继承、修饰方法时表示该方法不能被重写、修饰变量时表示该变量是一个常量不能被重新赋值。
  2. finally一般作用在try-catch代码块中,在处理异常的时候,通常将一定要执行的代码放在finally代码块中。表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
  3. finalize是Object类的一个方法,它是用来实现垃圾回收的。在垃圾回收器执行时会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收。

17. Java 中的注释有哪些写法?

单行注释//
多行注释/* 注释… /
用于注释文档的多行注释/
* 注释… */

18. 是否可以从一个static方法内部发出对非static方法的调用?

在static方法内部不可以直接调用非static方法,因为static方法被调用时无需创建对象,而非static方法需要创建对象后才能被调用。要想在static方法内部调用非static方法,可以在static方法内部先创建一个对象,然后通过对象来调用非static方法。

19. 2 * 8最有效率的计算方法是什么?

由于位运算符是cpu直接支持的,效率最高,所以2 * 8最有效的计算方法是 2 << 3(读作右移3位或者2两个小于号如何3)

20. void和Void有什么区别?

void用于无返回值的方法定义
Void是void的包装方法,和其他基础类型的包装方法不同的是Void不能被实例化,Void还可以用于一直返回null的方法或泛型。

21. 一个".java"源文件中是否可以包括多个不是内部类的类?有什么限制?

可以包含多个不是内部类的类,但是有且只有一个类名与文件名相同。

22. static 关键字有什么用?

static关键字可以用来修饰内部类、类的成员方法、类的成员变量、以及static静态代码块。

23. Integer与int的区别?

  1. Integer是int的包装类,int则是java基本数据类型中的一种,Integer变量必须实例化后才能使用,而int变量不需要。
  2. Integer是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而int是直接存储数据值。
  3. Integer的默认值是null,int的默认值是0

24. final 关键字有什么用法?

final关键字可以修饰类、变量、方法,修饰类时表示该类不能被继承、修饰方法是表示该方法不能被重写、修饰变量时表示该变量是一个常量不能被重新赋值。

25.(方法重载)Overload和(方法重写)Override的区别?Overloaded的方法是否可以改变返回值的类型?

重写与重载是java多态性的不同表现,重写是指子类拥有和父类相同的名称和参数,重载是在一个类中定义了多个同名的方法但是返回的参数不同。Overloaded的方法不可以改变返回值类型的

26. abstract的方法是否可同时是static、native和synchronized?

都不可以。

  1. abstract是指抽象方法,只有方法声明没有方法实现,不能被直接调用。
  2. static是类方法, 它可以不生成类的实例直接被类调用,而abstract方法不能被调用,所以static与abstract不能同时使用。
  3. native用来声明本地方法,一般用于java与外环境的交互。它与抽象方法类似,只有方法声明没有方法实现,native与abstract本身就是相冲突的,所以不能同时使用。
  4. synchronized是同步方法,然而同步是需要有具体操作才能实现的,但abstract只有方法声明,无法实现同步,所以static和synchronized不能同时使用

27. Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

Math.round方法表示“四舍五入”,即将原来的数字加上0.5后再向下取整,所以Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

28. abstract class(抽象类)和interface(接口)语法上有什么区别?

  1. 抽象类可以包含构造方法,接口中不能包含构造方法;
  2. 抽象类可以包含普通成员变量,接口中不能包含普通成员变量;抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的。
  3. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能都是public类型的,并且默认为public abstract类型。
  4. 抽象类中可以包含静态方法,接口中不能包含静态方法。
  5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型是任意的,但接口中的静态成员变量只能是public static final类型

29. 为什么byte取值范围为-128~127?

Java中byte类型为1个字节,1个字节占8位刚好256个数,而-128到127也是256个数。

30. char 型变量中可以存贮一个中文汉字吗?

java 中以 unicode 编码,一个 char 型变量占 16 个字节,所以放一个中文是没问题的

31. 重载和重写有什么区别?

重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。

32. Java有没有goto?

goto是java语言中的保留字,目前还没有在java中使用。

33. String和StringBuffer的区别?

  1. String类的内容一旦声明后是不可改变的,改变的只是内存的指向,而StringBuffer类的对象内容是可以改变的。
  2. String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
  3. 对于StringBuffer,不能像String那样直接通过赋值的方式完成对象实例化,必须通过构造方法的方式完成。StringBuffer类在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。在实际使用时,如果经常需要对一个字符串进行修改,例如插入,删除等操作,使用StringBuffer更加适合。

34. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

switch可作用于byte、int、String和枚举类型,不可作用于long类型。

35. 下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”?

只创建一个对象,编译时对字符串常量直接相加的表达式进行优化, 不必要等到运行期去进行加法运算处理。 而是在编译时去掉其中的加号, 直接将其编译成一个常量相连的结果,比如String s = “abcd”。

36. 内部类可以引用它的包含类的成员吗?有没有什么限制?

完全可以,如果不是静态内部类,就没有限制。如果把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,只能访问外部类中的静态成员变量。内部类有4种。

  1. 静态内部类是用static关键字修饰的,在访问限制上只能访问外部类中的static关键字所修饰的成员变量或者是方法。
  2. 成员内部类是最普遍的内部类,可以无条件访问外部类的所有成员属性和成员方法(包括私有成员和静态成员)
  3. 局部内部类是定义在外部类的方法中的,可以访问外部类的所有成员。但是不能随便访问局部变量,除非这个局部变量被final关键字修饰
  4. 匿名内部类其实就是局部内部类的简写格式,只能使用一次。

37. String s = new String(“xyz”);创建了几个String对象?是否可以继承String类?

产生两个对象。一个是存储于常量池中的字符串常量xyz,另一个是由new产生的,存储于堆中。String类是不可变类,是不可以继承的。

38. try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

在try后面的finally里的code会被执行,执行时机

建议阅读本文档的方式 本文档提供详细的目录,建议大家使用电脑阅读。如果大家用手机阅读的话,可以下载一个不错的PDF阅读器,比如 很多人常用的福昕PDF阅读器。 本文档提供详细的目录,大家可以根据自己的实际需要选择自己薄弱的知识章节阅读。 前言 不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有 章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1. 自我介绍。(你可千万这样介绍:“我叫某某,性别,来自哪里,学校是那个,自己爱干什么”,记住:多说点简 历上没有的,多说点自己哪里比别人强!) 2. 自己面试中可能涉及哪些知识点、那些知识点是重点。 3. 面试中哪些问题会被经常问到、面试中自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多 少?能记住多久?第二:背题的方式的学习很难坚持下去!) 4. 自己的简历该如何写。 “80%的offer掌握在20%的人手中” 这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部 分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万 不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来 越强大。 另外,大家要明确的很重要的几点是: 1. 写在简历上的东西一定要慎重,这可能是面试官大量提问的地方; 2. 大部分应届生找工作的硬伤是没有工作经验或实习经历; 3. 将自己的项目经历完美的展示出来非常重要。 笔主能力有限,如果有不对的地方或者和你想法不同的地方,敬请雅正、不舍赐教。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个巨大的怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值