2023年Java(1~5年经验)面试题.pdf





《2023年Java(1~5年经验)面试题.pdf》由会员分享,可在线阅读,更多相关《2023年Java(1~5年经验)面试题.pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2 02 3 年 J a v a (1 5 年经验)面试题(一)一、基础篇1、如何实现对象克隆?【仅供参考】实 现 C l o n e a b l e 接口并重写O b j e c t 类中的c l o n e。方法。实 现 S e r i a l i z a b l e 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。2、重 载(O v e r l o a d)和重写(O v e r r i d e)的区别?【仅供参考】方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载:一个类中有多个同名的方法,但是具有有不同的参数列
2、表(参数类型不同、参数个数不同或者二者都不同)。重写:发生在子类与父类之间,子类对父类的方法进行重写,参数都不能改变,返回值类型可以不相同,但是必须是父类返回值的派生类。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。3、J D KL 8 之后有哪些新特性?【仅供参考】接口默认方法:J a v a 8 允许我们给接口添加一个非抽象的方法实现,只需要使用 d e f a u l t 关键字即可L a m b d a 表达式和函数式接口:L a m b d a 表达式本质上是一段匿名内部类,也可以是一段可以传递的代码。L a m b d a 允许把函数作为一个方法的参数
3、(函数作为参数传递到方法中),使 用 L a m b d a 表达式使代码更加简洁,但是也不要滥用,否则会有可读性等问题,E f f e c t i v e J a v a 作 者 J o s h B l o c h 建议使用L a m b d a 表达式最好不要超过3行。S t r e a m A P I:用函数式编程方式在集合类上进行复杂操作的工具,配合L a m b d a表达式可以方便的对集合进行处理。J a v a 8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用S t r e a m A P I 对集合数据进行操作,就
4、类似于使用S Q L 执行的数据库查询。也可以使用S t r e a m A P I 来并行执行操作。简而言之,S t r e a m A P I提供了一种高效且易于使用的处理数据的方式。方法引用:方法引用提供了非常有用的语法,可以直接引用已有J a v a 类或对象(实例)的方法或构造器。与 l a m b d a 联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。日期时间AP I:J a v a 8 引入了新的日期时间AP I 改进了日期时间的管理。O p t i o n a l 类:著名的N ul I P o i n t e r Ex c e p t i o n 是引起系统失败
5、最常见的原因。很久以前G o o g l e G ua v a 项目引入了 O p t i o n a l 作为解决空指针异常的一种方式,不赞成代码被n ul l 检查的代码污染,期望程序员写整洁的代码。受G o o g l e G ua v a 的鼓励,O p t i o n a l 现在是J a v a 8 库的一部分。新工具:新的编译工具,如:N a s h o r n 引 擎 j j s、类依赖分析器j d e p s。4、两个对象的h a s h Co d e()相同,则 e q ua l s。是否也一定为t r ue?【仅供参考】e q ua l s 与 h a s h c o d
6、 e 的关系:如果两个对象调用e q ua l s 比较返回t r ue,那么它们的h a s h Co d e 值一定要相同;如果两个对象的h a s h Co d e 相同,它们并不一定相同。h a s h c o d e 方法主要是用来提升对象比较的效率,先进行h a s h c o d e ()的比较,如果不相同,那就不必在进行e q ua l s 的比较,这样就大大减少了 e q ua l s 比较的次数,当比较对象的数量很大的时候能提升效率。之所以重写e q ua l s。要重写h a s h c o d e(),是为了保证e q ua l s。方法返回t r ue的情况下h a
7、s h c o d e 值也要一致,如果重写了 e q ua l s ()没有重写h a s h c o d e (),就会出现两个对象相等但h a s h c o d e。不相等的情况。这样,当用其中的一个对象作为键保存到h a s h M a p、h a s h T a b l e 或 h a s h S e t 中,再以另一个对象作为键值去查找他们的时候,则会查找不到。5、O b j e c t 常用方法有哪些?【仅供参考】J a v a 面试经常会出现的一道题目,O b j e c t 的常用方法。下面给大家整理一下。O b j e c t 常用方法有:t o S t r i n g
8、O e q ua l s ()h a s h Co d e。、c l o n e。等。6、普通类和抽象类有哪些区别?【仅供参考】普通类不能包含抽象方法,抽象类可以包含抽象方法。抽象类不能直接实例化,普通类可以直接实例化。7、接口和抽象类有什么区别?【仅供参考】实现:抽象类的子类使用e x t e n d s 来继承;接口必须使用i m p l e m e n t s 来实现接口。构造函数:抽象类可以有构造函数;接口不能有。实现数量:类可以实现很多个接口;但是只能继承一个抽象类。访问修饰符:接口中的方法默认使用p u b l i c 修饰;抽象类中的方法可以是任意访问修饰符。8、用最有效率的方法
9、计算2 乘以8?【仅供参考】2 3。进阶:通常情况下,可以认为位运算是性能最高的。但是,其实编译器现在已经“非常聪明了”,很多指令编译器都能自己做优化。所以在实际实用中,我们无需特意去追求实用位运算,这样不仅会导致代码可读性很差,而且某些自作聪明的优化反而会误导编译器,使得编译器无法进行更好的优化。9、深拷贝和浅拷贝区别是什么?【仅供参考】浅克隆:当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将复制。10、J a v a 的特点?【仅供参考】J a v a 具有平台独立性和移植性。J a v a
10、有一句口号:W r i t e o n c e,r u n a n y w h e r e,一次编写、到处运行。这也是J a v a 的魅力所在。而实现这种特性的正是J a v a 虚拟机J V M。已编译的J a v a 程序可以在任何带有J V M 的平台上运行。你可以在w i n d o w s 平台编写代码,然后拿到l i n u x 上运行。只要你在编写完代码后,将代码编译成.c l a s s 文件,再把c l a s s 文件打成J a v a 包,这个j a r 包就可以在不同的平台上运行了。J a v a 具有稳健性。J a v a 是一个强类型语言,它允许扩展编译时检查潜在
11、类型不匹配问题的功能。J a v a 要求显式的方法声明,它不支持C 风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用t r y/c at c h/f i n al l y 语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。11、JD K/JR E/JV M三者的关系【仅供参考】JV M英文名称(Java V i r t u al Mac h i n e),就是我们耳熟能详的Java虚拟机。Java能够跨平台运行的核心在于JV M。所有的j ava程序
12、会首先被编译为.c l as s 的类文件,这种类文件可以在虚拟机上执行。也就是说c l as s 文件并不直接与机器的操作系统交互,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。针对不同的系统有不同的j vm 实现,有 Li n u x 版本的j vm 实现,也有W i n d o w s 版本的j vm 实现,但是同一段代码在编译后的字节码是一样的。这就是 Java能够跨平台,实现一次编写,多处运行的原因所在。JR E英文名称(Java R u n t i m e E n vi r o n m e n t),就是Java运行时环境。我们编写的Java程序必须要在JR
13、E 才能运行。它主要包含两个部分,JV M和 Java核心类库。JR E 是 Java的运行环境,并不是一个开发环境,所以没有包含任何开发工具,如编译器和调试器等。如果你只是想运行Java程序,而不是开发Java程序的话,那么你只需要安装JR E 即可。JD KJD K目录下有个JR E,也就是JD K中已经集成了 JR E,不用单独安装JR E。另外,JD K中还有一些好用的工具,如 j i n f o,j p s,j s t ac k 等。JR E =JV M+Java核心类库JD K=JR E +Java工 具+编译器+调试器12、S t r i n g 属于基础的数据类型吗?【仅供参考
14、】S t r i n g 不属于基础类型,基础类型有8种:b y t e、b o o l e an,c h ar、s h o r t i n t、f l o at、l o n g d o u b l e,而 S t r i n g 属于对象。13、Fi l e s 的常用方法都有哪些?【仅供参考】Fi l e s,e x i s t s ():检测文件路径是否存在。F il e s.c r e a t e F il e O :创建文件。F il e s.c r e a t e D ir e c t o r y ():创建文件夹。F il e s,d e l e t e():删除一个文件或目录。
15、F il e s,c o p y ():复制文件。F il e s.m o v e O:移动文件。F il e s.s iz e():查看文件个数。F il e s.r e a d():读取文件。F il e s,w r it e():写入文件。1 4 J a v a 中的 M a t h,r o u n d(-1.5)等于多少?【仅供参考】等 于-1,因为在数轴上取值时,中间值(0.5)向右取整,所以正0.5是往上取整,负 0.5 是直接舍弃。1 5、如何实现对象克隆?【仅供参考】实现C l o n e a b l e 接口,重 写 c l o n e()方法。这种方式是浅拷贝,即如果类中属
16、性有自定义引用类型,只拷贝引用,不拷贝引用指向的对象。如果对象的属性的C l a s s 也实现C l o n e a b l e 接口,那么在克隆对象时也会克隆属性,即深拷贝。结合序列化,深拷贝。通过 o r g.a p a c h e,c o m m o n s 中的工具类 B e a n U t i I s 和 P r o p e r t y U t i I s 进行对象复制。1 6、J D K 和 J RE 有什么区别?【仅供参考】J D K:J a v a D e v e l o p m e n t K it 的简称,J a v a 开发工具包,提供了 J a v a 的开发环境和运
17、行环境。J RE:J a v a Ru n t im e E n v ir o n m e n t 的简称,J a v a 运行环境,为J a v a 的运行提供了所需环境。具体来说J D K 其实包含了 J RE,同时还包含了编译J a v a 源码的编译器J a v a c,还包含了很多J a v a 程序调试和分析的工具。简单来说:如果你需要运行 J a v a 程序,只需安装J RE 就可以了,如果你需要编写J a v a 程序,需要安装 J D K 17、J V M 是如何处理异常的?【仅供参考】在一个方法中如果发生异常,这个方法会创建一个异常对象,并转交给J V M,该异常对象包含
18、异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并转交给J V M 的过程称为抛出异常。可能有一系列的方法调用,最终才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。J V M 会顺着调用栈去查找看是否有可以处理异常的代码,如果有,则调用异常处理代码。当 J V M发现可以处理异常的代码时,会把发生的异常传递给它。如 果 J V M 没有找到可以处理该异常的代码块,J V M 就会将该异常转交给默认的异常处理器(默认处理器为J V M 的一部分),默认异常处理器打印出异常信息并终止应用程序。1 8、运行时异常和一般异常(受检异常)区别是什么?【仅供参考】运行时异常包括R
19、un tim e E xc e ption 类及其子类,表 示 J V M 在运行期间可能出现的异常。J a va 编译器不会检查运行时异常。受检异常是E xc e ption 中 除 R un t im e E xc e ption 及其子类之外的异常。J a va编译器会检查受检异常。R un tim e E xc e ption 异常和受检异常之间的区别:是否强制要求调用者必须处理此异常,如果强制要求调用者必须进行处理,那么就使用受检异常,否则就选择非受检异常(R un tim e E xc e ption)0 一般来讲,如果没有特殊的要求,我们建议使用R un tim e E xc e
20、 ption 异常。1 9、常见的 R un tim e E xc e ption 有哪些?【仅供参考】C l a s s C a s tE xc e ption (类转换异常)I n d e xO ul O f B oun d s E xc e pl ion (数组越界)N ul I P oin te r E xc e ption (空指针)A r r a y S tor e E xc e ption (数据存储异常,操作数组时类型不一致)还有 1 0 操作的 B uf f e r O ve r f l owE xc e pt ion 异常2 0 tr y-c a tc h-f in a l
21、 l y 中哪个部分可以省略?【仅供参考】tr y-c a tc h-f in a l l y 其 中 c a tc h 和 f in a l l y 都可以被省略,但是不能同时省略,也就是说有tr y 的时候,必须后面跟一个c a tc h 或 者 f in a l l y。二、容器/多线程/反射/J V M/设计模式1、A r r a y L is t 和 L in k e d L is t 的区别是什么?【仅供参考】数据结构实现:A r r a y L is t是动态数组的数据结构实现,而 L in k e d L is t是双向链表的数据结构实现。随机访问效率:A r r a y L
22、is t比 L in k e d L is t在随机访问的时候效率要高,因为L in k e d L is t是线性的数据存储方式,所以需要移动指针从前往后依次查找。增加和删除效率:在非首尾的增加和删除操作,L in k e d L is t要 比 A r r a y L is t效率要高,因 为 A r r a y L is t增删操作要影响数组内的其他数据的下标。综合来说,在需要频繁读取集合中的元素时,更推荐使用A r r a y L is t,而在插入和删除操作较多时,更推荐使用L in k e d L is t。2 s y n c h r on iz e d 和 L oc k 有什么区
23、别?【仅供参考】s y n c h r on iz e d 可以给类、方法、代码块加锁;而 l oc k 只能给代码块加锁。s y n c h r on iz e d 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 l oc k 需要自己加锁和释放锁,如果使用不当没有u nLoc k ()去释放锁就会造成死锁。通 过 Loc k 可以知道有没有成功获取锁,而 s y nc h roni z e d 却无法办到。3、四种线程池的创建:【仅供参考】(1)ne w C a c h e d T h re a d Pool 创建一个可缓存线程池(2)ne w F i x e
24、d T h re a d Pool 创建一个定长线程池,可控制线程最大并发数。(3)ne w S c h e d u 1 e d T h re a d Poo 1 创建一个定长线程池,支持定时及周期性任务执行。(4)ne w S i ng l e T h re a d E x e c u t or创建个单线程化的线程池,它只会用唯一的工作线程来执行任务。4、Li nu x 环境下如何查找哪个线程使用C PU 最长【仅供参考】(1)获取项目的 pi d,j ps 或者 ps -e f|g re p j a v a(2)t op-H -p pi d,顺序不能改变5、T h re a d Loc a
25、 l 是什么?有什么用?【仅供参考】T h re a d Loc a l 是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。简单说T h re a d Loc a l 就 是 一 种 以 空 间 换 时 间 的 做 法,在每个 T h re a d 里 面 维 护 了 一 个 以 开 地 址 法 实 现 的T h re a d Loc a l.T h re a d Loc a l Ma p,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 Java 经验 试题

限制150内