brian

brian

代码重构 Refactoring

代码 Refactoring

重构不必谈之色变。 它也不是洪水猛兽,而是开发过程中持续进行的优化过程。让我们开始学习这个主题,重新认识它的价值。 🌟整洁代码 重构的主要目的是消除技术债务。它将混乱变成整洁的代码和简单的设计。 * 对于其他程序员来说,整洁的代码是显而易见的。 我并不是在谈论超级复杂的算法。糟糕的变量命名、臃肿的类和方法、魔法数字 - 等等,所有这些都会让代码变得混乱和难以理解。 * 整洁的代码不包含重复。 每次你需要对重复的代码进行更改时,你都必须记住对每个实例进行相同的更改。这会增加认知负担并减慢进度。 * 整洁的代码包含最少数量的类和其他活动部件。 代码越少,脑子里需要记住的东西就越少。代码越少,维护工作就越少。代码越少,错误就越少。代码就是责任,保持代码简短。 * 整洁的代码通过所有测试。 如果只有 95% 的测试通过,你就知道代码不整洁。如果测试覆盖率为 0%,你就知道你完蛋了。 * 整洁的代码维护成本低! 🗑️技术债(What) 每个人都尽最大努力从头开始编写出色的代码。可能没有程序员会故意编写不干净的代码,从而损害项目。但是干净的代码在什么时

By brian

Posts

CSV 格式说明和应用

问题 我们常常将多个字符串item使用逗号拼接成一个字符串,用来表示数组,使用时再用逗号切割成为数组。比如安卓机型列表: ALN-AL10,ALN-AL10,BRA-AL00,ALN-AL00/ALN-AL80 直到有一天,苹果设备也要用到这个机型列表,而它的每个机型都带着逗号,那我们使用逗号切割就得到了错误的数据。 iPhone15: iPhone15,4 iPhone15Plus: iPhone15,5 iPhone15Pro: iPhone16,1 iPhone15Pro_Max: iPhone16,2 为了解决这个问题,首先想到了换一个分隔符,比如 | ,再比如用一些不可见字符 : 0x01。 但我们不能保证这些字符串 item 一定不包含这些特殊字符,也许还有更好的方法。 既然是逗号分隔,首先想到的就是 CSV格式,毕竟 CSV 的全称就是Comma-Separated Values逗号分隔值。它是如何解决这个问题的? CSV格式 CSV 的RFC说明文档:https://datatracker.ietf.

By brian
开启了http2,但是http2_max_field_size 还在用默认值吗?

开启了http2,但是http2_max_field_size 还在用默认值吗?

排查1个异常接口,学到一个降本和接口提速的新思路。另外找到1个charles的"bug" 现象 测试同学反馈在iOS13设备上请求接口报错,将请求复制为 curl 命令。分别导入 apifox 和 在终端执行: * 在 apifox 请求正常 ✅ * 在终端请求失败 ❌ curl: (56) Failure when receiving data from the peer 测试同学又反馈另一个手机支持请求接口返回正常。 定位 有了正常和错误的请求curl,那直接对比二者差异就很简单了。对比发现,在终端执行失败的请求中多了一个较大的Cookie: app_token。按历史经验基本能确定是因为 Cookie 这个 header 条目太大,超过服务器的限制。 找云平台确定相关配置: ELB http1: header头限制 128KB,body 限制一个10G http2:

By brian

K8S

Minikube 操作开启 ipvs

1. 编辑 kube-proxy 配置 编辑 kube-proxy 配置以启用 ipvs 模式。您可以使用以下命令编辑配置: kubectl edit configmap kube-proxy -n kube-system 在配置中,找到 mode 字段并将其设置为 ipvs。例如: apiVersion: v1 kind: ConfigMap metadata: name: kube-proxy namespace: kube-system data: mode: "ipvs" 保存并关闭配置。 2. 重新启动 kube-proxy 重新启动 kube-proxy 以应用新配置: kubectl rollout restart daemonset kube-proxy -n kube-system

By brian

K8S

在 Minikube 中直接上手学习 K8S Service

K8S 为什么需要 Service? 1. Pod 的 IP 不是固定的; 2. 一组 Pod 实例之间有负载均衡的需求; 上机操作 以下使用 minikube 作实例: # 安装 brew install minikube # 启动 minikube start # 创建 ~/.kube/config 请注意先备份 minikube update-context # 进入宿主机 minikube ssh 集群启动后,创建 Deployment 和 Service apiVersion: v1 kind: Service metadata: namespace: default name: nginx-svc spec: type: NodePort selector:

By brian
Docker 入门

Docker

Docker 入门

