当前位置: 首页 > news >正文

没有合理使用线程池,引发的生产环境BUG

引言

随着多线程和并发处理需求的增加,线程池成为了提升系统性能的重要工具。Java 提供了强大的 ThreadPoolExecutor 类,能够高效地管理线程池,减少线程创建和销毁的开销。然而,当线程池达到其最大容量时,如何优雅地处理被拒绝的任务就成为了一个关键问题。本文将深入探讨 Java 线程池的拒绝策略,帮助开发者理解并实现高效稳定的并发应用。

线程池

线程池是一种用于管理和复用线程的机制。它通过维护一个固定数量的线程来处理多个任务,减少了频繁创建和销毁线程带来的性能损耗。Java 的 ThreadPoolExecutor 类是实现线程池的核心,提供了丰富的配置选项以满足不同的应用需求。

线程池的工作原理__ThreadPoolExecutor 的工作原理可以简单描述为:

  • 核心线程数:线程池中始终保持的线程数量。
  • 最大线程数:线程池中允许的最大线程数量。
  • 任务队列:存放待执行任务的队列,当核心线程数已满且还有任务到来时,任务将被放入队列中。
  • 饱和策略:当线程池和任务队列均已满时,如何处理新提交的任务。。

小明是一名刚入职不久的 Java 开发工程师,在一家快速发展的初创公司工作。公司专注于在线教育平台,用户量不断攀升。随着用户的增加,网站的性能瓶颈愈发明显。为了提升系统的响应速度,小明被指派负责实现一个新的并发任务处理模块,任务是用线程池来处理用户的请求。

在项目开始时,小明充满激情,迅速地搭建了一个简单的线程池,使用 ThreadPoolExecutor 来管理并发任务。他的初步设计如下:

@Configuration
public class ThreadPoolConfig {@Beanpublic ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(2);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.initialize();return executor;}
}

小明以为这样就能轻松应对用户请求的高峰期,便开始在后台提交任务。他的信心来源于对线程池的基本了解和对项目的热爱。

问题出现

几周后,系统上线了新的任务处理模块,最初的几天一切运行良好。然而,随着用户量的不断增加,问题随之而来。在一次用户登录高峰期,系统突然出现了“请求超时”的错误,用户反馈无法正常使用网站。

小明接到报告后,立刻开始排查问题。他打开日志,发现大量的 RejectedExecutionException 错误,提示任务被拒绝执行。这一消息让他心里一沉,意识到自己的设计出现了问题。

日志中的错误信息如下:

java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@17ebe8b3[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@9c0c0bb[Wrapped task = com.neo.service.TaskService$$Lambda$810/0x000000080060a840@2bd99784]] rejected from java.util.concurrent.ThreadPoolExecutor@63bf4c3c[Running, pool size = 10, active threads = 10, queued tasks = 100, completed tasks = 0]at java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2055) ~[na:na]at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:825) ~[na:na]at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1355) ~[na:na]

小明脑中回忆起之前对线程池的理解:线程池有一个核心线程数和一个最大线程数,任务队列的容量有限。随着任务的不断提交,线程池已经达到最大负载,导致新任务被拒绝。

深思熟虑

小明感到非常沮丧,他意识到自己的设计并没有考虑到高并发场景下的任务处理能力。他开始反思自己的选择,心想:“我该如何解决这个问题?是增加线程池的容量,还是更改任务的处理逻辑?”经过深思熟虑,他决定先在本地环境中进行实验,以找出更好的解决方案。

他创建了一个小型的模拟程序,使用不同的线程池配置和拒绝策略,测试其对任务提交和处理的影响。小明发现,增加线程池的最大容量和任务队列的大小能够有效地处理更多的并发请求,但在极端情况下,仍然可能遇到拒绝执行的情况。

寻求帮助

