对象构造方法 有以下名为 Server 的类型。 1234type Server struct { Port int Protocol string} 构造器 123456func NewServer(port int, protocol string) *Server{ return &Server{ Port: port, Protocol: 2024-12-27 基础知识 #golang #设计模式
使用私有空变量作为全局唯一key 今天看代码的时候,遇到一段: 1234567891011type keyType struct{}var ctxKey = keyType{}func FromContext(ctx context.Context) (OrgUser, error) { if orgUser, ok := ctx.Value(ctxKey).(OrgUser); 2024-12-26 基础知识 #golang
struct 内嵌 interface 今天看context的代码时,发现了一个这样的写法 123456789101112131415type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key any) any}type valu 2024-12-26 基础知识 #golang
网易云音乐私有文件调整 问题 最近发现自动化任务里的网易云音乐私有文件(ncm)不能直接备份为公共文件格式(flac、aac、mp3等)。 现象分析 把之前yoki123的ncmdump项目打开debug发现应该是做convention时出现了字段不匹配的问题。 解析ncm的meta信息可得 123456789101112131415161718192021{ "musicId" 2024-12-25 异常 #ncm
golang GMP模型 概述 G — 表示 Goroutine,它是一个待执行的任务; M — 表示操作系统线程,它由操作系统的调度器调度和管理,实际承载goroutine的运行; P — 表示逻辑处理器,它可以被看做运行在线程上的本地调度器。 M:N模型 Runtime 会在程序启动的时候,创建 M 个线程(CPU 执行调度的单位),之后创建的 N 个 goroutine 都会依附在这 M 个线程上执行。 2024-12-19 面试题 #golang #GMP模型
红黑树 概述 红黑树是一种自平衡二叉搜索树 (任意节点的左子树的值均小于该节点,任意节点右子树的值均大于该节点,在插入删除节点后自动调整树的结构保证树的高度平衡,即任意节点的左右子树高度差不大于1) , 红黑树的节点会有颜色区分,不是红色就是黑色。 叶子结点*(没有子结点的节点)*、根结点、空节点为黑色 红色结点的子结点为黑色 任意节点到叶子结点所有路径上的黑色结点数目一致 操作 旋转 为保证 2024-12-17 wip #数据结构
数据库八股 三大范式 第一范式数据库表的所有字段都是不可分解的元组。 第二范式满足第一范式的情况下,所有非主键字段完全依赖整个主键。 第三范式满足第二范式情况下,所有非主键字段均不依赖其他非主键字段。 sql语句执行过程 解析:检查语法和语义,生成解析树。 预处理:参数化处理(如果有参数)。 优化:查询优化器选择最优的执行计划。 执行:按照执行计划,读写数据,对数据进行整理。 结果返回:将 2024-11-26 面试题 #数据库 #mysql
golang gc goroutine 对比 threrad goroutine thread 内存占用 2KB 1MB 创建销毁 用户级,go runtime负责管理 系统级 切换 3个寄存器,200ns,约2400~3600条指令时间 16个寄存器,1000~1500ns,12000~18000指令时间 2024-09-27 面试题 #golang #gc
golang map 概述和 map 相关的操作主要是: 增加一个 k-v 对 —— Add or insert; 删除一个 k-v 对 —— Remove or delete; 修改某个 k 对应的 v —— Reassign; 查询某个 k 对应的 v —— Lookup; 简单说就是最基本的 增删查改。 Go 语言采用的是哈希查找表,并且使用链表解决哈希冲突。 表示 map 的结构体是 hmap bmap 就 2024-09-26 面试题 #golang #hash #map