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

Improving Deep Learning For Airbnb Search

解决问题

问题1:

解决推荐酒店与用户实际预定酒店价格存在偏差问题,实际预定比推荐要更便宜:

所以问题为是否更低价格的list更倾向于用户偏好,应该被优先推荐?

1. 该文通过数据分析与模型演进,将模型改造为item score与价格成单调递减的关系,发现预订量下降。发现价格与其他特征存在交互作用,不能单纯改造为优先推荐低价item。而随着数据分析的深入,对地区进行分桶,发现价格与质量的权衡机制过度适配预订量占主导的热门地区,而将这些权衡逻辑泛化到长尾查询时效果欠佳,模型未能适应地域特性。由于该网络采用成对损失函数进行训练,那些在配对房源间存在差异的特征对模型影响最大;所以为了强化查询特征对排序决策的影响,系统可以更灵活地适应不同地域市场的价格敏感度与消费预期。构建了双塔模型(item塔+用户塔)来建模。有效的提升了总体收益。

问题2:

冷启动问题:新item得不到有效推荐:若仅优化短期预订量,排名策略会偏向已积累历史数据的成熟房源;但从平台长期生态健康出发,必须付出一定成本探索新上线房源。而如果通过冷启动方法来强制rerank的话,会存在一些问题:

  1. 相关性悖论:强制提升可能导致与用户搜索意图无关的新房源混入前排结果,损害用户体验;

  2. 动态校准困境:提升幅度需随房源生命周期动态调整,过早衰减会削弱冷启动效果,过晚则造成资源浪费;

  3. 个性化冲突:全局统一的提升策略无法适配不同用户对新房源的接受度差异,可能干扰个性化排序逻辑。

所以为了防止用户体验下降并为了提升长期增益体验,本文设计了一种预测器,基于旧item得到有效推荐主要来源于交互特征的假设(并通过指标验证)。来对新item与用户交互相关特征进行预测,从而填充冷启动item交互特征,使得新item得到有效推荐。使得整体预订量增长+0.38%,印证了用户体验的全域提升。

方法演进

如图,价格偏差分布(预定-推荐)左偏,而期望为正太分布。

方法1:

为了保证模型的可解释性,将价格特征单独拿出来:

其中:

这样随着价格上升,dnn输出score会单调递减;

实验结果:搜索的平均价格下降5.7%,但是预定量也降低了1.5%。实验结果表明价格与其他特征是有交互关系的,简单从模型中溢出会导致under-fitting。

方法2:

拆分为两个部分:

一个部分将-P作为输入(-P与价格是单调递减的关系),对输入进行-w^2*P+b计算(保证单调递减)。hidden_layers也使用tanh函数保证单调递减。在第二个hidden layer使用

其中一个部分为价格无关特征,也没有单调递减约束允许特征之间进行交互;

实验结果预定量也降低了1.6%。这种结构的失败表明根据价格单调递减的约束过于严格。

方法3:Soft Monotonicity

不使用单调递减的限制,而是使用一个soft hint来提示cheaper is better。除了正负样本的label之外(预定or未预定),增加了另外一个label,标注pair样本中哪个是更便宜的。实验结果3.3%的价格均值下降,同时0.67%的预订量下降。

方法4: Putting Some ICE

降价实验带来的灾难让我们陷入了一种矛盾的状态:搜索结果中的挂牌价格似乎高于客人的偏好,但降价让客人不高兴。为了了解新模型的不足之处,有必要比较基线模型如何利用价格特征,但这被完全连接的DNN缺乏可解释性所掩盖。

如前所述,部分依赖图等概念没有用,因为它们依赖于给定特征对模型的影响独立于其他特征的假设。在DNN的情况下,这根本不是真的。试图绘制价格的部分依赖性产生了平缓的直线,这表明DNN对价格有一些温和的线性依赖,这与我们所知道的一切相矛盾。

