zhuizhuhaomeng Blog

「记录下来,一切都会更容易理解」

crash caused by vsprintf

我们总会有这样的印象:平常的测试都好好的,该写的用例也都写了,但是在上线前的最后一刻就出问题了,好像是总有一个恶魔在跟我们作对。 这次遇到的是一个进程崩溃的问题 (Segmentation fault (core dumped)),而代码却看起来一点问题也没有,百思不得其解。就是下面的一小段代码,你能找打原因吗? #ifndef MAXSTRINGLEN #define MAXSTRIN...

Add Bridge Interface with nmcli

使用 qemu 创建的虚拟机,宿主机无法和虚拟机互通。 经过分析发现如果将虚拟机和宿主机的网卡都添加到网桥,那么就可以实现虚拟机和宿主机的互通了。 那么如何在将宿主机添加网桥呢? 可以使用下面的命令,这里假设物理网卡的名称是 enp4s0。 这里同时给网桥配置了静态 IP 地址。 1 2 3 4 5 6 7 8 dev=enp4s0 sudo nmcli connection add ...

Nginx location 匹配规则

Nginx 的 location 匹配规则是可以时说是比较灵活的,但是也可以说是比较复杂的。 有些同学总喜欢问一些 奇怪的问题,但是他们不说这些问题背后的场景。 到底是他们必须这么使用还是说他自己做了试验发现不符合自己脑袋中的预期。 比如 “location = /” can not be matched 这个问题。 其实在 Nginx 的官方文档中,对 Location 的匹配规则说...

使用 GDB 跟踪 Lua 内存分配

我们想要了解一个某一个软件的内存是如何分配的,最好的方式就是看看内存分配的函数的调用栈。 我们可以使用 GDB 来跟踪内存的分配和释放。 设置日志输出文件 因为程序都会涉及大量的内存分配和释放,所以我们需要把调试信息导出到文件。 这样我们就可以使用其它工具对导出的日志进一步的分析。 这就涉及 logging 这个命令。 set logging file gdb.log set log...

如何安全拷贝字符串

安全拷贝字符串 很多面谈题喜欢让人回答如何才能安全拷贝字符串。要比较 strcpy 和 strncpy 的区别。 事实上,大多数的面试官是不知道 strncpy 具体是怎么实现,有什么副作用的。 我们通过 man strncpy 可以清楚的看到,strncpy 其实执行了一个 bzero 的动作,也就是将 目标地址空间的内存清 0 了。 char * strncpy(char *res...

使用软件包安装软件或者是通过拷贝的覆盖的方式安装软件

遇到麻烦 做开发的同学都知道,Makefile 会有一个 install 的目标。 我们通过源码安装软件的时候,经常使用 sudo make install 命令直接将软件安装到系统。 在软件开发的过程中,由于需要频繁修改代码并更新程序进行测试,因此也是使用 sudo make install 的方式来安装软件。 但是夜路走多了总会遇到 鬼。有经验的同学可能就会遇到 sudo make ...

OpenResty interacting with Redis from a script

问题 先向 Redis 服务器获取所有数据,然后在客户端操作过滤需要的数据这种方式显然是低效的。 缺点包过: 需要通过网络传输大量的数据 服务端需要编码大量的数据 客户端还需要解码大量的数据 客户端要自己执行行过滤逻辑 如果能让服务端执行过滤,那么上面的问题就可以解决。 这就是为什么 Redis 服务器提供了执行 Lua 脚本的功能。 可以参考 Redis 官方的...

Perl notes

文件开头 添加 strict 和 warnings 的检查,减少不必要的出错。 1 2 3 4 5 6 7 #!/usr/bin/env perl use v5.10.1; use strict; use warnings; #no warnings 'recursion'; #no warnings 'portable'; 正则表达式 \U 将所有匹配转换为大写...

自签名证书浏览器调试

来源 问题描述 在使用google浏览器时,有时访问某些网址时会显示网址不安全,查看后发现网络证书无效 解决方法 1、桌面找到google浏览器图标,右键,选择属性 2、在’‘目标’‘后空一格添加–ignore-certificate-errors –allow-running-insecure-content 3、重启即可 然而,有时还会出现问题,这是,需要在出现问题的网址上盲打...

多线程会产生多少额外的内存开销

默认情况下,Linux 系统为线程调用栈分配的内存大小为 8M。 我们可以通过 ulimit -s 指令调整调用栈大小。 我们也可以在编程时显示指定调用栈的大小,比如下面通过 pthread_attr_setstacksize 接口设置栈大小。 #include <pthread.h> #include <stdio.h> void* thread_...