如何做代码 CR?

一、设计问题 (ABI 原则) CR 的意图 (Intention) 首先要了解整个 CR 要解决的问题; 正确的解决方案 (Better Solution) 在了解问题的基础上,思考标准的解决方案; 架构设计(合理的分层)(Architecture Design) 包设计 类设计 接口设计 安全 (safety) 不要迫使使用方到处传递敏感信息 二、实现问题 命名规范 命名规范: 一致性 注释和代码保持一致 同一个概念,不要用多个(近似但不一样的)名称 作用域……

阅读全文

企微机器人设计

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

阅读全文

什么是OKR?

“尽管很多人都很努力地工作,但却没能取得什么成就。 ——安迪·格鲁夫 1. 简单介绍 OKR 分为目标和关键结果, 关键结果必须是可以衡量的,最终是可以看到的。 OKR也可以作为逆向思考问题的有效方法,比如:快速分析各类业务协议报文? 关键结果可以定义为: 基于go编写通用 Wireshark 插件,30分钟内对接一种新的七层协议; 协议解析性能 1w/s; 支持 wireshark 显示过滤器,以及请求应答关联; 2. KPI vs OKR KPI OKR “目标是什么” “目标是什么” 及 “如何实现” 年度 季度或月度 不公开、不透……

阅读全文

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 等追踪……

阅读全文

优雅的递归算法

Preface

这个世界上优雅的东西很少,递归至少算一个。treesingle list 的数据结构,是非常适合使用递归来操作的。下面我们使用 Go 来做几道题,感受一下递归的魅力。

……

阅读全文

内存缓存-设计

1 缘起 在业务开发场景中,主要用到两个开发能力:接口粘合+缓存。 一个好的缓存设计,能够降低服务的时延,抵抗流量洪峰。 比如最近的西安健康码事件,明显缓存设计上是存在明显问题的 :-)。 2 什么场景需要加缓存? 提高服务质量,降低时延; 减少对下游的请求量,节省资源 3 缓存常见问题 缓存问题 解决办法 (1) 缓存失效的策略 惰性过期(读取时判断如果过期了,就返回且异步更新) (2) 缓存集中失效 设置随机过期时间 (3) 缓存击穿(大量穿透导致雪崩) singleflight 合并多个相同的请求 3.1 50行代码,实现一个可用的 singleflight? groupCache 库实现了一个可用……

阅读全文

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 模式,提供给使用者简洁、一致的接口。这种设计思想也值得我们学……

阅读全文

Xcode 编译 swift 项目

常见问题 1 如何调整依赖的系统版本macOS Deployment Target? A: 双击编辑器的项目名,然后调整。 ctrl+b 编译 2 Debug Or Release 编译? 选择 Product->Scheme->Edit Scheme,将编译配置改为 Release。 3 编译后,输出的App路径? 输出目录:~/Library/Developer/Xcode/DerivedData + 项目名。 比如: ~/Library/Developer/Xcode/DerivedData/Hidden_Bar-xxxx/Build/Products/Debug……

阅读全文

最近文章

分类

友情链接

标签

其它