自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

记录成长的博客

记录成长

  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 缓存IO与直接IO

顺便提一下,与O_DIRECT类似的一个选项是O_SYNC,后者只对写数据有效,它将写入内核缓冲区的数据立即写入磁盘,将机器故障时数据的丢失减少到最小,但是它仍然要经过内核缓冲区。在 Linux 的缓存 I/O 机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间(用户空间)。读操作:操作系统检查内核空间的缓冲区有没有需要的数据,如果已经缓存了,那么就直接从缓存中返回,也就是将数据复制到应用程序的用户空间;在一定程度上分离了内核空间和用户空间,保护系统本身的运行安全;

2024-05-22 02:13:34 158

原创 skynet框架学习

它是一个轻量级游戏服务器框架,但也不仅仅用于游戏。轻量级体现在:skynet抽象了actor并发模型,用户层抽象进程;sknet通过消息的方式共享内存;通过消息驱动actor运行,以及相关的脚手架(工具集):actor 间数据共享机制以及c 服务扩展机制。实现了服务器框架的基础组件。实现了 reactor 并发网络库;并提供了大量连接的接入方案;基于自身网络库,实现了常用的数据库驱动(异步连接方案),并融合了 lua 数据结构;实现了网关服务;时间轮用于处理定时消息。

2024-05-19 20:23:28 568

原创 OPENSSL-PKCS7入门知识介绍

数据(data):明文打包type为NID_pkcs7_data,ASN1_OCTET_STRING类型,即为简单的ASN1_STRING数据类型。签名数据(sign):把数据以及签名值打包,其中包括签名者的证书,CRL等,目的为确定发送者的身份。type为NID_pkcs7_signed。PKCS7_SIGNED类型的数据,PKCS7_SIGNED定义如下:/* version 1 */ //版本/* md used */ //摘要算法/* [ 0 ] */ //签名证书。

2024-02-25 16:20:08 1480 1

原创 LUA学习

当一个协程运行结束时,主函数所返回的值都将变成对应函数resume的返回值。(7)Lua语言提供的是所谓的非对称协程,也就是说需要两个函数来控制协程的执行,一个用于挂起协程的执行,另一个用于恢复执行。函数create 用于创建新协程,该函数只有一个参数,即协程要执行的代码的函数(协程体)函数create返回一个"thread"类型的值,即新协程。Lua中的栈有两排索引,正数1索引的位置在栈底,负数索引-1在栈顶,这样做的好处是不需要知道栈的大小,只需要查找正负索引1的位置就能确定栈顶和栈底的位置。

2024-02-25 16:19:05 959

转载 LevelDb

说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。,Google大规模分布式平台Bigtable和MapReduce主要设计和实现者。,Google大规模分布式平台GFS,Bigtable和MapReduce主要设计和实现工程师。

2024-01-07 18:20:18 53

原创 PKCS7签名代码

2023-08-21 21:22:41 437

原创 C++新特性

a、右值引用所引用的临时对象可以在该临时对象被初始化之后再次修改(这是为了允许move语义),即在右值引用被初始化后,可以使用左值或者左值引用改变右值引用所引用的临时对象的值。换一种说法就是,std::move() 将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。2、右值:可读的、引用的是某一个对象指向的地址中的数据、通常位于赋值运算符的右边、取出值赋给其他变量。b、能使用右值引用初始化给左值引用(即左值引用绑定到右值引用指向的对象),

2023-05-21 22:23:24 87

原创 C++虚函数表

为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。

2023-05-21 22:21:43 304

原创 线程池代码分析

编译命令 gcc -g -o thread_pool_active thread_pool_active.c -lpthread。在github上看到这个代码,就down下来研究了一下。

2023-05-21 19:29:17 77

原创 log4clpus简单测试和配置文件说明

也可以控制logger名称的显示层次,比如"%c{1}“时输出"logger”,其中数字表示层次。格式对齐,比如"%-10m"时表示左对齐,宽度是10,当然其它的控制字符也可以相同的方式来使用,比如"%-12d","%-5p"等等。“%D”,显示本地时间,比如:“2021-06-30 18:55:45”,%d显示标准时间。“%l”,输出当前记录器所在的文件名称和行号,比如"main.cpp:51"%S – 表示当前时刻的多少秒(0-59),如"32"“%L”,输出当前记录器所在的文件行号,比如"51"

2022-10-16 20:21:04 1372

转载 C++智能指针

