自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Default

:)

  • 博客(112)
  • 问答 (1)
  • 收藏
  • 关注

原创 首次登录ubuntu系统设置root用户

为root用户设置密码sudo passwd root密码设置成功,即可切换root用户

2021-10-26 19:14:52 339

原创 Lua开发技巧-小表预填充

1、未使用预填充技术的代码start = os.clock()for i = 1, 1000000 do local t = {} t[1] = 1; t[2] = 2; t[3] = 3;endfinish = os.clock()print(finish - start)运行时间:0.522、使用预填充技术的代码start = os.clock()for i = 1, 1000000 do local t = {1, 2, 3} t[1] =

2021-07-14 20:07:07 347

原创 Lua源码-C语言技巧-字节对齐

一、目标字节对齐长度和系统中数据类型的最大字节长度相等。二、Lua源码实现方式定义联合体,LUAI_USER_ALIGNMENT_T 的字节长度为联合体中字段字节长度最大的。即double、void *、long中最大的字节长度。typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;#define LUAI_USER_ALIGNMENT_T union{ double u; void *s; long l; }定义其他结构体类型时,使用联合体的方式定义,其中包含字

2021-07-10 12:34:23 379

原创 Test::Nginx 安装

一、安装环境CentOS 7.5[root@VM-0-7-centos ~]# uname -aLinux VM-0-7-centos 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux[root@VM-0-7-centos ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二、

2021-07-10 11:20:28 616

原创 CORS 跨域请求

CORS 跨域资源共享 (Cross-Origin Resource Sharing)这里跨域请求服务器以 nginx 服务器为例说明1、跨域请求特征请求中包含 Origin 头域,表明从哪个域名中跳到当前域名,如下请求:GET /test HTTP/1.1Host: xxxxConnection: keep-aliveUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Ge

2021-07-05 20:14:23 125

原创 HTTP 范围请求

1、如何查看服务器是否支持范围请求请求[root@VM-0-7-centos nginx]# curl localhost:80/site1-400.jpg -IHTTP/1.1 200 OKServer: openresty/1.19.3.1Date: Sat, 03 Jul 2021 01:49:29 GMTContent-Type: image/jpegContent-Length: 2240070Last-Modified: Tue, 22 Jun 2021 11:36:30 GM

2021-07-03 10:37:57 277

原创 NGINX-proxy_set_header Host

使用curl localhost:……向nginx发送消息nginx中有如下配置:upstream backend_push {server 0.0.0.0;balancer_by_lua_file lua/upstream_push.lua;keepalive 100;}location中头域配置:...

2019-12-23 09:51:17 334

原创 Redis-压缩表-zipTryEncoding详解