在一次团队会议上,小明把自己的发现和想法分享给了同事们。资深的同事李工听了小明的描述后,给了他一些建议:

  1. 增加线程池容量:适当调整核心线程数和最大线程数,提升处理能力。
  2. 使用不同的拒绝策略:考虑使用 CallerRunsPolicyDiscardOldestPolicy,根据业务需求选择合适的策略。
  3. 优化任务逻辑:如果任务处理时间过长,考虑将长任务拆分为短任务,减少单个任务的执行时间。

小明深受启发,决定结合这些建议,重新设计任务处理模块。

重构代码

常见的拒绝策略

拒绝策略是在任务提交被拒绝时的处理方式。

AbortPolicy(默认策略):默认的拒绝策略是 AbortPolicy,当任务被拒绝时,它会抛出 RejectedExecutionException。这种策略适合对任务执行有严格要求的场景,确保所有任务都能被处理。

executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());

CallerRunsPolicy: 策略会将被拒绝的任务交由调用者线程执行。这种策略有效地减缓了任务的提交速度,适合需要动态调整负载的场景。

executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

DiscardPolicy: 策略中,被拒绝的任务将被丢弃,不会抛出任何异常。这种策略适合对丢弃任务没有影响的场景,如低优先级的批处理任务。

executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());

DiscardOldestPolicy: 策略会丢弃任务队列中最旧的任务,并尝试提交当前任务。这有助于保持任务队列的活跃性,适合对新任务更为关注的场景。

executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());

选择合适的拒绝策略

选择合适的拒绝策略取决于应用的需求和任务的优先级。

  • AbortPolicy:当任务执行有严格要求时使用,确保不会丢失任何任务。
  • CallerRunsPolicy:需要动态调整负载时使用,可以有效减缓任务提交速率。
  • DiscardPolicy:适合低优先级任务,可以接受任务丢失的场景。
  • DiscardOldestPolicy:适合需要保持任务活跃的场景,优先丢弃最旧的任务。

经过几天的努力,小明对代码进行了重构。他首先增加了线程池的最大容量和任务队列的大小,并选择了 CallerRunsPolicy 拒绝策略,这样在任务被拒绝时,调用者线程会执行该任务,从而减缓提交速度。

@Configuration
public class ThreadPoolConfig {@Beanpublic ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(2);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;}
}

小明还将任务的执行逻辑进行了优化,减少了每个任务的处理时间。经过这些改进,他在本地环境进行了充分的测试,系统稳定性大大提升。

验证一下效果:我们可以看到系统是没有出现错误的,线程也一直被消费。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上线与监控

经过团队的评审和测试后,小明的改进方案得到了批准,新的任务处理模块上线了。上线初期,系统运行平稳,没有出现拒绝执行的情况。为了确保系统在高负载下依然稳定,小明还设置了监控,实时观察线程池的状态。

我们也可以通过JPS和Jstack命令来查看堆栈信息的情况。

请在此添加图片描述

也可以使用 Java 提供的 JMX 和 APM 等工具,监控线程池的活跃度、任务数量和拒绝任务的数量。通过这些监控,他能够及时发现潜在问题并进行调整。

我们打开另一个命令行窗口,输入jconsole启动JavaSE自带的一个JMX客户端程序:

请在此添加图片描述

请在此添加图片描述

总结与反思

通过这次经历,小明学到了很多。他认识到,合理使用线程池是保证系统性能的关键,同时,设计时必须考虑到高并发场景下的各种情况。此外,团队合作和同事的建议对他而言都是极为重要的,及时沟通与反馈是解决问题的有效途径。

小明的故事是一个关于成长和学习的过程。从最初的无知到最终的成熟,他不仅仅是修复了一个 BUG,而是提升了自己作为开发者的能力。

结尾

在技术的道路上,我们都可能遇到挑战和困难。正如小明所经历的,通过不断的学习、反思和改进,我们能够克服这些困难,成为更优秀的开发者。希望每位读者都能在自己的旅程中,像小明一样,迎接挑战,收获成长。

相关文章:

没有合理使用线程池,引发的生产环境BUG

引言 随着多线程和并发处理需求的增加,线程池成为了提升系统性能的重要工具。Java 提供了强大的 ThreadPoolExecutor 类,能够高效地管理线程池,减少线程创建和销毁的开销。然而,当线程池达到其最大容量时,如何优雅地处…...

异步处理与后台任务管理:在 FastAPI 中实现高级特性

异步处理与后台任务管理:在 FastAPI 中实现高级特性 目录 ⚡ 背景任务与异步处理概述🛠️ 使用 BackgroundTasks 执行后台任务🚀 异步视图函数:使用 async 和 await🔄 处理并发任务:提升应用性能与响应能…...

ceph存储池

1、存储池 1、存储池的概念 存储池就是ceph的逻辑分区,专门用来存储对象的 特点 将文件切片成对象,通过hash算法,找到存储池中的pg,池中的pg根据crush算法找到osd节点 存储中的PG数量对性能有重要的影响,过多和过少…...

STM32基于HAL库的串口接收中断触发机制和适用场景

1. HAL_UART_Receive_DMA函数 基本功能 作用:启动一个固定长度的 DMA 数据接收。特点: 需要预先指定接收数据的长度(Size 参数)。DMA 会一直工作直到接收到指定数量的数据,接收完成后触发 HAL_UART_RxCpltCallback 回…...

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键,打开如下界面,选择【系统】: 2、选择【屏幕】-【高级显示设置】 如下位置,显示屏幕的刷新率:60Hz 如果可以更改,则选择更高的刷新率,有助于电脑使用起来界面更加流…...

Q3收入回退,盈利与商业化落地步履艰难,文远知行亟待背水一战

撰稿|行星 来源|贝多财经 12月2日,全球商业杂志《Fortune》(财富)揭晓了2024年“未来50强”(The Future 50)企业榜单,上市不久的全球Rbotaxi第一股文远知行(NASDAQ:WRD)位列第26名…...

如何利用Java爬虫获得商品类目

在当今数字化时代,数据已成为企业最宝贵的资产之一。获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言,获取商品类目数据尤为重要,因为这些数据可以帮助他们更好地理解市场…...

Charts 教程:创建交互式图表的基础

ECharts 是一个开源的、基于 JavaScript 的数据可视化库,它可以帮助你快速创建交互式的图表。无论是简单的柱状图、折线图,还是复杂的地图和关系图,ECharts 都能够轻松应对。本文将带你了解如何在你的网页中使用 ECharts 创建图表&#xff0c…...

Jackson - JsonGenerator创建JSON、JsonParser解析JSON

以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先&#xff0c;在pom.xml文件中添加以下依赖项以引入Jackson库&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupI…...

数据结构与算法——1202—排序递归

1、选择排序 #include<iostream> #include<vector> using namespace std;void SelectSort(vector<int>& nums) {int i;int j;int minIndex;int length nums.size();if (length 0 || length 1) return;for (i 0; i < length-1; i)//遍历所有元素{…...

Lattice Radiant Software Lattice Propel Builder Lattice Propel 2024.1 安装

因项目需要&#xff0c;对Lattice 器件LIFCL-40 CrossLink进行评估 先从Lattice官网下载Radiant安装包&#xff1a; Lattice Radiant设计软件 新建工程环境...

【Linux系统】 Linux内核与UNIX设计哲学的结合

Linux 内核虽然不是 UNIX 的直接衍生物&#xff0c;但它深受 UNIX 设计哲学的影响。Linux 的开发者&#xff0c;尤其是 Linus Torvalds&#xff0c;在设计和实现 Linux 时&#xff0c;借鉴了 UNIX 的核心思想&#xff0c;使 Linux 成为一个类 UNIX 系统。 以下从 UNIX 设计哲学…...

MKS EDGE Series RF Generators Power Solution 软件

MKS EDGE Series RF Generators Power Solution 软件...