std::weak_ptr没有重载操作符*和->,因为它不共享指针,不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的主要作用就是作为一个旁观者监视shared_ptr中管理的资源是否存在。std::unique_ptr是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr。通过一个weak_ptr对象构造了一个可用的weak_ptr实例对象。

2022-10-07 01:16:20 3953

转载 RPC、gRPC的原理、架构、调用过程,特性

随着系统复杂度的增加,我们不得不将一个大的应用拆分为多个服务,这种拆分既包括水平方向拆分(按照功能模块拆分),也包括垂直方向拆分(按照应用所处的层拆分)。RESTful通常使用 http+JSON 或 XML 的格式传输信息,而gRPC采用protobuf传输信息,proto会提供更严格的接口约束条件,安全性更高,对于高并发的场景更适用。由调用方提供要调用的方法,对方网络地址,端口。(2)客户端存根在收到调用后,负责将被调用的方法名、参数等打包并编码成特定格式的能进行网络传输的消息体。

2022-10-06 01:11:25 515

原创 Mysql事务与锁

当一个事务里包含多条insert语句时,先执行一条insert,更新数据到缓冲池,然后写日志缓冲(redo log buffer),然后再执行第二条insert,更新数据到缓冲池,然后再写日志缓冲,等所有的insert语句的日志缓冲都写完了,再把日志缓冲写入到redo log file,此时 redo log 处在 prepare阶段。该隔离级别下读取历史版本的最新数据,所以读取的是已提交的数据;在读提交和可重复读两种事务隔离级别下,普通的SELECT操作使用“快照读”,不会对数据加锁,也不会被事务阻塞。

2022-09-07 23:54:31 203

原创 Mysql索引原理及优化

索引分类主键索引、唯一索引、普通索引、组合索引、以及全文索引(elasticsearch);主键索引: 又叫做非空唯一索引,一个表只有一个主键索引 PRIMARY KEY(key),唯一索引:不可以出现相同的值,可以存在一个或者多个NULL值;普通索引:允许出现相同的索引内容;组合索引:对表上的多个列进行索引:约束与索引的区别 :创建主键索引或者唯一索引的时候同时创建了相应的约束;但是约束时逻辑上的概念;索引是一个数据结构既包含逻辑的概念也包含物理的存储方式;

2022-08-22 00:06:50 253

原创 Mysql简单知识

找到mysql启动时读取的配置文件,mysql支持远程登录访问。MySQL体系结构图如下。mysql服务启停命令。

2022-08-21 16:29:50 244

原创 CMAKE

谷歌

2022-08-14 20:43:15 121

原创 Protobuf编码解析

/服务前缀,包名,防止冲突// 家庭电话// 工作电话}//服务前缀,包名,防止冲突//这里包含了别的proto文件//optimize_for是文件级别的选项,Protocol Buffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME//缺省情况下是SPEED。//SPEED: 表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。............

2022-08-14 20:18:35 1435

原创 Linux死锁检测

