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

C++八股——函数对象

文章目录

    • 一、仿函数
    • 二、Lambda表达式
    • 三、bind
    • 四、function

一、仿函数

仿函数:重载了操作符()的类,也叫函数对象

特征:可以有状态,通过类的成员变量来存储;(有状态的函数对象称之为闭包

样例

class Add {
public:void operator() (int count) {i += count;cout << "i:" << i << endl;}int operator() (int a, int b) {return a + b;}int i = 0; // 状态
};

二、Lambda表达式

Lambda表达式是一种方便创建匿名函数的语法糖,简化函数对象的创建,常用于需要短小逻辑的场景(如 STL 算法)。

语法

[捕获列表](参数列表) mutable -> 返回类型 { 函数体 }

  • 捕获列表:定义如何捕获外部变量,本质是将外部变量转变为类的成员变量
    • [=]:值捕获所有外部变量,只可读,不能修改
    • [&]:引用捕获所有外部变量,可读可写
    • [a, &b]:显示指定,值捕获a,引用捕获b
  • mutable:加上此关键字,允许修改值捕获的变量(值捕获的外部变量成为函数的状态,并不会改变实际的外部变量值)
  • 返回值类型:由于有类型推导,所以可以省略

底层原理

编译器将 lambda 转换为一个仿函数,重载 operator()。例如:

/*
int i = 0;
auto func = [i](int count) mutable -> void {i++;cout << "count:" << count << " i:" << i << endl;
};
*/
class LambdaFun {
public:LambdaFun(int _i) : i(_i) {}void operator() (int count) {i++;cout << "count:" << count << " i:" << i << endl;}
private:int i;
};

例子

std::vector<int> nums = {3, 1, 4};
std::sort(nums.begin(), nums.end(), [](int a, int b) { return a > b; });
// 降序排序

三、bind

std::bind是用来通过绑定可调用对象以及参数生成新的可调用对象,支持参数顺序调整和部分参数绑定。

用法

#include <functional>
auto new_callable = std::bind(原函数, 绑定参数列表);
  • 占位符std::placeholders::_1, _2, ... 表示未绑定的参数位置

底层原理

编译器将 bind 转换为一个仿函数,重载 operator()。例如:

// auto f = std::bind(add, 10, 20);
class BindFun {
public:BindFun(function<int(int, int)> _fn, int _a, int _b) : fn(_fn), a(_a), b(_b) {}int operator()() const {return fn(a, b);}
private:function<int(int, int)> fn;int a, b;
};// auto f = std::bind(&Add::add, &tmp, 10, std::placeholders::_1);
class BindCFun {
public:// 此处定义了一个类型别名Fn为指向Add类中参数为(int, int),返回值为int的成员函数的指针typedef int (Add::*Fn)(int, int);BindCFun(Fn _fn, Add *_c, int _a) : fn(_fn), c(_c), a(_a) {}int operator()(int b) const {return (c->*fn)(a, b);}
private:Fn fn;Add *c;int a;
};

样例

  • 绑定普通函数

    int add(int a, int b) {return a + b; 
    }
    auto f = std::bind(add, 10, std::placeholders::_1);
    int c = f(20); // c = 30
    
  • 绑定类成员函数

    class Add {
    public:int add(int a, int b) {return a + b;}
    };
    Add tmp;
    auto f = std::bind(&Add::add, &tmp, 10, std::placeholders::_1);
    int c = f(20) // c = 30
    

四、function

std::function是一个抽象了函数参数和返回值的类模板(多态函数包装器)。

用途

把任意函数包装成一个对象,该对象可以保存、传递、复制。

其可以包装:普通函数、类的成员函数和静态成员函数、仿函数、lambda表达式、bind返回的函数对象。

头文件:<functional>

用法:std::function<返回值类型(参数类型列表)> func;

样例

  1. 包装普通函数:

    #include <functional>int add(int a, int b) {return a + b;
    }// 包装普通函数
    std::function<int(int, int)> f_add = add; // f_add1 = &add 效果一样
    int c = f_add(1, 2); // c = 3
    
  2. 包装类静态成员函数:

    class StaticFunc {
    public:static int add(int a, int b) {return a + b;}
    };// 包装类静态成员函数
    std::function<int(int, int)> f_add = &StaticFunc::hello;
    int c = f_add(1, 2); // c = 3
    
  3. 包装态成员函数:

    class Add {
    public:int add(int a, int b) {return a + b;}
    };// 包装类成员函数
    std::function<int(Add *, int, int)> f_add = &Add::hello;
    Add tmp;
    int c = f_add(&tmp, 1, 2); // c = 3
    
  4. 包装仿函数:

    // 包装一中的仿函数Add
    std::function<void(int)> f_add1 = Add();
    std::function<int(int, int)> f_add2 = Add();
    f_add1(1); // 打印 i:1
    f_add1(2); // 打印 i:3, 因为仿函数保存了状态i的值
    int c = f_add2(1, 2); // c = 3
    
  5. 包装Lambda:

    int i = 0;
    auto func = [i](int count) mutable -> void {i++;cout << "count:" << count << " i:" << i << endl;
    };
    // auto 实际为编译器生成的匿名类型(非 std::function)
    // 等效的 std::function 类型为 std::function<void(int)>func(1); // 打印 count:1 i:1
    func(1); // 打印 count:1 i:2
    cout << i << endl; // 打印 0, 因为mutable关键字,所以不会修改外部变量实际的值
    
  6. 包装bind绑定的可调用对象

    三中的样例auto可显示转换为:std::function<int(int)>


