- 博客(410)
- 资源 (1)
- 收藏
- 关注
原创 记一记redis命令,老是记不住
key 相关exists keyexpire key seconds (秒)pexpire key msceonds (毫秒)expireat key timestamp (秒级时间戳)pexpireat key mtimestamp (毫秒级时间戳)del keykeys pattern (与 pattern 匹配的所有 key,如 keys * 返回所有 key)persist key (保留 key 为永久)rename key newkeyrenamenx key newkey
2022-01-04 22:11:04
684
原创 git rebase相关
仅做记录,方便翻git rebase 命令:https://www.yiibai.com/git/git_rebase.htmlgit rebase 之后直接 git push 不成功:https://blog.csdn.net/ManyPeng/article/details/81095744git rebase -i:https://juejin.cn/post/6844903600976576519
2021-11-03 15:17:11
213
转载 对于可重入、线程安全、异步信号安全几个概念的理解
由于前段时间,程序偶尔异常挂起不工作,检查后发现时死锁了,原因就是:在信号处理函数里面调用了fprintf. printf等io函数是需要对输出缓冲区加锁,这类函数对本身是线程安全的,但是对信号处理函数来说是不可重入的(在没有返回之前,不能再次调用),即不是异步信号安全的。对于printf这类函数,可以这样理解:它们使用了全局数据结构(iobuffer),所以不是线程安全的(多个线程同时访问共享资源),也是不可重入的(有共享资源,可能损坏);通过加锁可以变得线程安全,但是仍然不可重入。..
2021-08-14 12:08:46
400
原创 linux c 打印调用某函数的文件名与行
只做记录,供自己翻http://www.voidcn.com/article/p-ruuoijoc-mn.html
2021-08-11 17:39:15
572
1
原创 Thread Caching模型的高性能日志系统
主要是自己看https://blog.csdn.net/yusiguyuan/article/details/15081295
2021-08-05 10:24:38
128
原创 go 反射 reflect 包
主要是方便自己查看https://segmentfault.com/a/1190000021619810?utm_source=sf-similar-article
2021-07-28 16:49:34
183
原创 golang的并发原理与调度机制
主要是做个记录,供自己翻https://blog.csdn.net/liangzhiyang/article/details/52669851https://www.jianshu.com/p/4afa0679851dhttps://www.baidu.com/link?url=UdolLdmsSiHssG4QGb7XnzioaIqcBJDbzV-SZEZPJxfMQMwySfIQrx7_-ctG1kFFVhZfOiFk6M1lf3zFZqGW7q&wd=&eqid=9ec567bc0
2021-07-26 14:22:44
139
原创 sql执行顺序、mysql事务、索引
https://www.cnblogs.com/personsiglewine/p/11507866.html
2021-07-22 16:23:08
169
原创 docker使用
主要是做个记录,供自己看阮一峰教程:https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html查看 docker 配置:docker info列出本机所有 image 文件:docker image ls删除 image 文件:docker image rm [imageName]拉取 image 文件:docker image pull [imageName]通过 Dockerfile 创建 image 文件:docker ima
2021-07-20 16:08:25
154
原创 net/http源码
https://www.jianshu.com/p/be3d9cdc680b(结合 在goland中源码跳转 + 文章中的处理流程图 + 文章内容一起食用)需要注意的一点:处理请求的最后一步,调用 serverMux.match 方法时,返回的 Handler 对象是对应路由的 被包装成 Handler 对象的 IndexHandler,(即最后 IndexHandler 方法在 ServeMux.ServeHTTP 函数的最后一句 h.ServeHTTP 被调用)https://www.jiansh
2021-07-16 11:25:54
156
原创 gin源码理解
https://studygolang.com/articles/23097?fr=sidebarhttps://blog.csdn.net/luo1324574369/article/details/108310032https://zhuanlan.zhihu.com/p/110976568
2021-07-15 18:51:55
145
原创 macos item2快捷键
preferences -> profiles -> keys找到option+←修改如下即可通过 option+←以单词为单位向左移动光标。。。找到 option+→,修改和上图类似,Esc+f,即可通过 option+←以单词为单位向右移动光标。。。。control+u可快速删除一行。。。left option key 改为 esc+ 后,可通过 option+delete 以单词为单位删除...
2021-07-08 17:44:43
210
原创 关于goland的一些坑
注意goland中的GOPATH配置:Global GOPATH直接影响这个项目的终端go env中的GOPATHUse GOPATH that’s define in system environment,勾选意思是:将Global GOPATH作为Project GOPATHindex entire GOPATH,勾选:将project GOPATH加入到go env中的GOPATH环境变量中一般建议是,在创建项目的时候去掉Index entire GOPATH。再项目创建好之后,配置Pr
2021-07-08 11:30:48
1242
原创 about install gin
https://studygolang.com/articles/24708?fr=sidebarhttps://www.jianshu.com/p/19c11ba25a15
2021-07-08 10:48:52
137
原创 macos zsh与brew
https://zhuanlan.zhihu.com/p/58073103https://brew.idayer.com/
2021-07-05 12:54:24
150
原创 记一笔 unp 非阻塞式 IO,非阻塞 connect, accept
套接字的默认状态是阻塞。表示当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待相应的操作完成。可能阻塞的套接字调用分为以下四类。输入操作,包括 read、readv、recv、recvfrom、recvmsg. 如果某个进程对一个阻塞 tcp 套接字调用这些输入函数之一,在该套接字的接收缓冲区没有数据可读时,进程将投入睡眠,直到有数据到达。对阻塞 udp 套接字如果其接收缓冲区为空,进程将投入睡眠,直到有 udp 数据报到达。对于非阻塞套接字,如果输入操作不能被满足,那么调用将立即返
2020-09-06 16:35:49
236
原创 字符串拼接,lua 读文件的 windows 与 linux 编码问题
最近在写一些简单的 lua,涉及到读文件该文件是在 windows 上编写的,然后会在 linux 下用读此文件然后就出现了一下情况:local cmd = 'ls -F '..path..' | grep \'[^/]$\''我的 path 在文件中看来是:/root/WebOCR/applications_plugin_test/jpress/jpress-addons然而得到的 cmd 为:| grep '/$'WebOCR/applications_plugin_test/jpress/j
2020-07-10 17:08:59
311
原创 正则表达式
主要是为了方便查看,此篇博客几乎没有例子表达式中的 / 用来标示正则表达式的开始和结束非打印字符\cx,匹配由 x 指明的控制字符。例如 /cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。\f,匹配一个换页符,等价于 \x0c 和 \cL\n,匹配一个换行符,等价于 \x0a 和 \cJ\r,匹配一个回车符,等价于 \x0d 和 \cM\s,匹配任何空白字符,包括空格,制表符,换页符等。等价于 [\f\n\r\t\v]\S,匹配任何非空白字符。等价于
2020-06-30 19:06:18
316
原创 git 学习
git init、git add、git commit首先创建仓库 (版本库),仓库可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。步骤:$ mkdir git_repository$ cd git_repository$ pwd # 此步骤是为了查看当前路径,和下面做比较/d/git_repository$ git initInitialized empty Git r
2020-06-25 16:07:17
195
原创 借 shared_ptr 实现 copy-on-write(避免死锁,mutex替换rwlock)
书中提到假设有下面代码:MutexLock mutex;std::vector<Foo> foos;void post(const Foo &f) { MutexLockGuard lock(mutex); foos.push_back(f);}void traverse() { MutexLockGuard lock(mutex); for(std::vector<Foo>::const_iterator it = foos.begin(); it !
2020-06-20 22:39:57
494
转载 关于 shared_ptr 的线程安全
原文地址:https://www.cnblogs.com/gqtcgq/p/7492772.html shared_ptr的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员(指向被管理对象的指针,和指向控制块的指针),读写操作不能原子化。根据文档(http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety), shar
2020-06-18 17:30:04
473
原创 结构体内存对齐的计算
对齐规则:+ 结构体变量的起始地址能够被其最宽的成员大小整除;结构体每个成员相对于起始地址的偏移能够被** min(对齐系数, 自身大小整除) **,如果不能则在前一个成员后面补充字节。其实就是前面所用的字节数必须是当前成员自身大小的整数倍。结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节。其实这里有点不严谨,编译器在编译的时候是可以指定对齐大小的,实际使用的有效对齐其实是取 min(最大字节, 对齐系数),一般默认的对齐系数大小是4。假设对齐系数是 8如 E1:a 使用 .
2020-05-27 16:57:19
254
原创 记一笔 va_list
#include <bits/stdc++.h>using namespace std;void write(const char* format, ...) { va_list vaList; va_start(vaList, format); vprintf(format, vaList); va_end(vaList);}// __VA_ARGS__ 表示一个可变参数宏,而 ## 则是当 可变参数数量为 0 时,去除 format 后面的逗号
2020-05-23 17:28:26
156
原创 UNP TCP 实例 (回射程序,未涉及 IO 多路复用) + 各方面需要注意的点
回射程序:客户进程向服务器发送数据,服务器回送该数据,然后客户进程将其显示在 stdout。 server.c Code:#include "unp.h"extern void str_echo(int);int main(int argc, char **argv) { int listenfd, connfd; pid_t childpid; soc...
2020-05-06 10:36:27
250
原创 APUE 第三版 程序 16-16&16-17 ruptimed (简单的TCP,C/S 实例)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟实验的系统是 Ubuntu 18.04代码先贴一下,和书上一样,没啥改变 ,主要是为了没书的时候看:connect_retry.c//// Created by hjm on 2020/5/3.//#include "apue.h"#include <sys/socket.h>#define MAXSLEEP 12...
2020-05-03 16:02:32
354
原创 APUE 第三版 程序 10-20 (sigsetjmp 与 siglongjmp,及程序的问题??)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟实验的系统是 Ubuntu 18.04 书中在这一节一开始就提到了一句话:当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被自动地加到进程的信号屏蔽字中。 接着按照书上的代码:#include "apue.h"#include <errno.h>...
2020-04-26 12:19:42
234
原创 信号集与信号屏蔽字 + APUE 第三版 程序10-15(信号设置与 sigprocmask 实例)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟 信号集:可以理解为是一个整型,其每一个二进制位都代表一种信号。1 表示在这个信号集中,0 表示不在这个信号集中。唯一需要注意的一点:由于不存在编号为 0 的信号,所以信号编号为 i 的信号对应的其实是信号集中的第 i - 1 的二进制位。所以其四个操作函数:sigemptyset(sigset_t *set)sigfills...
2020-04-25 22:53:48
216
原创 APUE 第三版 程序10-10 带时间限制调用 read (alarm解低速系统调用阻塞)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟程序代码:#include "apue.h"static void sig_alrm(int);int main(void) { int n; char line[MAXLINE]; if(signal(SIGALRM, sig_alrm) == SIG_ERR) err_sys("signal(SIGALRM) error"...
2020-04-25 18:03:10
265
7
原创 APUE 第三版 程序 10-8,10-9 (sleep2 函数的缺陷)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟/* sleep2 Code*/#include <setjmp.h>#include <signal.h>#include <unistd.h>static jmp_buf env_alrm;static void sig_alrm(int signo) { longjmp(env_alrm...
2020-04-25 13:40:10
361
原创 APUE第三版 程序 10-2 (捕捉 SIGUSR1 和 SIGUSR2 的简单程序) +自己沙掉踩得坑(注意缓冲方式)
程序代码:#include "apue.h"static void sig_usr(int); // on handler for both signalsint main(void) { if(signal(SIGUSR1, sig_usr) == SIG_ERR) err_sys("can't catch SIGUSR1"); if(signal(SIGUSR2, sig_u...
2020-04-24 20:53:37
221
原创 APUE 第三版 程序 9-12 (创建孤儿进程组)
孤儿进程组的定义:该进程组的每个成员的父进程要么是该组的成员,要么在其它会话中。 孤儿进程组的特点:如果一个进程组包含一个或一个以上的停止的进程,当该进程组变成孤儿进程组时,该进程组中的每一个进程都会接收到一个 SIGHUP (挂掉)信号,然后紧接着会接收到 SIGCONT (继续)信号。但是对挂断信号的系统默认动作是终止该进程。所以,如果要继续执行子进程,就必...
2020-04-24 15:51:06
193
原创 APUE 第三版 程序 8-20 (解释器文件)
解释器的形式是:#! pathname[optinal-argument]解释器文件是文本文件! 它以下列行的形式开始:#! /bin/sh其中,/bin/sh 就是解释器。需要注意的一点是:解释器文件需要有可执行权限!!//书中代码:#include "apue.h"#include <sys/wait.h>int main(void) { pid_...
2020-04-22 15:55:13
213
原创 APUE 第三版 程序 8-8 (两次 fork避免僵尸进程) + 我的ubuntu从字符界面回到图像界面居然是 ctrl+alt+f2
今天在测试 APUE 对僵尸进程采用两个 fork 的技巧手段。其代码是这样的:#include "apue.h"#include <sys/wait.h>int main(void) { printf("father pid = %ld\n", (long)getpid()); pid_t pid; if((pid = fork()) < 0) { err...
2020-04-21 21:20:36
242
2
原创 APUE第三版 程序 5-15 (内存流的写入与冲洗,何时追加 null)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟先贴上代码:#include "apue.h"#define BSZ 48int main() { FILE *fp; char buf[BSZ]; memset(buf, 'a', BSZ - 2); buf[BSZ - 2] = '\0'; buf[BSZ - 1] = 'X'; if((fp = fmemopen(...
2020-04-20 14:19:44
271
原创 APUE第三版 程序 4-9(umask 与文件模式创建屏蔽字,文件创建时的访问权限)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟先贴上代码:#include "apue.h"#include <fcntl.h>#define RWRWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)int main(void) { if(creat("my1.txt", RWRWRW) &...
2020-04-18 09:51:02
243
原创 APUE第三版 程序 4-8(文件访问权限与 access 函数)
如有错误,欢迎批评指正,本人也是才学APUE的菜鸟先贴上程序代码:#include "apue.h"#include <fcntl.h>int main(int argc, char *argv[]) { if(argc != 2) err_quit("usage: a.out <pathname>"); if(access(argv[1], R_OK)...
2020-04-17 21:55:05
207
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人