1 docker 是什么,解决什么问题? * docker 将要程序和环境一起打包成一个镜像,可保证环境一致性。 * docker 容器启动速度非常快,快速部署和扩容。 * 每个镜像有独立的版本,可以用于快速回滚。 还有依赖管理、资源隔离、可移植性等特点。 2 镜像 2.1 基础镜像是什么? docker 是由多层(layers)组成的,每一层代表镜像的一次变化,这些层叠加在一起,形成一个完整的文件系统。基础镜像是构建容器镜像的起点。可以在其上安装和配置应用及依赖项,就是叠加层。 基础镜像有: alpine (https://hub.docker.com/_/alpine) busybox(https://hub.docker.com/_/busybox) 2.2 Dockerfile 有了基础镜像还不够,还需要安装必要的依赖。我们公司选择的基础镜像是 alpine

By brian
Git hook 开发和实践,提升自动化效率

Git

Git hook 开发和实践,提升自动化效率

我们使用 git 进行版本控制,期间会触发很多事件,这些利用好这些事件做好自动化,能帮我提升效率。git hook 就是一个这样的工具,在特定的事件中执行特定的钩子。 ╰─➤ ls .git/hooks applypatch-msg.sample post-update.sample pre-merge-commit.sample pre-receive.sample update.sample commit-msg.sample pre-applypatch.sample pre-push.sample prepare-commit-msg.sample fsmonitor-watchman.sample pre-commit.sample pre-rebase.sample push-to-checkout.sample 设置钩子路径 git 仓库的钩子存放路径由 core.hooksPath 控制,默认是在项目的 .git/hooks。它不能使用版本控制

By brian

Docker

MacOS 安装了最新版 Docker,命令行找不到了?

它藏在 /Applications/Docker.app 中,可以使用 find 命令查看: $cd /Applications/Docker.app $find . -name "docker" ./Contents/Resources/bin/docker 将 bin 目录拼接到 PATH 环境变量即可,一般可以追加到 ~/.bashrc ~/.zshrc 中。 export PATH=/Applications/Docker.app/Contents/Resources/bin:$PATH source ~/.zshrc 使环境变量生效,执行 docker 检查版本 $ source ~/.zshrc $ docker --version Docker

By brian
飞书集成平台 x Grafana:打造监控告警系统全攻略

Posts

飞书集成平台 x Grafana:打造监控告警系统全攻略

Grafana告警内容设置 告警内容分为:告警标题、告警说明、告警详情。告警标题和告警说明用来描述告警的规则。告警详情,描述告警的规则和具体的值。 告警详情 Description 设置 1. 打印所有的标签 {{ $labels }} alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1 2. 自定义格式化打印所有的标签 {{ range $k, $v := $labels -}} {{ $k }}={{ $v }} {{ end }} alertname=High CPU usage grafana_folder=CPU alerts instance=server1 3. 打印单个标签 The host {{ index $labels

By brian
Makefile 看这一篇就够

Posts

Makefile 看这一篇就够

makefile 是一个文本文件,以下是一个子命令,包含: * 名称:支持英文、数字、连字符"-"和下划线 " _" * 注释:使用 "#" 表示注释,不支持 /*...*/。推荐写在名称的上一行 * 命令:任何可在 shell 执行的命令行语句。必须是\t 开头,否则报错 make: Nothing to be done for 'build'. * .PHONY:可选,命令声明了 .PHONY,执行时将不会输出具体命令到终端。在一些 CI 工具中可以起到过滤敏感信息的作用。 .PHONY: build # 编译构建 build:

By brian
Git 修改提交邮箱和用户名信息

Git 修改提交邮箱和用户名信息

公司项目和个人项目不能耦合特别是发布到公开项目的“提交人”信息最好不要和公司一致; 但,难免忘记配置,需要重新刷; 推荐的方式是,放弃全局配置,每个项目独立配置 user.name user.email 步骤 1. 克隆bare项目 纯仓库 git clone --bare <https://github.com/user/repo.git> cd repo.git 2. 编写脚本 注意替换 OLD_EMAIL CORRECT_NAME CORRECT_EMAIL #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="old@

By brian

Git rebase合并多个提交

本文介绍了通过 Git 命令操作,文末有 Goland IDEA 的简便操作。 查看日志,找到需要合并的多个分支的上一个起点,比如 18a14636 $git log --oneline d1503601 feat(link_video):埋点统计 ad94a443 feat(bottom_ecmp_policy):策略名称唯一验证修复 043fa7de feat(bottom_ecmp_policy):策略名称唯一验证修复 32fae648 feat(bottom_ecmp_policy):策略名称唯一验证 80cee6b4 feat(bottom_ecmp_policy):按ecpm正序排序 f955a20e feat(bottom_ecmp_policy):新增策略类型'

By brian
沪ICP备2022013452号-1