自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Go json 特殊字符转换(2019.10.24)

Go的 < > &等特殊字符转为Json串时会因为为了避免被识别为Html文本(<和>) 会进行特殊转码,所以在生成json串后,可以自行转换msgBytes = bytes.Replace(msgBytes, []byte("\\u003c"), []byte("<"), -1)msgBytes = bytes.Replace(msgBytes,...

2019-02-07 22:58:10 502

原创 Flate压缩(2019.10.23)

func main() { buf := bytes.NewBuffer(nil) //新建一个buffer缓存区: flateWriter, err := flate.NewWriter(buf, flate.BestCompression) if err!=nil { fmt.Println("new writer error"+err.Error()) return }...

2019-02-01 22:01:45 596

原创 Go reflect(2019.10.22)

Golang的反射reflect深入理解和示例[TOC]Golang的反射reflect深入理解和示例【记录于2018年2月】编程语言中反射的概念在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应...

2019-01-30 17:54:17 106

转载 五海盗问题

https://www.jianshu.com/p/ab2f71802733

2019-01-26 20:43:46 255

原创 Cmake

https://www.cnblogs.com/cv-pr/p/6206921.html

2019-01-24 23:36:52 69

原创 Serverless

Serverless旨在帮助摆脱传统的C/S环境中对进程运行环境的管理,更加注重函数逻辑的实现。Serverlss:无服务器架构。无服务器并不是指的真的没有服务器,而是指由第三方维护数据库、消息、身份验证等,我们只需要调api就行。Serverless分为Baas和Faas。Baas后端即服务, 将原来在server端实现的一些逻辑打包给第三方传统的架构:我们需要有...

2019-01-22 15:23:21 79

原创 Systemtap执行步骤与原理

执行步骤将stap脚本转换成语法解析树 没理解 将解析树转换成C源码 构建内核模块。并且stap将控制权转交给stapio和staprun stapio和starun将模块安装到内核,并将结果输出。参考资料https://www.ibm.com/developerworks/cn/linux/l-systemtap/index.html...

2019-01-21 14:37:49 499

原创 进程地址空间

地址空间内核空间占据1GB,是所有进程共享的。用户空间最多3GB,每个进程独占。所以从进程的角度来看,每个进程都有4GB的地址空间。不过这个地址是虚地址,内核会建立虚地址到实际地址的映射。参考资料:http://os.51cto.com/art/201005/199799.htm ...

2019-01-21 12:19:34 82

原创 符号表

定义提供内核地址到符号信息的映射,内核是使用地址进行运作的,并不会使用符号,符号只是用于调试用。文件 /boot/System.map:nm vmlinux生成的固定文件/proc/kallsyms:供oops使用,根据内核情况动态更新 参考资料:符号表:https://blog.csdn.net/wuyongpeng0912/article/details/467...

2019-01-21 11:26:51 505

原创 算法模板

结构体排序结构体外/** * Definition of Interval: * class Interval { * int start, end; * Interval(int start, int end) { * this->start = start; * this->end = end; * }...

2019-01-19 15:54:09 56

原创 git 补丁

 使用场景           代码已经完成开发,等待编译上线,但是依赖的库存在问题,我们就可以自行在本地修改库代码,在编译时打上这个补丁,编译结束后再把代码还原来解决 原理图依赖库文件a.cpp存在bug,我们修改bug后的版本后a_modify.cpp生成补丁文件项目读入补丁文件此时项目没有错误了,我们执行编译编译结束后,还原项目文件参考资料...

2019-01-18 19:38:29 288

原创 Go路径设置

GoROOT:Go的安装目录GoPATH:约定有三个子目录src:存放源代码目录 pkg:存放中间文件 bin:存放可执行文件假设当前为/home/project/src/main.c则GoPATH设为:/home/project/os.OpenFile("src/main.c")...

2019-01-17 15:31:53 675

转载 vmlinuz文件解压缩

[root@centos boot]# od -t x1 -A d vmlinuz | grep "1f 8b 08"0013408 ff e0 1f 8b 08 00 ea 80 b9 52 02 03 ec 5b 7f 74[root@centos boot]# dd if=vmlinuz bs=1 skip=0013410 | zcat > vmlinux gzip: ...

2019-01-16 20:32:44 844

原创 信号量

semget(key_t key, int num_sems, int flags) key_t信号量的key,num_sems信号量的值,flags,IPC_CREAE,当信号量不存在时则新建信号量 semctl((key_t key, int num_sems,int command...)信号量控制信息,最后一个参数可以是:SETVAL:设置一个信号量值IPC_RMID:删除一个无需...

2019-01-12 23:48:51 48

原创 进程终止信号

SIGTERM:进程终止信号,进程可以阻塞一段时间,完成I/O或释放资源后再退出 SIGKILL:进程终止信号,进程收到后立即退出(不可捕获) SIGINT:只能终止前台进程(ctrl+c) SIGSTOP:使进程暂停(不可捕获) SIGQUIT:进程退出并产生core文件 SIGHUP:终端退出时,由该终端所起的进程收到该信号,默认终止进程。...

2019-01-12 22:11:15 297

原创 Linux 命令详解

ps aux USER        PID                %CPU              %MEM              VSZ                RSS                             进程属主   进程id   占用cpu百分比     占用内存百分比     虚拟内存量    要使用的页的数量     TTY     ...

2019-01-12 10:13:33 58

原创 Linux 共享内存实现

参考资料:https://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html/*-------------map_normalfile1.c-----------*/#include <sys/mman.h>#include <sys/types.h>#include <fcntl.h&g...

2019-01-02 00:22:46 398

原创 Redi集群

节点集群维护节点维护一个clusterState结构体,其中含有nodes数组指针,指向的每个元素就是集群中的每个节点,同时改结构体中的myself指针指向本节点Meet命令实现向A节点发送MEET B命令后,A将在clusterStats中为B创建相应结构,之后与B进行握手,B将读取A发送来的信息命令,并回复给A pong,A收到后再回复给B一个ping,之后A再将B通过Gossip...

2019-01-01 13:15:37 76

原创 MySQL技术内幕:5:索引与算法

树二叉查找树:左子树都比中间节点小,右子树都比中间节点大。弊端:可能导致树退化成线性 AVL树:满足二叉查找树,并高度差不大于一。弊端:需要左旋和右旋来维护,代价较大 B+树:所有数据都存放在叶子节点,叶子节点间通过双向链表连接。通过节点的旋转和拆分维护。而且高度较低,保证了较少的IO...

2018-12-30 15:42:38 72

原创 内核文件

参考:https://blog.csdn.net/gatieme/article/details/48918399内核文件vmlinux:编译出的最原始内核文件,无压缩 zImage:vmlinux经过gzip压缩之后的文件 bzImage:类似zImage,但是适用于比较大的内核 initrd:引导硬件读取zImage的程序 uImage:zImage前面加个0x40长度的tag...

2018-12-29 19:25:38 99

原创 内核文件

参考:https://blog.csdn.net/gatieme/article/details/48918399内核文件vmlinux:编译出的最原始内核文件,无压缩 zImage:vmlinux经过gzip压缩之后的文件 bzImage:类似zImage,但是适用于比较大的内核 initrd:引导硬件读取zImage的程序 uImage:zImage前面加个0x40长度的tag...

2018-12-29 19:25:10 53

原创 内核构建过程

内核文件vmlinux:编译出的最原始内核文件,无压缩 zImage:vmlinux经过gzip压缩之后的文件 bzImage:类似zImage,但是适用于比较大的内核 initrd:引导硬件读取zImage的程序 uImage:zImage前面加个0x40长度的tag,适用于U-boot vmlinuz:指向zImage或bzImage的链接...

2018-12-29 19:24:07 235

原创 内核包说明

kernel-header:提供内核头文件、Kconfig(内核配置文件)和Makefile kernel-devel:如果某个某个驱动需要编译一个放在内核里运行的模块,编译这个模块就需要内核的头文件、配置文件、Makefile kernel-source:包含所有内核源代码如果只是自己编写的模块开发的话:因为只要引用内核的头文件,所以只要devel包即可。如果要修改现有的内核源代码并重...

2018-12-29 15:59:31 247

原创 cgroups

参考:https://tech.meituan.com/cgroups.html使用场景     限制进程对cpu、mem等资源的使用,比如限制某个进程在八核机器上最多使用六核Cgroups子系统cpu子系统:限制进程的cpu使用率 cpuset子系统:为进程分配单独的cpu节点或者内存节点 memory子系统:限制进程的mem使用率 devices子系统:限制进程能够访问哪...

2018-12-24 23:39:19 268

原创 Linux磁盘管理

df第一列显示#dfFilesystem 1k-blocks Used Available Use% Mounted on/dev/hda5 381139 332921 28540 93% //dev/hda1 46636 6871 37357 16% ...

2018-12-24 23:09:12 36

原创 I/O复用

使用场景用户需要同时处理多个I/O时,比如同时需要等待磁盘I/O和网络I/O当某个I/O完成,就通知应用进程进行相应的读写操作优势系统不需创建新的进程线程Select调用:调用select后,进程阻塞,直到描述符就绪返回:遍历fdset来找到就绪的描述符缺点:单个进程能打开的描述符个数有一定限制Poll与select没有本质区别,因为是基于链表存储,所以没有...

2018-12-23 14:42:32 55

原创 go dns解析

package mainimport ( "net" "fmt" "os")func main() { ns, err := net.LookupHost("www.baidu.com") if err != nil { fmt.Fprintf(os.Stderr, "Err: %s", err.Error()) return } for _, n := ...

2018-12-20 21:00:29 301

原创 Lua执行原理

执行流程首先读取lua文件,经过词法、语法分析生成指令后,入栈之后等Lua虚拟机解释执行

2018-12-13 21:46:11 970

原创 Lua闭包

概念闭包是由一个函数和该函数会访问的非局部变量组成。非局部变量是指既不是全局变量也不是函数内的局部变量,而是外层嵌套函数的局部变量。若一个闭包没有会访问的非局部变量,则是函数 闭包与函数区别Lua编译一个函数时,会生成一个原型,里面包括函数体需要用到的常量值、函数体对应的虚拟机指令和一些调试信息在运行时,每当lua执行到一个function...end时,就会创建一个新...

2018-12-13 11:39:29 58

原创 Redis持久化

持久化过程客户端向服务端发送写操作(数据在客户端内存中) 服务端接收到请求(数据在服务端内存上) 服务端调用write系统调用,准备写往磁盘(数据在系统内存缓冲区) os将数据从内存缓存转移到磁盘控制器上(数据在磁盘缓存上) 磁盘控制器将数据写到磁盘上(数据在磁盘上)RDB持久化定义:在指定的时间间隔内将内存中的数据集快照写入磁盘原理:到时后redis调用一个子进程劣势:...

2018-12-11 00:31:28 64

原创 Go interface

定义Interface是一种类型:type I interface {          Get() int}interface是一种具有一种方法类型,任何一种类型(string、int)等都实现了空interface{}如果一个类型实现了一个interface中的所有方法,我们说该类型实现了该interface{}...

2018-12-11 00:12:49 53

原创 Go 容易踩的坑

defer函数延迟执行,但是会在return执行前, for _,stu := range  stus;stu是进行的值拷贝 go的map是并发不安全的,读和写都要加锁 go中没有继承的概念,只有组合,调用哪个方法由调用对象决定参考:https://yushuangqi.com/blog/2017/golang-mian-shi-ti-da-an-yujie-xi.html...

2018-12-09 00:42:08 69

原创 深入理解Nginx 第8章:nginx基础架构

Nginx性能指标吞吐量(带宽指的是单个连接的吞吐量) 单次请求的延迟性 网络效率:长连接减少建立、关闭连接的成本,压缩算法增加信息携带量Nginx  模块设计NGX_CONF_MODULE:唯一只有一个模块(ngx_conf_module)的模块类型 NGX_CORE_MODULE:核心模块,包括ngx_core_module,ngx_errorlog_module,ngx_ev...

2018-12-08 16:09:20 110

原创 drop、delete、truncate区别&数据库范式

delete删除是删除表中的一行 drop是删除掉整个表 truncate,是将表恢复到刚创建时的初始状态truncate和delete只删除数据,drop是删除数据个结构第一范式:必须有主键,且每列不可再分 非主键字段完全依赖主键,不能出现部分依赖 消除冗余 ...

2018-12-06 17:58:05 76

原创 cpu使用率统计

总的cpu使用率统计cat /proc/stat得到(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组cpu从启动至今总的时间:totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen  +  guest...

2018-12-05 14:57:09 938 1

原创 Redis、memcache对比

Memcache简介Memcache是高性能的分布式内存缓存服务器,在内存中缓存数据和对象来减少读取数据库的次数。通过缓存数据库查询结果,减少数据库访问次数。Memcache工作方式用户请求Memcache,若Memcache命中,则直接返回给用户 否则Memcache请求DB,通过DB返回请求数据的同时,把数据缓存到Memcache一份 当DB中的数据变化时,Memcac...

2018-12-03 23:12:54 70

原创 C++ 函数

exec(const char* pathname, char* const argc[])  运行pathname对应的可执行程序,并且把argc当作参数来运行它 char* fgets(char* buf, int bufsize, FILE* stream)  从stream读取bufsize-1个字节到buf struct hostent* gethostbyname(const ch...

2018-12-03 17:31:41 58

原创 Zookeeper特点

Zookeeper在读多写少的场合有非常好的性能表现 Zookeeper将数据存储在内存中,从内存中读取数据不需要磁盘I/O,速度非常快 Zookeeper放弃了强一致性要求,允许数据经过一个时间窗口达到一致。Zookeeper文件系统ZK为了保证低延时,在内存中维护了文件树结构,这个树结构中,只有叶子节点才能存放数据,ZK规定每个叶子节点只能存储1M的数据。这个特性决定了ZK只能存储少...

2018-12-03 00:45:51 712

原创 MySQL事物级别

事务基本要素原子性:事务要么成功,要么中间失败回滚到操作之前的状态 一致性:A向B转钱,不可能B没收到 隔离性:对于某数据,在一个时刻只能有一个事务在操作 持久性:事务完成后,事务对数据库的所有操作将将被保存到数据库,不能回滚事务并发问题脏读:事务A读取事务B更新的数据,然后B回滚操作。 不可重复读:在一个事务的多次查询中出现数据不一致。这可能是在查询过程中插入了对原有数据的更新...

2018-12-02 10:53:05 141

原创 Redis集群实现原理

概念Redis集群是由多个redis实例组成的一个分布式系统,数据按照slot存储分布在多个redis实例上,通过Gossip协议实现节点之间的通信。功能特点1)所有节点相互连接2)集群通过集群总线通信3)集群节点与节点之间通过二进制协议通信4)客户端和集群节点之间依然是通过文本协议通信5)集群节点挂掉会自动故障迁移6)可以扩缩容节点新节点是如何加入集群的当...

2018-12-01 00:18:01 1615 1

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