为了取得进展,我们缩小了DNN可解释性的问题。我们没有试图对价格如何影响DNN做出一般性陈述,而是专注于一次解释一个搜索结果。借鉴[5]中的个体条件期望(ICE)图的思想,我们从单个搜索结果中提取列表,在保持所有其他特征不变的情况下浏览价格范围,并构建模型得分图。图4显示了一个示例图。这些图表明,完全连接的两层DNN完全理解更便宜更好。
对日志中随机选择的搜索集合重复ICE分析,进一步强化了这一结论。通过试图进一步压低价格,失败的模型架构在质量上做了妥协。

方法5:Two Tower Architecture

回到图1,客人们显然通过该图表传递了一个明确的信息。但那些执着于用相关性换取价格的系统架构却误读了这个信息。我们需要对图1进行重新诠释——这种诠释必须同时兼顾价格与相关性之间的平衡。

当我们计算每位客人搜索结果中位数价格与其实际预订价格的差值,并按城市分组求平均值时,一个全新的解释浮现出来。正如预期,不同城市之间存在差异,但与头部城市相比,尾部城市(通常位于新兴市场)的价差明显更大。图5展示了部分精选城市的搜索结果中位数价格与预订价格的平均差值。这引出一个重要假设:图1背后的深度神经网络正遭受"多数群体暴政"的影响——其价格与质量的权衡机制过度适配预订量占主导的热门地区,而将这些权衡逻辑泛化到长尾查询时效果欠佳,模型未能适应地域特性。

这一假设与另一个关于DNN特征输入的观察相印证:由于该网络采用成对损失函数进行训练,那些在配对房源间存在差异的特征对模型影响最大;而查询特征(配对房源共有的特征)影响力微乎其微,即使剔除这些特征对NDCG指标也几乎无影响。

新的观点认为,模型虽然深刻理解了"低价优先"的逻辑,却未能捕捉到"旅行合理价位"这一核心概念。要掌握这一概念,需更细致地关注如地理位置等查询特征,而非单纯依赖房源特征的差异进行判别。

这种思路将价格相关性从房源层面的绝对比较,提升到搜索上下文中的动态评估——模型需要理解不同目的地(如巴黎商务区与巴厘岛度假村)自然存在差异化的合理价格区间,而非一味追逐绝对低价。通过强化查询特征对排序决策的影响,系统可以更灵活地适应不同地域市场的价格敏感度与消费预期。

所以构建一个双塔模型:系统由两个并行的深度神经网络构成:

  1. 查询用户塔:输入查询特征(如目的地、出行日期)与用户画像,输出表征"理想房源"的100维语义向量;

  2. 房源特征塔:输入房源属性(价格、设施、历史评分等),输出房源本身的100维表征向量。

两个向量间的欧氏距离,则量化为该房源与当前搜索上下文下理想房源的匹配偏离度。训练时采用对比学习策略:每对训练样本包含一个被预订房源与一个未被预订房源,通过最小化损失函数(被预订房源与理想向量的距离应小于未被预订房源的距离),驱动双塔网络参数更新。

这种设计巧妙地将文献[12]的三元组损失简化为二元组形式——查询用户塔自动学习生成隐含的"锚点"(即理想房源向量),而非显式构造三元组。表3的抽象代码展示了该架构在TensorFlow™中的核心实现逻辑(实际工程部署时对计算图进行了速度优化)。

推理时如何实现?

实验结果预定量增加了0.6%。我们观察到,作为相关性增加的副作用,搜索结果的平均价格下降了-2.3%。预订量的增加抵消了价格下跌对收入的影响,整体增长了0.75%。

结构分析:

尽管我们为模型成功上线欢欣鼓舞,但伴随DNN迭代而来的疑虑仍悄然浮现:这套架构是否真的如设计预期般运行?还是神经网络偶然习得了其他无关模式?过去,DNN的黑箱特性使此类问题极难解答。但得益于双塔架构的改进本就源于对用户痛点的直接回应,我们可借助初始设计思路逆向解析模型行为。

重新审视价格变量的ICE(个体条件期望)曲线时,我们观察到显著变化:原先单调递减的曲线(印证"越便宜越好"的排序逻辑)被打破,取而代之的是在特定价格区间出现评分峰值(如图7所示)——这与"旅行合理价位"的理论解释高度契合。