总结C++11中function、Lambda、bind之间的关系

function用来描述函数对象的类型;Lambda表达式用来生成函数对象(可以访问外部变量的匿名函数);bind也是用来生成函数对象(函数和参数进行绑定的形式生成)

参考:

  • 【C++面试题】面试官:请简述function,lambda,bind之间的关系_哔哩哔哩_bilibili
  • DeepSeek

相关文章:

C++八股——函数对象

文章目录 一、仿函数二、Lambda表达式三、bind四、function 一、仿函数 仿函数&#xff1a;重载了操作符()的类&#xff0c;也叫函数对象 特征&#xff1a;可以有状态&#xff0c;通过类的成员变量来存储&#xff1b;&#xff08;有状态的函数对象称之为闭包&#xff09; 样…...

Typora自动对其脚注序号

欢迎转载&#xff0c;但请标明出处和引用本文地址 Markdown中的脚注 脚注引用&#xff1a;[^2] 脚注定义&#xff1a;[^2]: xxxxxxx 问题&#xff1a;脚注需要 使用者自己定义排序。写作过程中&#xff0c;在文章最前面引用脚注序号&#xff0c;需要递增其后所有的脚注引用&…...

【Android】cmd命令

Android中cmd命令可以用来向binder服务发送命令&#xff0c;来进行相关调试&#xff0c; 其实现原理是调用binder服务的command接口 frameworks/native/cmds/cmd/cmd.cpp 209 Vector<String16> args; 210 for (int i2; i<argc; i) { 211 args.add(Stri…...

【入门】打印字母塔

描述 输入行数N,打印图形. 输入描述 输入只有一行&#xff0c;包括1个整数。(N<15) 输出描述 输出有N行. #include <bits/stdc.h> using namespace std; int main() { char t;int n,f;cin>>n;for(int i1;i<n;i){tchar(65i);for(int j1;j<n-i;j){cout…...

基于OpenCV的人脸识别:LBPH算法

文章目录 引言一、概述二、代码实现1. 代码整体结构2. 导入库解析3. 训练数据准备4. 标签系统5. 待识别图像加载6. LBPH识别器创建7. 模型训练8. 预测执行9. 结果输出 三、 LBPH算法原理解析四、关键点解析五、改进方向总结 引言 人脸识别是计算机视觉领域的一个重要应用&…...

opencascade.js stp vite webpack 调试笔记

Hello, World! | OpenCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plugi…...

使用go开发安卓程序

因为使用传统的安卓开发方式对于非专业人士来说比较繁琐&#xff0c;所以这里想用go简单的开发一下安卓程序。go支持安卓的项目就叫gomobile&#xff0c;有写安卓库文件和安卓程序两种方式&#xff0c;写安卓程序只能使用OPENGL画图。 一、安装步骤 参考文档&#xff1a;用Go…...