【机器学习 | 基于Lasso回归和随机森林的上海链家二手房房价预测】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 去除缺失数据2.5 面积、价格、单价、楼层、建筑时间数据提取2.6 朝向数据处理 &#x1f3f3;️‍&#x1f308; 3. 特…...

MyBatis-Plus分页查询方式

分页查询基本方式 SpringBootTest(classes LearningApplication.class) public class MPTest {AutowiredILearningLessonService lessonService;Testpublic void test(){/*** Page<LearningLesson>&#xff1a;MyBatisPlus提供的分页对象* 1&#xff1a;当前页数* 2&am…...

分布式cap

P&#xff08;分区安全&#xff09;都能保证&#xff0c;就是在C&#xff08;强一致&#xff09;和A&#xff08;性能&#xff09;之间做取舍。 &#xff08;即立马做主从同步&#xff0c;还是先返回写入结果等会再做主从同步。类似的还有&#xff0c;缓存和db之间的同步。&am…...

【组件封装】uniapp vue3 封装一个完整的Tabs(标签页)组件教程,功能由简到杂实现讲解。

文章目录 前言一、简单版Tabs代码实现&#xff1a; 二、下划线带动画的TabsAPI回顾&#xff1a;代码实现&#xff1a; 三、内容区域滑动切换切换动画代码实现&#xff1a;&#xff08;2&#xff09;禁用手势滑动切换&#xff08;3&#xff09;内容区域换为插槽 四、标签栏可滚动…...

AI在SEO中的应用与关键词优化探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术为搜索引擎优化&#xff08;SEO&#xff09;带来了革命性的改变。传统的SEO主要依赖于人为的经验和判断&#xff0c;而AI则通过算法分析海量数据&#xff0c;提供更加精准和高效的方式优化关键词…...

JUC:Synchronized和锁升级

1. 面试题 谈谈你对Synchronized的理解Sychronized的锁升级你聊聊Synchronized实现原理&#xff0c;monitor对象什么时候生成的&#xff1f;知道monitor的monitorenter和monitorexit这两个是怎么保证同步的嘛&#xff1f;或者说这两个操作计算机底层是如何执行的偏向锁和轻量级…...

如何使用锁实现多进程和多线程的并发执行的安全

多进程和多线程的并发&#xff1a; 多进程和多线程的并发意思是在同一段时间内&#xff0c;多个进程或者线程一起执行&#xff0c;但是这些进程或者线程的执行并不是真正意义上在同一时刻执行&#xff0c;而是在不同的时间里执行&#xff0c;因为每个CPU在同一时间只能处理同一…...

LabVIEW如何用运动控制卡实现伺服电机的转矩控制?

在LabVIEW中&#xff0c;使用运动控制卡实现伺服电机的转矩控制&#xff0c;通常通过以下几个步骤来完成。这里将结合LabVIEW的运动控制功能和伺服电机控制的基本原理进行详细介绍。 ​ 1. 选择合适的运动控制卡 要实现伺服电机的转矩控制&#xff0c;首先需要一张支持伺服电…...

SQL面试题——百度SQL面试题 无效搜索

百度SQL面试题 无效搜索 今天的题目是来自百度的SQL 面试题目 现有一份用户搜索日志,包含用户ID,时间,用户搜索内容。定义 无效搜索:如果用户下一次搜索内容中包含本次搜索内容,则认为本次搜索为无效搜索。请查询用户无效搜索记录 +---------+---------------------+--…...

媒体查询、浏览器一帧渲染过程

文章目录 媒体查询语法示例根据视口宽度应用不同的样式根据设备像素比应用不同的样式根据方向应用不同的样式 使用场景 浏览器一帧的渲染过程 媒体查询 媒体查询&#xff08;Media Query&#xff09;是CSS3中的一个重要特性&#xff0c;它允许开发者根据设备的特定条件&#x…...

实习工作日志

工作日志 遇到的bug 由于不熟悉Python&#xff0c;造成了这个bug python的浅拷贝与深拷贝&#xff0c;一定要创建新的变量&#xff0c;否则只是单纯拷贝地址...

JavaWeb学习--cookie和session

目录 &#xff08;一&#xff09;Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​&#xff08;Cookie的生命&#xff09; &#xff08;二&#xff09; Cookie的API 1.创建Cookie&#xff1a;new 构造方法 2.保存到客户端浏…...

ETCD的封装和测试

etcd是存储键值数据的服务器 客户端通过长连接watch实时更新数据 场景&#xff1a; 当主机A给服务器存储 name&#xff1a; 小王 主机B从服务器中查name ,得到name-小王 当主机A更改name 小李 服务器实时通知主机B name 已经被更改成小李了。 应用&#xff1a;服务注册与发…...

c++引用笔记

1 引用的基本使用 // 引用 // 作用&#xff1a;给变量起别名 // 语法&#xff1a;数据类型 &别名 原名int main(int argc, char const *argv[]) {int a 10;int &b a;cout << "a " << a << endl;cout << "b " <&l…...

macOS运行amd64的镜像

在macOS上运行amd64&#xff08;x86_64&#xff09;架构的镜像&#xff0c;通常通过虚拟化或仿真工具来实现。例如&#xff0c;如果你使用的是基于Apple Silicon&#xff08;M1或M2等&#xff09;芯片的Mac&#xff0c;那么你的处理器是ARM架构的&#xff0c;而amd64是x86架构&…...

Oracle查询优化:高效实现仅查询前10条记录的方法与实践

在 Oracle 中&#xff0c;实现仅查询前10条记录的四种方法 1. 使用 ROWNUM 查询 ROWNUM 是 Oracle 中的伪列&#xff0c;用于限制返回的行数。 SELECT * FROM table_name WHERE condition AND ROWNUM < 10;condition&#xff1a;查询条件。ROWNUM < 10&#xff1a;限制…...

【时时三省】(C语言基础)结构体内存对齐

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 我们已经掌握了结构体的基本使用了。现在我们深入讨论一个问题&#xff1a;计算结构体的大小。 这也是一个特别热门的考点&#xff1a;结构体内存对齐 示例&#xff1a; 第一个s如果根据字…...

工业物联网关

工业物联网关的定义与功能 定义&#xff1a;工业物联网关是一种在工业物联网&#xff08;IIoT&#xff09;系统中起到关键连接作用的设备。它位于工业现场设备&#xff08;如传感器、执行器等&#xff09;和上层的工业网络&#xff08;如企业内部网络、云平台等&#xff09;之间…...

Docker 安装 Yapi

Docker 安装系列 Docker已安装。 1、场景Yapi使用的MongoDB用户信息 1.1 创建自定义 Docker 网络 首先&#xff0c;创建一个自定义的 Docker 网络&#xff0c;以便 MongoDB 和 YApi 容器可以相互通信 [rootflexusx-328569 data]# docker network create yapi-networ…...

MaxEnt模型在物种分布模拟中如何应用?R语言+MaxEnt模型融合物种分布模拟、参数优化方法、结果分析制图与论文写作

目录 第一章 以问题导入的方式&#xff0c;深入掌握原理基础 第二章 常用数据检索与R语言自动化下载及可视化方法 第三章 R语言数据清洗与特征变量筛选 第四章 基于ArcGIS、R数据处理与进阶 第五章 基于Maxent的物种分布建模与预测 第六章 基于R语言的模型参数优化 第七…...

UDE连接不上miniwiggler

PLS 的UDE 软件搭配miniwiggler硬件用来调试英飞凌的单片机是个不错的选择&#xff0c;比如TC275、TC387等等。英飞凌官方开发板板载了miniwiggler&#xff0c;非常方便。 很多买了英飞凌官方开发板的同学可能会发现&#xff0c;使用英飞凌的mentool软件能连接上自己的板子&…...

Trimble X9三维激光扫描仪高效应对化工厂复杂管道扫描测绘挑战【沪敖3D】

化工安全关系到国计民生&#xff0c;近年来随着化工厂数字化改革不断推进&#xff0c;数字工厂逐步成为工厂安全管理的重要手段。而化工管道作为工厂设施的重要组成部分&#xff0c;由于其数量多、种类繁杂&#xff0c;一直是企业管理的重点和难点。 传统的化工管廊往往缺乏详…...

数据结构(Doubly Linked List双向链表)

1.前言&#xff1a; 在计算机科学的广袤领域中&#xff0c;数据结构犹如构建高楼大厦的基石&#xff0c;它们为高效地组织、存储和处理数据提供了坚实的框架。而双向链表作为一种重要且功能强大的数据结构&#xff0c;在众多算法与程序设计场景中都展现出了独特的魅力与价值。…...

【踩坑】修复报错libcurl.so.4、LIBFFI_BASE_7.0、libssl.so.3

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ libcurl.so.4&#xff1a; sudo apt install curl -y LIBFFI_BASE_7.0: conda install libffi3.3 -y libssl.so.3: sudo apt install -y openssl li…...

【Java实现MySQL 数据库导出 Excel 表的方法详解】

MySQL 数据库导出 Excel 表的方法详解 在日常开发中&#xff0c;我们经常需要将数据库中的数据导出为 Excel 文件&#xff0c;以便进行数据分析或分享给其他同事。本文将详细介绍如何从 MySQL 数据库导出数据并生成 Excel 文件&#xff0c;具体实现将基于 Java 语言和 Spring …...

CentOS 7 环境下常见的操作和配置

目录 1. CentOS 7 中的 vsftpd 配置与使用 安装与启动 vsftpd 配置 vsftpd&#xff08;/etc/vsftpd/vsftpd.conf&#xff09; 常见命令 2. 使用 yum 包管理器 3. 安全性与防火墙配置 开放端口 4. 使用 systemd 管理服务 5. SELinux 配置 查看 SELinux 状态 临时禁用…...

使用mtools搭建MongoDB复制集和分片集群

mtools介绍 mtools是一套基于Python实现的MongoDB工具集&#xff0c;其包括MongoDB日志分析、报表生成及简易的数据库安装等功能。它由MongoDB原生的工程师单独发起并做开源维护&#xff0c;目前已经有大量的使用者。 mtools所包含的一些常用组件如下&#xff1a; mlaunch支…...

基于 RNN(GRU, LSTM)+CNN 的红点位置检测(pytorch)

文章目录 1 项目背景2 数据集3 思路4 实验结果5 代码 1 项目背景 需要在图片精确识别三跟红线所在的位置&#xff0c;并输出这三个像素的位置。 其中&#xff0c;每跟红线占据不止一个像素&#xff0c;并且像素颜色也并不是饱和度和亮度极高的红黑配色&#xff0c;每个红线放大…...

35页PDF | 元数据与数据血缘落地实施(限免下载)

一、前言 这份报告详细介绍了元数据与数据血缘的概念、重要性以及在企业数据中台中的应用。报告阐述了数据中台的核心价值在于整合和管理体系内的数据&#xff0c;以提升数据资产化能力并支持业务决策。报告还涵盖了元数据的分类&#xff08;技术元数据和业务元数据&#xff0…...

Hyperf jsonrpc

依赖的 composer 包 composer require hyperf/json-rpc composer require hyperf/rpc-server composer require hyperf/rpc-client composer require hyperf/service-governance composer require hyperf/service-governance-consul composer require hyperf/service-gove…...

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…...

go引入skywalking

前置条件&#xff1a;安装好jdk11&#xff0c;linux服务器&#xff08;centos7.9&#xff09;&#xff0c;go版本&#xff08;我的是1.18&#xff0c;1.21都可以&#xff09; 1.下载skywalking Downloads | Apache SkyWalking 2.下载agent源码 Downloads | Apache SkyWalkin…...

如何通过实构与虚构实现动态交互的态、势、感、知的编排组合

通过 实构 与 虚构 实现 动态人机交互的态、势、感、知 的编排组合&#xff0c;是一个涉及多领域的复杂任务。这个问题的核心在于如何将现实和虚拟世界中的元素&#xff0c;特别是人的 态 &#xff08;状态&#xff09;、 势 &#xff08;趋势&#xff09;、 感 &#xff08;感…...

easyexcel 导出日期格式化

1.旧版本 在新的版本中formate已经被打上废弃标记。那么不推荐使用这种方式。 2.推荐方式 推荐使用另外一种方式【 Converter 】代码如下&#xff0c;例如需要格式化到毫秒【yyyy-MM-dd HH:mm:ss SSS】级别 创建一个公共Converter import com.alibaba.excel.converters.Conv…...

大模型Qwen面试内容整理-模型架构与原理

Qwen(通义千问)是阿里巴巴推出的大规模语言模型,其架构和原理与当前主流的大模型(如GPT、LLaMA等)有很多相似之处,但也具备一些独特的特点。下面是Qwen模型架构和原理的详细介绍: Transformer 架构 Qwen模型基于改进的 Transformer 架构,这是一种广泛用于自然语言处理(…...

Python 类的设计(以植物大战僵尸为例)

关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素 1. 类名 类名&#xff1a;某类事物的名…...

docker学习笔记(五)--docker-compose

文章目录 常用命令docker-compose是什么yml配置指令详解versionservicesimagebuildcommandportsvolumesdepends_on docker-compose.yml文件编写 常用命令 命令说明docker-compose up启动所有docker-compose服务&#xff0c;通常加上-d选项&#xff0c;让其运行在后台docker-co…...

美国有求于中国,收回琉球正当时

昆仑策研究院高级研究员李光满文章,《李光满:美俄都在疯狂扩张领土,中国进入解放台湾最佳窗口期,机不可失,失不再来!》,对当前中国及国际形势的分析判断,有一种醍醐灌顶的感觉。特朗普疯狂扩张领土,的确可以给中国一个解决历史遗留问题的启示。在中国六代机试飞后,美…...

俄罗斯和伊朗将签署全面战略伙伴关系条约

据俄罗斯总统网站当地时间1月13日消息,俄罗斯总统普京1月17日将与访俄的伊朗总统佩泽希齐扬举行会谈,并签署两国全面战略伙伴关系条约。消息称,预计双方将讨论进一步扩大双边合作的前景,包括贸易、投资、运输和人文领域,还将就当前地区和国际重要问题进行讨论。会谈结束后…...

《反腐为了人民》第三集:揭开腐败隐身衣

风险投资、股权对价、低值高投&hellip;&hellip;随着反腐败斗争向纵深推进,一些打着市场行为幌子大搞权钱交易的腐败分子暴露出来,受到党纪国法的制裁。...

新传专业,卷死卷生

最近&ldquo;全球文科倒闭潮&rdquo;引发广泛讨论,虽然言过其实,但放眼世界,这股重新审视文科的情绪已经无法不被重视。欧美社会思潮自疫情时代后愈发混乱,让各领域的西方大儒们也开始跟着混乱,给不出方向;国内舆论上,最近先是一帮不思进取的电影行业从业者成为众…...

阳和平:当代孔乙己,中美两开花

...

晓雁:刺破长江天险的神奇匕首——追寻铁军之旅(十五)

4月20日,我们姐弟兄妹四家的追寻父母新四军革命历程之行踏上归程。从南通回南京,从江北到江南,我们特地在江阴停留,参观《渡江战役纪念馆》。因为渡江战役中,我们的父母就是从江阴过江,走向全国解放的胜利。&ldquo;钟山风雨起苍黄,百万雄师过大江&rdquo;&md…...