自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

molaifeng的专栏

道阻且长,行则将至;行而不辍,未来可期

  • 博客(242)
  • 资源 (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 347 1

原创 浅谈 Redis

前言Redis 作为一个高性能的内存数据库,其读效率达到 10w qps/s,写也能到达 4-5w qps/s。今天就来简单的聊下其底层的实现,达到知其然并知其所以然。redisServerRedis 作为典型的 C/S 模式,客户端连接到服务端,然后进行交互。那么就来看看服务端的数据结构// server.hstruct redisServer { …… redisDb *db;...

2020-03-20 19:13:07 332 1

原创 浅谈 PHP

这篇博客分三个部分陈述,分别是PHP进程管理器、PHP启动流程和PHP优化。 谈到PHP进程管理器,不得不讲下它的进化过程,CGI--->FastCGI--->PHP-FPM。 CGI全称是“公共网关接口”(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准。...

2015-11-15 15:35:37 1048 1

原创 微信支付趟过的坑

这段时间在做微信支付开发,在公司的公众号审批下来后,我这边的测试用例也已经开发完毕,于是拿着具体的数据来调试了,大段大段的代码就不贴了,demo里有,这里就说说调试过程中遇到的坑。        第一坑:redirect_url参数错误。因为我选择的的“JS API”支付,这种支付需要网页授权,先获取code,再拿code去获取openid和prepay_id。这个网页授权需要登录微信

2015-01-21 15:49:48 90094 41

原创 解决 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 960

原创 利用 ChatGPT4 回复的 markdown 文本生成 ppt

利用 ChatGPT4 回复的 markdown 文本生成 ppt

2023-04-30 23:05:35 1284 1

原创 Cursor 尝鲜

Cursor 这是一个集成了GPT-4 模型的代码编辑器, 而且重要的是免费, 不需要注册, 不需要订阅Copilot,不需要API Key,下载安装后直接用就行。最近 ChatGPT 大行其道,用了都说🐂🍺,今天就借着这个话题介绍下一个搭乘 ChatGPT4 的 IDE ,那就是标题。这个用处就大了,以后在研究源码的时候,用 Cursor 就如虎添翼了,碰到不懂的代码,就参考下 Cursor。然后圈中 main 方法,按 command + l 问 Cursor 这段代码的作用。恢复混淆的 js 代码。

2023-03-31 23:04:07 920

原创 golang 复杂数据结构解析

对于构造复杂的数据结构时,需要用到 map,而不是单纯依靠 slice 及基础结构体。

2023-02-27 22:59:06 501

原创 解决 golang json 中 invalid character ‘\r‘ in string literal 报错

也就是 json 在解析 \r\n 需要加上转义符。同时,在 golang 中,用反引号也可以解决。跑上面的代码,会报题头的错误。

2023-01-01 23:18:18 2527

原创 解决 php post 而 gin 收不到问题

php 这边用 post+json 形式向 golang 的 gin 框架发送数据,之前网页版都是使用正常,最近有个需求是一个功能接入移动端内部办公系统,通过接入 sdk 调用实现网页上的功能。

2022-12-04 23:02:16 958

原创 破解网页关注公众号才能继续观看

破解网页关注公众号才能继续观看

2022-11-19 21:43:31 1357

原创 解决 php 中 composer 包 namespace 同名问题

利用 psr4 解决 PHP 中 composer 包同名的问题

2022-10-31 23:29:36 270

原创 解决 golang 中输出 (MISSING)

用户反馈,golang 的某个服务列表突然打不开了,在本地复现后,发现,原本返回的 json 串,里面突然多了 (MISSING) 这个东东

2022-08-24 09:08:21 2391

原创 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 3957

原创 golang 处理变量模板

这种json形式的字符串,后端变把name解析成zhangsan。最近有个需求,后端配置相关模板,提供接口给兄弟部门用,模板里有形如。这个库,比如上面的需求可以用如下代码实现。变量,三方调用的时候会发送。类似这种解析变量的需求,推荐。...

2022-07-24 16:43:01 259

原创 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 1181

原创 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 4569

原创 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 6335

原创 使用 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 312

原创 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 4483 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 5154

原创 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 985 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 4345 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 16960 1

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

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

2021-08-29 18:30:46 2497 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 862 2

原创 两个大数相加

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

2021-06-18 17:47:37 323

原创 Redis 是如何回复命令的

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

2021-06-06 18:58:49 499

原创 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 11:35:47 468 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 11:23:28 112

原创 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 10:37:24 283

原创 大小端

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

2021-05-25 16:42:45 1055

原创 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 16:49:18 369

原创 记一个特定 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 09:38:16 108 2

原创 简单聊聊硬盘(下)

文章目录概述分区、格式化和挂载分区格式化挂载文件系统目录项、索引节点、逻辑块以及超级块VFS通用块层Buffer/CacheIO 栈参考概述上期主要是简单介绍了下硬盘的硬件内部构成,这期就稍微展开下,简单聊聊分区、格式化、挂载、文件系统、通用块、Buffer/Cache 和 IO 栈。分区、格式化和挂载问,买了一块硬盘后,能否直接使用呢?答,不行。为啥?打个通俗的比方,买了块硬盘相当于在小区买了套毛坯房。此时,需要设计,比如,敲掉靠近的阳台的墙面,使客厅看起来更宽敞,敲掉主卧的卫生间,做成衣帽

2021-01-31 21:42:24 228

原创 简单聊聊硬盘(上)

文章目录前言结构实物图逻辑图盘片、盘面和磁头磁道、柱面和扇区、簇/块磁盘容量计算CHS & LBA磁盘读取响应时间IOPS前言再过几个小时就 2021 了,趁着 2020 还有富余的几个小时,把这个月的博客给更新上。最近一直在补计算机底层的知识,于是把今年最后一更交给硬盘了。注:全文硬盘都是指机械硬盘,也就是 HDD 硬盘。结构实物图逻辑图盘片、盘面和磁头一张盘上下两面,每面都有一个磁头对应着。上图显示四个磁头,对着两个盘片,每个盘片上下两面。磁道、柱面和扇区、簇/块

2020-12-31 23:04:44 755

原创 解决 Got error 28 from storage engine

下午开发的时候,发现页面成白板了,于是开始 debug。由于此项目的认证信息是通过 HTTP 接口获取的,查看日志,发现 “array_merge(): Argument #1 is not an array”,于是去目标服务器追踪了下,方面也是一个 HTTP 接口调用,返回的是 null,再顺着看过去,发现最终的那个接口查了数据库,然后卡在那了,再查看具体的消息为 “Got error 28 from storage engine”,又是 MySQL 的问题。基于以往的经验,是不是内存满了或是硬盘满了,

2020-11-26 16:04:08 2458 4

原创 读取csv并导出新的csv

用 editplus 打开 csv 格式的文件,会发现编码为 ANSI。在 ANSI 里,GBK 是专门来解决中文编码的,是双字节的,不论中英文都是双字节。通常程序保存文件的编码常为 UTF-8,因此读取 csv 文件时,需要进行编码转换,把 GBK 的转为 UTF-8,导出的时候再把 UTF-8 转换为 GBK。csv 格式的文件标题,日期测试1,2020-10-29处理代码<?phpfunction utf8ToAnsi($str){ return iconv('UTF-

2020-10-29 16:19:14 550

原创 php数组使用json_encode转换的一个小坑

前段时间客服系统出现了个小问题,不能切换中继线路。之前是中继线路是固定的,也就是账号配置的时候指定的,后来为了方便,在界面上以下拉框的形式让客服选择。问了下相关人员,说是添加了一个新的中继号后就歇菜了,于是在测试环境下复现了,发现是数组转换的问题。中继号都存在数据库,php 取出来,然后用 json_encode 转换为 js 的数组,最后在页面上组装成 select 相关内容展示出来供客服操作。<?php$array = [ '8001', '8002', '800

2020-09-30 18:01:52 1389 1

原创 解决 InnoDB: Cannot allocate memory for the buffer pool

解决 InnoDB: Cannot allocate memory for the buffer pool

2020-08-05 15:35:39 1128

epel.repo

yum install http://mirro rs.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm时报错“epel-release-6-8.noarch.rpm: does not update installed package”,可以下载此repo,再yum install -y docker-io

2016-06-06

XHProf简明教程

XHProf是Facebook开源的php性能分析工具,是php的一个扩展。windows平台可以通过此链接下载,同时还需下载制图工具Graphviz,最后去github下载相关的代码(只需xhprof_html、xhprof_lib、examples)。

2015-09-17

使用PHPMailer发送邮件

使用PHPMailer发送邮件的DEMO

2015-07-16

php_curl-5.4.3-VC9-x64的php_curl.dll

在windows上开发,下的是php_curl-5.4.3-VC9-x64版的wamp,在使用curl模块时出现错误,明明已经加载了,但是还是报curl没有加载的错误,后来在网上找了下,发现该版本的php_curl.dll有问题,于是又下载了份,覆盖掉本机上的,发现有用,资源就在附件内。

2015-01-04

FaustCplus的swf文件

解决因客户端flash版本升级而无法预览图片的bug

2014-08-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除