嵌入式中屏幕的通信方式

LCD屏通信方式详解 LCD屏&#xff08;液晶显示屏&#xff09;的通信方式直接影响其数据传输效率、显示刷新速度及硬件设计复杂度。根据应用场景和需求&#xff0c;LCD屏的通信方式主要分为以下三类&#xff0c;每种方式在协议类型、数据速率、硬件成本及适用场景上存在显著差异…...

常见的 DCGM 设备级别指标及其含义

前言 在大规模 GPU 集群运维与性能调优中&#xff0c;精准、全面地了解每块显卡的运行状态和健康状况至关重要。NVIDIA 数据中心 GPU 管理 (DCGM) 提供了一系列关键指标&#xff0c;用于监控显存错误、硬件利用率、温度、能耗以及互联带宽等多维度信息。通过对这些指标的持续采…...

基于zernike 拟合生成包裹训练数据-可自定义拟合的项数

可以看到拟合误差其实还是有很多的,但是这个主要是包裹噪声产生的,用到了github 上的zernike 库,直接pip install 一下安装就可以了 import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import matpl…...

基于多层权重博弈与广播机制的仿生类脑 AI 决策框架

Layered Weighted Consensus and Broadcasting AI Architecture (LWCBA) 前言 本框架模仿人脑的工作机制&#xff0c;模拟人脑对条件反射&#xff0c;本能&#xff0c;道德伦理&#xff0c;理性分析&#xff0c;等事件处理及决策博弈机制。 基本原则和特点 底层-中层-高层的…...

欧拉路与欧拉回路(模板)

欧拉路得判别法&#xff1a; 欧拉回路&#xff1a;我们先记录一下所有点得度数&#xff0c;然后拿并查集判断一下连通性&#xff0c;如果有解得话&#xff0c;我们从奇数个得点开始遍历&#xff0c;一直遍历到不能遍历为止&#xff0c;然后逆序输出得路径就是欧拉回路 P7771 【…...

HttpServletResponse的理解

HttpServletResponse 是 Java Servlet API 提供的一个接口 常用方法 方法用途setContentType(String type)设置响应内容类型&#xff08;如 "application/json"、"text/html"&#xff09;setStatus(int sc)设置响应状态码&#xff08;如 200、404&#x…...

用一张网记住局域网核心概念:从拓扑结构到传输介质的具象化理解

标题&#xff1a; 用一张网记住局域网核心概念&#xff1a;从拓扑结构到传输介质的具象化理解 摘要&#xff1a; 本文通过"一张网"的类比&#xff0c;将计算机网络中抽象的局域网技术概念转化为日常生活中可感知的网结与绳子模型&#xff0c;帮助读者轻松理解网络拓…...

Linux 进程控制 基础IO

Linux 进程控制学习笔记 本节重点 学习进程创建&#xff1a;fork() / vfork()学习进程等待学习进程程序替换&#xff1a;exec 函数族&#xff0c;微型 shell 实现原理学习进程终止&#xff1a;认识 $? 一、进程创建 1. fork() 函数初识 在 Linux 中&#xff0c;fork() 函…...

三、Hive DDL数据库操作

在 Apache Hive 中&#xff0c;数据库 (Database)&#xff0c;有时也被称为模式 (Schema)&#xff0c;是组织和管理 表及其他对象的基本命名空间单元。熟练掌握数据库层面的数据定义语言 (DDL) 操作&#xff0c;是构建清晰、有序的 Hive 数据仓库的第一步。本篇笔记将详细梳理 …...

C++ string初始化、string赋值操作、string拼接操作

以下介绍了string的六种定义方式&#xff0c;还有很多&#xff0c;这个只是简单举例 #include<iostream>using namespace std;int main() {//1 无参构造string s1;cout << s1 << endl;//2 初始化构造string s2 ({h, h, l, l, o});cout << s2 <<…...

java.util.Timer

知识点详细说明 java.util.Timer 是Java早期提供的定时任务调度工具,用于在指定延迟后或按固定间隔执行任务。以下是其核心知识点: 1. 核心组成 Timer类:负责调度任务,内部维护一个任务队列和后台线程。TimerTask类:抽象类,需继承并实现run()方法定义任务逻辑。2. 核心方…...

