自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 SpingBoot原理篇 :深入学习springboot原理,主要偏向于底层原理

SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。比如:我们要进行事务管理、要进行AOP程序的开发,此时就不需要我们再去手动的声明这些bean对象了,我们直接使用就可以从而大大的简化程序的开发,省去了繁琐的配置操作。下面我们打开idea,一起来看下自动配置的效果:运行SpringBoot启动类。

2024-04-29 13:56:46 1079

原创 SpringCloud高级篇(超详细)

SpringCloud是目前国内使用最广泛的微服务框架。。SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。其中常见的组件包括:学习的版本是 Hoxton.SR10,因此对应的SpringBoot版本是2.3.x版本。SpringCloud基于SpringBoot在某一次的服务调用关系中,会有两个不同的角色:#必须针对某一个具体的业务(订单查询),才能谈角色服务提供者:一次业务中,被其它微服务调用的服务。

2024-04-28 12:00:13 699

原创 深入解析MyBatisPlus 一篇直接让你学会MyBatisPlus

MyBatisPlus环境搭建的步骤?BaseMapper注意:BaseMapper后边必须指定泛型User,以此来确定操作的表MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率https这个统计SQL在企业开发中,一般会使用MyBatis在xml中编写sql//统计//分组//查询总记录数在模型类属性上方,使用注解,通过==exist==属性,设置属性在数据库表字段中是否存在,默认为true。此属性无法与value合并使用。

2024-04-28 10:13:51 915

原创 Redis高级篇详细讲解

Redis主从Redis哨兵Redis分片集群【运维】

2024-04-26 11:43:07 1164 3

原创 MQ 详细操作高级篇 让你从不懂到熟练使用

每个RabbitTemplate只能配置一个ReturnCallback,因此需要在项目启动过程中配置作用:如果消息没有到达队列,会执行回调方法@Slf4j//ApplicationContextAware: 在Spring容器(Bean工厂)创建好的时候,通知咱们@Override// 获取RabbitTemplate// 设置ReturnCallback,先用匿名内部类// 投递失败(没有到达队列),记录日志。

2024-04-26 11:21:10 1158

原创 SpringBootWeb AOP从基础到深入讲解 看完这篇让你受用整个代码人生

我们接着继续学习@Transactional注解当中的第二个属性propagation,这个属性是用来配置事务的传播行为的。什么是事务的传播行为呢?就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。例如:两个事务方法,一个A方法,一个B方法。在这两个方法上都添加了@Transactional注解,就代表这两个方法都具有事务,而在A方法当中又去调用了B方法。

2024-04-25 17:04:15 1082

原创 Maven高级篇:Maven从基础到高级 (超详细讲解)耐心 看完这篇直接从小白到深层次理解

所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多个模块进行开发。1). 未分模块设计的问题如果项目不分模块,也就意味着所有的业务代码是不是都写在这一个 Java 项目当中。随着这个项目的业务扩张,项目当中的业务功能可能会越来越多。假如我们开发的是一个大型的电商项目,里面可能就包括了商品模块的功能、搜索模块的功能、购物车模块、订单模块、用户中心等等。这些所有的业务代码我们都在一个 Java 项目当中编写。

2024-04-25 10:23:35 955

原创 Java面试必问题53:(部署必学篇)Nginx作用 && Linux的常用命令 && Jenkins自动部署原理

Jenkins 通过提供一个可定制的、持续集成和交付的自动化流程,结合不同的插件和工具,实现了 Java 项目的自动化部署。nohup java -jar myapp.jar &(在后台执行名为"myapp.jar"的Spring Boot JAR文件)tail -n 10 file.txt(显示名为"file.txt"的文件的最后10行内容):将多个请求均匀的分配到多台服务器上,减轻每台服务器的压力,提高 服务的吞吐量。cat file.txt(显示名为"file.txt"的文件的内容)

2024-04-24 08:44:21 510

原创 Java面试必问题52:(高级面试篇)MongoDB的详细解释以及他的用法以及他跟Redis的区别以及优势

