[搜广推]王树森推荐系统——Deep Retrieval 召回
Deep Retrieval 简介
Deep Retrieval 是一种推荐系统框架,它将物品表示为路径(path),并在线上查找与用户最匹配的路径。
这种方法与传统的双塔模型不同,后者通常将用户和物品表示为向量,并在线上进行最近邻查找。Deep Retrieval 与阿里的 TDM(Tree-based Deep Model)有相似之处。
基本概念
-
候选项目:在DR模型中,候选项目指推荐系统中可供推荐的所有项目,例如商品、视频或文章等。
-
离散潜在空间:DR将所有候选项目编码进一个离散的维度空间。离散潜在空间的结构是由多个层组成的,每一层包含多个节点。
-
节点:节点是DR模型中离散潜在空间中的基本单元,它们构成了模型的多层结构。每个节点可以看作是一个位置标识,而不是直接代表一个项目。
-
路径:路径是由多个节点组成的序列,它穿过模型的多层结构,每一层选择一个节点,从而形成一个从第一层到最后一层的完整序列。每条路径可以看作是一组项目的聚类,这些项目在路径上被赋予相似的特征或属性。
- DR模型由D层组成,每一层都有K个节点。因此,每条路径可以表示为一个D维的向量,其中每个维度的值范围从1到K
- 例如,如果D=3且K=10,那么一条可能的路径可以是[2, 4, 1],其中2是第一层的节点索引,4是第二层的节点索引,1是第三层的节点索引。
-
项目到路径的映射:每个候选项目不是直接映射到一个节点,而是映射到一条或多条路径上。这意味着一个项目可以通过多条路径来表示,每条路径捕捉项目的不同方面或特征。
两个索引
- Item to Paths:每个物品对应多条路径,例如每条路径由三个节点表示, path = [a, b, c]。
- Path to Items:每条路径对应多个物品,这样可以快速检索与特定路径相关的所有物品。
Item to Paths(物品到路径)
训练神经网络时用到这个索引
-
多对多映射:在DR模型中,每个项目(Item)可以被映射到多个路径(Paths)。路径可以有重合的节点。
-
这种设计允许模型捕捉项目的多方面属性,因为一个项目可能与多个不同的类别或特征相关联。
-
概率分布:DR的预估模型学习一个概率分布,用于给定用户输入时预测项目所属的路径。这个概率分布是模型参数的一部分,与其他神经网络参数一起被学习,以最大化用户-项目交互数据的目标函数。
Path to Items(路径到物品)
召回时用到这个索引
-
检索过程:在检索阶段,DR模型使用束搜索(beam search)算法来找到最可能包含用户感兴趣项目的路径。一旦找到这些路径,模型就可以检索与这些路径相关联的项目。
-
物品的检索和重排:虽然DR模型可以有效地检索与特定路径相关的项目,但同一个路径可能包含多个物品。因此,需要一个额外的重排模型(如softmax模型)来对这些项目进行排序,以确定最终推荐给用户的项目。
预估模型
预估模型是基于用户特征和项目路径通过逐层预估用户对每个节点的兴趣,并将这些概率相乘来预估用户对整个路径的兴趣。
- 预估模型的核心任务是学习一个概率分布,这个分布能够根据给定的用户输入(特征)预测用户对不同路径的兴趣。
- 概率分布定义了从用户特征到路径的映射,是模型参数的一部分,与其他神经网络参数一同被优化。
步骤
- 给定用户特征 X,预估用户对节点 a 的兴趣 p ( a ∣ X ) p(a|X) p(a∣X)。通过MLP和softmax层来实现的,MLP基于用户特征输出一个概率分布,softmax层根据分布输出选择节点 a 的概率。
- 在选择了节点 a 之后,预估用户对下一个节点 b 的兴趣 p ( b ∣ a , X ) p(b|a,X) p(b∣a,X)。MLP接收用户特征 X 和节点 a 的嵌入作为输入,softmax输出选择节点 b 的概率。
- 在选择了节点 a 和 b 之后,预估用户对最终节点 c 的兴趣 p ( c ∣ a , b , X ) p(c|a,b,X) p(c∣a,b,X)。MLP输入用户特征 X 和之前选择的节点 a 和 b 的嵌入,softmax输出选择节点 c 的概率。
4.将上述每个节点的概率相乘得到预估的用户对整个路径 [a, b, c] 的兴趣:
p ( [ a , b , c ] ∣ X ) = p ( a ∣ X ) × p ( b ∣ a , X ) × p ( c ∣ a , b , X ) p([a, b, c]|X) = p(a|X) × p(b|a, X) × p(c|a, b, X) p([a,b,c]∣X)=p(a∣X)×p(b∣a,X)×p(c∣a,b,X)
Beam Search算法
Beam Search算法是一种启发式的图搜索算法,常用于解决优化问题,主要是寻找最优序列或者路径的问题
基本思想
在每个搜索步骤中,不是扩展所有可能的候选解,而是只扩展最有前景的有限数量的候选解
步骤
- 从初始状态开始,通常设置一个包含所有可能的后续状态的候选集,但只保留分数最高的前 k 个状态进入下一轮,其中 k 是超参数beam宽度(beam size)。
- 在每一步中,算法根据当前beam中的每个状态生成所有可能的下一个状态。对于每个状态,计算其评分或概率
- 根据beam宽度 k,从所有候选状态中选择评分最高的 k 个状态,这些状态构成了下一轮的beam。
- 重复扩展和修剪步骤,直到满足终止条件。
- 输出beam中评分最高的路径作为最终结果。
例如:如果一层有K个节点,设beam size为 k,则第一层取四个,然后每层计算kK个评分(k个上一层取的K个这一层的),然后从所有候选状态中选择评分最高的 k 个状态,这些状态构成了下一轮的beam。
离线训练
先进行离线训练,再进行线上召回
同时学习神经网络参数和物品表征
deep Retrieval训练时只用正样本 (user,item): click(user, item) = 1
学习神经网络参数
神经网络参数决定了模型如何根据用户特征 X 预估对不同路径的兴趣,主要学习多层感知机(MLP)的权重和偏置等。
这个神经网络的作用是判断用户对路径是否感兴趣。如果用户点击过物品,且物品对应路径path,则更新神经网络参数使p(pathlx)变大
学习物品表征
步骤
用贪心算法更新路径
- 假设已经把物品表征为 J 条路径 П = p a t h 1 , … , p a t h J П={path1,…,path_J} П=path1,…,pathJ
- 每次固定 { p a t h i } \{path_i\} {pathi}_{i \neq l},并从未被选中的路径中,选出一条作为新的 p a t h l path_l pathl
p a t h l ← a r g m i n p a t h l l o s s ( i t e m , П ) + α ⋅ r e g ( p a t h l ) path_l← argmin_{path_l}loss(item, П)+ \alpha · reg(path_l) pathl←argminpathlloss(item,П)+α⋅reg(pathl) - 选中的路径有较高的分数 s c o r e ( i t e m , p a t h l ) score(item,path_l) score(item,pathl),而且路径上的物品数量不会太多。
线上召回
召回:用户 − > 路径 − > 物品 召回:用户->路径->物品 召回:用户−>路径−>物品
- 线上召回先使用用户特征和神经网络来预估用户对路径的兴趣,然后使用Beam Search来找到最感兴趣的一批路径
- 之后通过
path to item
索引召回这些路径上的物品 - 对召回的物品进行初步排序,最终返回分数最高的物品作为推荐。
步骤
输入:用户特征 X
- 使用神经网络(如MLP)来预估用户对特定路径 path=[a,b,c] 的兴趣,详见上面预估模型那一节。
- 神经网络输出一个分数 p(path|X),表示用户对路径的整体兴趣程度。这个分数是基于用户特征 X 和路径 [a,b,c] 计算得出的。
- 使用Beam Search算法来寻找分数 p(path|X) 最高的 s 条路径。
- Beam Search返回 s 条分数最高的路径,这些路径被认为是用户最可能感兴趣的。
- 对于每条选中的路径,模型利用
path to item
索引来召回该路径上的 n 个物品。这个索引将路径映射到它们包含的物品列表。- 若有 s 条路径,每条路径召回 n 个物品,则总共召回 s×n 个物品。
- 对召回的 s×n 个物品进行初步排序,然后从排序后的物品列表中返回分数最高的若干物品作为推荐结果
输出:推荐物品的列表
完整流程
离线训练流程
离线训练要解决两个问题:
- 怎么让物品更好的表征成路径,用用户优化物品-路径的关系
- 怎么让用户对物品的兴趣转化成用户对路径的兴趣,用物品优化用户-路径的关系
方法:以用户为中介,把路径和物品关联起来。
- 数据准备
- 收集用户与物品之间的正样本交互数据,即用户对物品的点击行为,表示为 click(user, item) = 1。
- 模型初始化
- 初始化神经网络参数,主要包括多层感知机(MLP)的权重和偏置。
- 初始化物品到路径的表征,即每个物品被表示为 J 条路径 П = {path1, …, path_J}。
- 学习神经网络参数
- 神经网络作用:预估给定用户特征 X 时,用户对不同路径的兴趣。
- 参数更新:如果用户点击过某个物品,且该物品表征为路径 path,则更新神经网络参数,使得兴趣分数 p(path|X) 增大。
- 学习物品表征
- 物品和路径之间的相关性 = 用户对路径的兴趣 * 用户是否点击
- 贪心算法更新路径:
- 先计算物品和路径之间的相关性,让每个物品被表示为 J 条路径 П = {path1, …, path_J}
- 每次固定除 p a t h l path_l pathl 之外的所有路径 p a t h i path_i pathi,并从未被选中的路径中选出一条作为新的 $path_l¥。
- 选择 path_l 的标准是最小化损失函数 loss(item, П) 加上正则化项 reg(path_l):
p a t h l ← arg min p a t h l l o s s ( i t e m , П ) + α ⋅ r e g ( p a t h l ) path_l \leftarrow \arg\min_{path_l} loss(item, П) + \alpha \cdot reg(path_l) pathl←argpathlminloss(item,П)+α⋅reg(pathl) - 选择的路径应具有较高的分数 s c o r e ( i t e m , p a t h l ) score(item, path_l) score(item,pathl),并且路径上的物品数量不会太多。
注意: 3,4两步交替进行
线上召回流程
- 路径兴趣预估
- 输入用户特征 X,使用训练好的神经网络(如MLP)预估用户对特定路径 path=[a,b,c] 的兴趣。
- 神经网络输出一个分数 p(path|X),表示用户对路径的整体兴趣程度。
- 使用Beam Search寻找感兴趣路径
- 使用Beam Search算法找到分数 p(path|X) 最高的 s 条路径。
- Beam Search返回 s 条分数最高的路径,这些路径被认为是用户最可能感兴趣的。
- 召回路径上的物品
- 对于每条选中的路径,利用 path to item 索引召回该路径上的 n 个物品。
- 若有 s 条路径,每条路径召回 n 个物品,则总共召回 s×n 个物品。
- 初步排序和返回推荐结果
- 对召回的 s×n 个物品进行初步排序。
- 从排序后的物品列表中返回分数最高的若干物品作为推荐结果。
相关文章:
[搜广推]王树森推荐系统——Deep Retrieval 召回
Deep Retrieval 简介 Deep Retrieval 是一种推荐系统框架,它将物品表示为路径(path),并在线上查找与用户最匹配的路径。 这种方法与传统的双塔模型不同,后者通常将用户和物品表示为向量,并在线上进行最近邻…...
【深入解析蓝牙dumpsys bluetooth_manager 命令输出】
了解蓝牙的工作状态以及如何在测试中利用这些信息。 1. Bluetooth Status(蓝牙状态) enabled: true state: ON address: 00:00:00:00:43:36 name: 小米手机 time since enabled: 00:15:18.492enabled: true — 蓝牙功能已启用。state: ON — 蓝牙目前是开启状态。address: …...
【三】Fast-DDS hello world!
编译hello world # 进入到源码目录 mkdir -p examples/cpp/hello_world/build cd examples/cpp/hello_world/build cmake .. && make -j4运行publisher ./hello_world publisher 运行subscriber ./hello_world subscriber 结果...
将HTML转换为PDF:使用Spire.Doc的详细指南(一) 试用版
目录 引言 1. 为什么选择 Spire.Doc? 1.1 主要特点 1.2 适用场景 2. 准备工作 2.1 引入 Spire.Doc 依赖 2.2 禁用 SSL 证书验证 3. 实现功能 3.1 主类结构 3.2 代码解析 4. 处理图像 5. 性能优化 5.1 异步下载图像 示例代码 5.2 批量处理优化 示例代…...
【物联网技术与应用】实验10:蜂鸣器实验
实验10 蜂鸣器实验 【实验介绍】 蜂鸣器是音频信号装置。蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。 【实验组件】 ● Arduino Uno主板* 1 ● USB数据线* 1 ● 有源蜂鸣器* 1 ● 无源蜂鸣器* 1 ● 面包板* 1 ● 9V方型电池* 1 ● 跳线若干 【实验原理】 如图所示&#x…...
【python高级】342-TCP服务器开发流程
CS模式:客户端-服务端模式 TCP客户端开发流程介绍(五步)(C端) 1.创建客户端套接字对象 2.和服务端套接字建立连接 3.发送数据 4.接收数据 5.关闭客户端套接字 TCP服务端开发流程(七步)…...
C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解
目录 1、VLC简介 2、VLC编译环境配置 2.1、编译环境 2.2、编译环境配置 2.2.1、下载安装MSYS2 2.2.2、下载mingw-w64 3、编译VLC 4、VLC库的裁剪 5、总结 C软件异常排查从入门到精通系列教程(核心精品专栏,订阅量已达600多个,欢迎订…...
draw.io 导出svg图片插入word后模糊(不清晰 )的解决办法
通常我们将图片从draw.io导出为svg格式后插入word, 会发现字体不清晰,特别是使用宋体时,折腾了半天,得到如下办法: 方法1: 在draw.io中导出pdf文件,使用 PDF转SVG转换器 - SVGConverter 将其转换为svg, 完美呈现。 …...
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
目录 详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用 一、什么是柯里化? 1、原理解析 2、一个直观的例子 二、如何实现柯里化? 1、底层实现 2、工作原理解析 3…...
Cesium材质——Material
简介: Cesium.Material对象的目的,就是生成一段名称为czm_getMaterial的函数(示例代码如下), 这个czm_getMaterial函数,是shader代码,会被放到片元着色器中使用。 czm_material czm_getMater…...
《点点之歌》“意外”诞生记
世界是“点点”的,“点点”是世界的。 (笔记模板由python脚本于2024年12月23日 19:28:25创建,本篇笔记适合喜欢诗文的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 …...
统计某个文件中某个字符串出现的次数
要统计某个文件中某个字符串出现的次数,有多种方法可以实现。以下是几种常用且高效的 Linux 命令方法: 方法一:使用 grep 和 wc 命令示例: grep -o "字符串" 文件名 | wc -l说明: grep -o "字符串&…...
C++简明教程(文章要求学过一点C语言)(3)
一、编程工具大揭秘——IDE 当我们准备踏入 C 编程的奇妙世界时,首先要认识一个重要的“魔法盒子”——集成开发环境(IDE)。IDE 就像是一个全能的编程工作室,它把我们写代码所需要的各种工具都整合到了一起,让编程这件…...
Springboot高并发乐观锁
Spring Boot分布式锁的主要缺点包括但不限于以下几点: 性能开销:使用分布式锁通常涉及到网络通信,这会引入额外的延迟和性能开销。例如,当使用Redis或Zookeeper实现分布式锁时,每次获取或释放锁都需要与这些服务进行交…...
编译原理复习---正则表达式+有穷自动机
适用于电子科技大学编译原理期末考试复习。 1. 正则表达式 正则表达式(Regular Expression,简称regex或regexp)是一种用于描述、匹配和操作文本模式的强大工具。它由一系列字符和特殊符号组成,这些字符和符号定义了一种搜索模式…...
如何使用ChatGPT辅助文献综述,以及如何进行优化?一篇说清楚
目录 1.写在开头 2.ChatGPT 3.提示词研究 4.第一轮研究 5.第二轮研究 6.生成文献综述 嘿宝子们!今天我们要聊的,可是个让学术圈都为之振奋的话题——ChatGPT辅助文献综述。这个教育界的新宠儿,已经不满足于仅仅在学习和教学中露两手了&…...
ZZNUOJ 1601:字母序号(C/C++/Java)
题目描述 我们把字母 A-Z 分别编号为 1-26, 现在给你一个大写字母, 输出这个大写字母的序号。 输入 输入一个大写字母 输出 输出这个大写字母的序号 样例输入 C 样例输出 3 常见的ASCII值 ASCII表中可以记下部分特殊的值(十进制)(字母从A到Z,从a到z,ASCII值依次递增)...
[CISCN 2021初赛]rsa
[CISCN 2021初赛]rsa 源代码: from flag import text,flag import md5 from Crypto.Util.number import long_to_bytes,bytes_to_long,getPrimeassert md5.new(text).hexdigest() flag[6:-1]msg1 text[:xx] msg2 text[xx:yy] msg3 text[yy:]msg1 bytes_to_lo…...
Electron -- Electron Fiddle(一)
Electron Fiddle 是一个由 Electron 团队开发的开源工具,它允许开发者快速创建、运行和调试 Electron 应用。这个工具提供了一个简洁的界面,使用户无需配置复杂的开发环境,就能快速体验和学习 Electron。强烈建议将其安装为学习工具。 学习它…...
java 实现排序的几种方式
冒泡排序(Bubble Sort) 基本原理: 它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 示例代码如下: 登…...
【机器学习与数据挖掘实战】案例06:基于Apriori算法的餐饮企业菜品关联分析
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…...
陀螺仪选型
瑞芬官网 datasheet 陀螺仪、IMU姿态仪、陀螺转角仪、三轴姿态仪、三轴陀螺仪 mid360 imu ICM-40609-D TDK InvenSense | Mouser https://product.tdk.com/system/files/dam/doc/product/sensor/mortion-inertial/imu/data_sheet/ds-000330_icm-40609-d_v1.2.pdf...
【超详细实操内容】django的身份验证系统之限制用户访问的三种方式
目录 1、使用request.user.is_authenticated属性 2、装饰器login_required 3、LoginRequiredMixin类 通常情况下,网站都会对用户限制访问,例如,未登录的用户不可访问用户中心页面。Django框架中使用request.user.isauthenticated属性、装饰器loginrequired和LoginRequire…...
Pika Labs技术浅析(六):自动化技术
Pika Labs 的自动化技术旨在通过工作流引擎和自动化警报系统,帮助用户实现业务流程的自动化和实时监控。 一、自动化技术模块概述 Pika Labs 的自动化技术模块旨在通过以下两个核心组件,实现业务流程的自动化和实时监控: 1.工作流引擎&…...
springboot471基于协同过滤算法商品推荐系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装协同过滤算法商品推荐系统软件来发挥其高效地信息处理的作用…...
【YashanDB知识库】jdbc查询st_geometry类型的数据时抛出YAS-00101错误
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802956.html?templateId1718516 问题现象 某客户的业务在通过YashanDB jdbc驱动查询含有st_geometry列的数据时,报如下异常:YAS-00101 cannot allocate 0 byte…...
ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。
在 Web 开发中,GET 和 POST 是两种常见的 HTTP 请求方法,它们有一些显著的区别。此外,datatype 参数在 jQuery 的 ajax() 请求中指定了预期的响应数据类型。接下来,我会详细解释这些问题。 1. GET 和 POST 请求的区别 GET 请求 和…...
EKF异常状态自检
https://wenku.csdn.net/column/25p1jkf4vz https://www.zhihu.com/question/293038308/answers/updated https://zhuanlan.zhihu.com/p/12011086094 常用数据分析方法:方差分析及实现!-腾讯云开发者社区-腾讯云 方差分析的七种类型_双因素方差分析 自变…...
《解析 MXNet 的 C++版本在分布式训练中的机遇与挑战》
在深度学习的广袤领域中,分布式训练已成为应对大规模数据和复杂模型训练需求的关键手段。MXNet 作为一款备受瞩目的深度学习框架,其 C版本在分布式训练方面展现出独特的魅力,同时也面临着诸多挑战。深入探究这些优势与挑战,对于推…...
UVM学习总结
问题1:同时出现几个相同的uvm_config_de()哪个有效? UVM中的配置对象是通过uvm_config_db类实现的。uvm_config_db类使用一对名称和值来存储配置信息。当多个uvm_config_db.call()调用同时提供相同名称的配置时,最后一个调用将覆盖之前的调用…...
TCP/IP 介绍:网络通信的基石
TCP/IP 介绍:网络通信的基石 计算机通信协议概述 在数字时代,计算机之间的通信变得至关重要。计算机通信协议(Computer Communication Protocol)是一套规则,定义了计算机如何相互交流信息。这些协议确保了不同制造商…...
华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动
华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…...
基于Spring Boot的建材租赁系统
一、系统背景与目的 随着建筑行业的快速发展,建材租赁需求日益增加。传统的建材租赁管理方式大多依赖于纸质文档或简单的电子表格,不仅效率低下,还容易出现信息遗漏和错误。为了解决这些问题,基于Spring Boot的建材租赁系统应运而…...
YOLO v5 Series - MQTT
MQTT...
uni-app开发订单列表页面
目录 一:功能描述 二:功能实现 一:功能描述 订单列表页面包含三个部分,最上面显示订单的状态信息,可以根据订单进行切换,中间显示订单的商品和价格信息,最下面显示订单的操作按钮,可以根据不同的状态操作订单。 二:功能实现 1:状态切换 <view class="nav-…...
14,攻防世界Web_php_unserialize
进入场景 看见代码,解析一下 这段PHP代码定义了一个名为Demo的类,并演示了如何通过URL参数进行反序列化和文件高亮显示的功能,同时也包含了一些安全措施以防止对象注入攻击。下面是对这段代码的逐行解释: 1.<php 开始PHP代码…...
基于单片机的电梯声控系统设计(论文+源码)
1.系统设计 在目前的高楼住宅,商业大厦中电梯是不可或缺的,而传统的电梯控制器系统,通常需要用户用手去按下按键进行控制,但是这种方式在有些情况下,并不完善,比如在本次新冠疫情期间,由于新冠…...
宠物用品电子商务系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...
每日一题 341. 扁平化嵌套列表迭代器
341. 扁平化嵌套列表迭代器 展开成数组来解题 class NestedIterator {vector<int> nums;int idx;void flattened(vector<NestedInteger> &nestedList){for(int i0;i<nestedList.size();i){if(nestedList[i].isInteger()){nums.push_back(nestedList[i].get…...
小程序 - 模拟时钟
微信小程序常用API练习 - 模拟时钟小程序开发笔记 模拟时钟 “模拟时钟”微信小程序是一个简约风格的动态时钟,该时钟时间与系统时间一致,且时针、分针、秒针会与系统时间同步更新,用户可以很方便地查看时间。下面将对“模拟时钟”微信小程序…...
UDP的报文结构和特点
1.UDP传输协议的特点 使用UDP传输协议进行通信,过程类似于寄信,它的特点如下: 无连接:知道对端的IP号和端口号就直接进行传输,不需要建立连接;不可靠:没有可靠机制,发送数据包以后&a…...
如何在服务器上克隆、pull、push GitHub私有项目
诸神缄默不语-个人CSDN博文目录 情况是这样的,我直接用git clone命令后,会提示让我输入GitHub账号密码,我输入后它还是显示克隆失败,并显示: Cloning into folder_name... Username for https://github.com: user_na…...
mybatis 动态 SQL
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底…...
LeetCode 1661. 每台机器的进程平均运行时间
LeetCode 1661. 每台机器的进程平均运行时间 表: Activity ----------------------- | Column Name | Type | ----------------------- | machine_id | int | | process_id | int | | activity_type | enum | | timestamp | float | ----------------------- 该表展示了一家工厂…...
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
文章目录 生产者端(消息发布端)保证机制RabbitMQ服务器端保证机制消费者端(消息接收端)保证机制除了MQ自带的机制,还能做的操作持久化的原理ACK思想 更多相关内容可查看 消息从发送,到消费者接收࿰…...
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 一、翻译环境和运行环境二、翻译环境1.编译预处理编译汇编 2.链接 三、运行环境 一、翻译环境和运行环境 在 ANSI C 的任何⼀种实现中&am…...
Codeforces Round 994 (Div. 2)-D题
题目链接:https://codeforces.com/contest/2049/problem/D 题目大意是在开始移动之前,可以任意次将一行元素向左挪一格,代价是1,开始游戏后,只能向下走或者向右走,直到走到终点,问最小代价是多少. constexpr ll inf 1E18; void solve() {int n, m, K;std::cin >> n &g…...
【计算机视觉】opencv-停车位检测原理及代码演示
概述 本文介绍了一种基于OpenCV库的停车场空位检测方法。通过本项目演示,可以对opencv库有更深刻的理解。文章详细阐述了检测原理、算法流程以及代码实现。 一、原理介绍 基于OpenCV的停车位检测原理涉及多个图像处理步骤,以下将结合相关公式详细介绍每…...
C++面向对象三大特征之一 ——(多态)
C面向对象三大特征之一 ——多态 一. 多态的概念二. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写虚函数重写的两个例外: 2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三. 抽象类接口继承和实现继承 四.多态的原理4.1虚函数…...
HTTP协议及安全防范
由于图片解析问题,可以点击查看 👉🏻 博客原文 HTTP(Hypertext Transfer Protocol)超文本传输协议是一个用于 Web 应用程序通信的应用层协议。它是一种客户端-服务器协议,客户端通过发送请求到服务器来获取…...