【Java】应对高并发的思路
在Java中应对高并发场景需要结合多方面的技术手段和设计模式,从线程管理、数据结构、同步机制到异步处理、IO优化等,都需要合理设计和配置。以下是Java在高并发场景下的主要应对策略和最佳实践:
1. 线程管理
1.1 线程池(ThreadPoolExecutor)
- 核心作用:通过复用线程减少线程创建和销毁的开销,控制并发线程数,避免资源耗尽。
- 关键配置参数:
- 核心线程数(corePoolSize):保持活跃的线程数,即使空闲。
- 最大线程数(maximumPoolSize):线程池允许的最大线程数,应对突发流量。
- 任务队列(workQueue):存放等待执行任务的队列,常见的有
LinkedBlockingQueue
(无界队列)、ArrayBlockingQueue
(有界队列)、SynchronousQueue
(直接提交)。 - 拒绝策略(RejectedExecutionHandler):当任务超过线程池容量时的处理方式,如
AbortPolicy
(直接抛异常)、CallerRunsPolicy
(由调用线程处理)。
- 示例配置:
ExecutorService executor = new ThreadPoolExecutor(10, // 核心线程数200, // 最大线程数60L, TimeUnit.SECONDS, // 空闲线程存活时间new LinkedBlockingQueue<>(10000), // 任务队列new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
1.2 避免手动创建线程
- 问题:手动创建线程可能导致线程数量失控,资源耗尽。
- 解决方案:使用
Executors
工厂方法(如newFixedThreadPool
)或直接使用ThreadPoolExecutor
,并合理设置参数。
2. 线程安全的数据结构
2.1 并发集合(Concurrent Collections)
ConcurrentHashMap
:替代Hashtable
,通过分段锁(Segment)减少锁竞争,支持高并发读写。CopyOnWriteArrayList
:适用于读多写少的场景,写操作会复制整个数组,避免读写锁冲突。BlockingQueue
:线程间安全的队列,如ArrayBlockingQueue
、LinkedBlockingQueue
,用于生产者-消费者模式。
2.2 原子类(Atomic Classes)
AtomicInteger
、AtomicLong
:通过CAS(Compare and Swap)实现无锁操作,避免同步开销。AtomicReference
:用于原子性地更新对象引用。
3. 同步机制优化
3.1 减少锁的粒度
- 细粒度锁:将共享资源拆分为多个部分,每个部分单独加锁,减少锁竞争。
- 示例:
ConcurrentHashMap
通过分段锁(Segment)实现分区并发访问。
3.2 锁的类型选择
- 内置锁(synchronized):简单但不够灵活,适合简单场景。
- ReentrantLock:提供更灵活的锁功能(如可中断、超时、公平锁)。
Lock lock = new ReentrantLock(); lock.lock(); try {// 临界区代码 } finally {lock.unlock(); }
- 读写锁(ReentrantReadWriteLock):读多写少时,允许多个读线程同时访问,写线程独占。
- StampedLock:Java 8引入的乐观锁,性能更高。
3.3 避免死锁
- 原则:确保锁的获取顺序一致,避免嵌套锁。
- 超时机制:使用
tryLock
方法设置超时时间,防止无限期等待。
4. 异步与非阻塞
4.1 异步编程
CompletableFuture
:Java 8提供的异步编程API,支持链式调用和组合任务。CompletableFuture.supplyAsync(() -> {// 异步任务return result; }).thenAccept(result -> {// 处理结果 });
- 消息队列(如Kafka、RabbitMQ):将耗时操作(如订单处理)异步化,通过队列解耦请求处理。
4.2 非阻塞IO
- Java NIO:基于
Selector
实现多路复用,处理大量连接。 - Netty:高性能网络框架,基于NIO实现,支持事件驱动和异步处理。
5. 数据库优化
5.1 连接池
- HikariCP:高性能数据库连接池,通过复用连接减少创建开销。
HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb"); config.setMaximumPoolSize(20); // 根据并发量调整 HikariDataSource ds = new HikariDataSource(config);
5.2 分库分表与读写分离
- 分库分表:将数据分散到多个数据库或表中,避免单点压力。
- 读写分离:主库处理写操作,从库处理读操作,提升读性能。
5.3 优化SQL查询
- 索引优化:为高频查询字段添加索引。
- 批量操作:批量插入或更新数据,减少数据库交互次数。
- 数据库事务:合理使用事务,避免长事务导致锁竞争。
6. 缓存策略
6.1 本地缓存
- Guava Cache:提供LRU、过期策略等,减少重复计算。
LoadingCache<Key, Graph> cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader<Key, Graph>() {public Graph load(Key key) { ... }});
6.2 分布式缓存
- Redis/Memcached:用于跨节点共享缓存,支持高并发读写。
- 布隆过滤器:防止缓存穿透(如查询不存在的键)。
7. 减少锁竞争的设计模式
7.1 无状态设计
- 原则:避免共享可变状态,使用不可变对象或局部变量。
- 示例:在Web服务中,避免在Servlet中使用共享变量。
7.2 分段锁(Segmented Lock)
- 原理:将资源划分为多个段,每个段单独加锁,允许多线程并行操作。
- 示例:
ConcurrentHashMap
的实现。
7.3 生产者-消费者模式
- 实现:使用
BlockingQueue
解耦生产者和消费者,控制任务处理速率。BlockingQueue<Request> queue = new LinkedBlockingQueue<>(1000); // 生产者线程 queue.put(request); // 消费者线程 while (true) {Request req = queue.take();process(req); }
8. 线程安全的单例模式
- 双重检查锁定(Double-Checked Locking):
private static volatile Singleton instance; public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance; }
9. JVM调优
9.1 堆内存与GC
- 堆内存配置:根据应用需求调整
-Xms
和-Xmx
,避免频繁GC。 - GC算法选择:使用G1收集器(
-XX:+UseG1GC
)或ZGC(-XX:+UseZGC
)应对大内存场景。 - 线程栈大小:通过
-Xss
调整线程栈,避免过多线程占用过多内存。
9.2 线程池监控
- 监控工具:使用JMX或Actuator监控线程池的活跃线程数、任务队列长度等,及时调整参数。
10. 非阻塞编程框架
10.1 Netty
- 特点:基于NIO的高性能网络框架,支持事件驱动和异步处理,适用于高并发网络应用。
- 示例:处理HTTP请求时,通过ChannelPipeline分发事件,避免阻塞。
10.2 Spring WebFlux
- Reactive编程:基于非阻塞模式,使用
Mono
和Flux
处理高并发请求,适合微服务架构。
11. 负载均衡
- Nginx:在应用层或数据库层进行流量分发。
- Java实现:通过
LoadBalancerClient
(Spring Cloud)或自定义轮询策略实现客户端负载均衡。
12. 其他关键策略
12.1 限流与降级
- 算法:令牌桶(Guava的
RateLimiter
)、漏桶算法。 - 框架:Sentinel、Hystrix实现流量控制和熔断机制。
12.2 并发安全的单例模式
- 枚举单例:天然线程安全且简单。
public enum Singleton {INSTANCE;public void doSomething() { ... } }
12.3 线程本地存储(ThreadLocal)
- 适用场景:存储线程独占的数据(如请求ID、用户信息),避免共享变量竞争。
- 注意:及时清理ThreadLocal,防止内存泄漏。
12.4 并行流(Parallel Streams)
- 适用场景:处理大数据集时,利用多核CPU并行计算。
list.parallelStream().forEach(element -> {// 并行处理 });
13. 高并发场景的典型应用
13.1 秒杀系统
- 限流:使用Redis的
SETNX
或Lua
脚本实现限流。 - 异步队列:将订单请求放入消息队列(如Kafka),后台线程处理。
- 缓存:预热库存缓存,使用Redis的原子操作(
DECR
)扣减库存。
13.2 分布式锁
- Redis:通过
SETNX
实现分布式锁。 - ZooKeeper:使用临时顺序节点实现分布式锁。
- 框架:Redisson提供Redis的分布式锁实现。
14. 避免常见陷阱
- 死锁:确保锁的获取顺序一致,避免嵌套锁。
- 竞态条件:使用原子类或正确加锁。
- 线程饥饿:合理设置线程池参数,避免核心线程被抢占。
- 资源泄漏:及时释放数据库连接、文件句柄等资源。
15. 监控与日志
- 监控工具:Prometheus、Micrometer、SkyWalking。
- 日志优化:使用异步日志框架(如Logback的异步Appender),避免日志成为性能瓶颈。
- 日志级别:在高并发时,减少DEBUG级别日志的输出。
总结
Java应对高并发的核心思想是:
- 资源复用:通过线程池、连接池减少资源创建开销。
- 减少锁竞争:使用无锁结构(如Atomic)、细粒度锁、分段锁。
- 异步化:将耗时操作异步化,利用非阻塞IO和消息队列。
- 数据缓存:通过本地或分布式缓存减少数据库压力。
- 合理设计:无状态服务、分库分表、读写分离等架构优化。
实际应用中具体场景,综合考虑,并通过压力测试和监控工具持续优化。
相关文章:
【Java】应对高并发的思路
在Java中应对高并发场景需要结合多方面的技术手段和设计模式,从线程管理、数据结构、同步机制到异步处理、IO优化等,都需要合理设计和配置。以下是Java在高并发场景下的主要应对策略和最佳实践: 1. 线程管理 1.1 线程池(ThreadPo…...
从数据分析到数据可视化:揭开数据背后的故事
从数据分析到数据可视化:揭开数据背后的故事 大家好,今天咱们聊聊“从数据分析到数据可视化”的完整流程。说实话,数据分析和可视化这俩词听起来高大上,但咱们平时就是围绕这俩词打转——数据分析帮我们找故事,可视化则帮我们讲故事。没有它们,数据就是死的;有了它们,数…...
WPS JS宏实现去掉文档中的所有空行
WPS改造系列文章: 1.在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程:在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程_wps javascript-CSDN博客 2.在WPS中通过JavaScrip…...
【2025年软考中级】第一章1.6 安全性、可靠性、性能评价
文章目录 安全性、可靠性、性能评价计算机可靠性可靠性指标串并联系统可靠性并联系统可靠性N模元余系统 计算机系统性能评价信息安全加密技术对称(私钥)加密技术非对称加密技术(公钥)对称和非对称加密算法的区别数字信封原理数字签…...
MODBUS RTU通信协议详解与调试指南
一、MODBUS RTU简介 MODBUS RTU(Remote Terminal Unit)是一种基于串行通信(RS-485/RS-232)的工业标准协议,采用二进制数据格式,具有高效、可靠的特点,广泛应用于PLC、传感器、变频器等工业设备…...
【深度学习新浪潮】大模型时代,我们还需要学习传统机器学习么?
在大模型时代,AI 工程师仍需掌握传统机器学习知识,这不仅是技术互补的需求,更是应对复杂场景和职业发展的关键。以下从必要性和学习路径两方面展开分析: 一、传统机器学习在大模型时代的必要性 技术互补性 大模型(如GPT、BERT)擅长处理复杂语义和生成任务,但在数据量少…...
深入解析Spring Boot与Spring Security的集成实践
深入解析Spring Boot与Spring Security的集成实践 引言 在现代Web应用开发中,安全性是一个不可忽视的重要方面。Spring Security作为Spring生态中的安全框架,提供了强大的认证和授权功能。本文将结合Spring Boot,详细介绍如何集成Spring Se…...
嵌入式学习笔记 - STM32 使用一个外部触发同时启动两个定时器
一个定时器是同时可以设置成主模式跟从模式的, 下面例子中, 一 TM1首先被配置为主模式, 通过MMS001:使能 – 计数器使能信号CNT_EN被用于作为触发输出(TRGO)。见寄存器描述,此位默认为000,这时从模式状态…...
JWT令牌验证
一、JWT 验证方式详解 JWT(JSON Web Token)的验证核心是确保令牌未被篡改且符合业务规则,主要分为以下步骤: 1. 令牌解析与基础校验 收到客户端传递的 JWT 后,首先按 . 分割为三部分:Header、Payload、S…...
Go语言 GORM框架 使用指南
在 Go 语言社区中,数据库交互一直是开发者们关注的重点领域,不同开发者基于自身的需求和偏好,形成了两种主要的技术选型流派。一部分开发者钟情于像sqlx这类简洁的库,尽管其功能并非一应俱全,但它赋予开发者对 SQL 语句…...
c#车检车构客户管理系统软件车辆年审短信提醒软件
# CMS_VehicleInspection 车检车构客户管理系统软件车辆年审短信提醒软件 # 开发背景 软件是给泸州某公司开发的车检车构客户管理系统软件。用于在车检年审到期前一个月给客户发送车检短信提醒 # 功能描述 主要功能:车辆年审前一个月给客户发年审短信提醒…...
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
Go 支持将函数当作值来使用,也允许定义匿名函数,并通过闭包实现对外部变量的捕获与持续访问。这一特性使函数式编程风格在 Go 中成为可能。 一、什么是匿名函数? 匿名函数是没有名字的函数,可以定义后立即调用,或赋值…...
兰亭妙微:用系统化思维重构智能座舱 UI 体验
兰亭妙微设计专注于以产品逻辑驱动的界面体验优化,服务领域覆盖AI交互、智能穿戴、IoT设备、智慧出行等多个技术密集型产业。我们倡导以“系统性设计”为方法论,在用户需求与技术边界之间找到最优解。 此次智能驾驶项目,我们为某车载平台提供…...
Flowbite 和 daisyUI 那个好用?
Flowbite 和 daisyUI 都是基于 Tailwind CSS 的组件库,它们各有特色,选哪个更好用,取决于你的项目需求和设计偏好。 简要结论 对比项daisyUIFlowbite上手难度简单,类名即组件略复杂(多用 HTML 结构)Vue 支…...
中间网络工程师知识点5
1.PKI证书主要用于确保主体公钥的合法性 2.VLAN帧的最小帧长是64字节,其中表示帧优先级的字是PRI 3.WIFI6是2.4GHZ和5GHZ频段的,理论吞吐量最高可达9.6Gbps,遵从协议802.11ax,支持完整版的MU-MIMO 4.在大型无线网络中,AP通过DHCP option43端口来获取AC的IP地址 5.项目…...
二、数据模型
二、数据模型 数据模型回顾 数据模型(Data Model) 是信息领域采用的模型将现实世界的各种事物以及事物之间的联系,表示为数据以及数据之间的联系是对现实世界数据特征的抽象和模拟用来描述数据、组织数据和操作数是数据库系统的核心和基础 …...
获取淘宝店铺所有商品信息接口数据指南
在电商运营和数据分析中,获取淘宝店铺的商品信息是常见的需求。淘宝开放平台提供了丰富的 API 接口,方便开发者获取商品的详细信息,包括商品列表、商品详情、销量等。本文将详细介绍如何从零开始获取淘宝店铺的所有商品信息,包括注…...
目标检测工作原理:从滑动窗口到Haar特征检测的完整实现
目标检测探索指南 🔍 目标检测就像是一位细心的侦探!我们需要在图像中寻找并定位特定的目标,就像侦探在现场搜寻线索一样。让我们一起来探索这个充满挑战的图像处理领域吧! 目录 1. 什么是目标检测?2. 滑动窗口检测3.…...
【LUT技术专题】针对降噪优化的通道感知轻量级LUT算法:DnLUT
DnLUT:Ultra-Efficient Color Image Denoising via Channel-Aware Lookup(2025 CVPR) 专题介绍一、研究背景二、DnLUT方法2.1 Pairwise Channel Mixer2.2 Rotation Non-overlapping Kernel(L型卷积) 三、实验结果四、总…...
支持同步观看的媒体服务器GhostHub
简介 什么是 GhostHub ? GhostHub 是一个基于滑动界面的媒体服务器,旨在实现实时同步、聊天和隧道分享。它允许用户快速共享和浏览媒体内容,无需复杂的配置或帐户。 主要特点 零配置: 即开即用,无需安装或创建帐户。滑动浏览: 提…...
告别 pip:使用 uv 加速你的 Python 包管理
使用 uv:更快的 Python 包管理工具 随着 Python 生态的演进,包管理工具也在不断升级迭代。uv 是 Astral(同样维护 ruff 的团队)推出的下一代 Python 包与项目管理器,主打 单一可执行文件、极致性能,可在多数场景下取代 pip、pip-tools、pipx 与 virtualenv 等传统工具,…...
使用glsl 来做视频矫正
描述、优点 使用glsl来代替opencv的undistort 和 鱼眼矫正,并且最后使用opencv的LUT给glsl 来使用,来达到加速的目的,并且做到和opencv 一模一样的效果,达到实时视频的加速矫正。 优点: 没有cuda,也可以做到实时视频矫正,包含各类板子和amd的cpu,intel核显 矫正的基本作…...
【VSCode】快捷键合集(持续更新~)
一、基础编辑操作 注释/取消注释 Ctrl /:快速注释或取消注释当前行或选中行。ctrlshift/:块注释 代码格式化 • Shift Alt F:格式化整个文档,统一代码风格。 行操作 • Alt ↑/↓:向上/向下移动当前行。 • Shi…...
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
使用 MATLAB 对城市雨季防洪排污问题进行建模与仿真,需要结合数学模型、工程经验和 MATLAB 的数值计算、数据可视化及优化工具。以下是详细的步骤指南,包含实际案例和代码示例: 一、问题分析与建模框架 1. 问题拆解 • 核心目标: …...
由浮点数x的位级表示求其整型值
由浮点数x的位级表示,得到浮点数的十进制表示,在超过32位整型数的表示范围时,返回0X80000000;在32位整型数的表示范围内时,返回强制转化为整型的值。舍入时采用向0舍入。 程序代码 typedef unsigned long int float_…...
【Qt】Qt常见控件的相关知识点
1.close退出槽函数 2.设置快捷键,QMenu 。 适用&字母就能设置快捷键,运行qt程序,最后就可以按Alt对应的字母进行快捷操作。 3.QMenuBar内存泄露问题 如果ui已经自动生成了menubar,我们再次生成一个新的菜单栏,而…...
数据结构*优先级队列(堆)
什么是优先级队列(堆) 优先级队列一般通过堆(Heap)这种数据结构来实现,堆是一种特殊的完全二叉树,其每个节点都满足堆的性质。如下图所示就是一个堆: 堆的存储方式 由于堆是一棵完全二叉树,所以也满足二…...
Windows本地化部署Dify完整指南
Windows本地化部署Dify完整指南 作者:朱元禄 版权声明:本文为朱元禄原创文章,转载请注明出处及作者信息 关键词:Dify部署,Windows安装Dify,Dify本地化,Dify教程,Dify配置,朱元禄 一、Docker Desktop安装与配置 1.1 下载Docker De…...
全局异常处理:如何优雅地统一管理业务异常
在软件开发中,异常处理是保证系统健壮性的重要环节。一个良好的异常处理机制不仅能提高代码的可维护性,还能为使用者提供清晰的错误反馈。本文将介绍如何通过全局异常处理和业务异常统一处理来编写更加优雅的代码。 一、传统异常处理的痛点 1.1 典型问…...
AI517 AI本地部署 docker微调(失败)
本地部署AI 计划使用OLLAMA进行本地部署 修改DNS 访问github 刷新缓存 配置环境变量 OLLAMA安装成功 部署成功 计划使用docker进行微调 下载安装docker 虚拟化已开启 开启上面这些 准备下载ubuntu docker ragflow dify 用git去泡...
C++(初阶)(十八)——AVL树
AVL树 AVL树概念实现AVL树的结点插入插入方法 平衡因子更新更新停止条件旋转右单旋左单旋左右双旋右左双旋 遍历AVL平衡检测 完整代码 概念 1,AVL树是最先发明的⾃平衡⼆叉查找树,AVL树是⼀颗⾼度平衡搜索⼆叉树, 通过控制高度差去控制平衡。…...
2022河南CCPC(前四题)
签到题目 #include <bits/stdc.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);void solve() {int n;cin>>…...
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
将 x 减到 0 的最小操作数 一、题目链接二、题目三、题目解析四、算法原理五、编写代码六、时空复杂度 一、题目链接 将 x 减到 0 的最小操作数 二、题目 三、题目解析 以示例1为例: 四、算法原理 像"题目解析"中正面删除并修改数组元素的操作太困难&…...
电机试验平台:创新科技推动电动机研究发展
电机试验平台是电机制造和研发过程中不可或缺的重要设备,其功能涵盖了电机性能测试、电机寿命测试、电机质量评估等多个方面。随着科技的不断发展和电机应用领域的日益扩大,对电机试验平台的要求也越来越高。本文将从现代化电机试验平台的设计与应用两个…...
linux-软件的安装与部署、web应用部署到阿里云
一、软件安装方式概述 CentOS安装软件的方式主要包括: - 源码安装 - rpm安装(二进制安装) - yum安装(在线安装) 1.源码安装: 源码包是指C等语言所开发的源代码文件的一个压缩包,通常压缩为.…...
Qt Widgets模块功能详细说明,基本控件:QLabel(一)
一、基本控件(Widgets) Qt 提供了丰富的基本控件,如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QLabel 1.1、概述 (用途、继承关系) QLabel 是 Qt 框架中用于显示文本、图像或动画的控件,属…...
Ubuntu 安装 squid
1. 安装Squid及工具 Debian/Ubuntu sudo apt update sudo apt install squid apache2-utils CentOS/RHEL sudo yum install squid httpd-tools 2. 创建用户名密码文件 创建密码文件(首次使用 -c 参数,后续添加用户省略) sudo htpasswd…...
中药药效成分群的合成生物学研究进展-文献精读130
Advances in synthetic biology for producing potent pharmaceutical ingredients of traditional Chinese medicine 中药药效成分群的合成生物学研究进展 摘要 中药是中华民族的文化瑰宝,也是我国在新药创制领域的重要驱动力。许多中药材来源于稀缺物种…...
芯片生态链深度解析(三):芯片设计篇——数字文明的造物主战争
【开篇:设计——数字文明的“造物主战场”】 当英伟达的H100芯片以576TB/s显存带宽重构AI算力边界,当阿里平头哥倚天710以RISC-V架构实现性能对标ARM的突破,这场围绕芯片设计的全球竞赛早已超越技术本身,成为算法、架构与生态标准…...
Echart地图数据源获取
DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...
【C++ - 仿mudou库one thread one loop式高并发服务器实现】
文章目录 项目介绍项目模块和服务器主要设计模式项目主要流程前置知识1.bind函数2.定时器任务TimerTask和时间轮思想TimerWheel3.正则表达式4.通用型容器Any类 服务器设计模式1)单Reactor单线程模式2)单Reactor多线程模式3)多Reactor多线程模…...
本地缓存更新方案探索
文章目录 本地缓存更新方案探索1 背景2 方案探索2.1 初始化2.2 实时更新2.2.1 长轮询2.2.1.1 client2.2.2.2 server 本地缓存更新方案探索 1 背景 大家在工作中是否遇到过某些业务数据需要频繁使用,但是数据量不大的情况,一般就是几十条甚至几百条这种…...
Java—异常体系
Java的异常体系是Java语言中用于处理程序运行过程中可能出现的错误的机制。通过异常处理,程序可以在遇到问题时自动反馈,从而避免程序崩溃。Java异常体系中包含两大类:错误(Error)和异常(Exception)。 一、错误(Error)…...
深度学习(第3章——亚像素卷积和可形变卷积)
前言: 本章介绍了计算机识别超分领域和目标检测领域中常常使用的两种卷积变体,亚像素卷积(Subpixel Convolution)和可形变卷积(Deformable Convolution),并给出对应pytorch的使用。 亚像素卷积…...
5.15 学习日志
1.SST(总平方和)、SSR(回归平方和)、SSE(残差平方和)之间的关系。 在使用线性回归模型时,经常提到的统计量MSE(Mean Squared Error、均方误差):是 SSE 的平均…...
重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
模型介绍 gte-multilingual-reranker-base 模型是 GTE 模型系列中的第一个 reranker 模型,由阿里巴巴团队开发。 模型特征: Model Size: 306MMax Input Tokens: 8192 benchmark 关键属性: 高性能:与类似大小的 reranker 模型…...
计算机发展的历程
计算机系统的概述 一, 计算机系统的定义 计算机系统的概念 计算机系统 硬件 软件 硬件的概念 计算机的实体, 如主机, 外设等 计算机系统的物理基础 决定了计算机系统的天花板瓶颈 软件的概念 由具有各类特殊功能的程序组成 决定了把硬件的性能发挥到什么程度 软件的分类…...
【通用智能体】Search Tools:Open Deep Research 项目实战指南
Open Deep Research 项目实战指南 一、项目运行方式(一)运行环境要求(二)运行方式(三)传统本地运行(四)Docker 容器运行 二、操作步骤(一)使用搜索功能&#…...
nodejs 文件的复制
在 Node.js 中,文件复制操作可以通过多种方式实现,具体取决于文件大小、性能需求以及是否需要保留文件元数据(如权限、时间戳等)。以下是几种常见的文件复制方法及其示例代码: 1. 使用 fs.copyFile(简单高…...
GO语言学习(三)
GO语言学习(三) GO语言的独特接口可以实现内容和面向对象组织的更加方便,我们从这里来详细的讲解接口,让大家感受一下interface的魅力 interface定义 首先接口是一组方法签名的组合,我们通过接口来实现定义对象的一…...