- 博客(476)
- 资源 (1)
- 收藏
- 关注
原创 广告系统中后链路数据为什么要使用流批一体技术?流批一体技术是什么?
在大规模广告系统的后链路(离线和实时特征计算、模型训练与上线、效果监控等)中,往往既有对海量历史数据的批量计算需求(离线特征、离线模型训练、报表汇总),又有对在线请求的低延迟实时计算需求(实时特征、在线打分、实时监控/告警)。传统将二者割裂、用 Lambda 架构(Batch + Speed 层)分别实现,带来了:• 代码与业务逻辑重复• 数据语义/计算结果不一致• 运维成本、调度复杂度翻倍• 开发调试效率低。
2025-06-10 20:43:49
15
原创 什么是客资广告(线索广告)
核心在于明确目标人群、优化创意与表单体验,并结合持续跟进及数据分析,实现潜在客户到最终成交的全流程闭环。线索广告(Lead Ads)是以获取潜在客户信息(如姓名、电话、邮箱、职务等)为目的的广告形式。用户填写完表单信息后,广告主即可获得可跟进的客户线索,用于后续销售或精准营销。• 针对不同客户阶段可设计多版本表单——初步兴趣版 vs. 进一步跟进版。• 控制在3~5项以内(姓名、手机号、地区、需求等)• 突出价值主张(如“免费报告”、“限时优惠”)• 提供实用价值(白皮书下载、免费体验、优惠券)
2025-06-10 17:03:06
132
原创 搜广推特征数据变更灰度为什么实现很困难
综上所述,搜广推特征数据的灰度发布涉及到数据生产、存储、服务、模型训练、实验评估等多个环节的协同,对系统架构的灵活性、数据管理能力和实验平台能力都提出了极高的要求,因此实现起来非常困难。通常需要强大的基础设施(如支持版本的特征平台、灵活的数据流处理框架、完善的A/B测试系统)来支撑。搜广推(搜索、广告、推荐)系统中的特征数据变更进行灰度发布之所以实现困难,主要源于这些系统本身的复杂性、对数据一致性的高要求以及变更可能带来的深远影响。
2025-06-05 19:06:09
54
原创 运维视角下的广告系统之理解广告索引级联
摘要:广告索引采用级联(多层索引)设计主要为了高效处理多维度查询。级联索引通过分层过滤(如地域→业务线→关键词),能快速排除无关项,显著提升检索性能,同时节省存储空间。以美团为例,其广告系统按照地域、业务线等维度构建层级结构,支持毫秒级响应。这种设计还能灵活扩展新维度,并控制键空间爆炸。实际系统中常结合倒排索引等技术优化,满足高并发需求。类似架构也广泛应用于滴滴、阿里等企业的广告和推荐系统。
2025-06-03 15:14:14
46
原创 阿里云数据盘级别
总的来说,ESSD云盘的不同性能级别PL0、PL1、PL2和PL3在性能、容量范围、应用场景以及价格方面都有显著的差异。在选择时,需要根据实际的业务需求和预算进行权衡,选择最适合的性能级别。数据盘PL0、PL1、PL2和PL3的区别体现在。
2025-05-21 10:36:20
548
原创 go test操作
这是一个特殊的函数,用于执行测试的主函数。: 类似于T.Parallel,但适用于C类型的测试实例。: 类似于T.FailNow,但适用于C类型的测试实例。: 类似于T.Errorf,但适用于C类型的测试实例。: 类似于T.Fatalf,但适用于C类型的测试实例。: 类似于T.Skipf,但适用于C类型的测试实例。: 类似于T.Logf,但适用于C类型的测试实例。: 类似于Errorf,但会导致测试立即终止。: 用于记录测试过程中的信息,不会中断测试。: 一个结构体,包含有关测试的信息和方法。
2025-05-21 10:34:09
594
原创 git基础操作
当远程仓库迁移到一个新的组下面时,你需要在本地仓库中更新远程仓库的URL,以便与新的远程仓库关联。以上步骤完成后,你的本地仓库就会与新组下的远程仓库正确关联,你可以像之前一样进行拉取、推送等操作。首先,你需要从GitLab或相关平台获取新组下的仓库的新URL。通常,仓库的URL格式为。此命令将你的本地分支与新远程仓库的对应分支关联起来。命令,确认新的远程仓库URL已正确设置。这将显示当前远程仓库的名称(通常是。如果远程仓库名称仍为。
2025-05-21 10:32:47
220
原创 docker上传镜像
向Docker Hub上传镜像,需要按照一定的步骤进行操作。Docker Hub是Docker的官方镜像仓库,用户可以在其中存储、管理和部署Docker镜像。* 确保你已经有一个制作好的Docker镜像。如果没有,你可以使用docker build命令来创建一个。例如,如果你有一个名为Dockerfile的文件,可以使用以下命令构建镜像: sh。总之,通过执行上述步骤,你就可以将Docker镜像成功上传到Docker Hub,从而与他人共享或在其他环境中使用该镜像。
2025-05-21 10:29:46
517
原创 删除不用的镜像
要删除列出的所有 Docker 镜像,你需要使用docker rmi命令来删除它们。您提到想要删除所有这些镜像,请注意,删除镜像会永久移除它们,并且可能会影响依赖这些镜像的容器。
2025-05-21 10:22:47
192
原创 git操作:将就代码仓库更新为新的代码仓库
在进行任何会影响 Git 历史记录的操作之前,请务必确保你理解它们的影响并且已经备份必要的数据。4. git commit -m “Initial commit” # 创建新的提交。2. git init # 重新初始化一个新的 Git 仓库。1.rm -rf .git # 删除 .git 目录。3. git add . # 添加所有文件。这种方式会丢失所有的提交历史,但也是一种彻底的清理方法。
2025-05-21 10:21:13
213
原创 如何使用redis做限流(golang实现小样)
你可以根据实际需求,选择固定窗口、滑动窗口等算法,用Go+Redis实现高性能限流。滑动窗口用ZSET实现,推荐生产环境使用Lua脚本保证原子性。建议多测试,关注Redis QPS压力。如果你需要更复杂的令牌桶算法实现,也可以告知!
2025-05-21 10:19:43
1104
原创 运维视角下的广告业务
广告业务是很多家互联网公司的营收业务,业务非常复杂,既ToC又ToB,广告链路上从广告创编开始,到定向投放客户,再到广告主账户、计划、单元、创意四层级联生成相关广告物料,再到召回、粗排、精排、正排展示给用户,中间还夹杂着广告出价、调价、竞价、模型特征提取、预估打分,以及后链路事件拼接、计费、模型训练等等,广告业务系统是一个非常复杂的大系统。后面将从运维视角出发,逐步逐层拨开广告系统的“面纱”,更清楚更直观展示广告系统的纷繁复杂,为更好运维这个系统打下坚实基础。
2024-11-03 16:42:44
157
原创 分片上传的常见错误有哪些?
OSS服务端可能因为内部错误而导致上传失败,这时通常会有错误码和错误信息返回,可以根据这些信息进行相应的处理。为了减少这些错误的发生,你应该在上传前进行充分的测试,并在生产环境中监控上传过程,以便及时发现并解决问题。:上传的分片数据与OSS服务器上的校验和不匹配,这可能是由于数据在传输过程中损坏。:确保你有足够的权限进行分片上传操作,包括初始化、上传分片和完成上传的权限。:确保每个分片的大小一致,除非是最后一个分片,它可能小于指定的分片大小。:如果不小心上传了同名文件,可能会导致原有文件被覆盖。
2024-10-04 11:44:46
521
原创 分片上传的最佳实践有哪些?
分片上传是阿里云OSS提供的一种上传大文件的机制,它通过将文件分成多个部分(分片)并行上传,从而提高上传的效率和可靠性。:在上传过程中,如果发生网络中断或其他错误,应该能够从中断的地方继续上传,而不是重新上传整个文件。:为了保证上传数据的完整性,可以在上传前计算每个分片的校验和(如MD5),并在上传完成后进行验证。需要有机制来重试失败的分片上传。:如果分片上传过程中断,应提供机制来清理已经上传的分片,以避免产生不必要的存储费用。:提供上传进度的监控,可以让用户了解当前上传的状态,特别是在上传大文件时。
2024-10-04 11:43:46
518
原创 面对大文件(300G以上)如何加速上传速度
要结合多线程上传每个分片,你可以使用Go语言的并发特性,例如使用 goroutines 和 channels。在这个示例中,我们首先初始化了一个分片上传会话,并设置了每个分片的大小为10MB。接着,通过循环读取文件内容并逐个上传分片,最终完成整个文件的上传。对于大文件上传,可以使用分片上传的方式,并且结合多线程来加速上传过程。为你的实际OSS配置信息,并且提供了一个有效的本地文件路径和对象键名。这种方法允许你利用Go语言的并发特性来加速大文件的上传过程。来等待所有分片上传完成,并使用了一个通道。
2024-10-04 11:40:52
543
原创 面试八股--stram 中map和flatmap的区别
不同的是,它会将函数的返回值扁平化(flatten),即将嵌套的集合或数组展开成一个单一的集合。都是用于处理集合(如列表、数组等)中的元素的方法,它们的主要区别在于处理结果的方式。可能会改变原始集合的结构,因为它会将所有嵌套的元素提取出来并放入一个新的集合中。:它会对集合中的每个元素应用一个函数,并将结果收集到一个新的集合中。操作不会改变原始集合的结构,而是创建一个新的集合来存储转换后的元素。:它同样会对集合中的每个元素应用一个函数,但与。但是,如果我们有一个包含嵌套列表的列表,例如。
2024-09-18 15:26:10
425
原创 面试八股--MySQL命名规范
使用小写字母和下划线组合,避免使用大写字母、空格和特殊字符。列名应简洁明了,尽量避免使用缩写,除非是通用的缩写。使用前缀来表示表之间的关系。表名应该具有描述性,尽量使用复数形式。避免使用保留字作为表名或列名,如。,可以在它们之间建立关系,如。
2024-09-18 15:24:59
594
原创 801. 使序列递增的最小交换次数
例如,如果 nums1 = [1,2,3,8] , nums2 =[5,6,7,4] ,你可以交换 i = 3 处的元素,得到 nums1 =[1,2,3,4] 和 nums2 =[5,6,7,8]。数组 arr 严格递增 且 arr[0] < arr[1] < arr[2] < …< arr[arr.length - 1]。输入: nums1 = [0,3,5,8,9], nums2 = [2,1,4,6,9]输入: nums1 = [1,3,5,4], nums2 = [1,2,3,7]
2024-09-18 14:37:59
387
原创 linux命令学习--pipe管道和重定向
Linux管道和重定向是两种常用的命令行操作,它们可以帮助我们更好地控制和管理命令行的输入输出。这个命令会将字符串"Hello, World!"写入到名为output.txt的文件中。这个命令会列出当前目录下的所有文件,然后通过管道将结果传递给。这个命令会读取input.txt文件的内容并显示在屏幕上。命令会筛选出包含"txt"的文件名。
2024-09-18 14:14:09
539
原创 go testing 包
这是一个特殊的函数,用于执行测试的主函数。: 类似于T.Parallel,但适用于C类型的测试实例。: 类似于T.FailNow,但适用于C类型的测试实例。: 类似于T.Errorf,但适用于C类型的测试实例。: 类似于T.Fatalf,但适用于C类型的测试实例。: 类似于T.Skipf,但适用于C类型的测试实例。: 类似于T.Logf,但适用于C类型的测试实例。: 类似于Errorf,但会导致测试立即终止。: 用于记录测试过程中的信息,不会中断测试。: 一个结构体,包含有关测试的信息和方法。
2024-09-18 14:13:24
713
原创 go testing 包
这是一个特殊的函数,用于执行测试的主函数。: 类似于T.Parallel,但适用于C类型的测试实例。: 类似于T.FailNow,但适用于C类型的测试实例。: 类似于T.Errorf,但适用于C类型的测试实例。: 类似于T.Fatalf,但适用于C类型的测试实例。: 类似于T.Skipf,但适用于C类型的测试实例。: 类似于T.Logf,但适用于C类型的测试实例。: 类似于Errorf,但会导致测试立即终止。: 用于记录测试过程中的信息,不会中断测试。: 一个结构体,包含有关测试的信息和方法。
2024-08-09 15:45:47
699
1
原创 【go】[gin] Gin数据解析和绑定
非常感谢,初次写gin 踩坑了【Go】ShouldBind解析json获取空的数据——踩坑解决对gin还是不熟悉,下面介绍下Gin数据解析和绑定(Bind与ShouldBind系列函数)参考:Go(Gin框架):03—Gin数据解析和绑定(Bind与ShouldBind系列函数)两套绑定方法第一类是以"ShouldBind"系列开头的方法:这些方法底层使用ShouldBindWith,如果存在绑定错误,则返回错误,开发人员可以正确处理请求和错误第二类是以"Bind"系列开头的方法:这些方法底层使用
2022-12-05 15:38:19
546
原创 1752. 检查数组是否经排序和轮转得到
给你一个数组 nums。nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列。如果 nums 能够由源数组轮转若干位置(包括 0 个位置)得到,则返回 true;否则,返回 false。源数组中可能存在 重复项。注意:我们称数组 A 在轮转 x 个位置后得到长度相同的数组 B ,当它们满足 A[i] == B[(i+x) % A.length] ,其中 % 为取余运算。示例 1:输入:nums = [3,4,5,1,2]输出:true。
2022-11-27 15:32:12
253
原创 leetcode周赛---找出中枢整数
1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。返回中枢整数 x。如果不存在中枢整数,则返回 -1。题目保证对于给定的输入,至多存在一个中枢整数。示例 1:输入:n = 8输出:6解释:6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21。示例 2:输入:n = 1输出:1解释:1 是中枢整数,因为 1 = 1。示例 3:输入:n = 4输出:-1解释:可以证明不存在满足题目要求的整数。
2022-11-27 11:51:35
954
原创 linux将命令添加进path
将/usr/local/apache/bin添加到PATH中有三种方法:1、直接在命令行中设置PATHPATH=$PATH:/usr/local/apache/bin使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH设置就会失效。2、在profile中设置PATHvi /etc/profile找到export行,在下面新增加一行,内容为:export PATH=$PATH:/usr/local/apache/bin。注:= 等号两边不能有任何空格。这种方法最好,除非手动强
2022-04-25 15:11:07
4011
原创 1588. 所有奇数长度子数组的和(前缀和的应用)
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。 示例 1:输入:arr = [1,4,2,5,3]输出:58解释:所有奇数长度子数组和它们的和为:[1] = 1[4] = 4[2] = 2[5] = 5[3] = 3[1,4,2] = 7[4,2,5] = 11[2,5,3] = 10[1,4,2,5,3] = 15我们将所有值求和得到 1 + 4 + 2
2021-08-30 00:34:29
178
原创 896. 单调数列
如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A 是单调数组时返回 true,否则返回 false。 示例 1:输入:[1,2,2,3]输出:true示例 2:输入:[6,5,4,4]输出:true示例 3:输入:[1,3,2]输出:false示例 4:输入:[
2021-02-28 07:42:19
207
原创 395. 至少有 K 个重复字符的最长子串
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。 示例 1:输入:s = "aaabb", k = 3输出:3解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。 提示:1 <= s.length <= 104s
2021-02-27 17:15:49
218
原创 1423. 可获得的最大点数
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。 示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最大化你的可获得
2021-02-06 13:19:29
165
1
原创 239. 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7
2021-01-31 10:35:00
181
原创 605. 种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。 示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,
2021-01-30 15:13:37
135
原创 205. 同构字符串(依旧是双射问题,两个哈希解法)
给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t = "bar"输出: false示例 3:输入: s = "paper", t = "title"输出: true说明:你可以
2020-12-27 11:28:41
306
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人