自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 基于libevent和openssl实现的https 的服务端(c++)

2.此处因为封装为类,故将回调函数设置为静态。如有需要回调函数返回值,可用类成员变量存储,调用回调函数时传入this指针,以此将返回值带出,需将获取返回值的函数阻塞。防止获取返回值时,回调函数还未返回。4.此时openssl库用的较低版本libssl.so.1,libevent库用的大约2.0或2.1版本。1.ssl的初始化整个进程只需执行一次,请勿多次初始化。谨防析构函数多次析构ctx。3.密钥等需自行生成。

2023-05-26 15:58:22 1015

原创 基于libevent和openssl实现的https客户端

【代码】基于libevent和openssl实现的https客户端。

2023-05-17 11:29:55 530

转载 龙芯配置go环境,需要两台机器,一台x86,一台mips

https://www.loongson.cn/newsDetails/2092

2022-10-19 16:43:22 277

原创 docker部署项目流程(项目含nodejs,go及python)

docker部署nodejs,go,python项目大致流程

2022-08-19 10:47:29 911

原创 go定时器实现

golang定时器

2022-06-24 15:39:15 158

原创 golang发送get,post请求

绕过tlsGet:func Get(url string) string { //tr := &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} //client := &http.Client{Transport: tr} client := &http.Client{} resp, err := client.Get(url) if err != nil { lo

2022-04-25 10:50:45 1024

原创 go调用系统命令(管道)

func runCmdbyGrep(cmdStr string) string { cmd := exec.Command("bash", "-c", cmdStr) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err := cmd.Run() if err != nil { return stderr.String() } else { ret

2022-04-25 10:25:32 2751

原创 vscode实现windows上go调用c函数时,对c静态库的环境配置

vs2017,go,c,cmakelist

2022-03-04 16:42:29 347

原创 cmakelist

PROJECT(deploy)# PROJECT(SendAlarm)cmake_minimum_required(VERSION 3.0)set(CMAKE_CXX_STANDARD 17)find_package(CUDA)find_package(OpenCV REQUIRED)find_package(Boost REQUIRED filesystem thread regex)find_package(jsoncpp REQUIRED)set(ARCH ${CMAKE_SY

2021-12-21 10:57:57 62

原创 读取.yaml文件和json文件

yaml文件: auto label_cls = YAML::LoadFile("label.yaml"); std::vector<std::string> m_label_cls; if (label_cls["label"]) { m_label_cls = label_cls["label"].as<std::vector<std::string>>(); } 取为.yaml数据时类型: .as<boo

2021-12-15 15:58:43 611

原创 对于锁的认识

1.锁建议在保护资源时使用。2.控制线程异步之类的逻辑时,不建议使用锁,有可能导致死锁的情况。建议设计思路时考虑到同步异步的情况3.嵌套锁慎用,易发生死锁

2021-12-15 15:23:44 336

原创 对类内静态函数的理解

1.不用生成对象就可以直接调用2.不能操作类内成员变量(没有this指针)3.类内静态函数作用域在类内,普通静态函数作用域在本文件4.智能指针可以指向类,然后访问类内静态函数;也可直接类名::静态函数名5.静态成员(类内类外)生命周期在整个进程,main函数初始化内存,程序结束销毁...

2021-12-15 15:20:46 399

原创 类内const成员变量只能在初始化列表里赋值(有效赋值)

类内成员变量(有效)赋值两种:1.初始化列表赋值2.设置成静态的,在类外赋值原本想的在构造函数中给const类成员赋值,编译错误。思考大体原因:1.构造函数在某种意义上还是可以理解为类已经生成好了,编辑器内部仅调用一次,此时const如果赋值,违背了const常量的语法意义2.初始化列表可以,个人理解为初始化列表的执行顺序在构造函数之前,相当于类还未完全生成好。(总觉得像历史遗留原因,二胎???)3.类内定义时如果给const成员变量赋值,会导致每个对象的此const成员变量均为给定的值。

2021-12-15 14:29:49 1164

原创 智能指针定义

shared_ptr的定义std::shared_ptr<数据类型> ptr = std::make_shared<数据类型>();智能指针类型的数组定义

2021-12-15 11:47:38 465

原创 缓冲区c++实现

链表缓冲区实现

2021-12-15 11:22:18 1048 3

原创 使用boost库在一个类中实现定时器及回调函数的调用C++

此处先等30s,再调用函数ManagerTaskCore类的定义:#include <string>#include <list>#include <mutex>#include <condition_variable>#include <boost/asio.hpp>#include <boost/bind.hpp>#include <boost/asio/steady_timer.hpp>class T

2021-11-01 14:37:10 681 1

原创 C++实现ffmpeg,h264编码,rtsp取流,从流中取包至自定义的缓冲区,在缓冲区中挑选所需要的连续的帧封装为mp4

大体思路如下:将流中的packet取出统一存储至缓冲区,为了方便在缓冲区里摘取需要的连续的包,在存储时定义一个帧号,随包一块存入,为了方便查询,这里使用链表作为存储区,随后在缓冲区里依照帧号取出packet进行封装,这里要注意时间戳。第一步:确认网络视频文件可以打开,确认视频文件中有流void videoManager::openFile(const std::string& in_filename){ av_register_all(); avformat_network_

2021-09-13 18:21:16 2148 1

原创 windows加用户

vscode进行远程开发时,需要配私钥,发现windows的用户名为hp,与服务器上用户名不同,ssh无法连接。后续发现显式的更改windows账户名,ssh私钥不生效。最简单的方法仍旧是增加新用户,操作方法如下:打开windows的cmd,以管理员权限运行:输入命令$ net user 用户名 密码 /addnet localgroup administrators 用户名 /add...

2021-09-13 17:59:29 312

原创 数据库之事务

事务:InnoDB下,一组特定SQL语句的集合A:原子性 要么全部执行,要么全部失败C:一致性 事务执行前后,完整性约束不变I:隔离性 事务之间的相互影响D: 持久性 事务执行的结果在磁盘上永久保存阐述:先从隔离性说起并行的情况下:当没有隔离性的时候,A事务执行过程中假设delete执行错误,那么会发生事务回滚,工资又变成了5000,B之前拿到的8000就相当于一个错误的数据,这个过程叫脏读B事务执行时读取不到A执行过程中结果,只能在A执行之前的读取磁盘的结...

2020-09-23 15:07:16 66

原创 数组元素的删除

数组里重复元素的删除,或者剔除某个元素 本质上都是数组后面元素将前面元素的覆盖双指针在此处最常用

2020-09-23 15:06:41 194

原创 socket API

TCP网络通信:1.IP地址(将消息发送到对方的机器上)+端口号(数据交给某个进程/应用程序进行解析)==标识某台主机的某个进程2.一个进程可以绑定多个端口号(多线程),一个端口号不能被多个进程绑定3.多字节数据相对内存地址有大端小端之分。要求:发送主机发到缓冲区的数据按内存地址从低到高的发送(大端),接收主机接收数据至缓冲区时(大端),网络数据流低地址高字节(大端)0x1234abcd --->0x0000大端:0x12 0x34 0xab 0xcd小端:0xcd 0xa

2020-09-23 15:02:57 89

原创 程序员的自我修养笔记(一)

一..牵扯到“计算”这个概念的都可以成为计算机,我们研究的主要是兼容x86指令集的32位CPU个人计算机。1.早期:CPU和内存的频率差不多,连接在同一个总线上。 I/O设备效率低,为了协调I/O设备和总线之间的速度,所以有了I/O控制器早期:CPU速率提升,内存跟不上CPU速度,内存和新产生的系统总线速率一致,CPU和系统总线进行通信。中期:图形化操作系统的产生使慢速的I/O总线无法满足这个需求,产生了处理高速的北桥和处理低速的南桥芯片后期:CPU的速率被制造工艺束缚,无法突破4GHZ

2020-08-14 10:33:59 264

原创 设顺序表va 中的数据元素递增有序。试写一算法,将x 插入到顺序表的适当位置上,以 保持该表的有序性。

sqlist.h#pragma once#include<stdio.h>typedef int Elemtype;typedef struct Sqlist{ Elemtype* elem; int length; int listsize;}Sqlist,*PSqlist;#define INIT_SIZE 10void InitSqlist(PSqlist ps);bool Insert(PSqlist ps,Elemtype x);...

2020-08-07 16:40:34 2808

原创 数据结构之排序

冒泡排序:相邻两两比较,大的向后难度:低时间复杂度:O(n^2) 最好情况 O(n) 空间复杂度:O(1) 贼几把稳定6 0 3 2 4 1--》0 6 3 2 4 1--》0 3 6 2 4 1--》0 3 2 6 4 1--》0 3 2 4 6 1--》0 3 2 4 1 60 3 2 4 1 6--》0 2 3 4 1 6--》0 2 3 1 4 6void BubbleSort(int *arr,int len)//稳定,O(n^2),最好O(1),稳定,空间跳...

2020-08-03 18:06:54 145

原创 STL

1.容器类:1.顺序容器vector list deque2.关联容器set mult+set map mult+map3.容器适配器stack queue priority_queuevector 数组(随机访问迭代器)1.简单操作push_back insertpop_back erase2.底层实现数组(动态开辟)3.扩容方式以倍数的形式开辟更大的内存,旧的数据拷贝...

2020-07-30 18:29:42 102

原创 实模式和保护模式 虚拟地址空间布局

实模式:物理地址:A的恶意程序 指针+偏移 修改其他程序的指令或者数据,恶意篡改其他程序的目的保护模式:80386 x86体系虚拟地址:地址+偏移 在虚拟地址空间内3.虚拟地址空间的布局...

2020-07-30 16:04:03 146

原创 C/C+的区别之函数重载

两个数相加的泛型:C:#define Sum(a,b)(a+b)int main(){int a=10;int b=20;int rt=Sum(a,b);double rt2=Sum(10.1,10.2);}宏函数-->预编译-->替换-->没有类型检查和安全检查 不安全void* Sum(void* a,int alen,void*b,int blen);void*泛型[) 半开半闭区间void* 容易越界 (...

2020-07-30 15:24:44 131

原创 内联inline函数和引用

inline函数:函数调用点代码直接展开(文本替换) 没了开栈和清栈的开销,效率高inline int Sum(int a,int b){return a+b;}1.inline 函数和普通函数的区别:inline函数只能在本文件可见2.inline函数和static修饰的函数的区别:有调用函数的开销static会在符号表里把global符号-->local函数3.inline函数和宏的区别:inline 编译 安全检查机制,类型检查宏 预编译 无安全...

2020-07-30 15:00:21 483

原创 new和malloc,const

1.new 关键字 malloc 函数2.new 系统计算大小 malloc人为计算所开辟的大小3.new 返回值类型安全 malloc 返回值类型不安全4.new 开辟内存还可以初始化 malloc 单纯的开辟内存5.new[] 数组元素个数 malloc 传递数组整体大小6.new 自由存储区 malloc 堆区7.内存申请失败的时候,new抛出异常 malloc 会返回NULL空指针8.new可以重载 malloc 不能重载new:(1)o...

2020-07-30 14:39:52 167

原创 模板

模板:C++的泛型机制,通用性,为了摆脱对类型的依赖模板:函数模板 类模板1.函数模板--》模板作函数用template<typename T>//函数模板T Sum(T a,T b){return a+b;}调用点:Sum<int>(10,20);2.模板函数int Sum(int a,int b){return a+b;}3.模板实例化(1)定义点:只编译模板的头部-->告诉编译器有这样一个模板存在 (2)调.

2020-07-30 14:10:30 84

原创 c++封装,六大函数和static

C和C++1.C+调用C语言:extern "C"{包含在里面的代码以C语言规则来进行处理。}2.C++ 面向对象的语言1.类和对象:(1)oop思想 (2)封装特性 (3)this(this call)oop思想:模拟现实:对象:空间+资源成员变量 (独享)成员方法(共享)2.封装:隐藏了对象的属性和实现细节,对外提供公有接口,供函数使用。【getname()接口】访问限定符:public: 任意protected:本类和子类...

2020-07-29 19:42:25 514

原创 C++三大特征:封装,继承,多态

继承的本质:代码复用1.继承和派生的关系:2.继承了什么?1.普通的成员变量2.普通的成员方法3.静态的成员变量4.静态的成员方法除构造和析构以外的所有成员方法3.派生类的内存布局:基类的布局优先于派生类4.派生类的构造函数析构顺序:先构造的后析构1.基类的构造函数2.派生类的构造函数3.派生类的析构函数4.基类的析构函数5.继承方式:访问限定符:pulic:任意protected:本类和子类private:本类基类下不同.

2020-07-29 17:55:18 158

原创 C++拷贝

浅拷贝:简单的赋值 共享机制 节省空间,开销小深拷贝:每个对象拥有自己独立的资源 资源占用太大,内存使用率太低写时拷贝:该内存的释放:最后一个对象销毁时,判断是最后一个内存的方法是设立一个计数器count-->该堆内存有多少个对象指向。1.写之前:浅拷贝2.写时:深拷贝 str2进行修改的时候,计数器先减为1str1[0]='a';operator[]1.判断count>1,深拷贝2.count==1,直接修改...

2020-07-29 15:47:29 108

原创 运算符重载,迭代器和内存自主管理机制(内存池)

1.基础运算符的重载机制不能重载的运算符:. :: ?: sizeof运算符重载规则:1.不能改变运算符的优先级和结合性2.不能改变运算符的用法3.不能创造新的运算符4.不允许有函数默认值2.迭代器int main(){std::string str1("hello");std::string::iterator it =str1.begin();while(it!=str1.end()){std::cout<<*it;it...

2020-07-29 14:35:22 113

原创 动多态,虚函数,虚基类和内存自主回收

多态-->接口复用-->同一接口,不同形态。(1)静多态:编译阶段确定函数的调用(2)动多态:运行阶段确定函数的调用(3) 宏多态:预编译虚函数表(vftable)RTTI 偏移 虚函数入口地址 动多态:1.虚函数的处理流程:2.vfptr和vftable:基类:Show(虚) Printf(虚)派生类:ShowTest(虚)派生类中的Show函数和基类中Show的虚函数-->派生类中的Show会变成虚函数。Bas..

2020-07-29 13:14:31 210

原创 排序之交换排序(冒泡,快排)

#include<stdio.h>int Partition(int *arr,int low,int high)//一次划分{ int tmp=arr[low];//基准 while(low<high) { while(low<high && arr[high]>=tmp)//从后面找比基准小的 { high--; } arr[low]=arr[...

2020-07-28 18:41:27 63

原创 应用层

DNS域名系统:用户不方便记忆IP地址或者32位的主机地址,计算机不方便直接使用域名(因为域名不是固定的),所以DNS被设计为一个联机分布式数据系统,DNS使大部分名字都在本地进行解析,少量在因特网上进行解析。通过域名服务器程序进行解析。域名到IP解析:当应用进程需要将把主机名解析为IP时,调用解析程序,成为DNS的一个客户,把待解析的域名放在DNS的请求报文段中,以UDP数据报的方式发给本地域名服务器,本地域名找到后,把对应的IP地址放到回答报文中返回。如果本地域名服务器不能回答,则成为DNS的另一个

2020-07-22 16:25:23 79

原创 计算机网络

1.TCP/IP四层协议和OSI七层模型OSI七层协议概念清楚,既复杂又不实用,TCP/IP体系分为四层:应用层,运输层,网际层,网络接口层(网际层为了强调着一层主要解决不同的网络之间的互联问题)应用层:直接为用户的应用进程提供服务(进程:正在运行的程序)HTTP(万维网),SMTP(电子邮件),FTP(文件传送)运输层:为两个主机中间进程之间的通信提供服务(复用:多个应用层进程可以同时使用下面运输层的服务。分用:运输层将收到的信息分别交付给上面的应用层相对应的进程)传输控制协议TCP:

2020-07-22 11:48:30 116

原创 系统编程

一,计算机的基本组成原理:冯诺伊曼体系:控制器,运算器,存储器,输入设备,输出设备其中控制器和运算器组成CPU,存储器即内存,输入输出设备即I/O设备。CPU通过总线来控制内存和I/O设备运算器:对数据进行常规计算。控制器:控制计算机各部分进行协调的工作存储器:存储数据和程序输入设备:把人类的资料转换成二进制存储起来输出设备:把二进制转换成人类能识别的进行呈现系统总线:数据总线,地址总线和控制总线(片内总线和通信总线)数据总线w输数据地址总线:给数据总线上的源数据

2020-07-19 10:01:17 258

原创 LINUX基础

1.基础命令:LINUX磁盘上文件的组织结构-->倒状树/bin 系统命令对应的可执行文件/etc 系统的配置目录 配置文件/mnt 临时挂载点/dev 设备目录/proc 虚拟目录 以进程为到位存储内存数据的映射/usr unix system resource 系统资源文档 第三方软件的资源 文档 #include<stdio.h>/home 普通用户的家目录/root root用户的家目录/lib 库文件(静态库 共享库(动态库))...

2020-07-17 15:36:59 118

go-linux-mips64le-bootstrap.tbz

1.18版本

2022-10-19

handle_stream.cpp

rtsp取流转mp4 C++实现

2021-09-07

空空如也

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

TA关注的人

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