分类 开发者手册 中的文章

关于 C++ 未定的行为

4 最后,不应该研究未定义行为( 对,第4点很重要!但是,cpp的未定义行为实在太多了,要提前学完也还真不容易。 给了const,又能const_cast。大家不应该经常cast,但是又没办法就是需要cast,比如派生类指针在继承树上候选类型之间的切换。开发者得一个个都经历,都思考,然后才能用好。 Bjarne Stroustrup说相信程序员都是聪明的,但是程序员很多时候并不相信自己足够聪明。我就经常在debug的时候怀疑人生。……

阅读全文

git rebase 保留提交者原始日期?

1 Preface 当使用 git cherry-pick A^..B 来 copy 一组 commits 时,会默认使用当前的系统时间; 我们想修改一组 commits 的 author和 email,但是要保留 commit-date 和 author-date, 这时候该怎么做呢? 2 解决办法 1 git -c rebase.instructionFormat='%s%nexec GIT_COMMITTER_DATE="%cD" GIT_AUTHOR_DATE="%aD" git commit --amend --no-edit --reset-author' rebase -i ${hashid} 不使用-i,改为 -f,则不显示交互会话界面,直接执行。 默认只影响 hash-id 之后的commits,如果需要从 root 开始rebase,则使用 --root to rebase all。 3 参考 1 How to update git commit author 2 更多玩法 How to preserve the committer date in git-rebase.md……

阅读全文

Go 新版本特性

Go 1.21.0 2023-08-08 slices、maps 泛型库:《slices、maps 泛型库终于要加入标准库。。。》 for 循环变量的语义变更:《Go 团队将修改 for 循环变量的语义,新版本即可体验!》 context 可设置取消原因和回调函数:《Context 可以设置取消原因和回调函数了,等的可太久了!》 主版本号支持第三位数字 0:《Go 改版本号规则,主版本号终于支持第三位数字 0 了。。。》 统一标准 log/slog:《Go 十年了,终于想起要统一 log 库了!》 支持自定义 go.env 文件:《支持自定义 go.env 文件,可惜还是有所残缺。。。》 增强约束 Go 程序构建:《go.mod 的……

阅读全文

LogReplay 流量录制回放设计与实现

1 前言 基于拦截器,实现一个基于 trpc 协议的流量录制、回放插件。 支持回放流量验证。 常用场景: 服务重构后的流量验证,差异检测 日常需求迭代,回放验证(上线前) 2 整体方案 实现两组拦截器:录制拦截器、回放拦截器 录制拦截器:负责记录服务接口+所有下游调用数据(req、rsp、err),序列化后上报,用于回放。 回放拦截器:负责下游调用的mock(不实际发起调用),服务接口的回包上报,用于diff。 回包 diff 能力:由 LogReplay 平台提供,拦截器插件只负责上报diff所需数据。 补充一点,如何保存切面数据? 方案一: 基于trpc包头 metadata……

阅读全文

企微机器人设计

1 为什么要做一个机器人? 解决的问题 (🤖的适用场景) 日常工作中,重复繁琐的运营工作 线上问题定位 (媒资 Union 查询,用户染色、错误日志等 ) 借助机器人做错误告警,业务周报等 2 设计思想 可扩展 可扩展,轻松增加新指令 统一的指令注册接口 指令按照 tree 的方式管理,每个指令实现一个文件。 内聚:指令实现细节在内部的 rpc 包中管理 基于文本消息指令 基于空格分隔的多级指令设计; 格式:@robot <cmd…> < arguments > 易用性(对用户友好) 类似 unix 工具,每一级指令要带有 help 指令,并给出示例,无需查询文档,即可上手。 采用 markdown 消息, 消息样式丰富,可读性好,提示使……

阅读全文

MySQL 定时任务

1 创建存储过程 1.1 创建一个存储过程 1 2 3 4 5 6 7 8 9 CREATE PROCEDURE `ClearExpiredData`() BEGIN -- 清理已过期10天的数据 delete from vid_blacklist where expire_time > CAST('2010-10-10' AS DATETIME) and expire_time < SUBDATE(CURDATE(), 10); -- end END 1.2 执行存储过程 1 call ClearExpiredData() 2 数据库定时任务 2.1 创建一次性事件 1 2 3 CREATE EVENT clearEvent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO call ClearExpiredData() 2.2 创建周期性事件 每天早上8点执行一次: 1 2 3 4 5 CREATE EVENT clearEvent ON SCHEDULE EVERY 1 DAY STARTS '2022-01-24 08:00:00' COMMENT '定时清理过期数据' DO call ClearExpiredData(); 2.3 查询数据库 Event 1 select * from information_schema.events where event_name = 'clearEvent' 2.4 删除 Event 1 drop EVENT clearEvent 总结 TODO……

阅读全文

MySQL 数据导入导出

1 DB 回档操作 1.1 mysqldump 备份表数据(不包含建表语句) 1 2 3 4 5 6 7 mysqldump -h10.10.10.10 -P15192 -uroot -pPassword \ --single-transaction \ --default-character-set=utf8 \ --no-create-info \ --skip-disable-keys \ --skip-add-locks \ [database name] [table name1] [table name2] > [dump file] 1.2 恢复数据 执行以下命令前一定要清理原有的数据,要不然会报唯一键冲突的 导入数据之前,最好将线上的表备份一下,然后 delete 清空原表; 最后进行导入,否则原数据不清理,导入的时候会报唯一健冲突。 方式一: 1 #mysql -h10.10.10.10 -P15192 -uroot -pPassword [database name] < [dump file] 方式二: 登陆mysql 然后执行source命令 1 2 3 #mysql -h10.10.10.10 -P15192 -uroot -pPassword > use db_name > source [dump file] 总结……

阅读全文

OpenTelemetry 入门

Preface OpenTelemetry 是一个可观测性工具,通过标准化的 API 和 SDK,提供了跨语言、跨平台的分布式追踪、日志和指标收集和分析能力。OpenTelemetry 的目标是让开发者更容易地维护和监测他们的应用程序。 本文将介绍 OpenTelemetry 的一些基本概念和用法,帮助读者快速入门。 1. 安装 OpenTelemetry 首先,需要安装 OpenTelemetry 的 SDK。这里以 Golang 为例,介绍如何安装 OpenTelemetry Go SDK。 1 go get go.opentelemetry.io/otel 通过运行上述命令,可以下载并安装 OpenTelemetry Go SDK。 2. 配置 OpenTelemetry Collector OpenTelemetry Collector 是一个数据收集器,它可以收集不同类型的数据并发送到指定的目的地。在使用 OpenTelemetry 进行分布式追踪时,通常需要将追踪数据发送到 Zipkin 或 Jaeger 等追踪……

阅读全文

go-cmp 对象比较

简介 我们经常有深度比较两个 Object 是否相等的场景,比如: 1 如服务重构,新旧服务回包对比; 2 单测验证实际的返回值,标准库提供了 reflect.DeepEqual; 但是相对的,reflect.DeepEqual不够灵活,无法提供选项实现我们想要的行为,例如允许浮点数误差。所以今天的主角 go-cmp 登场了。 go-cmp 是 Google 开源的比较库,它提供了丰富的选项。最初定位是用在测试中。 1 快速使用 先安装: go get -u github.com/google/go-cmp/cmp Equal Diff 总结 go-cmp 非常适合对两个同类型的值进行比较。源码中大量使用熟知的 Option 模式,提供给使用者简洁、一致的接口。这种设计思想也值得我们学……

阅读全文

如何实现 SQL 用户标签的查询?

1 Preface

在社交 APP 中,经常会看到用户标签功能,那么这个功能如何实现呢? 如微信的用户标签。

user-label

考虑两种情况:

  1. 标签的量级较大,我们需要基于 ES 来加速查询;
  2. 标签量级较小,可以使用数据库实现一个简易版的标签功能;

下面我们使用数据库,实现一个简易的标签功能;

……

阅读全文

最近文章

分类

友情链接

标签

-Wall(1) 2017(1) 2023(1) about(1) AC自动机(1) algorithm(2) atomic(1) BigData(1) busy(1) C++11(3) cache(3) chrome(1) cluster(1) CMake(1) cmd(1) Code Review(1) communication(1) core(1) CPA(1) CPC(1) CPM(2) CPP(15) CPS(1) CPT(1) CPU(1) CR(1) CS(4) Diary(3) Docker(1) DP(1) duck-type(1) echarts(1) epoll(1) etcd(1) Eureka(1) event(1) eventfd(1) Feeling(1) future(2) Gerrit(1) git(6) go(3) go-cmp(1) Golang(8) hardware(1) Hundsun(2) intersection(1) iPhone(1) Java(2) kafka(2) lambda(1) Languages(2) LeetCode(3) libuv(1) Life(12) LinkList(1) Linux(2) LogReplay(1) lua(3) MacOS(1) MySQL(1) mysqldump(1) narrow cast(1) nullptr(1) OKR(1) oneof(1) OpenTelemetry(1) owners(1) pkg(2) plan(1) plugin(2) plugins(1) poll(1) promise(1) proto3(1) Protobuf(1) rb-tree(1) Reactive(1) ready_future(1) rebase(1) recommend(2) recursive(1) Redis(1) reflection(3) Registry Center(1) Release(1) resume(1) rpm(1) seastar(4) select(2) set(1) shared_ptr(1) SIGABRT(1) Simulate Location(1) sql(2) std::thread(1) syscall(1) tcp(1) timeout(1) TodoList(1) Tools(3) tracing(1) Travel(1) unique_ptr(1) unwound stack(1) weak_ptr(1) Web(2) Wireshark(4) Work(9) zeromq(2) zookeeper(2) zsh(1) 个人旅游(1) 企微机器人(1) 优点(1) 全麻(1) 动态规划(1) 在线广告(1) 多模匹配(1) 工作总结(1) 广告(1) 开源工具(1) 开源库(4) 总结(2) 扔鸡蛋问题(1) 文本消息指令(1) 智齿(1) 流量录制回放(1) 用户标签(1) 缺点(1) 群收款(1) 背包问题(1) 读书笔记(8) 香港签注(1) 高可用(2) 鼻炎(1)

其它