两个ICE曲线为不同模型得出的不同结果;

针对"低质房源是否可能通过定价策略操纵新模型排名"的质疑,我们深入分析ICE曲线发现:评分峰值仅出现在本身质量优异、原本排名靠前的房源中;而绝大多数普通房源的价格-评分曲线仍保持单调递减趋势。这表明模型在捕捉合理价格区间时,已自发将房源质量纳入综合评估体系。

要理解"合理价格"与"理想房源"的定义,关键在于分析查询塔生成的向量表征。为此,我们随机抽取搜索样本输入双塔DNN,捕获查询塔输出的100维嵌入向量。由于100维向量本身不具备可解释性,我们采用t-SNE降维技术[17]将其投影至二维空间,可视化结果如图8所示——值得注意的是,图5中的部分城市对应查询在语义空间中的分布呈现显著的区域聚集性。

这一发现暗示:虽然查询特征在原始排序模型中影响力薄弱,但深度网络实际上已经隐式捕捉到地域属性等上下文信息。问题在于,这种地理语义的编码未能有效传导至最终的排序决策层,导致模型无法将价格评估置于地域消费水平的坐标系中进行校准。

需要重点指出的是,这些聚类并非单纯的价格分组。图8中点的颜色代表对应查询的实际预订价格,可见同一聚类内颜色(价格)分布广泛。虽然莫斯科通常比巴黎价格低廉,但根据入住人数、住宿时长、景点距离、周末/工作日差异等多重因素,莫斯科的预订价完全可能高于巴黎。价格与其他属性维度深度交织,要准确判断旅行的合理价格,必须同步把握所有关联因素。

尽管我们的分析方法无法为"双塔架构已全面掌握这种综合判断能力"提供确凿证据,但价格ICE曲线的形态转变、查询塔向量的t-SNE可视化以及跨城市价格波动分析形成的证据链,足以支撑我们对模型运行机制符合预期的信心。

冷启动问题:

对我们而言,使用NDCG(归一化折损累积增益)量化被预订房源在搜索结果中的排名位置,始终是评估模型性能最可靠的指标。因此,分析用户痛点的自然切入点便是寻找NDCG显著低于整体水平的细分房源群体。

通过拆解平台新上线房源(无历史预订记录)的NDCG并与成熟房源对比,我们观测到两者存在-6%的差距。作为参考,过往经验表明,当模型间NDCG差异达0.7%时,线上预订量便会产生统计显著性变化。这一巨大差距意味着,现有模型迫使房客付出额外精力才能发现优质新房源。为深入剖析成因,我们从DNN输入特征中剔除了所有基于历史用户互动的信号(如房源过往预订量)。移除这些互动特征后,NDCG指标下降-4.5%,证明模型高度依赖此类特征进行排序决策。对于缺乏用户互动数据的新房源,DNN只能基于剩余特征做出粗粒度评估,导致其排序结果趋近于新房源的平均表现水平。

冷启动问题可被重新定义为探索(explore)与利用(exploit)的权衡。若仅优化短期预订量,排名策略会偏向已积累历史数据的成熟房源;但从平台长期生态健康出发,必须付出一定成本探索新上线房源。一种典型解决方案是对新房源施加显式排名提升——即使其DNN预测分数较低,仍通过规则干预提升其展示位次,以较低预订损失为代价收集用户反馈。此类方法在电商排序中广泛应用(如文献[15]),并可通过曝光量上限、时间衰减因子等进一步优化。我们的首次实验即测试该机制:通过在线A/B测试,在保持整体预订量中性的前提下,使新房源首屏曝光量增加8.5%。

然而,探索-利用框架的引入引发严峻挑战:

  1. 相关性悖论:强制提升可能导致与用户搜索意图无关的新房源混入前排结果,损害用户体验;

  2. 动态校准困境:提升幅度需随房源生命周期动态调整,过早衰减会削弱冷启动效果,过晚则造成资源浪费;

  3. 个性化冲突:全局统一的提升策略无法适配不同用户对新房源的接受度差异,可能干扰个性化排序逻辑。

