自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Linux C/C++后台开发

Talk is cheap. Show me the code!

  • 博客(83)
  • 收藏
  • 关注

原创 DP动态规划之最长回文子串

现在的求解过程就是,基于已知的1,2条件,往后循环推导,同时找到推导过程中长度最大的字符串。给你一个字符串 s,找到 s 中最长的回文子串。

2022-09-13 19:28:46 243 1

原创 SW滑动窗口之无重复字符的最长子串

执行结果不是很理想,我们其实可以看到左指针和右指针分别都遍历了一次字符串,如果我们只循环一次保存每个字符的位置,碰到重复的字符只更新位置,可以少遍历一次。给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。执行用时确实提高了不少。

2022-09-09 21:23:41 221

原创 升级go1.18版本json-iterator coredump问题

今天用go1.18编译了之前的项目运行的时候core了,代码里面使用了recover捕获,然后用runtime.Stack打印了现场,看了下堆栈的信息发现是我们在使用json-iterator时出的问题,找到json-iterator的github。看了下主要改动是json-iterator引用的reflect2包,增加了一个go_below_118.go文件一个go_above_118.go文件,主要区别是mapiterinit这个函数。可以看下go1.18相较于go1.17的改动。...

2022-07-22 21:15:04 2406

原创 spdlog和fork冲突问题

遇到个问题,使用spdlog的async_logger打印日志,一直都是正常的,但是调用了fork之后就不打印了先使用打印TODO大法,使用的spdlog的default_logger打印,走的console打印,结果发现console打印没问题,就async_logger在fork之后就不打印了使用strace -f运行看一下这里的write 1就是console打印的,在fork前后都是正常的,但是write 3只在fork之前调用了,fork后没有调用,直接卡在了futex FUTEX

2022-02-19 21:41:23 822

原创 spdlog封装自己的日志库