/* 判断长度为entrylen的entry字符串能否转换为数值,转换结果保存在v中 编码方式保存在encoding中 */static int zipTryEncoding(unsigned char *entry, unsigned int entrylen, long long *v, unsigned char *encoding) { long long value; ...

2019-12-09 10:19:50 232

原创 Redis-压缩表-ziplistCompare详解

/* 将p指向的结点的值和长度为slen的sstr比较,相等:返回1,不等:返回0*/unsigned char ziplistCompare(unsigned char *p, unsigned char *sstr, unsigned int slen){ zlentry entry; unsigned char sencoding; long long z...

2019-12-05 08:59:35 153

原创 Redis-压缩表-ziplistDeleteRange详解

/* 从索引index开始,连续从压缩表zl中删除num个结点 */unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num) { /* 指针p保存压缩表中第index个结点的位置 */ unsigned char *p = ziplistIndex(zl,...

2019-12-04 13:05:19 134

原创 Redis-压缩表-__ziplistDelete详解

/* 从位置p开始,连续删除num个结点返回删除结点之后的压缩表 */static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsigned int num) { unsigned int i, totlen, deleted = 0; size_t offset; int...

2019-12-04 09:22:40 269

原创 Redis-压缩表-ziplistDelete详解

/* 删除压缩表zl中p指向的结点,返回删除结点之后的压缩表删除之后p指向p的下一个结点,这样方便对链表结点进行迭代删除 */unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p) { size_t offset = *p - zl; /*函数__ziplistDelete功能:从压缩表zl中指针...

2019-11-24 19:19:10 278

原创 Redis-压缩表-ziplistGet详解

/* 取出p指向的结点的值如果结点保存的是字符串,sstr保存字符串指针,slen保存字符串长度;如果结点保存的是整数,*sval保存整数值结点的值获得成功返回1,获得失败返回0如果p为空,返回0如果p指向列表末端,返回,其他情况均为1 */unsigned char ziplistGet(unsigned char *p, unsigned char **sstr, unsign...

2019-11-24 18:59:20 268

原创 Redis-压缩表-ziplistPrev详解

/* 返回p指向的结点的前置结点如果p指向的压缩表是空表,返回NULL,如果p指向压缩表的表头结点,返回NULL */unsigned char *ziplistPrev(unsigned char *zl, unsigned char *p) { zlentry entry; /*p指向压缩表的表尾,则p的前置结点就是压缩表的最后一个结点 */ if (p[0]...

2019-11-22 17:10:31 147

原创 Redis-压缩表-ziplistNext详解

/* 返回p指向结点的后置结点如果p指向ZIP_END,返回NULL;如果p是表尾结点,返回NULLL */unsigned char *ziplistNext(unsigned char *zl, unsigned char *p) { if (p[0] == ZIP_END) { return NULL; } /* 函数zipRawEntryL...

2019-11-22 17:09:17 178

原创 Redis-压缩表-ziplistIndex详解

/* 返回压缩表zl的第index个结点,index为非负:从表头开始查找,0表示返回第一个结点index为负:从表尾开始查找,-1表示返回最后一个结点*/unsigned char *ziplistIndex(unsigned char *zl, int index) { unsigned char *p; /* 保存目标结点地址 */ zlentry entry; /...

2019-11-20 09:13:42 154

原创 Redis-压缩表-ziplistPush详解

/* 将长度为slen的字符串s,头插或者尾插入压缩表zl中,where指示是头插还是尾插 */unsigned char *ziplistPush(unsigned char *zl, unsigned char *s, unsigned int slen, int where) { unsigned char *p; /* p保存插入位置 */ /* 如果是头插,即whe...

2019-11-19 09:04:54 226

原创 Redis-压缩表-__ziplistInsert详解

/* 将长度为slen的字符串s插入到压缩表zl的位置p处 */static unsigned char *__zipListInsert(unsigned char *zl, unsigned char *p, unsigned char *s, unsigned int slen){ size_t curlen = intrev32ifbe(ZIPLIST_BYTES(zl...

2019-11-18 21:20:01 637

原创 lua算术运算和关系运算metamethods

--[[说明1.以下使用的metamethod都是lua核心metamethod,使用的时候可以采用相应的操作符,如:__add可以解释成+。2.metamethod需要放在metatable中使用算术运算符对应的域:__add(+), __sub(-), __mul(*), __div(/), __unm(-负), __pow(^幂)关系运算符对应的域:__eq(==), _...

2019-07-19 17:20:07 333

原创 C 预编译、编译、汇编、链接简单实例

目录1.创建test.c文件2.预编译3.编译4.汇编5.链接6.错误运行7.错误解决8.正常运行1.创建源文件test.c#include <stdio.h>#define NUM 100int main() { // test this file printf("%s\n", "hello, world")...

2019-07-16 18:41:16 187

原创 NGINX HTTPS SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

目录1.nginx错误日志2.错误的nginx.conf配置3.请求4.正确的nginx.conf配置5.请求6.分析1.nginx错误日志2019/07/05 13:16:12 [error] 93333#0: *2597 SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_S...

2019-07-05 13:42:45 16630

原创 lua 字符串缓冲

--[[字符串缓冲]]-- 字符串拼接低效操作-- 读取整个文件的内容,保存在变量中local buff = ""for line in io.lines() do buff = buff .. line .. "\n"end--[[代码说明:1. io.lines()默认不读取换行'\n',所以在最后添加换行符2. lua里字符串是常量,即不可修改,当执行buff...

2019-06-05 13:07:33 339

原创 lua需要考虑数值溢出吗?

结论:不需要考虑在Programming in Lua 3rd 中文版中有这样一段描述:Lua使用双精度表示数字,(背景:在table构成的队列中执行插入操作,每右插入一个元素,队列中的下标加1)假定你每秒钟执行100万次插入操作,在数值溢出以前你的程序可以运行200年。...

2019-06-04 09:20:19 2215

原创 lua数组和链表

--[[矩阵和多维数组稀疏矩阵:矩阵的大部分元素都为空或者0]]-- 创建5*6的二维数组mt = {}for i = 1, 5 do mt[i] = {} for j = 1, 6 do mt[i][j] = 0 endend-- 创建5*6的二维数组mt1 = {}for i = 1, 5 do for j = 1, 6 do mt1[i * 6 + ...

2019-06-03 16:57:19 263

原创 lua数组

--[[数组1. 数组大小不固定,可以动态增长,但可以获得当前数组的元素个数2. 数组下标可以从任意值开始,若要使用标准库函数,数组下标必须从1开始,默认数组下标从1开始]]s = {1, 2, 3}print(table.getn(s)) -- Output: 3t = {1, 2, nil, 4}print(table.getn(t)) -- Output: 4t1 ...

2019-06-03 09:23:43 3629

原创 抓包理解X-Forwarded-For和proxy_add_x_forwarded_for

目录1.nginx.conf设置指令2.发送请求,无请求头域X-Forwarded-For3.发送请求,有请求头域X-Forwarded-For4.理解1.nginx.conf设置指令proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2.发送请求,无请求头域X-Forw...

2019-05-24 10:56:48 6173

原创 协同进程+过滤器实现生产者消费者

代码及注释如下,使用print函数打印值和行号,可以看到代码的运行路径--[[resume协程,如果协程执行的过程中调用yield函数,则resume函数返回yield的参数]]function receive(prod) local status, value = coroutine.resume(prod) print(value, debug.getinfo(1).cur...

2019-05-23 20:21:40 189

原创 协同进程实现生产者消费者

代码及注释如下,使用print函数打印值和行号,可以看到代码的运行路径--[[resume协程,如果协程执行的过程中调用yield函数,则resume函数返回yield的参数]]function receive(prod) local status, value = coroutine.resume(prod) print(value, debug.getinfo(1).cur...

2019-05-23 20:19:46 413

原创 初识协程

--[[协程(协同程序):有自己的堆栈,自己的局部变量,自己的指令指针,与其他协程共享全局变量。在多处理器的情况下,可以同时运行多个线程,但在指定的某一时刻只有一个协程在运行,并且这个正在运行的协程在指定的时候挂起。调用resume函数会将协程由挂起状态转为运行状态调用yield函数会将协程由运行状态转为挂起状态,并且协程会返回yield函数的参数]]co = corout...

2019-05-23 13:39:25 116

原创 pcall和xpcall

pcall--[[pcall返回的错误信息可以是代码执行的具体错误原因或者是error函数返回的错误信息pcall返回的错误信息原则是尽可能详细的描述错误原因]]function foo() a = 'a' + 1endlocal ok, err = pcall(foo)if not ok then print(err)endfunction bar() ...

2019-05-23 11:20:34 4441

原创 error指定错误等级

lua代码及解释脚本名称:pcall_3.lua--[[error:两个参数,第一个参数是错误信息,第二个参数是错误级别默认级别为10:表示不显示错误出现位置1:表示error函数调用的位置2:调用error函数的函数的位置3:依次类推]]function fun(str) if type(str) ~= "string" then error("strin...

2019-05-22 20:20:51 1313

原创 pcall

lua代码--[[pcall出现原因程序执行过程中可能会抛出异常,如果这个错误需要应用自己处理,使用pcall函数,避免抛出异常栈。pcall正常执行:返回true和被执行函数的返回值异常执行:返回nil和错误信息。错误信息不一定是一个字符串]]function bar() error("unknown")endfunction foo() --these tw...

2019-05-22 19:13:59 1905

原创 浮动IP

目录1.什么是浮动IP?2.如何配置浮动IP?3.一个网卡有多个IP地址时,IP层里的源IP地址如何选择?4.浮动IP的自动漂移,可以使用什么软件实现?5.HA实现自动漂移原理是什么?1.什么是浮动IP?https://blog.csdn.net/zengxiaosen/article/details/790586592.如何配置浮动IP?https://...

2019-05-22 16:56:08 569

原创 dofile、loadfile、loadstring

目录1.用法2.区别3.示例1.用法 dofile("filename") loadfile("filename") loadstring("lua statements")2.区别 dofile先编译,然后运行;loadfile只编译,不运行,编译之后返回一个函数,通过调用这个函数运行。 dofile出错会抛出错误信息,loa...

2019-05-16 21:18:52 372

原创 HTTPS

目录1. 什么是对称加密?2. 什么是非对称加密?3. 对称加密的私钥和非对称加密的公钥,如何传输给对方?4. 如何鉴别获得的私钥或公钥是合法的,非冒充的?5. HTTPS是如何工作的呢?6. 抓包查看握手过程是什么样的?1. 什么是对称加密?客户端和服务端有相同的密钥,通过这个密钥进行加密和解密。对称加密的问题是客户端和服务端如何约定这个秘钥,在约定秘钥的时候...

2019-05-14 19:59:33 163

原创 nginx模块和链接库

目录1. 查看可执行文件动态连接哪些动态链接库?2. nginx模块和链接库是什么关系?3. 如何将动态链接库静态编译进可执行文件?4. nginx如何选择编译模块?5. nginx如何编译第三方模块?1. 查看可执行文件动态连接哪些动态链接库?ldd 可执行文件如:ldd nginx (nginx在当前目录)2. nginx模块和链接库是什么关系?n...

2019-05-14 16:59:25 1238

原创 物理层和数据链路层

目录1. 谁先发谁后发的策略?2. 怎么知道包的目的地是什么?3. 如何判断数据传输的是否正确?4. 对于一个网络中的所有的机器,怎么知道IP对应的MAC地址呢?5. 集线器(hub)的转发策略?6. 交换机的转发策略?网络中的结点都有包发送到网络里,如果所有的结点都往网络里发送包,就会发生包的混乱。有多种算法可以解决谁先发谁后发的问题。所有的网络包都是通过物理层发送出...

2019-05-10 16:57:27 1564

原创 DHCP和PXE

目录1. 如何使用DHCP服务?2. Linux主机如何配置DHCP客户端服务?3. 什么是DHCP?4. DHCP的工作过程?5. 什么是PXE?1. 如何使用DHCP服务?路由器一般会开启DHCP服务,电脑需要开启DHCP client服务。2. Linux主机如何配置DHCP客户端服务?vim /etc/sysconfig/network-scrip...

2019-05-10 14:24:23 934

原创 ifconfig命令

目录1. net-tools和iproute2的区别?2. 如何查看机器IP地址?3. IP地址如何分类?4. 为什么会出现无类型域间选路?5. 什么是无类型域间选路?6. 公有IP地址和私有IP地址7. 如何获得公有IP、公网地址?8. 如何理解私有网络的出口地址?9. 如何理解ip addr的输出?1. net-tools和iproute2的区别?...

2019-05-10 09:39:16 414

原创 网络分层

目录1.网络为什么要分层?2. 什么是网络包?3. 什么是网口?4. TCP收到的所有的包都要给上层吗?5. TCP进行三次握手建立连接的时候,IP层和MAC层做了什么?6. 什么是二层设备?7. 什么是三层设备?1.网络为什么要分层?网络是由结点组成的,结点包括电脑,服务器,交换机,路由器等。这些结点上运行处理网络包的程序。这些程序比较复杂, 复杂的...

2019-05-09 18:53:06 159

空空如也

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

TA关注的人

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