新房源排名提升机制受到两股对立力量的拉扯:

  1. 短期用户体验下降:因搜索结果相关性降低导致的可量化负面影响;

  2. 长期体验增益:通过扩充优质库存带来的隐性长期收益(难以精确量化)。

由于缺乏对"最优提升幅度"的客观定义,团队内部爆发激烈争论,难以达成多方满意的平衡方案。

即使人为设定全局探索成本预算后,新问题随之浮现:预算的合理分配高度依赖地域供需动态。例如:

  • 高需求地区:用户对新房源探索容忍度较高;

  • 低需求地区:过度探索可能加剧预订量下滑风险;

  • 供给受限地区:急需通过探索扩大有效库存;

  • 供给过剩地区:优质房源闲置时,探索成本效益比低下。

而供需状态本身又受地理位置、季节周期、客群规模等多维参数调控。这意味着,要优化使用全局探索预算,需建立包含数千个地域化参数的动态调控体系——这显然无法通过人工规则实现。

预测未来用户互动特征

为构建可管理的冷启动系统,我们重新审视问题核心:新房源的本质差异何在?答案在于缺乏用户互动特征(如预订量、点击量、评论数等),而其价格、位置、设施等固有属性与其他房源无异。理论上,若存在能100%精准预测新房源互动特征的神谕模型,即可完美解决冷启动问题。

基于此洞见,我们将冷启动问题重新定义为"预估新房源未来互动特征"的预测任务——这一视角转变带来关键突破:它允许我们设定明确优化目标并通过迭代逐步逼近。为此,我们向DNN引入新模块,该模块在训练与预测阶段均生成新房源的互动特征预测值。

预测器精度评估方法
我们采用以下四步验证框架:

  1. 数据采样:从日志中抽取约1亿次搜索结果的top 100房源构成样本集,确保所选房源已积累充分用户互动数据;

  2. 基准排序计算:基于真实互动特征,计算每个样本房源的折损排名得分DR_real = log(2.0)/log(2.0 + R_real),其中R_real为日志中的实际排名;

  3. 预测排序模拟:移除样本房源的真实互动特征,替换为待测预测器的估计值,重新计算其预测排名得分DR_predicted;

  4. 误差度量:以(DR_real - DR_predicted)²作为单个样本预测误差,最终误差取全体样本均值。

总之就是:通过排名误差来对真实互动特征进行预测。从而得到冷启动item的互动特征。

理想预测器的误差应为零,实践中通过比较不同预测器的误差值选择更优方案。

预测器对比验证
我们对比两种方案:

  • 基线系统:生产环境原有方案,对缺失特征(含新房源互动特征)赋予人工设定的固定默认值;

  • 地理邻近预测器:基于时空滑动窗口策略,仅聚合与新房源地理位置相邻(半径限定)、容量匹配的房源历史互动特征均值。例如,预测某新房源(双人容量)的预订量时,取周边同类房源在相同时段(考虑季节性)的平均预订量。该方法概念上类似文献[11]的朴素贝叶斯推荐器,通过生成式方法填补缺失信息。

离线分析表明,相较于使用默认值的基线系统,上述地理邻近预测器将互动特征估计误差降低42%。在线A/B测试中,新上线房源的预订量提升+14%,首屏曝光占比同步增长+14%。值得注意的是,该优化不仅助力新房源冷启动,还推动整体预订量增长+0.38%,印证了用户体验的全域提升。

启发

参考:

ICE: https://www.tandfonline.com/doi/full/10.1080/10618600.2014.907095

Methods and metrics for cold-start recommendations

相关文章:

Improving Deep Learning For Airbnb Search

解决问题 问题1: 解决推荐酒店与用户实际预定酒店价格存在偏差问题,实际预定比推荐要更便宜: 所以问题为是否更低价格的list更倾向于用户偏好,应该被优先推荐? 1. 该文通过数据分析与模型演进,将模型改造为item sco…...

多模态大型模型,实现以人为中心的精细视频理解