SQlite数据库

介绍 基本信息&#xff1a;是一款轻量级的嵌入式关系型数据库管理系统。 主要特点&#xff1a;SQLite的源码是C语言&#xff0c;其源代码完全开发&#xff0c;SQLite第一个Alpha版本诞生于2000年5月&#xff0c;他是一个轻量级的嵌入式数据库。零配置&#xff0c;无需安装和配…...

什么是 ANR 如何避免它

一、什么是 ANR&#xff1f; ANR&#xff08;Application Not Responding&#xff09; 是 Android 系统在应用程序主线程&#xff08;UI 线程&#xff09;被阻塞超过一定时间后触发的错误机制。此时系统会弹出一个对话框提示用户“应用无响应”&#xff0c;用户可以选择等待或强…...

当虚拟吞噬现实——《GTA6》结合技术

‌ ‌标题&#xff1a;当虚拟吞噬现实——《GTA6》的万言书&#xff1a;一部数字文明的启示录‌ ‌&#xff08;万字深度解析&#xff0c;拆解技术、叙事与社会学的三重革命&#xff09;‌ ‌一、序章&#xff1a;游戏史的奇点时刻‌ 1. ‌从像素暴动到文明模拟&#xff1a;G…...

pandas读取pymysql和解析excel的一系列问题(版本不匹配)

pandas读取pymysql和解析excel的一系列问题&#xff0c;大部分都是版本不匹配导致的 尤其是pandas,numpy,pymysql,openpyxl不匹配导致 from sqlalchemy import create_engine import numpy as np import pandas as pd conncreate_engine("mysqlpymysql://user:passhost:3…...

【安装配置教程】ubuntu安装配置Kodbox

目录 一、引言 二、环境配置 1. 服务器配置​ 2. 必备组件​ 三、安装基础环境​ 1. 安装 PHP 8.1 及扩展​ 2. 安装 MySQL 数据库 3.安装 Redis&#xff08;可选&#xff0c;提升缓存性能&#xff09; 4. 配置nginx文件 4.1. 创建 Kodbox 站点目录​ 4.2. 编写 Ng…...

模型过拟合是什么?

模型过拟合的详细解析 一、定义与本质 过拟合(Overfitting)是机器学习与统计学中的核心问题,指模型在训练数据上表现优异,但在未见过的新数据(如测试集或实际应用数据)上泛化能力显著下降的现象。其本质在于模型过度捕捉了训练数据中的噪声、随机波动或非典型细节,而非…...

服务器mysql连接我碰到的错误

搞了2个下午&#xff0c;总算成功了 我在服务器上使用docker部署了java项目与mysql&#xff0c;但mysql连接一直出现问题 1.首先&#xff0c;我使用的是localhost连接&#xff0c;心想反正都在服务器上吧。 jdbc:mysql://localhost:3306/fly-bird?useSSLfalse&serverTime…...

数电课设·交通信号灯(Quartus Ⅱ)

远书归梦两悠悠&#xff0c;只有空床敌素秋。 阶下青苔与红树&#xff0c;雨中寥落月中愁。 ————《端居》 【唐】 李商隐 目录 交通信号灯 要点剖析&#xff1a; 端口说明&#xff1a; 代码展示&#xff1a;&…...

单片机-STM32部分:13、PWM

飞书文档https://x509p6c8to.feishu.cn/wiki/NjhuwbVP7iaEOikVK95cmJNLnWf PWM&#xff08;Pulse Width Modulation&#xff09;脉冲宽度调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。它是把每一脉冲宽度均相等的脉冲列作为PWM波形&am…...

HTTP 错误状态码以及常用解决方案

以下是常见 HTTP 错误状态码及其解决方案的对比表格&#xff0c;按客户端&#xff08;4xx&#xff09;和服务端&#xff08;5xx&#xff09;分类&#xff1a; HTTP 错误码对比表 一、客户端错误&#xff08;4xx&#xff09; 状态码含义常见原因解决方案400Bad Request请求参…...

巧用promise.race实现nrm镜像源切换----nbsl