最简回答:MongoDB比MySQL快的原因在于它使用内存映射技术提高数据访问速度、支持多类型索引优化查询、具备分布式存储和查询能力,并且不需要复杂的关系模型,适用于大规模数据处理和非结构化数据存储的场景。最简回答:MongoDB的使用能够带来非结构化数据存储、高可扩展性和性能、灵活的开发过程、高可用性和容错性、强大查询功能以及活跃的社区支持和生态系统,适用于许多大规模数据处理和非结构化数据存储的应用场景。相比于关系型数据库,MongoDB不需要事先定义数据结构和关系模型,可以更加灵活地存储和查询数据。

2024-04-24 08:40:50 604

原创 Java面试必问题51:Seata分布式事务框架使用(高级理解)

二阶段是提交确认/回滚阶段,TC向所有参与者发送事务提交请求,参与者根据Undo Log进行事务提交,并向TC发送提交完成通知。最后,TC根据参与者的提交完成通知,发送最终的全局提交或回滚指令,参与者执行最终操作完成事务的提交或回滚。AT模式:效率较高、回滚机制通过发送回滚请求和Undo Log实现、通过两阶段提交协议实现最终一致性,一阶段提交请求阶段收集执行结果和Undo Log,二阶段提交确认/回滚阶段执行最终操作。在二阶段,参与者根据Undo Log进行提交或回滚操作,效率较高。

2024-04-23 13:58:01 468

原创 Java面试必问题50:ElasticSearch倒排索引详解

最简回答:ElasticSearch 的倒排索引是一种将词条和文档ID之间的对应关系反转存储的结构,通过快速定位包含特定词条的文档来提高搜索效率。综上所述,Elasticsearch的倒排索引通过存储词项和文档ID的对应关系以及使用紧凑的数据结构和内存缓存,实现了高效的搜索效率。倒排索引通过将文档ID与词项的对应关系反转,实现了从词项到文档的映射,从而方便快速定位包含特定词项的文档。Elasticsearch的倒排索引是一种高效的数据结构,存储了词条(term)和文档ID之间的对应关系。

2024-04-23 13:56:49 251 1

原创 Java面试必问题49:Xxl-Job原理分析 && 详细使用步骤以及为什么不使用SpringTask

相比于springTask,xxl-job具有更强的分布式支持和可扩展性,适用于复杂的分布式系统和大规模任务管理场景,而springTask更适用于简单的任务调度和单机环境。最简回答:xxl-job集成到Spring Boot工程中的使用步骤包括:添加xxl-job的依赖到构建文件中、配置xxl-job的参数,如调度中心地址和执行器名称,创建执行器类并注册为Spring的Bean,编写定时任务类并在项目启动时初始化任务调度器。xxl-job提供了一个简洁易用的任务管理界面,可以方便地配置和监控任务。

2024-04-22 09:44:53 618

原创 Java面试必问题48:(高级篇) RabbitMQ功能&&作用 以及他的详细使用方式

2. 消息去重:消费者应用程序在处理消息之前,可以在自己的系统中维护一个消息记录表,记录已经处理过的消息的唯一标识符。在接收到新消息时,先检查该消息是否已经处理过,如果已经处理过,则忽略重复消息。手动消息确认(Manual Message Acknowledgement):消费者在处理完消息后,发送确认回执给RabbitMQ,告知消息已被成功处理,RabbitMQ可以删除该消息。通过组合使用以上的措施,可以实现全方位的消息可靠性保证,减少消息丢失和处理错误的风险,并确保消息系统的高可用性和稳定性。

2024-04-22 09:41:08 1117 2

原创 Java面试必问题47:Gateway的路由断言工厂深入解析

