- 博客(256)
- 资源 (5)
- 收藏
- 关注
原创 浅谈 Buffer Pool
缘由MySQL 是个典型的关系型数据库,自 5.5 版本起,默认的存储引擎由 MyISAM 改为 InnoDB。InnoDB 存储引擎中数据以页的形式存储在硬盘上,页的默认大小为 16KB。但是,基于硬盘和 CPU 巨大的速度差异(以上图 HDD 为例,相差千万倍 ),需得把数据缓存在内存里以提高性能,于是便引出了今天的主题 — Buffer Pool。注:1ms(毫秒) = 1000 us(微秒) = 1000 * 1000 ns(纳秒)Buffer Pool 是什么Buffer Pool
2021-03-04 22:26:45
504
1
原创 浅谈 Redis
前言Redis 作为一个高性能的内存数据库,其读效率达到 10w qps/s,写也能到达 4-5w qps/s。今天就来简单的聊下其底层的实现,达到知其然并知其所以然。redisServerRedis 作为典型的 C/S 模式,客户端连接到服务端,然后进行交互。那么就来看看服务端的数据结构// server.hstruct redisServer { …… redisDb *db;...
2020-03-20 19:13:07
429
1
原创 浅谈 PHP
这篇博客分三个部分陈述,分别是PHP进程管理器、PHP启动流程和PHP优化。 谈到PHP进程管理器,不得不讲下它的进化过程,CGI--->FastCGI--->PHP-FPM。 CGI全称是“公共网关接口”(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准。...
2015-11-15 15:35:37
1136
1
原创 微信支付趟过的坑
这段时间在做微信支付开发,在公司的公众号审批下来后,我这边的测试用例也已经开发完毕,于是拿着具体的数据来调试了,大段大段的代码就不贴了,demo里有,这里就说说调试过程中遇到的坑。 第一坑:redirect_url参数错误。因为我选择的的“JS API”支付,这种支付需要网页授权,先获取code,再拿code去获取openid和prepay_id。这个网页授权需要登录微信
2015-01-21 15:49:48
91204
5
原创 Go 并发控制的艺术:深入理解 context.Context
Context 是一个利用“结构体嵌套”实现方法提升、通过“Channel 广播”同步信号的不可变树状模型,它为高并发下的生命周期管控与链路追踪提供了极致精简且线程安全的标准化方案。
2026-01-05 20:25:22
987
原创 Go runtime 中的 sudog:连接 Channel 与 GMP 的隐秘枢纽
深度解密 sudog:剖析阻塞代理、select 零拷贝与缓存池,透视 Go 运行时同步核心逻辑。
2026-01-04 15:48:31
965
原创 深度解密 Go 语言调度器:GMP 模型精讲
理解 GMP,不仅是为了应付面试,更是为了理解 Go 如何在底层通过局部性原理避开锁竞争,如何通过异步抢占终结死循环。正是这种“让逻辑层与物理层解耦”的设计方案,才让 Go 在高并发的巨浪中,依然能保持极致的优雅与稳定。
2026-01-02 02:58:22
622
原创 硬核拆解 Go GC 演进史——从 STW 到亚毫秒延迟
本文探讨了内存管理和垃圾回收(GC)机制的发展历程。首先以Redis的整数集合为例,展示了C语言中显式内存管理的优缺点,进而引出GC的必要性。接着概述了标记-清除、标记压缩、复制算法、引用计数和分代回收等常见GC算法,并分析了Go语言不采用分代回收的原因。重点介绍了Go GC的演进过程:从1.3版本的全STW标记-清除,到1.5引入三色标记法和插入写屏障,再到1.8的混合写屏障技术,最终将STW时间降至亚毫秒级。文章还解释了混合写屏障如何通过栈预染黑、新对象标黑等机制消除re-scan,以及后续版本在内存归
2025-12-31 03:09:33
791
原创 拒绝纸上谈兵:Go AST 在工程效能中的 5 个杀手级应用
从自动化提取 API 文档,到精准统计代码坏味道;从无感知地重构海量代码,到分析一次 Git 提交的潜在影响范围——这些在平时看来“枯燥且重复”的工作,在 AST 面前都不过是几行脚本的事。
2025-12-28 18:06:50
623
原创 像搭积木一样理解 Golang AST
你是否好奇过,gofmt 是如何瞬间格式化你的代码的?IDE 是如何知道你的函数“未定义”的?或者 golangci-lint 是如何发现你潜藏的 Bug 的?这一切的幕后黑手,不是魔法,而是 AST(抽象语法树)。作为一名 Go 开发者,理解 AST 不仅能让你写出更酷的工具(比如自动生成代码),还能让你对编译器的脾气了如指掌。今天,我们就基于 go/ast 包,来一场代码的搭积木之旅。
2025-12-26 03:17:07
716
1
原创 从 utf8.RuneCountInString 看 Go 是如何高性能、安全地解码 UTF-8 的
RuneCountInString 是一个“表驱动 + ASCII 快速路径 + 容错 UTF-8 解码”的高性能 rune 计数器。它的核心目标只有一个:在任何字节输入下,安全、快速、准确地统计 rune 数。另外,若要熟练理解透这个函数,还需花点功夫理解 Unicode 和 UTF-8。
2025-12-25 00:02:52
673
1
原创 解决 yapi chrome 插件 cross-request 版本过低而无法请求的问题
某天我 又又又一次更新了 chrome 版本,当前为 `版本 140.0.7339.186(正式版本) (arm64)` ,而后在调用相关同学接口时,发现习以为常的界面中发送按钮置灰了。
2025-09-24 00:58:37
500
原创 解决 mac 上 dyld[14806]: Library not loaded: /opt/homebrew/opt/icu4c/lib/libicuio.74.dylib
发现 php 不能用了,仔细一看,是 php 依赖的多语言库 icu4c 版本不匹配。回想了一下,应该是昨儿个下载一个软件时,使用 brew update 时把本地的 icu4c 版本由 74 升级到了 76,但是 php 7.4 依赖的是 icu4c 74 版本,导致 php 无法运行。
2024-11-27 09:29:06
1738
原创 聊聊 golang 的 map
哈希表是一个很常见的数据结构,用来存储无序的 key/value 对,给定的 key 可以在 O(1) 时间复杂度内查找、更新或删除对应的 value。设计一个好的哈希表,需要着重关注两个关键点:哈希函数、冲突处理。
2024-07-02 09:00:28
1766
原创 聊聊 golang 中 channel
Golang 的并发哲学是“不要通过共享内存进行通信,而要通过通信来共享内存”,提倡通过 channel 进行 goroutine 之间的数据传递和同步,而不是通过共享变量(内存)来实现。
2024-06-23 11:13:02
1410
2
原创 说说 golang 中的接口和反射
Golang 中的接口是一组方法的签名,是实现多态和反射的基础。Golang 中的反射是用标准库中的 reflect 包实现,reflect 包实现了 runtime (运行时)的反射能力,能够让程序操作不同的对象。
2024-06-20 09:33:13
719
1
原创 浅谈golang字符编码
Golang 的代码是由 Unicode 字符组成的,并由 Unicode 编码规范中的 UTF-8 编码格式进行编码并存储。Unicode 是编码字符集,囊括了当今世界使用的全部语言和符号的字符。有三种编码形式:UTF-8,UTF-16,UTF-32。(UTF: Unicode Transformation Format,统一码转换格式)
2024-06-13 00:54:18
1439
1
原创 解决 Redis 启动 Creating Server TCP listening socket *:6379: unable to bind socket
1、redis 3 那个版本,如果 bind 没开启,先绑定 ipv6,ipv6 绑定失败就报错了,绑定成功了,再绑定 ipv4,咱们开发机不支持 ipv6;2、redis 5 ,如果 bind 没开启,则先尝试绑定 ipv6,ipv6 绑定失败就打印个日志,再去尝试绑定 ipv4,成功了就继续往下走。看了下代码才发现,更改了连接的判断,先尝试连接 ipv6,再尝试连接 ipv4,这样即使本机没有开启 ipv6 也能成功。同时呢,代码注释中也写的很清楚,如果没有打开 bind,那么默认会连到。
2023-07-26 22:25:23
1471
原创 Cursor 尝鲜
Cursor 这是一个集成了GPT-4 模型的代码编辑器, 而且重要的是免费, 不需要注册, 不需要订阅Copilot,不需要API Key,下载安装后直接用就行。最近 ChatGPT 大行其道,用了都说🐂🍺,今天就借着这个话题介绍下一个搭乘 ChatGPT4 的 IDE ,那就是标题。这个用处就大了,以后在研究源码的时候,用 Cursor 就如虎添翼了,碰到不懂的代码,就参考下 Cursor。然后圈中 main 方法,按 command + l 问 Cursor 这段代码的作用。恢复混淆的 js 代码。
2023-03-31 23:04:07
3121
原创 解决 golang json 中 invalid character ‘\r‘ in string literal 报错
也就是 json 在解析 \r\n 需要加上转义符。同时,在 golang 中,用反引号也可以解决。跑上面的代码,会报题头的错误。
2023-01-01 23:18:18
4289
1
原创 解决 php post 而 gin 收不到问题
php 这边用 post+json 形式向 golang 的 gin 框架发送数据,之前网页版都是使用正常,最近有个需求是一个功能接入移动端内部办公系统,通过接入 sdk 调用实现网页上的功能。
2022-12-04 23:02:16
1261
原创 解决 golang 中输出 (MISSING)
用户反馈,golang 的某个服务列表突然打不开了,在本地复现后,发现,原本返回的 json 串,里面突然多了 (MISSING) 这个东东
2022-08-24 09:08:21
3276
原创 golang 中 map 排序
但若要对golang的map按照value进行排序,比如实现网址访问量从高低排序,思路却是不能用map,而要用struct存放key和value,实现sort接口,就可以调用sort。如果针对的是简单的key、value的形式,可以先把key收集到一个slice里,然后给slice排序,再循环输出对应的value即可。golang中没有专门的map排序函数,且map默认是无序的,也就是你写入的顺序和打印的顺序是不一样的。.........
2022-07-24 17:30:12
4333
1
原创 golang 处理变量模板
这种json形式的字符串,后端变把name解析成zhangsan。最近有个需求,后端配置相关模板,提供接口给兄弟部门用,模板里有形如。这个库,比如上面的需求可以用如下代码实现。变量,三方调用的时候会发送。类似这种解析变量的需求,推荐。...
2022-07-24 16:43:01
361
原创 golang 之时间国际化
近期一个上马的项目涉及到国际化,其中一个点就是时间显示的问题,比如现在时间是 北京时间 2022-05-29 23:21:30,这个在国内显示没问题,如果在墨西哥显示呢,显然是不能用北京时间的,毕竟两者隔了十三个时区,这时对方才 2022-05-29 10:21:30 呢。北京时间是东八区,墨西哥是西五区。显然,时间国际化涉及到了时区概念,这里对时区做个简单的介绍。国际上规定,每隔 15° 划为一个时区,全球可分为 24 个时区。以本初子午线为基准,从西经 7.5° 到东经 7.5° 就是 GMT
2022-05-30 18:27:23
1532
原创 golang 执行命令行
一般情况下,在 golang 中执行一些命令如 git clone,则可以使用 exec.Command 函数func RunCommand(path, name string, arg ...string) (msg string, err error) { cmd := exec.Command(name, arg...) cmd.Dir = path err = cmd.Run() log.Println(cmd.Args) if err != nil { log.Println("e
2022-04-03 20:41:21
4870
原创 golang 定时任务处理
在 golang 中若写定时脚本,有两种实现。一、基于原生语法组装func DocSyncTaskCronJob() { ticker := time.NewTicker(time.Minute * 5) // 每分钟执行一次 for range ticker.C { ProcTask() }}func ProcTask() { log.Println("hello world")}二、基于 github 中封装的 cron 库实现package taskimport (
2022-03-31 23:55:00
6542
1
原创 使用 pprof 分析 go-callvis
go-callvis 是一个可视化的项目源码调用链路分析工具。这里有篇简要分析源码的文章 https://mp.weixin.qq.com/s/dUXXGd8hqEhKE_Cj4EY2Lwpprof 是 golang 内置的性能优化前的性能分析工具。今天就介绍下用 pprof 来分析 go-callvis 的性能,看看到底耗时在哪。先把 go-callvis 下载到本地git clone https://github.com/ofabry/go-callvis.gitcd go-callv
2022-02-28 23:39:20
449
原创 golang http 包 Response.Body.Close
今天简单说下 Response.Body.Close,当发起一个请求后,需要手动关闭此请求。但,这个关闭的位置也有考究。一开始,项目中的代码是如下顺序写的。res, err := cli.Do(req)defer res.Body.Close()if err != nil { fmt.Println(err.Error()) return}正常情况下,是不会遇到有问题的情况。在不定期检测线上的日志的时候,还是会发现,第二行那报空指针错误invalid memory address or
2021-12-31 15:58:53
5159
2
原创 解决 golang 中 wrote more than the declared Content-Length
写个网关还是很能练手的,这不在对接新的项目时,就遇到题头的报警。_, err = fmt.Fprintf(w, string(str))if err != nil { fmt.Println(err.Error())}一开始,没想到这块会报错,而是直接忽略的,这样就造成了测试时啥也没返回,但是上游是有数据返回的,最后追踪到这里。于是,便开始万能的断点调试了,发现 w 也就是 http.ResponseWriter 有两个属性是对应此错误的,分别是 written 和 contentLength
2021-11-24 22:54:19
6303
原创 golang unmarshal map 类型判断
近期遇到以下类似以下接口返回值{ "msg": "this is a test message", "status": "unknown", "data": { "trace":"121212121212" }}上面的 json 串中 status 字段类型不唯一,当为 200 时是成功的,字符串是有问题的,代码解析为var ret map[string]interface{}err := json.Unmarshal([]byte(str), &re
2021-11-23 22:26:25
1104
2
原创 解决 golang 中 invalid character ‘\x1f‘ looking for beginning of value
最近网关又接入了个项目,不过在解析接口返回的 json 串时,却是乱码,查看报错如下invalid character '\x1f' looking for beginning of value程序中的解析代码为content, _ := ioutil.ReadAll(res.Body)err = json.Unmarshal(content, &data)if err != nil { fmt.Println(err.Error())}之前的项目接口解析还是好好的,为啥这个项目
2021-11-19 22:46:40
5626
1
原创 golang中[]byte转成string
项目中 RPC 接口由于在入口直接打印 []byte 字节数组形式了,在查询日志的时候很难辨认,需要把其复制下来,再转成字符串。比如,日志中打印的是 “[104 101 108 108 111 32 119 111 114 108 100]” 这样形式的 byte 数组,那么具体操作如下func byte2Str() { bt := []byte{104,101,108,108,111,32,119,111,114,108,100} fmt.Println(string(bt)) // 输出 he
2021-10-31 14:16:58
17441
1
原创 golang 中利用 map 动态向 json 添加字段
目前在做一个微型网关,一期的功能就是接收请求、匹配路由、鉴权、转发请求,再把响应接住并动态添加字段最后返回给调用方。简单来说就是把请求方的响应接住,并在外层加上网关层特有的字段,如下{ "response": { "data":[], "traceId":"1212121212112" }}其中 response 和 traceId 就是网关动态加的,这个可以利用 golang 里的 map 属性来实现。ret := map[string]interface{}{}data :=
2021-08-29 18:30:46
2840
2
原创 Linux上pptx转pdf
文章目录缘由libreoffice字库转码缘由今天下载了个 ppt 课件,蛮大的,73M,直接打开,卡的不行不行的,于是打算转成 pdf。在网上找了一圈,免费的则有大小限制,没有大小的则要收费。如此种种,那就撸起袖子自己弄个了,以后就是过程。libreofficeyum -y install libreofficeyum -y install libreoffice-headless字库由于 ppt 里有许多汉字,不下载字库则没法看,都是乱码。https://mirrors.tuna.ts
2021-07-07 15:58:27
1628
2
php_curl-5.4.3-VC9-x64的php_curl.dll
2015-01-04
epel.repo
2016-06-06
XHProf简明教程
2015-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