先上日志配置定义struct logger_config { std::string name = "run_logger"; spdlog::level::level_enum level = spdlog::level::trace; std::string format = "[%Y-%m-%d %H:%M:%S.%f] [%P] [%^%l%$] [%s:%# %!()] %v"; std::string file_name = "../log/run.log";

2022-02-19 21:02:01 1801 4

原创 Inferior 1 (process xxx) exited with code 0177

今天调试的时候遇到个很奇怪的问题,我的服务是多进程的,每次收到请求子进程就退出了,然后又重新被父进程拉起一个新的子进程,看了下core目录也没有生成core文件。通过日志看到当前执行到了哪里,在后面调用和return位置加打印TODO,再次调试,发现是在调用一个函数的时候直接退出了,并且都没有进入到函数里面去。通过ps -ef查看子进程的pid,然后gdb -p到子进程上,打断点,再次调试(gdb) b xxx.cpp:26No source file named xxx.cpp.Make b

2021-12-21 17:00:05 3037 2

原创 escape string实现

void escape_string(const string& sql, string& dest) { char escape; for (auto character : sql) { switch (character) { case 0: /* Must be escaped for 'mysql' */ escape = '0'; break;

2021-10-08 17:35:29 555

原创 DP动态规划之斐波那契数

https://leetcode-cn.com/problems/fibonacci-number/F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1在学校的时候课本上用这个题目介绍了递归,我们看下int fib(int n) { if (n < 2) { return n; } return fib(n - 1) + fib(n - 2);}在递归的过程中,我们对fib(n)都进行了两次

2021-10-07 19:27:29 168

原创 docker配置同一个域名下的多个仓库auths

假如现在我们要登录两个仓库pull和push镜像,并且仓库的域名相同,例如hub.registry.com/ahub.registry.com/b那么我们vim ~/.docker/config.json{ "auths":{ "hub.registry.com":{ "auth":"dXNlcjE6cGFzc3dvcmQx" }, "hub.registry.com":{ "auth":"dXN

2021-09-29 17:39:13 1329

原创 DFA有限状态自动机之有效数字

https://leetcode-cn.com/problems/valid-number/根据题目给的算法描述,定义字符类型,用函数返回当前字符类型,挖掘出所有的状态定义出来enum State{ state_begin, state_integer_sign, // 整数符号 state_integer, // 整数 state_point_without_integer, // 前面没有数字的小数点 st

2021-09-04 20:44:26 177

原创 DFA有限状态自动机之字符串转换整数(atoi)

for循环字符串的时候,有4种类型的字符情况,我们可以定义在当前所处状态下,遇到space类型字符正常的话就流转到state_space,遇到sign类型字符正常的话就流转到state_sign,遇到number类型字符正常的话就流转到state_number,其它所有异常情况直接结束流转到state_end,通过表格穷举循环遍历4类字符时所有组合的情况下的状态。这样做的好处是,我们在定义有限状态自动机的穷举时,可以更简单,只需要列出所有的正常情况就行了。我们可以看看只穷举正常情况的表格。

2021-09-02 22:05:20 295

原创 升级openssl导致yum不可用

文章目录检查ld.so.conf使用ldconfig使用ldd重新构建pycurl# yumThere was a problem importing one of the Python modulesrequired to run yum. The error leading to this problem was: /usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locksPlease

2021-07-07 19:36:46 1553

原创 centos7升级git2.28.0

1.下载地址https://github.com/git/git/releaseshttps://mirrors.edge.kernel.org/pub/software/scm/git/2.不建议用wget下载,可能会存在包有问题无法解压的情况,直接去下载页面下载好以后,传到centos上。wget https://github.com/git/git/releases/tag/v2.28.0/git-2.28.0.tar.gzwget https://www.kernel.org..

2020-08-03 16:00:09 722

原创 centos7升级gcc10.1.0,gdb9.2

https://www.gnu.org/prep/ftp.html先找一个亚洲的镜像站点选一个站点,打开gcc或者gdb目录,选择自己想要安装的版本,我这里选择的gcc-10.1.0和gdb-9.2http://mirrors.nju.edu.cn/gnu/gcc/gcc-10.1.0/https://mirrors.ustc.edu.cn/gnu/gdb/解压gcc-10.1.0.tar.gz后进入目录,执行./contrib/download_prerequisites下载gcc

2020-07-08 16:24:35 2355

原创 URL安全的Base64算法

base64是取3个字节(24位)的数据强行组成4个字节(32位)的数据做为一个分组,24位分成4个字节的话,每个字节分到6位,然后前面补两位0,然后这个字节的值位索引去base64表找值。1. 因为前面补两个0,那么只有6位来算索引,最长就是2^6=64,所以base64表只有64个。2.因为每4个字节一个分组,所以base64后的长度肯定是4的倍数。3.因为不是所有的字符串都能...

2019-09-02 20:40:27 843

原创 VS Code Remote Development

在Windows下编辑Linux代码,并且有Linux下的系统接口,第三方dep库的语法解析,代码提示,自动补全,跳转,用起来真香。困扰了Linux后台开发人员多年的难题终极解决方案!要求VS Code版本在1.35.1以上。1.安装远程开发插件,在Extensions中输入Remote Development安装Remote Development后会自动安装关联的几个插件2....

2019-08-20 16:16:34 5057

原创 epoll的ET和LT模式触发场景

epoll有两种事件模型:Level Triggered (LT) 水平触发socket接收缓冲区不为空,有数据可读,读事件一直触发socket发送缓冲区不满,可以继续写入数据,写事件一直触发Edge Triggered (ET) 边缘触发socket的接收缓冲区状态变化时触发读事件socket的发送缓冲区状态变化时触发写事件总结:水平触发:只要可读,就一直触发读事件,只要可写,就...

2019-04-12 14:15:25 3121 10

原创 makefile常用编译选项

我们习惯创建一个环境变量文件Inc.mk来定义常用的变量CC = gccCXX = g++ -std=c++11AR ?= arARFLAGS = -scurvRANLIB ?= ranlibCFLAGS ?=CXXFLAGS ?=INCLUDE ?=LDFLAGS ?=CFLAGS += -Wall -g -fPIC -pipe -Wl,-z -Wl,defs -...

2019-03-27 20:36:37 6787

原创 curl源码编译安装

https://curl.haxx.se/download.html首先去curl官网下载对应版本,这里有个坑需要注意。如果下载的源码版本太高,编译是成功的,但是curl可执行文件访问https的时候还是会报各种奇怪的错误。所以我这里的做法是,先yuminstallcurl,然后curl -V看我的系统yum支持的curl最新版本。我这里是7.29.0这里点击OldRelease...

2019-03-27 16:02:28 18154

原创 宏定义的巧用

1. #用来标记参数是字符串#defineSTRING(X) #Xconst char *str = STRING(test);cout << str << endl;这里str的内容就是"test"2. ##用来连接参数#define AND(X) X##Xint num = AND(8);cout << num <<...

2019-03-27 11:50:10 360

原创 source insight解决对namespace不友好的办法

我们在头文件中使用using namespace xxx;如果这个头文件用的目录结构路径,直接在source insight里面点击无法找到的头文件,这样对于命名空间实际上source insight是没有解析到的,那么代码里面直接引用命名空间中的接口都是不提示的。我们可以这么做方便编码:Options-&gt;Preferences选择Special Language Optio...

2018-11-19 21:19:27 3340 3

原创 curl常用功能

最简单的get访问(-X GET可选):curl www.test.com使用用户名和密码:curl -u name:passwd http://www.test.com查看详细访问过程:curl -v www.test.compost访问(因为-d就指定了post,可以省略-X POST):curl -d "user=kevinchuang&amp;passw...

2018-11-03 20:05:41 556

原创 map2str和str2map

举个例子:http://www.test.cn:8080/max/123.html?name=kevinchuang&amp;pwd=123456#first通常http链接部分都是固定,我们需要关心的是从“?”到“#”部分的数据部分。比如现在我们要构造一个GET请求:string url = "http://www.test.cn:8080/max/123.html";url +=...

2018-11-03 18:55:06 665

原创 udp接收缓冲设置多大

先说一下保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。这个机制决定了udp的特性: 1. udp可以多线程对同一个fd进行发包操作,如果是tcp多线程发送,会让流乱序,接收端完全无法解析出来 2. udp接收端每次只能拿到一个包,tcp需要借助自定义包头来拆分出一个一个的包假如现在发送端发送了长度为100,200,300的3个包,接收端需要调用3...

2018-09-09 23:08:49 9205 1

原创 避免不必要的内存拷贝和清0

对于网络编程中,一般都喜欢使用memset清0和memcpy拷贝操作,举个例子:char buffer[1024];memset(buffer, 0, 1024);memcpy(buffer, proxy_hdr, IPC_HEADER_SZ);memcpy(buffer, trans_hdr, TRANMIT_HEADER_SZ);memcpy(buffer, buf, len);...

2018-09-09 21:50:57 1644

原创 把函数返回值转为异常处理机制

我们这里要使用的是#include &lt;stdexcept&gt;,可以参考官方文档 先举一个例子,比如调用recv的函数返回值处理:int ret = recv(fd...);if (ret &gt; 0){}if (ret == 0){}if (ret == -1){ //EAGAIN/EWOULDBLOCK提示你的应用程序现在没有数据可读请稍后再试 if (...

2018-09-04 13:00:17 809

原创 has been changed outside of Source Insight

在使用Source Insight写代码时,遇到它频繁弹窗提示代码在外部被更改 我们可以通过Options-&gt;Preferences-&gt;Files 就不会再提示了。 注意:这个解决方法,你要保证确实没有外部在修改你正在编辑的文件,频繁弹窗提示很烦。否则你这样设置了,外部有修改的,都不会让你确认就加载进来了。...

2018-04-26 09:41:01 2142 1

转载 MQTT协议通俗讲解

原文链接:https://blog.csdn.net/u011216417/article/details/69666752参考 Reference协议文档 Offical Docsv3.1.1英文原版中文翻译版其他资源网站MQTT官方主页Eclipse Paho 项目主页测试工具MQTT Spy(基于JDK)...

2018-04-24 13:06:29 2130

原创 ntpdate同步时间

先说下ntpdate的用法: usage: ntpdate [option] server大概就是ntpdate 192.168.0.1这样 最近发现个问题,当强制把本机时间改大了一个月之后,再使用ntpdate向主机同步时间会报错:ntpdate[8115]: Can't adjust the time of day: Invalid argument这个时候只需要增加-...

2018-04-02 16:36:08 1030

原创 非阻塞套接字connect

EINPROGRESS The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After...

2018-03-22 11:29:32 1658

原创 linux守护进程

1.守护进程最重要的特性是后台运行。 2.守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。 总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。 因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程(一个特殊...

2018-03-08 21:05:10 1496

原创 shell脚本打印日志

#!/bin/bashLOG_FILE="/var/log/test.log"&gt;"${LOG_FILE}"exec &amp;&gt;&gt;${LOG_FILE}set -x第一行是定义日志绝对路径 第二行是先清空日志文件内容 第三行是把当前脚本的标准输出,标准错误输出都重定向到文件LOG_FILE中 第四行是打印每一行shell命令执行 exec是用被执行的命令行替...

2018-03-05 16:31:31 13758

原创 docker run --rm

先引用docker run命令的帮助文档原文: Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…] Run a command in a new container –rm Automatically remove the container when it exits 意思就是退出容器的时候容器就被删除了 现在有这样一个场景,我们想查...

2018-03-05 14:55:45 3642

原创 pipework给docker设置mac

继我上一篇文章pipework给docker设置ip,现在需求增加了还要设置mac,pipework也提供了这个功能。我们可以看看pipework的语法: Syntax: pipework hostinterface [-i containerinterface] [-l localinterfacename] [-a addressfamily] guest ipaddr/subnet[@d

2018-01-18 20:28:32 2027

原创 在windows下写linux代码直接编译

大多数人都习惯于在windows下用source insight编辑代码,然后用xftp拷贝到linux下进行编译,如果有小的改动,就直接在linux下用vim进行编辑修改。至于为什么是vim,工作这么多年,还没有一家公司的服务器是带界面的,可以安装使用ide的。 稍微进阶一点的办法,就是实现linux和windows文件夹共享,我们在windows上直接对着共享文件夹内的代码进行编辑,然后就在

2018-01-15 17:59:16 21021 6

原创 用strace查找进程卡死原因

最近遇到进程卡死的情况,但是自己调试的过程中并不一定能复现,都是需要运行一段时间某些条件下才会触发,对于这种运行着不能破坏现场的情况,我们可以使用gdb -p和strace -p来跟踪。 首先我们用ps auxf查看我们的进程执行到了哪一步: 可以看到执行到了docker exec -i 178.20.1.229_0115034556 ls然后就卡死了 然后我们进一步通过strace查看...

2018-01-15 14:59:03 25049 15

原创 python的libev库pyev一点心得

http://pythonhosted.org/pyev/examples.html 这是官方文档给的例子,基本需求对照着看了就可以写了,一般用事件模型,无非就是关心一个有连接可以accept,一个有数据可以read的事件,然后就是定时器,这里都有了。 1.例子中的reset函数 事件每次触发结束了,都要调用reset函数,reset函数的作用是重新注册一次事件,为什么要这么做了?以前用惯了l

2017-11-18 16:14:55 2582

原创 python查看模块,对象的函数

这段时间在用libev的python版本事件模型,总共只有一个py.so文件,没有.py文件查看源码查看接口,最开始用shell命令直接查看.so的接口不尽人意。然后发现python提供了查询的接口在代码中可以直接打印出来看。 第一个:dir() 例如 print dir(pyev) 第二个:__dict__ 例如 print pyev.__dict__.items() loop

2017-11-18 15:32:45 4536

原创 linux查看.so导出函数

方法一 nm -D *.so 方法二 objdump -tT *.so

2017-11-18 15:19:58 5132

原创 pymongo连接超时的做法

通常我们连接mongo数据库会这样做: client = pymongo.MongoClient(host, port) 但是会发现一个问题,如果mongo连接不上,会在这里阻塞很久。解决办法可以看官方文档http://api.mongodb.com/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoCl

2017-11-15 20:31:53 4785

空空如也

空空如也

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

TA关注的人

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