欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

超级全面!阿里巴巴最新发布23年秋季招聘200道Java面试题(附答案)

最编程 2024-04-19 17:21:20
...

网络异常,图片无法展示
|

马上过34岁生日了,和大家聊聊最近的情况
半年前还在迷茫该学什么,怎样才能走出现在的困境,半年后已经成功上岸阿里,感谢在这期间帮助我的每一个人。

面试中总结了200道经典的Java面试题,里面包含面试要回答的知识重点,并且我根据知识类型进行了分类,可以说非常全面了~

因为篇幅原因,大部分的内容就不给大家一一展示了,需要获取的小伙伴

                                                                    资源获取:大家点赞、收藏、关注、评论啦 、查看????????????????????????微信公众号获取联系方式????????????????????????精彩专栏推荐订阅:下方专栏????????????????????????????????每天学四小时:Java+Spring+JVM+分布式高并发,架构师指日可待

网络异常,图片无法展示
|
网络异常,图片无法展示
|
编辑

Java平台相关

1、JDK、JRE、JVM 分别是什么关系? 2、为什么 Java 被称作是“平台无关的编程语言”? 3、Java 和 C++ 的区别? 4、什么是字节码?采用字节码的最大好处是什么? 5、Java运行的过程? 6、Java是动态类型语言还是静态类型语言?

面向对象

7.什么是面向对象? 8.请说说面向对象的特征?封装、继承、多态分别说一下,以及它们的好处? 9.多态为什么要转型? 10.说一下权限修饰符的使用权限?

语言基础

  • 基本数据类型和引用类型

11.Java 中的几种基本数据类型是什么?各自占用多少字节? 12.char 型变量中能不能存贮一个中文汉字?为什么? 13.什么是引用类型? 14.什么是值传递和引用传递? 15.属性(字段)和变量的区别? 16.什么是重载和重写?Overload(重载)和Override(重写)的区别? 17.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用?

  • 字符串相关

18.String 为什么是不可变的? 19.String s = new String("xyz") 会创建几个对象? 20.说说你对字符串常量池的理解? 21.String、StringBuffer、StringBuilder 的区别? 22.谈谈你对this关键字的理解? 23.谈谈你对super关键字的理解? 24.那你知道this和super有什么区别吗? 25.谈谈你对static关键字的理解? 26.谈谈你对final关键字的理解?

27.你知道在Java中都有哪里用到了哈希 吗?

  • 拷贝相关

28.Java中有多少种拷贝类型?分别说一下? 29.那你碰到过多引用拷贝吗?知道怎么解决吗?

  • 接口相关

30.你平时是怎么使用接口的?谈谈你的理解? 31.那听你这么说,接口的实现类的方法返回值类型是什么? 32.方法的参数可以是接口吗? 33.接口的返回值类型可否是另一个接口类型?

  • 抽象类

34.接口引用调用实现类方法? 35.抽象类使用规则 36.抽象类注意事项? 37.abstractclass和interface语法上有什么区别? 38.接口是否可继承接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

  • 包装类

39.什么是自动拆装箱? 40.为什么要转换?

  • 泛型

41.你平时是如何使用泛型的?

  • 异常

42.Exeception和Error区别? 43.那你知道异常有几种处理方式吗? 44.说说Throwable类怎么用吧? 45.你最常见到的是Java中的什么异常?

  • 反射机制

46.什么是反射机制? 47.那怎么使用反射呢? 48.你反射这么熟悉,那一般在哪些场景用到它啊? 49.听你说的这么多,那它就没有缺点吗?

  • JDK1.8新特性

50.你知道JDK1.8有哪些新特性吗?

以下是答案:

Java平台相关

1、JDK、JRE、JVM 分别是什么关系?

JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE。开发工具如:
用于编译 Java 程序的 javac 命令。
用于启动 JVM 运行 Java 程序的 Java 命令。
用于生成文档的 Javadoc 命令。
用于打包的 jar 命令等等。

2、为什么 Java 被称作是“平台无关的编程语言”?

Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。
Java 源文件( `.java` )被编译成能被 Java 虚拟机执行的字节码文件( `.class` )。
Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

3、Java 和 C++ 的区别?