大家看完觉得有帮助记得点赞和关注!!! 抽象 精细理解视频中人类的动作和姿势对于以人为中心的 AI 应用程序至关重要。在这项工作中,我们介绍了 ActionArt,这是一个细粒度的视频字幕数据集,旨在推进以人为中…...

向量数据库Milvus的部署与使用

Milvus介绍 Milvus是一个开源、高性能、高扩展性的向量数据库,Milvus可以用来存储文本、图像、音频等非结构化数据,本质上是用Embeddings将非结构化数据转换成能够捕捉其基本特征的数字向量,然后将这些向量存储在向量数据库中,从…...

1.文档搜索软件Everything 的使用介绍

Everything 是 Windows 文件搜索的效率天花板,通过灵活语法和极速响应,彻底告别「找文件焦虑」。 定位:一款专注于 极速文件名搜索 的 Windows 工具,免费且轻量(安装包仅几 MB)。 核心优势…...

2025系统架构师---论企业集成平台的技术与应用

摘要 本文探讨了企业集成平台的技术与应用,以某商业银行开发的绩效考核平台系统为例,分析了企业集成平台的基本功能及关键技术,并详细阐述了在表示集成、数据集成、控制集成和业务流程集成方面的应用和实施方式。通过异构系统之间的集成,绩效考核平台与其他系统实现了有机…...

STM32Cubemx-H7-16-FreeRTOS-1-创建工程,实现两个灯的基本亮灭

前言 裸机也是开发到一半快要结束了,接下来开始上操作系统,然后先能使用基本的,后面再讲理论。 Cubemx创建工程 基本打开生成就不说了,直接从界面开始 从这里开始吧 1.首先开启外部高速晶振 2.先这样选择 选择HSE时钟环&#xff…...

深入浅出限流算法(二):更平滑的滑动窗口

好的,接续上一篇关于固定窗口计数器的讨论,我们现在来看看它的改进版——滑动窗口算法,它旨在解决固定窗口那个恼人的“临界突变”问题。 在上一篇文章中,我们探讨了最简单的固定窗口计数器限流算法,并指出了它最大的缺…...

纷析云开源财务软件:基于Spring Boot的轻量化财务中台实践

一、技术架构与核心设计 全栈开源技术栈 后端框架:基于Spring Boot 3.x构建,集成MyBatis-Plus作为ORM层,支持JDK 17特性(如虚拟线程并发处理),确保高吞吐与稳定性。 前端框架:采用Vue 3 TypeS…...

软考-软件设计师中级备考 5、数据结构 树和二叉树

1、树的基本概念 节点的度:节点拥有的子树数目。例如,若一个节点有 3 棵子树,其度为 3。树的度:树中节点的最大度数。如树中所有节点的度最大为 4,则树的度是 4。叶子节点:度为 0 的节点,也…...

php 需要学会哪些技术栈,掌握哪些框架

作为一个「野生」程序员,我的学习过程比较急功近利。 我记得自己写的第一个 PHP 程序是留言本。一上来对 PHP 一窍不通,所以直接去网上找了个留言本的源码,下载下来后先想办法让它在自己电脑上运行起来。通过这个过程掌握了 PHP 开发环境的搭…...

短视频矩阵系统贴牌批量剪辑功能开发,支持OEM

一、引言 在短视频行业蓬勃发展的当下,短视频矩阵运营已成为企业和个人实现品牌推广、流量增长的重要策略。然而,面对大量的视频素材和多个运营账号,传统的单个视频剪辑、发布方式效率极低,难以满足矩阵运营的需求。为了提高内容…...

【Java EE初阶】多线程(二)

1.在图中代码,我们调用了start方法,真正让系统调用api创建了一个新线程,而在这个线程跑起来之后,就会自动执行到run。调用start方法动作本身速度非常快,一旦执行,代码就会立即往下走,不会产生任…...

分布式链路追踪理论

基本概念 分布式调用链标准-openTracing Span-节点组成跟踪树结构 有一些特定的变量,SpanName SpanId traceId spanParentId Trace(追踪):代表一个完整的请求流程(如用户下单),由多个Span组成…...

