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





《2023年Java(1~5年经验)面试题.docx》由会员分享,可在线阅读,更多相关《2023年Java(1~5年经验)面试题.docx(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年Java (15年经验)面试题(一)一、基础篇1、如何实现对象克隆?【仅供参考】实现Cloneable接口并重写Object类中的clone()方法。实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现 真正的深度克隆。2、重载(Overload)和重写(Override)的区别?【仅供参考】方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态 性,而后者实现的是运行时的多态性。重载:一个类中有多个同名的方法,但是具有有不同的参数列表(参数类型不 同、参数个数不同或者二者都不同)。重写:发生在子类与父类之间,子类对父类的方法进行重写,参数都不
2、能改 变,返回值类型可以不相同,但是必须是父类返回值的派生类。即外壳不变, 核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。3、JDK1. 8之后有哪些新特性?【仅供参考】接口默认方法:Java 8允许我们给接口添加一个非抽象的方法实现,只需要使 用default关键字即可Lambda表达式和函数式接口: Lambda表达式本质上是一段匿名内部类,也可 以是一段可以传递的代码。Lambda允许把函数作为一个方法的参数(函数作为 参数传递到方法中),使用Lambda表达式使代码更加简洁,但是也不要滥用, 否则会有可读性等问题,Effective Java作者Josh Bloch建
3、议使用 Lambda表达式最好不要超过3行。Stream API:用函数式编程方式在集合类上进行复杂操作的工具,配合Lambda 表达式可以方便的对集合进行处理。Java8中处理集合的关键抽象概念,它可 以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据 等操作。使用Stream API对集合数据进行操作,就类似于使用SQL执行的数 据库查询。也可以使用Stream API来并行执行操作。简而言之,Stream APIpublic static void foo() new Inner ();public void bar() new Inner();public stati
4、c void main(String args) new Inner();)Java中非静态内部类对象的创建要依赖其外部类对象,上面的面试题中f。和 main方法都是静态方法,静态方法中没有this,也就是说没有所谓的外部类对 象,因此无法创建内部类对象,如果要在静态方法中创建内部类对象,可以这 样做:new Outer (). new Inner ();在java编程中,用到反射的地方还是很多的,比如java框架就大量使用反 射,还有在加载驱动和读取配置文件时,反射也是比不可少的。所以在java面 试中,面试官会想要考察应聘者反射方面的知识,那么有面试需要的朋友,就 必须提前做好准备,将能搜
5、集到的java反射面试题整理到一起记住,另外, java零基础的小白也可以根据这篇java反射面试题来认识java反射。14、实现Java反射的类有什么?【仅供参考】(l)Class:表示正在运行的Java应用程序中的类和接口,注意所有获取对象的 信息都需要Class类来实现;(2)Field:提供有关类和接口的属性信息,以及对它的动态访问权限;(3)Constructor:提供关于类的单个构造方法的信息以及它的访问权限;(4)Method:提供类或接口中某个方法的信息。15、接口是什么?为什么要使用接口而不是直接使用具体类?【仅供参考】接口用于定义API。它定义了类必须得遵循的规则。同时一,
6、它提供了一种抽 象,因为客户端只使用接口,这样可以有多重实现,如List接口,你可以使 用可随机访问的ArrayList,也可以使用方便插入和删除的LinkedListo接口 中不允许写代码,以此来保证抽象,但是Java 8中你可以在接口声明静态的 默认方法,这种方法是具体的。16、设计一个ATM机,请说出你的设计思路?【仅供参考】比如设计金融系统来说,必须知道它们应该在任何情况下都能够正常工作。不 管是断电还是其他情况,ATM应该保持正确的状态(事务),想想加锁(locking)、事务(transaction)、错误条件(error condition)、边界条件 (boundary con
7、dition)等等。尽管你不能想到具体的设计,但如果你可以指 出非功能性需求,提出一些问题,想到关于边界条件,这些都会是很好的。17、简述分代垃圾回收器是怎么工作的?【仅供参考】分代回收器有两个分区:老生代和新生代,新生代默认的空间占比总空间的 1/3,老生代的默认占比是2/3o新生代使用的是复制算法,新生代里有3个分区:Eden、To Survivor、From Survivor,它们的默认占比是8:1:1,它的执行流程如下:把 Eden + From Survivor 存活的对象放入 To Survivor 区;清空 Eden 和 From Survivor 分区;From Survivo
8、r 和 To Survivor 分区交换,From Survivor 变 To Survivor, To Survivor 变 From Survivor。每次在From Survivor到To Survivor移动时都存活的对象,年龄就+1,当 年龄到达15 (默认配置是15)时,升级为老生代。大对象也会直接进入老生 代。老生代当空间占用到达某个值之后就会触发全局垃圾收回,一般使用标记整理 的执行算法。以上这些循环往复就构成了整个分代垃圾回收的整体执行流程。18、什么是双亲委派模型?【仅供参考】在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它 的类加载器和这个类本身一同确
9、立在JVM中的唯一性,每一个类加载器,都有 一个独立的类名称空间。类加载器就是根据指定全限定名称将class文件加载 到JVM内存,然后再转化为class对象。类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载 Java_HOME/lib/目录中的,或者被-Xbootclasspath参数所指定的路径中并且 被虚拟机识别的类库;其他类加载器:扩展类加载器(Extension ClassLoader):负责加载java_home style=box- sizing: border-box; outline: Opx ! important;”
10、libext 目录或 Java. ext. dirs系统变量指定的路径中的所有类库;应用程序类加载器(Application ClassLoader)。负责加载用户类路径 (classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如 果我们没有自定义类加载器默认就是用这个加载器。双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加 载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是 如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加 载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝 试去加载类。19、说一
11、下JVM调优的工具?【仅供参考】JDK自带了很多监控工具,都位于JDK的bin目录下,其中最常用的是 jconsole和jvisualvm这两款视图监控工具。jconsole:用于对JVM中的内存、线程和类等进行监控;jvisualvm: JDK自带的全能分析工具,可以分析:内存快照、线程快照、程序 死锁、监控内存的变化、gc变化等。20、说一下JVM有哪些垃圾回收器?【仅供参考】Serial:最早的单线程串行垃圾回收器。Serial Old: Serial垃圾回收器的老年版本,同样也是单线程的,可以作为 CMS垃圾回收器的备选预案。Par New:是Serial的多线程版本。Parallel
12、和ParNew收集器类似是多线程的,但Parallel是吞吐量优先的收 集器,可以牺牲等待时间换取系统的吞吐量。Parallel Old是Parallel老生代版本,Parallel使用的是复制的内存回收 算法,Parallel Old使用的是标记-整理的内存回收算法。CMS: 一种以获得最短停顿时间为目标的收集器,非常适用B/S系统。G1: 一种兼顾吞吐量和停顿时间的GC实现,是JDK 9以后的默认GC选项。三、Java Web/Spring/Spring MVC/Hibernate/MyBatis/SpringBoot/Spring Cloud1、Servlet是线程安全的吗【仅供参考】S
13、ervlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。解决的办法是尽量不要在实现servlet接口的类中定义实例变量,而是要把变 量分别定义在doGet()和doPostO方法内。虽然使用synchronized (name) 语 句块可以解决问题,但是会造成线程的等待,不是很科学的办法。注意:多线程的并发的读写Servlet类属性会导致数据不同步。但是如果只是 并发地读取属性而不写入,则不存在数据不同步的问题。因此Servlet里的只 读属性最好定义为final类型的。2、http和https的基本概念【仅供参考】-HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和
14、服务器端请求 和应答的标准(TCP),用于计算机之间传输文字,图片,音频,视频等超文本 数据的协议,它可以使浏览器更加高效,使网络传输减少-HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入 SSL层,HTTPS的安全基础是SSL, HTTPS就是从HTTP加上加密处理(一般是 SSL安全通信线路)+认证+完整性保护-HTTPS协议的主要作用:建立一个信息安全通道,来保证数据传输的安全确认网站的真实性3、说一下JS0NP实现原理?【仅供参考】jsonp: JSON with Padding,它是利用script标签的src连接可以访问不同 源的特性,加载远程返
15、回的“JS函数”来执行的。4、Autowired的作用是什么?【仅供参考】Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的 工作,通过Autowired的使用来消除set/get方法。5、RequestMapping的作用是什么?【仅供参考】将http请求映射到相应的类/方法上。6、你如何理解Spring Boot中的Starters?【仅供参考】Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包, 你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。 如你想使用Spring JPA访问数据库,只要加入spring-boo
16、t-starter-data- jpa启动器依赖就能使用了。7、springboot 集成 mybatis 的过程【仅供参考】添加 mybatis 的 starter maven 依赖org. mybatis. spring. bootmybatis-spring-boot-starterl. 3. 2在mybatis的接口中 添加Mapper注解在application. yml配置数据源信息8、开启Spring Boot特性有哪几种方式?【仅供参考】继承 spring-boot-starter-parent 项目1) 导入 spring-boot-dependencies 项 目依赖9、j
17、pa和hibernate有什么区别?【仅供参考】jpa 全称 Java Persistence API,是 Java 持久化接口规范,hibernate 属于 jpa的具体实现。10、spring boot有哪些方式可以实现热部署?【仅供参考】使用devtools启动热部署,添加devtools库,在配置文件中把spring, devtools. restart, enabled 设置为 true;使用Intellij Idea编辑器,勾上自动编译或手动重新编译。11、为什么我们不建议在实际的应用程序中使用Spring Data Rest?【仅供参考】我们认为Spring Data Rest很
18、适合快速原型制造!在大型应用程序中使用需 要谨慎。通过Spring Data REST你可以把你的数据实体作为RESTful服务直接发布。 当你设计RESTful服务器的时候,最佳实践表明,你的接口应该考虑到两件重 要的事情:你的模型范围。你的客户。通过With Spring Data REST,你不需要再考虑这两个方面,只需要作为TEST 服务发布实体。这就是为什么我们建议使用Spring Data Rest在快速原型构造上面,或者作 为项目的初始解决方法。对于完整演变项目来说,这并不是一个好的注意。12、RequestMapping 和 GetMapping 的不同之处在哪里?【仅供参考】
19、RequestMapping具有类属性的,可以进行GET, POST, PUT或者其它的注释中具 有的请求方法。GetMapping是GET请求方法中的一个特例。它只是 ResquestMapping的一个延伸,目的是为了提高清晰度。13、spring cloud的核心组件有哪些?【仅供参考】Eureka:服务注册于发现。Feign:基于动态代理机制,根据注解和选择的机器,拼接请求url地址,发 起请求。Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔 离,避免了服务雪崩的问题。Zuul:网关管理,由Zuu
20、l网关转发请求给对应的服务。14、spring cloud断路器的作用是什么?【仅供参考】在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障 (类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向 调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用 故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。15、Springboot有哪些优点?【仅供参考】-快速创建独立运行的spring项目与主流框架集成-使用嵌入式的servlet容器,应用无需打包成war包-starters自动依赖与版本控制-大量的自动配置,简化开发,也可修改默认值-准生
21、产环境的运行应用监控-与云计算的天然集成16、什么是 Spring Data REST?【仅供参考】Spring Data TEST可以用来发布关于Spring数据库的HATEOAS RESTful资 源。17、如何重新加载Spring Boot上的更改,而无需重新启动服务器?【仅供参考】这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入 式tomcat将重新启动。Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生 产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自 动重启服务器。开发人员可以重新加载Spring B
22、oot上的更改,而无需重新启动服务器。这将 消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这 个功能。这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块 将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。 org.springframework, bootspring-boot-devtools18、MyBatis 有哪些执行器(Executor) ?【仅供参考】MyBatis有三种基本的Executor执行器:SimpleExecutor:每执行一次 update 或 select 就开启一个 Statement 对
23、象,用完立刻关闭Statement对象;ReuseExecutor:执行 update 或 select,以 SQL 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后不关闭Statement对象,而是放置 于Map内供下一次使用。简言之,就是重复使用Statement对象;BatchExecutor:执行 update (没有 select, jdbc 批处理不支持 select),将所有SQL都添加到批处理中(addBatchO),等待统一执行(executeBatch(),它缓存了多个 Statement 对象,每个 Statement 对象都 是 是dBat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 Java 经验 试题

限制150内