都是面向对象的语言,都支持封装、继承和多态。
Java 不提供指针来直接访问内存,程序内存更加安全。
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存。

4、什么是字节码?采用字节码的最大好处是什么?

Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。
编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在 Java 中,这种供虚拟机理解的代码叫做字节码(即扩展名为 `.class` 的文件),它不面向任何特定的处理器,只面向虚拟机。
每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java 源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。这也就是解释了 Java 的编译与解释并存的特点。
采用字节码的好处:
Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

5、Java运行的过程?

Java 源代码=> 编译器 => JVM 可执行的 Java 字节码(即虚拟指令)=> JVM => JVM 中解释器 => 机器可执行的二进制机器码 => 程序运行

6、Java是动态类型语言还是静态类型语言?

动态类型语言和静态类型语言两者的却别就在于对类型的检查是在编译期还是在运行期,满足前者就是静态类型语言,反之则是动态类型语言。
直白来说静态语言是判断变量自身的类型信息;动态类型语言是判断变量值的类型信息,变量设有类型信息,变量值才有类型信息,这是动态语言的一个重要特征。
Java是静态类型语言(尽管lambda表达式为其增加了动态特性),js,python是动态类型语言。

面向对象

7.什么是面向对象?

面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java 是一个支持并发、基于类和面向对象的计算机高级编程语言。面向对象软件开发具有以下优点:
代码开发模块化,更易维护和修改。
代码复用性强。
增加代码的可读性。

8.请说说面向对象的特征?封装、继承、多态分别说一下,以及它们的好处?

1.封装:封装,给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在 Java 当中,有 4 种修饰符: `default`、`public`、`private` 和 `protected` 。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。
使用封装的一些好处:
 通过隐藏对象的属性来保护对象内部的状态。
 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。
 禁止对象之间的不良交互提高模块化。
2.继承:继承,给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。
3.多态:多态,是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作,可以应用到其他类型的值上面。
多态中,父类作为形参的方法和子类作为形参的方法都是一样的。形参父类类型可以接收子类对象。这是多态的特性。
重要特性:转型
向上转型:父类引用指向子类对象。相当于子类对象赋给父类引用。这样子,是默认的。子类的方法可以重写父类的方法。但是,向上转型的弊端就是只能使用父类有的方法,一旦向上转型就不能调用子类特有的方法。所以需要向下转型还原。
向下转型:其实是一个还原的步骤。子类引用指向父类的一个引用。这个要强转类型。因为我们父类不能去拿子类已经有的东西。所以必须把父类转化为和子类一个类型。

9.多态为什么要转型?

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦”。所以,想要调用子类特有的方法,必须做向下转型。

10.说一下权限修饰符的使用权限?

同一个类:四个都能访问。
同一个包不同类:public、protected和defaut都能访问。private不能访问
不同包但是B类是A类的子类:
首先,必须导包。如果要用B类继承A类,必须先导入A类所在的包。
public和protect能访问。default不能访问。private也不能。
不同包非子类:一点关系没有。两个类是陌生关系。不是一个包里的也没有继承(实现)关系。
只有public可以访问。其他都不行。

语言基础

  • 基本数据类型和引用类型

11.Java 中的几种基本数据类型是什么?各自占用多少字节?

基本数据类型如下:
byte 1字节
boolean false/true(理论上占用1bit,1/8字节,实际处理按1byte处理)
char 2字节(C语言中是1字节)
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节

12.char 型变量中能不能存贮一个中文汉字?为什么?

在 Java 语言中,char 类型占 2 个字节,而且 Java 默认采用 Unicode 编码,一个 Unicode 码是 16 位,所以一个 Unicode 码占两个字节。
Java 中无论汉字还是英文字母,都是用 Unicode 编码来表示的。所以,在 Java 中,char 类型变量可以存储一个中文汉字。

13.什么是引用类型?

引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。
引用类型包括类、接口、数组等。
特别注意,String 是引用类型不是基本类型。

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

值传递,是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递,一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。
一般认为,Java 内的传递都是值传递,Java 中实例对象的传递是引用传递。

15.属性(字段)和变量的区别?

字段是成员变量,是在类中声明的变量。
变量可以分为局部变量和成员变量。成员变量就是字段也叫做属性。
所以字段就是属性就是成员变量。