molaifeng
码龄12年
  • 875,894
    被访问
  • 225
    原创
  • 3,656
    排名
  • 133
    粉丝
  • 1
    铁粉
关注
提问 私信

个人简介:道阻且长,行则将至;行而不辍,未来可期。

  • 加入CSDN时间: 2010-08-31
博客简介:

molaifeng的专栏

博客描述:
道阻且长,行则将至;行而不辍,未来可期
查看详细资料
  • 3
    领奖
    总分 492 当月 0
个人成就
  • 博客专家认证
  • 获得119次点赞
  • 内容获得154次评论
  • 获得169次收藏
创作历程
  • 4篇
    2022年
  • 17篇
    2021年
  • 20篇
    2020年
  • 23篇
    2019年
  • 17篇
    2018年
  • 8篇
    2017年
  • 42篇
    2016年
  • 34篇
    2015年
  • 35篇
    2014年
  • 25篇
    2013年
  • 6篇
    2012年
成就勋章
TA的专栏
  • Go
    14篇
  • LeetCode
    1篇
  • Redis
    14篇
  • Asterisk 小白成长记
    1篇
  • 计算机基础
    4篇
  • Postman
    1篇
  • 透视HTTP协议学习笔记
  • Kafka核心技术与实战学习笔记
  • APISIX
    1篇
  • 死磕C语言
    6篇
  • 微信公众号开发
    1篇
  • CI
    1篇
  • ThinkPHP
    6篇
  • Yaf
    3篇
  • YII
    5篇
  • Linux
    27篇
  • MySQL
    9篇
  • Javascript
    28篇
  • PHP
    68篇
  • C
    14篇
  • SugarCRM
    13篇
  • Docker
    2篇
  • Jenkins
    5篇
  • Git
    2篇
  • 大数据
    3篇
  • Lua
    1篇
  • ELK
    2篇
  • Asterisk
    1篇
  • ActiveMQ
    1篇
  • JAVA
    4篇
  • ab
    1篇
  • TCP/IP
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

golang 之时间国际化

近期一个上马的项目涉及到国际化,其中一个点就是时间显示的问题,比如现在时间是 北京时间 2022-05-29 23:21:30,这个在国内显示没问题,如果在墨西哥显示呢,显然是不能用北京时间的,毕竟两者隔了十三个时区,这时对方才 2022-05-29 10:21:30 呢。北京时间是东八区,墨西哥是西五区。显然,时间国际化涉及到了时区概念,这里对时区做个简单的介绍。国际上规定,每隔 15° 划为一个时区,全球可分为 24 个时区。以本初子午线为基准,从西经 7.5° 到东经 7.5° 就是 GMT
原创
发布博客 2022.05.30 ·
83 阅读 ·
0 点赞 ·
0 评论

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 ·
1337 阅读 ·
1 点赞 ·
0 评论

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 ·
2138 阅读 ·
0 点赞 ·
0 评论

使用 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 ·
180 阅读 ·
1 点赞 ·
0 评论

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 ·
1746 阅读 ·
1 点赞 ·
1 评论

解决 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 ·
1313 阅读 ·
3 点赞 ·
0 评论

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 ·
462 阅读 ·
1 点赞 ·
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 ·
1410 阅读 ·
2 点赞 ·
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 ·
4992 阅读 ·
1 点赞 ·
1 评论

golang 中利用 map 动态向 json 添加字段

目前在做一个微型网关,一期的功能就是接收请求、匹配路由、鉴权、转发请求,再把响应接住并动态添加字段最后返回给调用方。简单来说就是把请求方的响应接住,并在外层加上网关层特有的字段,如下{ "response": { "data":[], "traceId":"1212121212112" }}其中 response 和 traceId 就是网关动态加的,这个可以利用 golang 里的 map 属性来实现。ret := map[string]interface{}{}data :=
原创
发布博客 2021.08.29 ·
975 阅读 ·
1 点赞 ·
2 评论

Linux上pptx转pdf

文章目录缘由libreoffice字库转码缘由今天下载了个 ppt 课件,蛮大的,73M,直接打开,卡的不行不行的,于是打算转成 pdf。在网上找了一圈,免费的则有大小限制,没有大小的则要收费。如此种种,那就撸起袖子自己弄个了,以后就是过程。libreofficeyum -y install libreofficeyum -y install libreoffice-headless字库由于 ppt 里有许多汉字,不下载字库则没法看,都是乱码。https://mirrors.tuna.ts
原创
发布博客 2021.07.07 ·
162 阅读 ·
0 点赞 ·
2 评论

两个大数相加