死锁是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待的现象. 例如: A线程占有1号锁,B线程占有2号锁, 当A想进一步获取2号锁, B想获取1号锁. A.B线程都进入等待对方释放锁的等待中, 造成了死锁.(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。业务无法正常处理, 业务日志输出不完整.如何检测程序中是否存在死锁呢? 如果我们能在加锁的时候把线程id和互斥锁做一个绑定, 在解锁的时候做一个解绑定, 用一个线程去实时检测是否出现两个线程绑定到对方

2022-06-04 11:39:45 1412 1

原创 用户态协议栈的简单实现

零拷贝: 是指cpu指令没有参与数据链路层里面传输的数字信号(0,1)物理层是指光纤或者双绞线中传输的光信号或者电信号网卡的作用:把光电信号转成数字信号(上行) 把数字信号转成光电信号(下行)网络抓包的实现方式raw_socketnetmapdpdkIP层数据包截图首部长度代表的是IP数据报头部的长度,即图中固定部分的长度。图中每行是32bits(即4字节),图中标识的固定部分总共有5行,所以IP首部最小是20个字节(5行*4字节每行=20字节)首部长度是4bit

2022-01-19 15:51:58 302

原创 ORACL数据库 LOAD DATA 命令

#!/bin/bashset -o errexitecho "LOAD DATA INTO DB"file_name="LOAD_DLDY"inputsql="load data infile 'dldy.txt' append into table CJ_DYDLQX_KFK fields terminated by X'09' trailing nullcols(YXDNBBS,SJSJ \"case when :SJSJ <> 'NULL' then to_date(:SJ.

2021-08-08 17:24:30 197

原创 go环境配置

go的异常控制流程:defer、panic和recoverDeferdefer语句会将函数推入到一个列表中。同时列表中的函数会在return语句执行后被调用。defer常常会被用来简化资源清理释放之类的操作。

2021-06-09 15:23:01 1773

原创 电力线损相关知识

线损分为变电站损,线路损,台区损,等等. 目前接触到的就是线路损和台区损需要理解下面几个专业名词:供电量:供电量指通过电力上网通过变电站输送给用户的总电量(包括传输中的电力损耗)。售电量: 用户册电表所计算的得到的电量,即用户市实际的用电量。上网电量,落地电量 这两个电量是对应发电厂的:上网电量可以理解为发电厂向电网输送的电量;落地电量可以理解为发电厂送出的在电网公司输入关口的电量,可以理解为发电厂净送电量,也可以称为电网公司的购电量;供电量,售电量,购电量三个电量是对应电网公司

2021-05-13 13:11:10 4954 5

原创 proc编程 变量里出现空格 ORA-12899

#include<stdio.h>#include<string.h>exec sql include sqlca;exec sql include oraca;int main(void){ exec sql begin declare section; char userpwd[40] = "xDB"; int id; char t...

2020-03-18 11:29:32 274

原创 shell 定时 关闭进程服务

#!/bin/bashprocess_name=(ck_Ack_B ck_Cck_D)while truedoDate=$(date "+%Y-%m-%d %H:%M:%S")Time="20:59"time=$(date "+%H:%M")if [ "$Time" = "$time" ];then for var in ${process_name[@]} do...

2020-03-07 23:49:53 1009

原创 C++内存检测

1.valgrind的安装使用1.1 简介Valgrind是linux环境下开发应用程序时用于内存调试和性能分析的工具集,其中Memcheck工具可以用来检查C/C++程序中的内存操作错误。本文列举了几种常见的内存操作错误以及Memcheck工具的检测结果,其中包括以下几种类型:使用未初始化的内存内存读写越界内存覆盖读写已经释放的内存内存泄露无法检测出静态内存越界的问题(如...

2019-11-18 16:13:31 1045

转载 HTTPS-透彻学习汇总

转载!!!!!!!!!!配合这边文章《看完还不懂 HTTPS 我直播吃翔》学习效果更佳!一、SSL的作用  不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。窃听风险(eavesdropping):第三方可以获知通信内容。篡改风险(tampering):第三方可以修改通信内容。冒充风险(pretending):第三方可以冒充他人身份参与通...

2019-07-07 00:38:55 164

转载 花10分钟看一看少走30年弯路

原文链接: www.cnblogs.com/L-hq815/archive/2012/03/20/2407306.html如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个“茫”人了。如果你看完了,你觉得这篇文章只是讲讲大道理,说明你的人生阅历还不够,需要你把这篇文章珍藏,走出去碰几年壁,头破血流后再回来,再读,你就会感叹自己的年少无知。如果你看完了,觉得很有道理,然后束之高...

2019-07-07 00:38:13 109

转载 http简单介绍

转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspxAuthor :Jeffrey引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化...

2019-07-07 00:35:33 305

原创 结构体与联合体面试题

结构体对齐的作用和原因:各个硬件平台对存储空间的处理上有 很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种 架构下编程必须保证字节对齐,其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些 平台每次读都是从偶地址开始,如果一个int型(...

2019-07-06 17:07:29 653 2

原创 PPPoE抓包分析

这个周为了解决一个PPPoE的问题,自己专门研究了一下PPPoE,通过抓包文件来详细的说一下在wireshake中使用"pppoed || pppoes"来过滤其他无关的包,以免干扰分析.PPPoE 可以分为 发现阶段和绘话阶段(LCP,CHAP,NCP(IPCP,BCP,IPV6CP))发现阶段:PADI:Destination,Source,Type 属于以...

2019-03-30 18:55:28 12030 2

原创 Mysql数据库常见的操作

1 数据库服务的启动,停止,重新启动1、使用 service :service mysqldstart/stop/restart2、使用 mysqld 脚本:/etc/inint.d/mysqldstart/stop/restart3、 mysqladmin shutdown使用service命令启动mysql, 其实service调用的是/etc/init.d/目录下的相应的脚...

2019-03-17 23:05:17 110

PPPoE抓包文件

PPPoE抓包文件来分析PPPoE交互

2019-03-30

空空如也

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

TA关注的人

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