Levon's Blog

微信: L6241425

1. 规范

1.1 基本的 commit 信息格式

一个常见的提交信息格式通常包括以下几个部分:

  • 类型(type): 描述提交的类别,比如是新功能、修复、文档等。
  • 范围(scope): 可选,描述提交影响的范围,比如是某个模块、功能等。
  • 主题(subject): 简短的描述提交的目的。
  • 正文(body): 可选,详细描述提交的内容、动机等。
  • 页脚(footer): 可选,通常用于关闭某个 issue 或者添加破坏性变更的说明。
阅读全文 »

1. builtin

1.1 clear (go1.21.0)

对于map,清除删除所有条目,导致map为空。对于slice,清除将所有直到slice长度的元素设置为相应元素类型的零值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import "fmt"

func main() {
m := map[string]string{
"1": "2",
"2": "2",
"3": "2",
}
fmt.Println(m, len(m))
clear(m)
fmt.Println(m, len(m))

s := []string{"1", "2", "3"}
fmt.Println(s, len(s))
clear(s)
fmt.Println(s, len(s), len(s[0]))
}

/*
map[1:2 2:2 3:2] 3
map[] 0
[1 2 3] 3
[ ] 3 0
*/

阅读全文 »

Rust 是一门现代的、开源的系统编程语言,其设计的核心目标是同时实现安全(Safety)、并发(Concurrency)和性能(Performance)。它通过在编译时强制执行一系列严格的规则,来消除一整类常见的内存错误(如空指针、悬垂指针、数据竞争等),而无需像 Java 或 Go 那样依赖垃圾回收器(Garbage Collector)。

Rust 就像一位拥有 “ 魔法钥匙 “ 的贴身管家:任何时候,一件珍贵的物品(一块内存数据)要么只能由一个人持有 “ 主钥匙 “(可写入权限),要么可以被多个人持有 “ 复制钥匙 “(只读权限),但绝不允许 “ 主钥匙 “ 和任何 “ 复制钥匙 “ 同时存在。这位管家(编译器)在你的程序 “ 运行 “ 之前,就会严格检查所有钥匙的分配,确保万无一失。

阅读全文 »

Go 泛型(Generics)是一种编程范式,它允许我们在定义函数、方法或类型时,使用一个或多个 “ 类型占位符 “(Type Parameter),而不是具体的类型。这些 “ 占位符 “ 在实际调用时,会被具体的类型(如 intstringstruct 等)替换,从而让一份代码能够安全、高效地处理多种不同的数据类型。

Go 泛型就像一个万能的厨房模具,你不需要为心形、星形、圆形饼干分别准备三个模具,只需要一个可以调整形状的 “ 可变形 “ 模具,就能制作出所有形状的饼干。这个 “ 可变形模具 “ 就是你的泛型函数或泛型类型,” 形状 “ 就是你传入的具体类型。

Go 泛型的出现,完美地解决了这两个核心痛点。它让你能够:

  1. 编写可复用的代码:一套逻辑,多处使用,极大提高开发效率。
  2. 保证类型安全:在编译期间就进行类型检查,把错误消灭在萌芽状态,而不是等到运行时才 panic
  3. 提升性能:泛型代码在编译时会进行 “ 具象化 “(Instantiation),生成针对特定类型的原生代码,避免了 interface{} 带来的装箱(boxing)和拆箱(unboxing)开销。
阅读全文 »

多看阅读:目前观看体验,排版还是iOS最好的,奈何同步导出功能越来越弱,属于不再维护状态。

neatreader:多端进度可以实时同步,需要花钱。

微信读书:上传自己的书多端进度可以实时同步,免费。

放弃多看阅读,neatreader,携桶转移到微信读书。

阅读全文 »

在服务调用中遇到HTTP 503错误时,我们可以配置Istio来重试失败的请求,最多可以重试三次。我们可以准确地配置哪些失败的请求要重试、重试次数,以及每次重试的超时时间。

由于服务代理是按服务实例部署的,我们可以配置非常精细的重试行为,以适应应用程序的特定需求。Istio的所有弹性设置都是如此,服务代理实现了这些开箱即用的弹性模式:

  • 客户端负载均衡。
  • 位置感知负载均衡。
  • 超时和重试。
  • 熔断。
阅读全文 »

1. 网关:将流量导入集群

流量首先被路由到一个入口点,该入口点是流量的守门人。

1.1 虚拟IP地址:简化服务访问

  1. 将域名映射到一个虚拟IP地址,该IP地址代表我们的服务,并将流量转发到实际服务实例,为我们提供了更高的可用性和更大的灵活性。

  2. 虚拟IP地址被绑定到一种称为反向代理的入口点类型。反向代理是一个负责将请求分发到后端服务的中间组件,它不对应任何特定的服务。反向代理还可以提供负载均衡等功能,这样请求就不会压垮任何一个后端。

1714556801290
阅读全文 »

服务网格是一种分布式应用程序基础设施,它负责以透明的、进程外的方式代表应用程序处理网络流量。Istio是一个由谷歌、IBM和Lyft创建的服务网格的开源实现。

1714551745481
  1. 基础设施:它负责将代码部署到平台上(容器、Kubernetes、公共云、虚拟机等)。Istio不限定使用哪些自动化部署工具。

  2. 应用程序业务逻辑:为了保持竞争力而必须编写的业务差异化代码,。这段代码包括业务逻辑,以及知道要调用哪些服务、以何种顺序调用服务、如何处理服务的响应(例如,如何将它们聚合在一起)、在出现故障时如何处理。

  3. Istio扮演着部署平台和应用程序代码之间的中间人的角色,它的作用是帮助从应用程序中获取复杂的网络代码。它可以基于请求元数据内容(HTTP头等)进行路由,也可以基于服务和请求元数据匹配进行细粒度的流量控制和路由。

阅读全文 »

1. 推荐系统

一个完整的推荐系统通常包含以下步骤:

  1. 数据源准备
  2. 召回 (Recall): 从海量物品库中快速筛选出可能与用户相关的候选项。
  3. 过滤 (Filtering)
  4. 粗排 (Pre-ranking):使用简单模型快速过滤掉大量不相关的物品,保留少量物品进入精排。
  5. 精排 (Fine-ranking): 使用更复杂的模型(例如机器学习模型)精确预测用户对物品的偏好,并进行排序。
  6. 重排序 (Re-ranking): 非必选阶段,增加推荐结果的多样性和新颖性,改善用户体验,避免推荐同质化内容。
  7. 存储与反馈
阅读全文 »
0%