2023JAVA面试题总结

作为一名2022届计算机毕业生,考公失败后,就开始研习java,经历了大大小小的面试,遇到了一些基础问题或者是后端框架各种问题,在此总结一下,希望对同行人有所帮助

JAVASE

1.equall和==的区别

这个是很多喜欢问基础问题的java面试官喜欢问的问题

首先"=="是判断基本数据类型,而equalls是判断引用数据类型,如果用"=="比较引用数据类型,比较的会是地址值,equalls也可以用来做基本数据类型的比较.

equalls是一个方法,可以被重写,"=="只是一个运算符号

2.int和integer的区别

1>integer是int的装箱

2>integer是引用数据类型,而int是基本数据类型

3>integer的默认值是null,int的默认值是0

4>Integer变量必须实例化之后才能使用,而int变量不需要实例化

3.面向对象三大特性

封装:把我们所需要的方法或者属性,不希望外界看到的,提取出来封装成一个类,并进行操作

继承:子类继承父类,并且重写父类中的方法,就可以实现父类中的方法,并且在此基础上扩展新的属性和方法

多态:父类引用指向子类对象

4:单例模式

懒汉模式和饿汉模式

懒汉模式:就是实例用到的时候才会去创建,就是用的时候才去检查有没有实例,如果有则直接返回,没有则新建

饿汉模式:就是在类加载的时候就进行初始化,并且创建单例对象,保证线程绝对安全

5.方法重载和方法重写的区别

方法重载:方法名相同,返回值相同,参数列表不同

方法重写:方法名相同,返回值相同,参数列表相同

6.super和this的区别

this指代的是本类中的属性,方法,构造方法如果没有就从父类中指代

super指代的是父类中的属性,方法,构造方法

7.权限修饰符有哪些,分别起到什么作用

public:他的作用权限是在当前包,当前类,当前子类,和其他的包

protected:他的作用权限是在当前包,当前类,当前子类

deafult(默认/不写):他的作用权限是在当前包,当前类

private:它的作用权限实在当前类

8.多线程中wait方法和sleep方法的区别

wait():中止线程,只能通过notify()方法或者notifyAll()方法来唤醒线程

sleep():中止线程,但是他可以在后面定义一个时间,时间过了之后,自动唤醒线程

9.final,finally,finalize的区别

final:关键字,被final修饰的变量是常量,被final修饰的方法不能被重写,被final修饰的类不能被继承

finally:用于try...catch中,跟在catch代码块后面,finally中的代码一定会执行

finalize:用于垃圾的自动回收中

10.Object类中有什么方法

toString方法.equalls方法,hashCode方法,clone方法,notify方法,notifyAll方法等等,你说出来这几个基本就够用了

11.简要的说一下集合

集合包括collection,map,iterator迭代器

Collection又括List和Set,List包括ArrayList和LinkList,Set包括HashSet和TreeSet

Map包括HashMap和TreeMap

12.创建对象的方式

1>使用New关键字创建对象

2>反射

3>clone

4>序列化

13.创建线程的方式

1>继承Thread类

2>实现Runable接口,重写run方法

3>实现Callable接口,重写run方法

4>创建线程池

14.Callable和Runable的区别

Runnable接口不会返回结果和抛出异常,Callable接口可以返回结果和抛出异常。
15.事务的四个基本特征

1>一致性:事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。

2>原子性:事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一,要么都成功,要么都失败

3>持久性:事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态

4>隔离性:事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。

框架

1.Spring有哪些注解

@Configuration

@ComponentScan

@PathVariable

@Service

@Repository

@Bean

@Value

@Param

2.SpringBoot的注解

@Controller

@ResponseBody

@RequestMapping

@RestController

@PathVariable

@Value

@RequestBody

3.简要说说IOC,AOP

 IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。

AOP面向切面编程,简单来说就是在不修改源代码的基础上,增加切面,扩展更多的功能和属性,优点在于减少业务开发过程中代码冗余,提高开发效率

4.mybatics相对于JDBC来说有什么好处

1、频繁的创建和销毁数据库链接
2、sql存在硬编码,?(占位符)
3、语句对象也存在硬编码,setString(1,“admin”)
4、结果集的解析也存在硬编码。getString(“username”)

5.xml中$和#的区别

#方式能够很大程度防止sql注入。$方式无法防止Sql注入。

6.数据库中常用的动态sql标签

where标签

set标签

if 标签

trim标签

for each标签

常用的也就是这么几种标签

7.Spring Boot框架的优点是什么?它如何简化Spring应用程序的开发?

Spring Boot框架的优点包括:自动配置、快速开发、无需XML配置、内嵌Web容器等。

它通过提供一系列的starter依赖,简化了Spring应用程序的开发和部署

8.Spring 事务实现方式

编程式事务管理:在代码中调用 commit()、rollback()等事务管理相关的方法,这种方式带来了很大的灵活性,但很难维护。
声明式事务管理:将事务管理和业务代码分离。通过注解或者XML配置管理事务。

9.脏读、幻读、不可重复读的区别

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。

不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。

幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。

10.Spring主要使用了什么模式?

工厂模式:每个Bean的创建通过方法

单例模式:默认的每个Bean的作用域都是单例

代理模式:关于Aop的实现通过代理模式

SpringCloud

1.简要说一下服务熔断和服务降级

熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在Spring Cloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制

服务降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但可以使用,比直接挂掉强。

2.SpringBoot和SpringCloud的区别?

SpringBoot专注于快速方便的开发单个个体微服务。

SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系.

SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

3.什么是负载均衡

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

4.Eureka自我保护机制是什么?

当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。

5.SpringCloud的核心组件

Eureka:服务注册于发现。

Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。

Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。

Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。

Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。
6.微服务之间是如何通讯的

服务的注册与发现,直接通过过程调用来访问别的service。

7.SpringCloud 服务注册和发现是什么意思?Spring Cloud 如何实现?

当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。

Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。

8.什么是Spring Cloud Gateway?

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。

9.SpringCloud有哪些中间件?

服务注册与发现:Eureka、Consul、ZooKeeper。

负载均衡:Ribbon、LoadBalancer。

配置中心:Spring Cloud Config、Consul、ZooKeeper。

消息队列:RabbitMQ、Kafka。

服务调用与API网关:Feign、API Gateway。

认证与授权:Spring Security、OAuth2、JWT。

分布式任务调度:Spring Cloud Task、Quartz

10.SpringCloud雪崩效应和解决办法

 在微服务架构中,服务之间通常存在级联调用。比如,服务A调用服务B,而服务B需要调用服务C,而服务C又需要调用服务D。如果其中任意一点不可用,或者存在响应延时,则可能造成很多服务不可用,即产生级联故障。
    如果这类请求很多,服务不可用导致积累的请求越来越多,则占用的计算机资源越来越多,太多的请求会很快耗尽系统的资源,从而导致系统瓶颈出现,造成其他的请求也不可用,最终造成整个系统不可用。这种现象被称为“服务雪崩”。

解决雪崩问题的常见方式:

  • 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
  • 船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内,避免整个船体都被淹没。

    与此类似,我们可以限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。

  • 断路器模式:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。

  • 流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值