conda和bash主环境的清理

好的!要管理和清理 Conda(或 Bash)安装的包,可以按照以下步骤进行,避免冗余依赖,节省磁盘空间。 📌 1. 查看已安装的包 先列出当前环境的所有安装包,找出哪些可能需要清理&#xff…...

Linux系统管理与编程14:Shell变量及定制bash登录界面

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 1.准备工作 创建用户wu useradd wu passwd wu 修改权限 chmod uw /etc/sudoers 编辑 visudo 在root行下,添加:“wu ALL……” 图14- 1 恢复文件权限并…...

微信小程序开发笔记

一、首先,下载一个微信开发者工具。前端项目就正常创建,由于本人的前端一塌糊涂,就让AI给我生成了一个我想要的前端项目(包括后面写功能)。 这里开发的时候会用到这个,但是一定注意服务部署到服务器上再本…...

SEO长尾关键词优化核心策略

内容概要 在搜索引擎优化领域,长尾关键词因其精准的流量捕获能力与较低的竞争强度,已成为提升网站自然流量的核心突破口。本文围绕长尾关键词优化的全链路逻辑,系统拆解从需求洞察到落地执行的五大策略模块,涵盖用户搜索意图解析…...

第一节:Linux系统简介

理论知识 Linux的起源与发展:1991 年,芬兰赫尔辛基大学的学生林纳斯托瓦兹受到 Minix 和 Unix 思想的启发,开始编写 Linux 内核。最初,它只是一个个人项目,但随着开源社区的加入,Linux 迅速发展壮大。如今…...

微信聊天机器人搭建 教程/开发

创建标签 简要描述: 添加标签 请求URL: http://域名地址/addContactLabel 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必…...

Ubuntu中C++项目安装二次规划库——qpOASES 库

一、在Ubuntu安装qpOASES 库 步骤 1:更新系统包列表 首先,打开终端,执行以下命令更新系统的包列表,以确保你能获取到最新的软件包信息。 sudo apt update 步骤 2:安装必要的依赖 qpOASES库的编译和安装需要一些基…...

JavaScript-基础语法

前言: 一个网页由三个部分组成: 1.html:超文本标记语言,用于控制网页的结构(页面元素和内容) 2.css:级联样式表,用于控制网页布局,涉及对网页文字,背景,布局进…...

已有 npm 项目,如何下载依赖、编译并运行项目

诸神缄默不语-个人技术博文与视频目录 这篇博文的适用场景是比如说反正你现在有了一个现成的npm项目,然后无论如何,你要把前端挂起来。 文章目录 一、准备工作1. 安装 Node.js 和 npm2. 克隆或获取项目代码 二、安装项目依赖三、了解 npm 脚本命令四、构…...

第四章:Messaging and Memory

Chapter 4: Messaging and Memory 从配置管理到消息记忆:如何让AI记住对话内容? 在上一章的配置管理中,我们已经能让系统记住所有参数设置。但你是否想过:如果用户连续提问“今天天气如何?”和“明天呢?”…...

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈 基于 6 个来源 因“五一”劳动节调休,4月27日(周日)本应上班,不少iPhone用户却因闹钟未响迟到,“调休”“当苹果闹钟遇到调休”话题登上热搜。苹…...

npm error code CERT_HAS_EXPIRED

npm error code CERT_HAS_EXPIRED 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 擅长.net、C、python开发, 如果遇到技术问题,即可私…...

C++ 之 【list的简介、list 的构造函数、iterator、容量操作、元素访问、增删查改与迭代器失效】

目录 1.list的介绍 2.list的使用 2.1 构造函数 2.2 iterator 的使用 2.3 容量操作 2.4 元素访问 2.5 增删查改 2.5.1头插头删与尾插尾删 2.5.2 insert 、erase 函数 2.5.3 clear、swap函数 2.5.4 关于find函数 3.迭代器失效 1.list的介绍 (1)list的底层通常实现为带…...

使用手机录制rosbag包