如何计算两个超出 int64 的整数呢?正常情况下,使用 int 时是有长度限制的,超出就溢出了,但是字符串可就没有这个限制了,因此可以往字符串这个方向考虑。比如 “123456789” 这个字符串,里面的每个字符都是 ASCII 码,字符类型 9 如果转换成整数类型的 9 呢,下面贴出下 ASCII 码的对照表。看上图圈红的地方,字符 9 转换为整数 9 只需 ‘9’ - ‘0’ = 57 - 48 = 9 即可。这样一来,大数相加就可用转换为 ASCII 码和相加进位的问题。但是两个字符串相
原创
发布博客 2021.06.18 ·
41 阅读 ·
0 点赞 ·
0 评论

Redis 是如何回复命令的

文章目录缘由数据存放位置发送时机结语缘由这篇博文源于群里一个群友的提问在 redis 里面存放了一个 1000w 长度的 list,然后使用 lrange 0 -1 全取出来,这会用很久。这时候我新建个连接,继续其他 key 的读写操作都是可以的。不应该是阻塞吗?那么接下来就来分析为什么会这样,也就是对应标题中 Redis 是如何回复命令的。注:本文中 Redis 版本为 6.2.4数据存放位置Redis 执行完命令后,会把回复的内存写入到当前客户端的两个地方 buf 和 reply,
原创
发布博客 2021.06.06 ·
124 阅读 ·
0 点赞 ·
0 评论

gdb 调试 redis-cli 命令发送接收流程

文章目录前言redis-cli前言在 Redis 中输入 set name molaifeng ,意思很简单,写入一个 name 字符串键,值为 molaifeng,今天就以 gdb 调试的形式来探讨下其在 Redis 中的流程。注,本文中 Redis 版本为 6.2.4redis-cli先从 redis-cli 说起,在 cliSendCommand 处打个断点,接下来就追踪下代码流程。# gdb ./src/redis-cli GNU gdb (GDB) 7.6.1Copyright
原创
发布博客 2021.06.06 ·
156 阅读 ·
0 点赞 ·
1 评论

Redis 事务执行流程源码分析

一般事务执行流程为# ./src/redis-cli 127.0.0.1:6379> MULTIOK127.0.0.1:6379(TX)> set name molaifengQUEUED127.0.0.1:6379(TX)> set hobby codingQUEUED127.0.0.1:6379(TX)> EXEC1) OK2) OK结合源码分析如下第一步 MULTI就是给当前的客户端加上 CLIENT_MULTI 状态,当然了,如果当前客户端状态
原创
发布博客 2021.06.05 ·
36 阅读 ·
0 点赞 ·
0 评论

Linux 中 gdb 调试 Redis

这月开启实战 gdb 调试 Redis 源码系列,以目前官网上最新的稳定版本 6.2.4 来调式。首先,下载源码。wget https://download.redis.io/releases/redis-6.2.4.tar.gztar xf redis-6.2.4.tar.gzcd redis-6.2.4其次,解压并编译 make CFLAGS="-g -O0",不用 make install。最后,使用 gdb src/redis-server 进行调试。# gdb src/redis-
原创
发布博客 2021.06.05 ·
113 阅读 ·
1 点赞 ·
0 评论

大小端

之所以有大小端,是由于在计算机中,数据都是二进制存储的,一个字节八位,比如 char 类型就一个字节,这在所有类型的机器上存储都一样,但是 int 类型呢,4 个字节,也就是 32 位,这四个字节是低字节先存储呢还是高字节先储存呢,这个就是大小端(Big endian 和 Little endian)的由来。比如 int num = 16777220; 这个数用十六进制表示就是 0x12345678 ,从左往右数, 0x12 是高位字节,0x78 是低位字节。在小端序机子上依次是 0x78、0x56、0x
原创
发布博客 2021.05.25 ·
725 阅读 ·
3 点赞 ·
0 评论

MESI 和 NUMA

文章目录CPUSocketCoreThreadL1、L2、L3CPU在服务器上使用 lscpu 命令展示 CPU 相关架构信息。# lscpuArchitecture: x86_64CPU op-mode(s): 32-bit, 64-bitByte Order: Little EndianCPU(s): 56On-line CPU(s) list: 0-55Thread(s) per core:
原创
发布博客 2021.04.26 ·
138 阅读 ·
1 点赞 ·
0 评论

浅谈 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 ·
179 阅读 ·
0 点赞 ·
1 评论

记一个特定 sql 的执行流程

文章目录缘由准备执行计划执行流程几个参数tmp_table_sizemax_heap_table_sizesort_buffer_size参考缘由先前群里同事抛出了个问题,select cnt, count(cnt) as num from test where status = 1 group by cnt having num > 0 order by num desc limit 10;这条 sql 的执行顺序是什么,最近刚三刷完 MySQL实战45讲,趁着春节没回家,今天就写成一篇博
原创
发布博客 2021.02.11 ·
64 阅读 ·
0 点赞 ·
2 评论
加载更多