在网关的路由配置里只需要在-Path中配置/user/**,那么以user开头的请求就会被网关处理,这是如何实现的呢?事实上,Gateway中有很多的路由断言工厂,当我们在配置文件中对断言进行配置后,这些配置就会被路由断言工厂进行解析并处理,而-Path配置就是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory来处理的。

2024-04-20 11:34:14 356 2

原创 Java面试必问题46:Gateway详解以及使用方法

最简回答:Gateway网关是一种API网关,具有路由、负载均衡、安全认证、限流熔断等特性,用于统一管理和分发请求,提高系统的可用性、安全性和可扩展性。网关可以根据请求的路由规则将请求转发到不同的服务实例,并提供过滤器机制来实现请求的加解密、鉴权、限流等功能。Gateway可以对请求进行监控和统计,记录请求的响应时间、流量等指标,方便分析系统性能和问题排查。6. 监控和统计:可以通过与监控工具集成,对Gateway的请求进行监控和统计,获取系统的性能指标。

2024-04-20 11:32:43 451

原创 Java面试必问题45:Hystrix的具体使用以及使用方法

总而言之,Hystrix的熔断机制通过监控服务请求的错误率,当错误率超过阈值时,快速切换到备用逻辑,避免了对失败服务的不必要请求,提高了系统的稳定性和可靠性。而Hystrix的熔断机制能够避免这种情况的发生,减少了对失败服务的依赖,提高了系统的稳定性。Hystrix是一个用于实现服务容错和熔断的库,在分布式系统中起到了保护系统免受服务故障的影响的作用。- 提高系统稳定性:通过熔断机制,当某个服务出现故障或不可用时,可以快速切换到备用的降级逻辑,保护整个系统免受服务故障的影响。

2024-04-19 09:07:06 339

原创 Java面试必问题44:谈谈Feign的工作原理

最简回答:Feign是一个声明式的Web服务客户端,通过定义Java接口来描述服务间的通信协议,包括URL、请求方法、请求参数等。当调用代理对象的方法时,Feign会根据方法的注解和参数生成HTTP请求,并发送给目标服务。总结起来,Feign的工作原理就是根据接口定义生成代理对象,通过代理对象发送HTTP请求给目标服务,并将响应解析为Java对象返回给调用者。当调用代理对象的方法时,Feign会根据方法的注解和参数生成HTTP请求,并发送给目标服务。目标服务处理完请求后,将响应返回给Feign客户端。

2024-04-19 09:05:32 390

原创 Java面试必问题43:Nacos作为注册中心的工作原理 && Nacos和Eureka的区别

最简回答:Nacos注册中心是一个服务注册与发现的工具,它提供了服务提供者将服务注册到注册中心,并让服务消费者从注册中心获取服务实例的能力。最简回答:Nacos和Eureka都是服务注册与发现组件,但Nacos比Eureka功能更丰富,除了服务注册与发现外,还提供了配置管理和服务治理功能。通过临时实例和心跳检查等机制,Nacos注册中心能够动态管理服务实例,自动剔除失去连接或不健康的实例,确保服务的可靠性和稳定性。注册中心根据服务名从存储的服务实例信息中找到对应的实例列表,并返回给服务调用者。

2024-04-18 10:24:28 613

原创 Java面试必问题42:Eureka工作原理

它通过服务注册,在启动时将服务实例信息注册到Eureka注册中心;通过服务发现,让消费者能够从注册中心获取可用的服务列表;总结起来,Eureka通过服务注册、心跳检测与续约、服务发现、负载均衡和容错处理等步骤来实现服务注册与发现的功能。服务消费者从Eureka注册中心获取注册的服务列表,并缓存在本地。它可以根据服务名称找到可用的服务实例。服务提供者在启动时,将自己的服务实例信息(包括名称、IP地址、端口号等)注册到Eureka注册中心。服务消费者使用负载均衡算法从本地的服务列表中选择一个服务实例进行调用。

2024-04-18 10:22:20 260

原创 Java面试必问题41:SpringCloud五大组件是哪几个 && SpringCloud 和 SpringBoot 的区别和关系

Spring Cloud 是关注全局的微服务协调整理治理框架以及一整套的落地解决方案,它 将 Spring Boot 开发的 一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线等的集成服务。这五个组件是Spring Cloud中常用的核心组件,它们提供了一系列功能来简化构建分布式系统的工作,实现了服务注册与发现、负载均衡、服务调用、熔断和容错、网关等关键功能,极大地提高了分布式系统的可靠性和可用性。SpringCloud五大组件是哪几个。

2024-04-17 14:12:46 526

原创 Java面试必问题40:SpringBoot启动时都做了什么 && SpringBoot的核心注解是哪个?由哪些注解组成?

最简回答:Spring Boot启动时会加载配置文件(如application.properties)并扫描自动配置类(通过`spring.factories`),根据条件判断(如`@ConditionalOnClass`、`@ConditionalOnProperty`)自动配置各个组件,将它们注册到Spring容器中。最后,启动应用程序,处理请求,响应用户。根据`spring.factories`中配置的自动配置类路径,Spring Boot会扫描这些自动配置类,并将它们实例化。

2024-04-17 14:10:50 257

原创 Java面试必问题39:SpringBoot自动配置原理(必问)&& SpringBoot(优点)

它通过扫描类路径下的依赖、配置文件和注解等信息,结合Spring Boot提供的自动配置类和条件注解,根据条件判断自动配置哪些组件,然后将它们注入到Spring容器中。使用Spring Boot可以简化编码、简化配置、简化部署、简化监控、简化依赖坐标导入、简化整合其他技术,并提供强大的微服务支持,减少开发人员在搭建和配置项目上的工作量,使开发者能够更专注于业务逻辑的实现,快速构建可靠的、可扩展的应用程序。开发者可以通过自定义配置文件或者注解,覆盖或修改自动配置的行为,实现个性化的配置和扩展。

2024-04-16 08:55:38 467

原创 Java面试必问题38:SpringMVC执行流程(工作原理)(一般必问)&& SpringMVC的常用注解

View(视图):是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在 View 视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理。Model(模型):是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。5.处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View 是逻辑上的View。

2024-04-16 08:51:21 383

原创 Java面试必问题37: Spring的常用注解 && Resources和@Autowired 的区别

Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现!@Autowired通过byType的方式实现,而且必须要求这个对象存在!@Autowired:用于有值设值方法、非设值方法、构造方法和变量。@Repository:用于注册dao层的bean。@Controller:用于注册控制层的bean。@Component:用于注册所有bean。@Service:用于注册服务层的bean。都是用来自动装配的,都可以放在属性的字段上。@Value: 简单属性的依赖注入。

2024-04-15 09:16:29 312

原创 Java面试必问题36:Bean的几种注入方式 && Spring里AOP是什么以及他的应用场景

Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使 用JDK动态代理去创建代理对象;最简回答:在Spring中,AOP (Aspect-Oriented Programming,面向切面编程) 是一种编程范式,通过在不修改原有代码的情况下,将横切关注点(如事务管理、日志记录等)从核心业务逻辑中解耦出来,并在需要的地方进行统一的切面逻辑处理。构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

2024-04-15 09:12:41 371

原创 Java面试必问题35:对于Spring里IOC深入解释如果回答 (本人理解为)

IOC容器就像是一个工厂一 样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是 如何被创建出来的。IOC 容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放 的是各种对象。最简回答:在Spring中,IOC (Inversion of Control,控制反转) 是一种设计模式,通过它,对象的创建和依赖关系的管理被交由容器负责,从而实现对象之间的解耦和灵活性的提升。简单说,就是由容器来控制对象的生命周期和依赖关系。

2024-04-12 15:47:41 548

原创 Java面试必问题34:ResultType 和 ResultMap 的区别 && MyBatisPlus的常用注解

如果数据库结果集中的列名和要封装实体的属性名有不一致的情况用 resultMap 属 性,通过 resultMap 手动建立对象关系映射,resultMap 要配置一下表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来。该注解可以在实体类的字段上添加,表示该字段作为乐观锁的版本字段。:用于指定实体类的字段对应的数据库表的字段名。该注解可以在实体类的字段上添加,表示该字段映射到指定的数据库表字段。该注解可以在实体类的字段上添加,表示该字段作为数据库表的主键。

2024-04-12 15:45:31 551

原创 Java面试必问题33:MyBatis里#和{}区别&&MyBatis动态SQL

最简回答:在MyBatis中,# 用于参数的替换,并会进行预编译处理,以防止SQL注入,而 {} 则直接将参数值替换进SQL语句,性能较好但需注意SQL注入问题。- `#`符号适用于动态SQL值,如动态拼接表名、列名、排序方式等,这些值可能需要进行预处理转义以确保正确形成SQL语句。- `{}`符号在替换时不会进行预编译处理,替换后的参数直接拼接到SQL语句中,潜在地存在SQL注入的风险。- `#`符号在替换时会自动进行预编译处理,可以防止SQL注入攻击,并确保查询参数的类型正确匹配。

2024-04-11 09:45:47 293

原创 Java面试必问题32:Redis篇(重点) Redisson是什么,怎么用以及Redisson的看门狗机制原理解析

一旦锁的续期失败,即续期任务运行失败或锁的标识不匹配,Redisson会立即释放该锁,以避免业务不再持有锁而导致的问题。例如,使用Redisson的分布式锁,可以注入RedissonClient对象后调用getLock方法来获取锁对象,然后使用lock方法加锁,并在需要时执行相应的操作,最后使用unlock方法释放锁。总结来说,Redisson的看门狗机制通过定时续期锁的过期时间,保证在业务执行期间锁不会被自动释放,解决了在分布式环境下使用分布式锁时锁过期的问题,提高了锁的可靠性和使用效果。

2024-04-11 09:00:57 533

原创 Java面试必问题31:Redis必问篇

分片集群由多个节点组成,根据Key经过哈希算法映射到不同的节点上,每个节点负责存储和处理一部分数据,工作原理是通过一致性哈希算法将数据按照一定规则分配到不同的节点上,实现数据的均衡存储和查询。哨兵集群由多个哨兵节点组成,工作原理是哨兵节点通过相互通信,监测主节点的健康状态,当主节点失效时,选举新的主节点,并通知其他从节点进行切换,确保系统的可用性。每个节点负责管理一部分槽和相应的数据。当主节点失效或不可用时,哨兵可以自动检测到故障,并根据预先配置的策略进行主节点切换,将一个可用的从节点提升为新的主节点。

2024-04-10 11:59:51 510

原创 Java面试必问题30:Redis篇(重点必问)

AOF是追加日志持久化方式,将每个写操作以追加的方式记录到日志文件中,确保了更高的数据完整性和持久性,但相对于RDB消耗更多的磁盘空间和写入性能,适用于数据持久化和灾难恢复,且可以通过配置实现不同的同步频率。(单线程,省去线程切换、锁竞争的开销)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;如果你的业务场景既要兼顾性能,又注重数据完整性,那么可以采用混合持久化的方式。

2024-04-10 10:34:18 559

原创 Java面试必问题29:MySQL篇(重点必问)

最简回答:数据库事务隔离级别是指在多个并发事务同时执行时,各个事务之间的隔离程度,常见的隔离级别有读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。在B+树索引中,每个节点的大小是固定的,与磁盘页的大小相当。B+树的叶子节点之间使用链表连接,并且叶子节点的关键字是有序的,因此对于范围查询操作,可以通过顺序扫描叶子节点来获取有序的数据结果,提高查询速度。事务隔离级别越严格,数据库效率越低。

2024-04-09 09:23:52 983

原创 Java面试必问题28:设计模式篇

Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对 象。Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;,例如ErrorContext和LogFactory;Spring中的bean默认都是单例的。

2024-04-09 09:10:45 621

原创 Java面试必问题27:单例模式的几种写法

getInstance()方法首先检查instance是否为null,如果为null,则进入同步块。在同步块内部,再次检查instance是否为null,这是为了防止多个线程同时通过了第一次检查,然后一个线程创建了实例,而另一个线程又创建了一个实例的情况发生。使用双重检查锁可以在保证线程安全的前提下,减少锁的竞争,提高性能。但需要注意的是,使用双重检查锁需要将instance声明为volatile类型,以确保多线程环境下的可见性。if (instance==null) { //第一次检查。

2024-04-08 10:04:08 478

原创 Java面试必问题26:ThreadLocal是一个什么样的技术

ThreadLocal是一种Java技术,它允许在多线程环境中维护线程私有的变量副本。解决方法:在使用完ThreadLocal后,在合适的地方调用remove()方法清理资源,可以使用try-finally语句块确保清理操作的执行,或者使用ThreadLocal的initialValue()方法设置初始值,这样在线程结束后会自动清理。解决方法:使用线程池时,应避免使用ThreadLocal变量或者在使用前后显式清理ThreadLocal变量,确保每次任务执行时ThreadLocal的状态是干净的。

2024-04-07 16:07:44 502

原创 Java面试必问题25:什么情况下会产生死锁,如何解决

检测死锁,使用算法检测出是否存在死锁,并采取相应的措施解除死锁;总的来说,解决死锁问题需要注意锁的申请顺序、资源分配策略、超时设置等,通过优化设计和避免资源竞争,可以减少死锁的可能性。6. 避免长时间持有锁:在代码设计中,尽量减少需要锁的代码块,避免长时间持有锁,减少死锁的机会。2. 资源竞争问题:当多个线程同时竞争有限的资源,例如共享的数据库连接、文件等,在资源分配不当的情况下,可能导致死锁。4. 死锁检测和恢复:通过死锁检测算法,定期检测系统中的死锁情况,并尝试解决死锁,然后恢复运行。

2024-04-03 09:16:49 644

原创 Java面试必问题24:线程池的拒绝策略有哪些 && synchronized 和 lock 的区别 (重点)

最简回答:线程池的拒绝策略有四种:AbortPolicy(默认方式,中止并抛出RejectedExecutionException异常)、CallerRunsPolicy(使用调用线程来执行被拒绝的任务)、DiscardPolicy(默默地丢弃被拒绝的任务)以及DiscardOldestPolicy(丢弃最早被添加到队列的任务,然后尝试重新提交新任务)。而Lock是一个接口,提供更灵活的同步机制,可以手动控制锁的获取和释放,底层实现可以是ReentrantLock等,性能在高竞争环境下通常较好。

2024-04-02 10:55:56 473

原创 Java面试必问题23:线程池工作原理 && 线程池大小如何设定

这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。一旦任务暂停,CPU 就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。这种任务应用起来,系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。当一个线程完成任务时,它会从队列中取下一个任务来执行。

2024-04-01 10:21:27 557

原创 Java面试必问题22:如何创建线程池(偏重点)&&创建线程池的注意事项

【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这 样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。线程池的生命周期包括初始化、执行任务和关闭。在关闭时,需要调用线程池的shutdown()或shutdownNow()方法来关闭线程池,并等待所有任务完成。线程池的大小应根据任务的类型和系统资源进行合理的配置。总之,自定义线程池需要合理配置线程池的大小、选择适当的任务队列和拒绝策略,正确管理线程池的生命周期,并考虑线程安全性。

2024-03-30 09:58:53 647

原创 Java面试必问题21:线程池核心参数

keepAliveTime => 当前线程池数量超过 corePoolSize 时,多余的空闲线程的存活时间,即多次时间内会被销毁。workQueue => 线程池所使用的缓冲队列,被提交但尚未被执行的任务。threadFactory => 线程工厂,用于创建线程,一般用默认的即可。maximumPoolSize => 线程池最大数量(包含核心线程数量)handler => 拒绝策略,当任务太多来不及处理,如何拒绝任务。corePoolSize => 线程池核心线程数量。

2024-03-29 09:30:13 456

Animal.java

Animal.java

2023-05-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除