今天是母亲节祝全天的母亲节日快乐奥 引言 在复习Promise知识点时&#xff0c;发现Promise.race在实际开发中应用较少&#xff0c;于是深入思考了它的应用场景。最近使用nrm&#xff08;npm镜像源切换工具&#xff09;时&#xff0c;想到每次都需要手动切换镜像源来测试哪个更…...

Python基础语法(中)

顺序语句 默认情况下&#xff0c;Python的代码执行顺序是从上往下执行的。 形如下面这样的代码&#xff0c;执行的结果只能是123&#xff0c;而不是321 print(1) print(2) print(3) 条件语句 Python 中使用 if else 关键字表示条件语句 &#xff08;1&#xff09;if if e…...

【Part 2安卓原生360°VR播放器开发实战】第四节|安卓VR播放器性能优化与设备适配

《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化&#xff0c;以及高分辨率视频性能优化等实战技巧。 &#x1f4dd; 希望通过这个专栏&am…...

java笔记06

TreeMap的基本使用 TreeMapTreeMap 跟 TreeSet 底层原理一样&#xff0c;都是红黑树结构的。由键决定特性&#xff1a;不重复、无索引、可排序可排序&#xff1a;对键进行排序。注意&#xff1a;默认按照键的从小到大进行排序&#xff0c;也可以自己规定键的排序规则 代码书写…...

Problem E: 实现冒泡排序(内存优化)

1.题目描述 输入任意顺序的整数序列&#xff0c;输出结果为从小到大的排序结果 2.输入描述 输入一个整数序列&#xff0c;整数之间用空格隔开&#xff0c;输入完最后一个整数&#xff0c;回车 3.输出描述 从小到大的排序结果 4.样例 提示&#xff1a;注意&#xff0c;主…...

大模型对时尚穿搭体验的革新与重塑

在大模型深度介入时尚穿搭领域后&#xff0c;人们的穿搭体验迎来了前所未有的变革。它不再局限于单纯提供搭配方案&#xff0c;而是全方位渗透进时尚穿搭的各个环节&#xff0c;从决策过程到实际穿着感受&#xff0c;都在悄然改变着人们与时尚互动的方式。 打破信息壁垒&#…...

第6讲、全面拆解Encoder、Decoder内部模块

全面拆解 Transformer 架构&#xff1a;Encoder、Decoder 内部模块解析&#xff08;附流程图小测验&#xff09; 关键词&#xff1a;Transformer、Encoder、Decoder、Self-Attention、Masked Attention、位置编码、残差连接、多头注意力机制 Transformer 自 2017 年诞生以来&am…...

Linux电脑本机使用小皮面板集成环境开发调试WEB项目

开发调试WEB项目&#xff0c;有时开发环境配置繁琐&#xff0c;可以使用小皮面板集成环境。 小皮面板官网&#xff1a; https://www.xp.cn/1.可以使用小皮面板安装脚本一键安装。登陆小皮面板管理后台 2.在“软件商店”使用LNMP一键部署集成环境。 3.添加网站&#xff0c;本…...

数据仓库Hive

1.数据仓库 1.1数据仓库的概念 数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 面向主题。操作型数据库的数据组织面向事务处理任务&#xff0c;而数据仓库中的数据按照一定的…...

嵌入式学习笔记 - STM32 ADC,多重转换,内部参考电压,

一 多个ADC器件&#xff0c;多重转换速率 每个型号MCU通常由多个ADC器件&#xff0c;比如STM32F4有三个ADC器件&#xff0c;每个ADC器件有一个最大转换速率&#xff0c;一般为25Mhz&#xff0c;即一个ADC器件每秒最多转换25M次&#xff0c;两次转换之间需要有时间间隔&#xf…...

精读计算机体系结构基础 第三章 特权指令系统

3. 1 特权指令系统简介 想象一下&#xff0c;计算机就像一个大楼&#xff0c;而这个大楼有很多不同的楼层。每个楼层都有不同的功能和使用者。最上面的楼层是应用层&#xff0c;那里住着各种各样的应用程序&#xff0c;比如你用来写作的文字处理软件、用来浏览网页的浏览器等等…...

库室多功能控制器

