自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Error Man 的博客

想不到算法。

  • 博客(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 618

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

转载 对于可重入、线程安全、异步信号安全几个概念的理解

由于前段时间,程序偶尔异常挂起不工作,检查后发现时死锁了,原因就是:在信号处理函数里面调用了fprintf. printf等io函数是需要对输出缓冲区加锁,这类函数对本身是线程安全的,但是对信号处理函数来说是不可重入的(在没有返回之前,不能再次调用),即不是异步信号安全的。对于printf这类函数,可以这样理解:它们使用了全局数据结构(iobuffer),所以不是线程安全的(多个线程同时访问共享资源),也是不可重入的(有共享资源,可能损坏);通过加锁可以变得线程安全,但是仍然不可重入。..

2021-08-14 12:08:46 356

原创 linux c 打印调用某函数的文件名与行

只做记录,供自己翻http://www.voidcn.com/article/p-ruuoijoc-mn.html

2021-08-11 17:39:15 513 1

原创 无锁队列与kfifo

主要是供自己翻https://www.iteye.com/blog/aigo-2289645

2021-08-10 17:47:39 140

原创 定时器之时间轮

主要是供自己看https://blog.csdn.net/jasonliuvip/article/details/23888851

2021-08-05 17:33:09 82

原创 Thread Caching模型的高性能日志系统

主要是自己看https://blog.csdn.net/yusiguyuan/article/details/15081295

2021-08-05 10:24:38 95

原创 go 反射 reflect 包

主要是方便自己查看https://segmentfault.com/a/1190000021619810?utm_source=sf-similar-article

2021-07-28 16:49:34 129

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

原创 sql执行顺序、mysql事务、索引

https://www.cnblogs.com/personsiglewine/p/11507866.html

2021-07-22 16:23:08 131

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

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

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

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

原创 关于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 1182

原创 about install gin

https://studygolang.com/articles/24708?fr=sidebarhttps://www.jianshu.com/p/19c11ba25a15

2021-07-08 10:48:52 98

原创 macos zsh与brew

https://zhuanlan.zhihu.com/p/58073103https://brew.idayer.com/

2021-07-05 12:54:24 127

原创 记一笔 unp 非阻塞式 IO,非阻塞 connect, accept

​ 套接字的默认状态是阻塞。表示当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待相应的操作完成。可能阻塞的套接字调用分为以下四类。输入操作,包括 read、readv、recv、recvfrom、recvmsg. 如果某个进程对一个阻塞 tcp 套接字调用这些输入函数之一,在该套接字的接收缓冲区没有数据可读时,进程将投入睡眠,直到有数据到达。对阻塞 udp 套接字如果其接收缓冲区为空,进程将投入睡眠,直到有 udp 数据报到达。对于非阻塞套接字,如果输入操作不能被满足,那么调用将立即返

2020-09-06 16:35:49 214

原创 字符串拼接,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 274

原创 正则表达式

主要是为了方便查看,此篇博客几乎没有例子表达式中的 / 用来标示正则表达式的开始和结束非打印字符\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 297

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

原创 借 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 442

转载 关于 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 425

原创 localtime产生 SIGABRT 信号

原因,localtime 是线程不安全的函数,应改用 localtime_r

2020-06-17 10:58:43 258

原创 结构体内存对齐的计算

对齐规则:+ 结构体变量的起始地址能够被其最宽的成员大小整除;结构体每个成员相对于起始地址的偏移能够被** min(对齐系数, 自身大小整除) **,如果不能则在前一个成员后面补充字节。其实就是前面所用的字节数必须是当前成员自身大小的整数倍。结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节。其实这里有点不严谨,编译器在编译的时候是可以指定对齐大小的,实际使用的有效对齐其实是取 min(最大字节, 对齐系数),一般默认的对齐系数大小是4。假设对齐系数是 8如 E1:a 使用 .

2020-05-27 16:57:19 241

原创 记一笔 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 139

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

转载 unp.h 的安装

https://www.bbsmax.com/A/1O5EXN4J7a/亲测可行。

2020-05-05 11:32:02 234

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

原创 APUE 第三版 程序 10-20 (sigsetjmp 与 siglongjmp,及程序的问题??)

如有错误,欢迎批评指正,本人也是才学APUE的菜鸟实验的系统是 Ubuntu 18.04    书中在这一节一开始就提到了一句话:当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被自动地加到进程的信号屏蔽字中。   接着按照书上的代码:#include "apue.h"#include <errno.h&gt...

2020-04-26 12:19:42 215

原创 信号集与信号屏蔽字 + APUE 第三版 程序10-15(信号设置与 sigprocmask 实例)

如有错误,欢迎批评指正,本人也是才学APUE的菜鸟 信号集:可以理解为是一个整型,其每一个二进制位都代表一种信号。1 表示在这个信号集中,0 表示不在这个信号集中。唯一需要注意的一点:由于不存在编号为 0 的信号,所以信号编号为 i 的信号对应的其实是信号集中的第 i - 1 的二进制位。所以其四个操作函数:sigemptyset(sigset_t *set)sigfills...

2020-04-25 22:53:48 207

原创 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 248 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 328

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

原创 APUE 第三版 程序 9-12 (创建孤儿进程组)

 孤儿进程组的定义:该进程组的每个成员的父进程要么是该组的成员,要么在其它会话中。 孤儿进程组的特点:如果一个进程组包含一个或一个以上的停止的进程,当该进程组变成孤儿进程组时,该进程组中的每一个进程都会接收到一个 SIGHUP (挂掉)信号,然后紧接着会接收到 SIGCONT (继续)信号。但是对挂断信号的系统默认动作是终止该进程。所以,如果要继续执行子进程,就必...

2020-04-24 15:51:06 180

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

原创 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 206 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 229

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

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

登录页+跳转 ==.zip

实现功能: 输入账号密码,验证身份跳转到相关页面。 在相关页面对数据有增删查改操作。 应用express,ejs,session实现。

2019-06-04

空空如也

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

TA关注的人

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