一些java面试题

一、基础语法类

 

1. 谈谈你对面向对象三大特性(封装、继承、多态)的理解?

 

- 封装:将数据和操作封装在类中,通过访问修饰符控制外部对类内部成员的访问,提高了数据的安全性和代码的可维护性。比如将一些敏感数据设为私有,并通过公共方法来访问和修改。

- 继承:子类继承父类的属性和方法,可以减少代码重复,实现代码复用。例如,汽车类可以作为父类,轿车、卡车等可以作为子类继承汽车类的一些通用属性和方法。

- 多态:同一操作作用于不同的对象可以有不同的表现形式。分为编译时多态(方法重载)和运行时多态(方法重写)。比如,定义一个图形类,其子类有圆形、矩形等,它们都重写了图形类的计算面积方法,在调用时根据实际对象的不同表现出不同的行为。

2. 说说 final、finally、finalize 的区别?

 

- final:可以修饰类、方法、变量。修饰类表示该类不能被继承;修饰方法表示该方法不能被重写;修饰变量表示该变量一旦被赋值就不能被改变。

- finally:通常用在 try-catch 语句中,无论是否发生异常,finally 块中的代码都会被执行,常用于释放资源等操作。

- finalize:是 Object 类中的一个方法,在垃圾回收器确定不存在对该对象的更多引用时,由垃圾回收器在对象被回收之前调用该方法,一般不建议主动调用这个方法。

 

二、集合框架类

 

1. ArrayList 和 LinkedList 的区别是什么?

 

- ArrayList 基于动态数组实现,随机访问速度快,插入和删除元素时需要移动大量元素,效率较低。适合频繁查询、较少插入和删除的场景。

- LinkedList 基于双向链表实现,插入和删除元素速度快,但随机访问需要遍历链表,效率较低。适合频繁插入和删除、较少随机访问的场景。

2. HashMap 和 HashTable 的区别有哪些?

 

- HashMap 允许键和值为 null,非线程安全,效率较高。

- HashTable 不允许键和值为 null,线程安全,效率相对较低。

 

三、多线程类

 

1. 谈谈你对线程和进程的理解?

 

- 进程:是操作系统分配资源的基本单位,一个进程可以包含多个线程。比如打开一个浏览器就是一个进程。

- 线程:是 CPU 调度的基本单位,一个进程中的多个线程共享进程的资源。比如浏览器中的多个标签页可以看作不同的线程在同时运行。

2. 如何实现多线程?

 

- 继承 Thread 类并重写 run 方法。

- 实现 Runnable 接口,实现 run 方法,并将该实例作为参数传递给 Thread 类的构造方法来创建线程。

- 使用 Java 8 引入的 lambda 表达式简化实现 Runnable 接口的方式。

 

四、JVM 相关类

 

1. 说说 JVM 的内存结构?

 

- 方法区:存储类信息、常量、静态变量等。

- 堆:存储对象实例和数组,是垃圾回收的主要区域。

- 虚拟机栈:每个线程都有自己的栈,存储局部变量、方法参数、返回值等。

- 本地方法栈:用于支持 Native 方法的执行。

- 程序计数器:记录当前线程执行的字节码指令地址。

2. 什么是垃圾回收?如何判断一个对象是否可以被回收?

 

- 垃圾回收是 JVM 自动回收不再使用的对象所占用的内存空间的过程。

- 判断对象是否可回收通常使用可达性分析算法,通过一系列的“GC Roots”对象作为起始点,从这些节点开始向下搜索,走过的路径称为引用链。当一个对象到任何一个“GC Roots”都没有引用链相连时,则证明此对象是不可用的,可以被回收。

 

五、Spring Boot 相关类

 

1. 什么是 Spring Boot?它有哪些特点?

 

- Spring Boot 是一个用于快速开发基于 Spring 框架的独立应用程序的工具。它简化了 Spring 应用的搭建和开发过程,通过自动配置、起步依赖等特性,让开发者可以快速构建可运行的应用。

- 特点包括:快速创建独立的 Spring 应用、自动配置、起步依赖简化项目配置、内置服务器(如 Tomcat、Jetty)方便部署、提供生产就绪的特性(如监控、健康检查等)。

2. Spring Boot 的自动配置是如何实现的?

 

- Spring Boot 通过在类路径下扫描特定的条件和注解来自动配置应用。例如,当发现某个依赖在类路径中时,就会自动配置相应的组件和功能。它使用了条件注解(如 @ConditionalOnClass、@ConditionalOnProperty 等)来决定是否进行特定的配置。

3. 谈谈 Spring Boot 的起步依赖(starter)的作用?

 

- 起步依赖是一组预定义的依赖集合,它为特定的功能或技术领域提供了一站式的解决方案。例如,spring-boot-starter-web 包含了构建 Web 应用所需的 Spring MVC、Tomcat 等依赖,大大简化了项目的依赖管理。

4. 如何在 Spring Boot 中进行配置?

 

- 可以通过 application.properties 或 application.yml 文件进行全局配置,也可以通过使用 @Configuration 注解的 Java 类进行自定义配置。还可以使用环境变量、命令行参数等方式进行配置。

5. 讲讲 Spring Boot 的 actuator 模块的作用?

 

- actuator 模块提供了一系列用于监控和管理应用的端点。可以查看应用的健康状况、内存使用情况、线程信息等,还可以进行一些操作,如关闭应用等。它有助于在生产环境中对应用进行监控和管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值