应急供电保障​ 内置智能备电系统&#xff0c;市电中断时即刻无缝切换&#xff0c;为设备持续稳定供电&#xff0c;确保关键场景用电无忧。​ 超高性价比​ 集门禁、报警、环控等专业功能于一体&#xff0c;相比同类产品&#xff0c;以更优的价格提供更全面、更强大的解决方…...

使用FastAPI和React以及MongoDB构建全栈Web应用07 FastAPI实现经典三层架构

一、单文件简单实现 1.1 开发用户增删改查接口 main.py from fastapi import FastAPI, Request, Query, HTTPException from fastapi.responses import JSONResponse from motor.motor_asyncio import AsyncIOMotorClient from pydantic import BaseModel from bson import …...

《设计模式之禅》笔记

:::info &#x1f4a1; 根据 遗忘曲线&#xff1a;如果没有记录和回顾&#xff0c;6天后便会忘记75%的内容 读书笔记正是帮助你记录和回顾的工具&#xff0c;不必拘泥于形式&#xff0c;其核心是&#xff1a;记录、翻看、思考::: 书名设计模式之禅作者秦小波状态已读完简介深刻…...

JavaScript 循环语句全解析:选择最适合的遍历方式

循环是编程中处理重复任务的核心工具。JavaScript 提供了多种循环语句&#xff0c;每种都有其适用场景和独特优势。本文将深入解析 JavaScript 的 6 种核心循环语句&#xff0c;通过实际示例帮助你精准选择合适的循环方案。 一、基础循环三剑客 1. for 循环 经典索引控制 ja…...

远程服务器pycharm运行tensorboard显示训练轮次图

本文仅针对远程服务器的情况 首先在远程服务器端 首先打开xshell&#xff0c;然后激活自己的虚拟环境 baekee这是我的&#xff01; conda activate baekee然后cd进去你运行的文件所在的目录 cd /tmp/pycharm_project_732这个项目也是我的&#xff01; 然后一个很重要的事情…...

Nginx 使用 Keepalived 搭建 nginx 高可用

一、环境准备 两台装有 nginx 的 CentOS 虚拟机。 [rootnginx1 ~]# echo "192.168.40.81 say Hello" > /usr/local/nginx/html/index.html [rootnginx2 ~]# echo "192.168.40.82 say Hello" > /usr/local/nginx/html/index.html 二、原理 Keepaliv…...

A1062 PAT甲级JAVA题解 Talent and Virtue

About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about peoples talent and virtue. According to his theory, a man being outstanding in both talent and virtue must be a "sage&#xff08;圣人&#xff09;"…...

数据指标和数据标签

数据指标和数据标签是数据管理与分析中的两个重要概念&#xff0c;它们在用途、形式和应用场景上有显著区别。以下是两者的详细对比&#xff1a; 1. 核心定义 维度数据指标&#xff08;Data Metrics&#xff09;数据标签&#xff08;Data Tags/Labels&#xff09;定义量化衡量…...

常见的排序算法(Java版)简单易懂好上手!!

排序 “排序”顾名思义就是把乱序的变成有序的&#xff0c;就像我们玩斗地主这种牌类游戏时&#xff0c;我们拿到牌都会将牌给排序一下&#xff0c;更好的在对局中方便思考和观察&#xff0c;我们排序算法也亦是如此。 文章目录 排序一、冒泡排序二、选择排序三、插入排序四、…...

用统计零花钱的例子解释:Shuffle 是啥?

举个栗子 &#x1f330;&#xff1a;统计全班同学的零花钱总和 假设你是班长&#xff0c;全班有 4个小组&#xff0c;每个小组记录了自己的零花钱情况&#xff1a; 第1组&#xff1a;张三(5元)、李四(3元)、张三(2元) 第2组&#xff1a;王五(4元)、张三(1元)、李四(2元) …...

Kafka topic 中的 partition 数据倾斜问题

在 Kafka 中&#xff0c;如果一个 Topic 有多个 Partition&#xff0c;但这些 Partition 中的消息数量或流量分布不均衡&#xff0c;就会出现 数据倾斜&#xff08;Data Skew&#xff09; 的问题。 ✅ 什么是数据倾斜&#xff1f; 数据倾斜指的是&#xff1a; 某些 Partitio…...