文章目录 简介录制工具录制步骤录制设置设置IMU录制频率设置相机分辨率拍照模式录制模式数据制作获取数据数据转为rosbag查看rosbag简介 ROS数据包(rosbag)是ROS系统中用于记录和回放传感器数据的重要工具,通常用于算法调试、系统测试和数据采集。传统上,rosbag依赖于ROS环…...

使用阿里云 CDN 保护网站真实 IP:完整配置指南

使用阿里云 CDN 保护网站真实 IP:完整配置指南 一、宝塔面板准备工作1. 确认网站部署状态2. 宝塔中检查网站配置 二、配置阿里云 CDN1. 添加域名到 CDN2. 配置 DNS 解析3. 配置成功确认 三、宝塔面板安全加固(隐藏 IP 的关键步骤)1. 禁止通过…...

JAVA-StringBuilder使用方法

JAVA-StringBuilder使用方法 常用方法 append(Object obj) 追加内容到末尾 sb.append(" World"); insert(int offset, Object obj) 在指定位置插入内容 sb.insert(5, “Java”); delete(int start, int end) 删除指定范围的字符 sb.delete(0, 5); replace(int start…...

Milvus(9):字符串字段、数字字段

1 字符串字段 在 Milvus 中,VARCHAR 是用于存储字符串数据的数据类型。定义VARCHAR 字段时,有两个参数是必须的: 将datatype 设置为DataType.VARCHAR 。指定max_length ,它定义了VARCHAR 字段可存储的最大字符数。max_length 的有…...

locust压力测试

安装 pip install locust验证是否安装成功 locust -V使用 网上的教程基本上是前几年的,locust已经更新了好几个版本,有点过时了,在此做一个总结 启动 默认是使用浏览器进行设置的 # 使用浏览器 locust -f .\main.py其他参数 Usage: locust […...

Uniapp:showLoading(等待加载)

目录 一、出现场景二、效果展示三、具体使用一、出现场景 在项目的开发中,我们经常会请求后台接口返回数据,但是每一个接口返回数据的时间不一致,有的快,有的慢,这个时候如果不加一个遮罩层,接口返回慢的时候,非常影响用户体验 二、效果展示 三、具体使用 显示加载框…...

线性代数的本质大白话理解

先一句话总结的如下: 线性代数的本质,就是研究“线性变化”——包括空间中点、向量、矩阵之间如何通过线性规则(加法、数乘)变化和联系,并理解这些变化背后的结构。 1. 向量(Vector)——不是数据…...

【Rust通用集合类型】Rust向量Vector、String、HashMap原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

Kotlin await等待多个异步任务都完成后才进行下一步操作

Kotlin await等待多个异步任务都完成后才进行下一步操作 import kotlinx.coroutines.*fun main() {runBlocking {val tagA "a"val tagB "b"val a async {worker(tagA)}val b async {worker(tagB)}println("${System.currentTimeMillis()} 等待 $t…...

佛山大旺高新区3650 M5 ERP服务器维修案例

1:机器型号:联想system x3650 m5 2:故障问题:纺织公司由于没有专业的it网管,导致服务器各种爆故障灯,本次处理的是用户反馈最近ERP软件使用过程中经常弹出资源不足的报错。 3:于是预约我们工程…...

利用Python生成Xilinx FPGA ROM IP核 .coe初始化文件

以下是一个 Python 脚本,用于生成 Xilinx IP ROM 的.coe 格式初始化文件,假设ROM 深度为 1024,数据位宽为 32bit,使用随机的 32 位无符号数进行初始化: import random# 定义ROM的深度和数据位宽 rom_depth 1024 data…...

配置电子邮件服务

配置电子邮件服务 一.基于Postfix的邮件发送 1. 安装Postfix yum install postfix -y 再下载一个telnet工具 yum -y install telnet 启动Postfix systemctl start postfix systemctl enable postfix 查看系统中端口是否被Postfix使用 netstat -tnlp | gre…...

WGCAT工单系统发现错误 定时处理工单数据任务错误

一直在用WGCAT工单系统,今天在系统日志里,看到了这个错误提示,不知道是什么原因 2025-04-26 07:05:00.000 [taskScheduler-10] INFO com.wgcloud.task.ScheduledTask - 定时处理工单数据任务开始----------2025-04-26 07:05:00 2025-04-26 …...

软件工程(一):黑盒测试与白盒测试

黑盒测试(Black Box Testing) 定义 黑盒测试是指不关心程序内部实现细节,只关注输入和输出的测试方法。把被测软件当作一个“黑盒子”,只依据功能说明书或需求文档来编写测试用例,验证功能是否正确。 特点 不需要了…...

emqx部署

要修改文件-命名空间-节点选择器 #apiVersion: v1 ##kind: ConfigMap ##metadata: ## name: emqx-config ##data: ## emqx.conf: | ## # --- apiVersion: v1 kind: PersistentVolume metadata:name: emqx-pv spec:capacity:storage: 5GivolumeMode: FilesystemaccessMode…...

【KWDB 创作者计划】_KWDB产品技术解读

文章目录 每日一句正能量一、KWDB简介二、官网信息三、技术亮点解读(一)存储引擎(二)查询引擎(三)分布式架构 四、应用场景五、总结 每日一句正能量 你的心为什么这样分散,使得你放慢了脚步。他…...

C++ 表达式求值优先级、结合律与求值顺序(五十九)

1. 运算符优先级与结合律 优先级(Precedence) 决定未加括号时运算符如何“绑”在一起:5 10 * 20 / 2; // 等同于 5 ((10 * 20) / 2)结合律(Associativity) 决定同级运算符的结合方向: 左结合&#xff0…...

乐理学习笔记(一)---节拍与音符

节拍 衡量音的长度和节奏的基本单位,以强弱关系按照一定的规律循环进行 拍大腿、拍手 类型 上面的这些不同类型节拍的强弱关系中第一个都是强(起确定性作用,而不是音量最大) 强和弱是决定性的区别,每一个强拍是和弦…...

《系统架构 - Java 企业应用架构中的完整层级划分》

文章目录 Java 企业应用架构中的完整层级划分核心层级(基础架构)业务逻辑层接口层基础设施层辅助层级特殊架构层级现代架构扩展层各层调用关系示例分层原则建议 Java 企业应用架构中的完整层级划分 除了常见的 Controller、Service、DAO 等标准层级外&a…...

Adobe Lightroom Classic v14.3.0.8 一款专业的数字摄影后期处理软件

软件介绍 Adobe Lightroom Classic 2025中文激活版(Adobe桌面照片编辑软件)LRC2025(LR2025本地离线版)是一款桌面照片编辑器和相册管理软件的raw格式编辑软件,支持各种RAW图像相机配置,HDR全景照片&#x…...

SQL 易混易错知识点笔记1(drop,role,%,localhost)

DROP 与 DELETE 的区别 DELETE:删除表中的数据行,属于DML操作,可回滚,可带WHERE条件 DELETE FROM table WHERE condition; -- 删除特定行 DELETE FROM table; -- 删除所有行但保留表结构 DROP:删除整个数据库对象(表、…...

C++23 std::bind_back:一种调用包装器 (P2387R3)

文章目录 引言背景知识旧有的绑定工具C20的std::bind_front std::bind_back的定义和功能定义功能 std::bind_back的使用场景简化回调函数部分应用参数 std::bind_back与其他绑定工具的对比与std::bind的对比与std::bind_front的对比 总结 引言 在C的发展历程中,每一…...

使用多线程快速向Excel中快速插入一万条数据案例

当有大量数据需要存入Excel时,使用传统的单线程完成会有以下这些弊端: 导入速度慢:单线程一次只能处理一个任务,在导入大量数据时,需要逐个将数据写入 Excel。这意味着 CPU 在大部分时间里只能处理一个数据块&#xff…...

RestRequest ,newtonsoft解析

var request new RestRequest(Method.GET); IRestResponse response client.Execute(request); Console.WriteLine(response.Content); //保存token Newtonsoft.Json.Linq.JObject obj3 Newtonsoft.Json.Linq.JObject.Pars…...