![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术
文章平均质量分 66
域中四大
这个作者很懒,什么都没留下…
展开
-
PowerPC平台移植RTL8822BU
PowerPC 平台移植RTL8822原创 2022-11-21 17:52:48 · 1499 阅读 · 0 评论 -
log4cpp初入门
log4cpp使用教程原创 2022-11-20 18:10:41 · 582 阅读 · 0 评论 -
TCP/IP协议
目录协议code头文件TCP/IP协议收发数据协议code头文件#include <stdio.h>#include <sys/poll.h>#include <arpa/inet.h>#define NETMAP_WITH_LIBS#include <net/netmap_user.h>TCP/IP协议struct ethhdr { unsigned char h_dst[ETH_ADDR_LENGTH]; unsigned原创 2022-04-19 21:14:34 · 2733 阅读 · 0 评论 -
内存泄露了好烦,搞个内存泄漏检测插件试试
目录内存泄漏原因危害解决方案如何知道内存泄漏如何定位哪一行代码引起内存泄漏手动实现工具方案一方案二现有工具介绍内存泄漏原因代码不带垃圾回收机制动态分配(malloc、new)了内存没用释放(free、delete)危害导致某些内存被系统强制回收进程可能被强制killmalloc或者new等动态内存分配失败解决方案如何知道内存泄漏如何定位哪一行代码引起内存泄漏file、func、LINEbuiltin_return_address()addr2line -f -e xxx.原创 2022-04-18 13:09:28 · 264 阅读 · 0 评论 -
ICMP协议
目录ICMP协议简介协议code头文件ICMP协议收发数据ICMP协议简介这是一个简单的网络收发包比如ping操作就使用该协议它能够确认数据是否可以到达目的地它可能能够得到丢包的原因它是属于IP层的协议协议code头文件#include <stdio.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <sys/poll.h>#原创 2022-04-14 22:22:47 · 228 阅读 · 0 评论 -
ARP协议以及攻击
目录ARP简介ARP是什么ARP攻击ARP协议内容code头文件ARP协议ARP攻击ARP简介ARP是什么ARP(地址解析协议),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址。ARP攻击局域网中的成员需要将网络数据发送出局域网,进入广域网,需要经过网关转发数据,但是一开始并不知道网关是在哪里,那么就需要广播寻找网关现在局域A与B属于同一局域网,A开始寻找网关,向局域网发起广播,B原创 2022-04-14 22:15:36 · 2366 阅读 · 0 评论 -
网络协议栈
五层协议应用层–>传输层 : 加上TCP(8B) 头传输层–>网络层 : 加上IP(20B)头网络层–>链路层 : 加上以太网(14B)头struct ethhdr { unsigned char h_dst[6]; //MAC addrs unsigned char h_src[6]; //MAC addrs unsigned short h_proto; //协议类型}链路层–>物理层 : 通过网卡做DA转换为模拟信号发送出去物理层:光纤网线中的信原创 2022-04-14 21:48:39 · 2940 阅读 · 0 评论 -
Nginx(filter)过滤模块开发
目录upstream(转发)模块filter(过滤器)模块handler(前置挡板)模块upstream(转发)模块filter(过滤器)模块模块配置位置选择NGX_HTTP_MAIN_CONF //放置到http的根目录下handler(前置挡板)模块...原创 2022-03-28 16:51:25 · 4525 阅读 · 0 评论 -
【C++11特性】右值、左值、右值引用、左值引用
目录右值引用与移动语义moveforward判定左值还是右值的方法右值引用与移动语义避免无谓的复制,提高了程序性能避免深拷贝,优化性能&& 可能是右值引用也可可能是左值引用& 也可能是左值左值,是能够被赋值的右值,是临时的movea = MyString("Hello"); // moveMyString b = a; // copyMyString c = std::move(a); // move, 将左值转为右值forward左值变右值不改变值原创 2022-03-21 15:12:33 · 961 阅读 · 0 评论 -
【C++11特性】智能指针
目录缘起头文件auto_ptr可能造成的问题解决方法shared_ptr存在以下问题:unique_ptrwake_ptr缘起提出该方法目的:很多时候开辟了空间都忘记释放,为了解决该问题,提出了智能指针方案头文件#include auto_ptrauto_ptr <double> pd(new double);C++98中提供方案,C++11已经放弃该方法,当其他方法不能使用时候,那就认命吧。可能造成的问题auto_ptr<string> a(new string原创 2022-03-21 09:17:07 · 1345 阅读 · 0 评论 -
移植第一个django项目
目录搭建环境安装miniconda安装python3.5方案一方案二安装依赖包安装mysql设置宿主机Navicat允许访问搭建环境git clone https://gitee.com/feiyujun/pyenv.git ~/.pyenvsudo vim /etc/profileexport PYENV_ROOT="/root/.pyenv" #这里需要改成用户电脑的具体地址export PATH="$PYENV_ROOT/bin:$PATH"eval "$(pyenv init -)"原创 2022-03-17 16:23:54 · 1390 阅读 · 0 评论 -
Nginx介绍与参数配置conf原理
目录Nginx优势安装指令安装方式源码安装方式操作控制方式启动conf原理配置进程数配置每一个进程对应的连接数链接方式配置路径请求路径资源路径转发路径设置负载均衡Nginx优势C语言架构,可阅读性强文档超级全面开源社区活跃,问题能够得到很快的反应性能高安装指令安装方式apt-get install nginx源码安装方式操作控制方式启动的时候conf文件解析的时候运行时候的接收到请求3.1 http3.2 rtmp3.3 smtp启动下面指令中nginx.co原创 2022-03-11 15:45:06 · 4076 阅读 · 0 评论 -
EPOLL的实现原理
目录协议栈为什么要在用户态协议栈实现epoll数据结构所有fd的集合:红黑树就绪fd的集合:队列协议栈如何与epoll通信如何对epoll加锁epoll_createepoll_ctlepoll_waitET与LT的区别LTET协议栈首先明确,网络协议栈中,recv与send都是异步执行,所谓的send与recv只是从buffer中读取或者写入buffer,剩余操作将在kernel中执行。epoll代码路径:kernel源码中fs/eventpoll.c为什么要在用户态协议栈实现epolle原创 2022-03-09 21:51:24 · 407 阅读 · 0 评论 -
UDP可靠性传输协议(QUIC)
UDP与TCP对比可靠性机制ACK机制重传机制ARQ协议的三种模式(1) 即停等式ARQ : 等待ACK, 规定事件内没有收到对面ACK,则重传该帧(2) 回退n帧ARQ : 不等待对面ACK,每个包存在生命周期,生命结束之前没有收到ACK,则回退到该该包重新发包(错误帧之后的包已经发送过,任然需要重新发送)(3) 选择性重传ARQ : 不等待对面ACK,每个包存在生命周期,生命结束之前没有收到ACK,不需要回退到该该包重新发包, 仅需重发该包流控控制控制发送方发送速率,以原创 2022-02-12 16:49:37 · 5437 阅读 · 0 评论 -
单例模式需要注意的问题点
目录单例模式版本一问题分析版本二问题分析版本三问题分析方案四cpu reorder代码版本五版本六单例模式保证一个类仅有一个实例,并提供一个该实例的全局访问点。版本一class A{ public : static A *GetInstance(){ if(!_instance ) _instance = new A(); return _instance; } private: A(); ~A(); A(const A & a); A&a原创 2022-02-08 17:10:43 · 629 阅读 · 0 评论 -
内存池的实现原理
内存池实现意义避免频繁开辟空间解决堆空间频繁开辟与关闭的造成的内存碎片。这种碎片会随着程序运行的递进,碎片内存越来越多,导致无法再次malloc而引起的程序崩溃不建议自己实现内存池,使用开源内存池jemalloctcmalloc方案1:使用链表该方案就是开辟空间只开辟,不释放,然后使用链表管理起来。typedef struct memnode { void *addr; uint32_t size; bool flag;//是否被使用 struct memnode *next;原创 2022-01-25 14:05:49 · 639 阅读 · 0 评论 -
Posix API实现原理(TCP)
Posix APItcp serversocket创建tcbbind作用:绑定ip、port到fd, 不调用的话使用默认值(填充五元组)listen(fd, backlog)backlog: (unix中)半连接+全连接的总数的最大值, 容易收到DDOS攻击: (其他)全连接的最大数, 不会遭受DDOS攻击acceptrecv发现tcb的recv_buffer中存在了数据,再cp过来(TCP协议栈执行)tcb每收到一个包,重置延时定时器,发现有包没有收全,比如收到了包序号1,2,原创 2022-01-24 16:41:45 · 1736 阅读 · 0 评论 -
C++模板显示实例化、隐式实例化、显式具体化、部分具体化介绍
目录函数模板隐示实例化显式实例化类模板隐式实例化显式实例化显式具体化部分具体化函数模板隐示实例化直接调用已经定义过的模板函数,即可让编译器将该函数实例化template <class T> void func(T &t);int a = 10;func (a);显式实例化通过一次声明模板的类型,使得函数被实例化。template <class T> void func(T &t);template void func<int>(int原创 2022-01-14 15:10:57 · 527 阅读 · 0 评论 -
简易websocket讲解
目录websocket协议websocket流程websocket通信的状态分析建立连接流程拆解shark包接收数据协议解码封装websocket的head包拆包发送数据websocket协议未完待续websocket流程websocket通信的状态分析enum{ WS_HANDSHARK, WS_TRANSDATA, WS_DISCONNECT,}建立连接 (WS_HANDSHARK)传输数据 (WS_TRANSDATA)断开连接 (WS_DISCONNECT)int we原创 2022-01-13 23:11:04 · 1197 阅读 · 0 评论 -
MYSQL索引机制
目录约束主键索引唯一索引普通索引组合索引最左匹配原则全文索引辅助索引覆盖索引聚集索引innodb表结构查询模式非聚集索引(辅助索引)myisam表结构查询模式索引失效索引原则约束外键约束约束与索引的区别索引实现索引存储innodb体系结构Buffer PoolChange buffer约束主键索引非空唯一索引,一个表只有一个主键索引;在 innodb 中,主键索引的 B+ 树包含表数据信息 PRIMARY KEY(key)唯一索引不可以出现相同的值,可以有NULL值 UNIQUE(key)原创 2022-01-08 21:57:20 · 1084 阅读 · 0 评论 -
【scrapy专题】搭建环境
目录安装依赖包安装package--scrapy通过镜像源网址下载通过conda 下载通过pip下载生成scrapy工程安装依赖包lxmltwistedcryptographypyOpenSSLw3libparsel安装package–scrapy通过镜像源网址下载前往https://www.lfd.uci.edu/~gohlke/pythonlibs/下载下述包进行安装注意选择适合自己的python环境lxmlTwistedscrapy通过conda 下载conda原创 2021-12-31 13:44:27 · 386 阅读 · 0 评论 -
IO集中式管理--reactor浅析
reactorreactor基于epoll的轮询而实现,上一篇博文中已经介绍了epoll的实现,其中recv与send两个接口的调用有一个缺点,那就是当数据相当多的时候,可能会有recv或者send调用时候,io的资源不够,导致了recv与send的失败。此处引入回调函数的(recv_cb, send_cb)机制,将recv与send另外处理。reactor的应用redis单reactor,所有事件由一个epoll来管理水平触发int accept(int fd, struct sockadd原创 2021-12-23 16:44:37 · 1134 阅读 · 0 评论 -
异步请求池
请求池通过第三方请求来做的事情DNS/NTPHTTPmysqlredis模型请求组件线程池协程异步请求池请求组件的必然性由于这种请求是需要消耗时间的,所以设立请求组件,防止该操作阻塞业务进程异步请求池发送数据(commit)启用单独线程接收返回(thread_callback)初始化发送与接收方法(init)销毁该异步请求相关资源(destroy)void init(void){ epfd = epoll_create() pthread_create}原创 2021-12-09 21:28:45 · 838 阅读 · 0 评论 -
touchgfx 浮点数显示
最近在研究touchgfx,太懵了,也就好久没有更新博文了,很坑的一点,我就想在屏幕上显示一个小数,翻看了N多的博文,没一个管用的,这里分享一下我的方案。选择TextArea控件,enable Wildcard方式选择动作,我这边选择的是按键触发编写按键触发的实体函数覆盖虚函数std::uint8_t temp[20]; touchgfx::Unicode::snprintfFloat(textArea1Buffer, TEXTAREA1_SIZE, "%.2f", 1234.5f);原创 2021-12-06 23:34:10 · 1151 阅读 · 1 评论 -
socket、select、poll、epoll实现TCP并发处理
网络通信常用网络通信接口大概四种,socket、select、poll、epoll使用socket实现服务器的并发处理优点: 代码框架简单缺点: 碍于内存的限制,并发量不会大,基本上不会突破10Kvoid *client_routine(void *arg) { // int connfd = *(int *)arg; char buff[MAXLNE]; while (1) { int n = recv(connfd, buff, MAXLNE, 0); if原创 2021-11-15 21:56:41 · 2068 阅读 · 0 评论 -
详谈B树的增加与删除
多叉树相较于二叉树,层高更低=>节点数量更少=>减少查找节点数量数(寻址,读磁盘)没有约束平衡没有约束子树数量数据有规律B树减少寻址约束平衡约束每个节点有多个子树比如:一颗M阶B数T,每个节点 最多M颗子树根节点至少两颗子树除了根结点以外,其余每个分支结点至少拥有M/2课子树所有的叶结点都在同一层上有k课子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序关键字数量满足ceil(M/2)-1 <= n <= M-1B+树基于B树,对于原创 2021-11-09 13:51:10 · 970 阅读 · 0 评论 -
布隆过滤器浅析
海量数据中查询数据是否存在hash函数以及冲突处理冲突:映射函数 Hash(key)=addr ;hash 函数可能会把两个或两个以上的不同 key 映射到同一地址,这种情况称之为冲突(或者 hash 碰撞)负载因子:数组中存储元素个数/数据长度,负载因子越小,冲突越小冲突处理:链表法:将冲突元素使用链表链接起来,冲突元素超过256(经验值)时候,该链表转化为平衡二叉树数据库、redis等使用头插法, 他们认为最后插入的元素后续访问的可能性更高开放寻址法:插入数据遇到该位有数据,则向后推一定原创 2021-10-31 23:14:10 · 93 阅读 · 0 评论 -
makefile入门
工作原理概念介绍all: test @echo "hello all"test: @echo "hello test"目标上述脚本中,: 前面的all,test 都是目标依赖上述脚本中, 其中test为依赖条件,即:要执行all标签则需要先执行test标签,当然依赖对象也可以是现有文件。命令上述脚本中,@echo为命令运行顺序不指定目标的前提下执行第一个目标指定的目标的前提下执行指定的目标比如如下Makefile, 执行all标签all: @echo原创 2021-10-31 22:21:57 · 71 阅读 · 0 评论 -
linux下 源码编译方式 安装cmake
卸载原来版本apt-get autoremove cmake下载文件wget https://cmake.org/files/v3.9/cmake-3.9.1-Linux-x86_64.tar.gz解压tar zxvf cmake-3.9.1-Linux-x86_64.tar.gz创建软链接mv cmake-3.9.1-Linux-x86_64 /opt/cmake-3.9.1ln -sf /opt/cmake-3.9.1/bin/* /usr/bin/打完收工.原创 2021-10-30 21:07:21 · 137 阅读 · 0 评论 -
makefile中的变量
.PHONY: cleanCC = gccRM = rmEXE = simpleOBJS = main.o foo.o$(EXE): $(OBJS) $(CC) -o $(EXE) $(OBJS)main.o: main.c $(CC) -o main.o -c main.cfoo.o: foo.c $(CC) -o foo.o -c foo.cclean: $(RM) $(EXE) $(OBJS)自动变量$@ 用于表示一个规则中的目标。当我们的一个规则中有多个目标时,原创 2021-10-30 20:40:10 · 68 阅读 · 0 评论 -
git常用操作
git:分布式版本控制相较于svn,多了一个暂存区 indexsvn: 集中式版本控制git的原理其中svn中不存在Index这个区域一般git工作流程创建仓库git init .拉取remote数据拉取本机remote数据git clone H:/项目/git-remote dir_name拉取其他服务器remote数据git clone user@ip:/path/to save_path #需要输入密码免密拉取代码第一步,生产ssh公私钥对ss原创 2021-10-28 23:10:46 · 75 阅读 · 0 评论 -
深度理解红黑树增删节点
示意图红黑树特性:一. 每个节点红色的或黑色的二. 根节点是黑色的三. 每个叶子节点是黑色的四. 若某节点红,则其子节点为黑色五. 对于某个节点,从该节点到其子孙节点的所有路径上,包含相同数目的黑节点红黑树时间复杂度:O(lgn)红黑树应用:主要用来存储数据,如:Java集合中的TreeSet和TreeMap,C++中的set、map, linux中的虚拟内存管理红黑树----左旋...原创 2021-10-23 14:21:49 · 206 阅读 · 0 评论 -
创建性设计模式
设计模式定义:设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案;学习方式找稳定的和变化点,把变化点隔离出来先满足设计原则,慢慢迭代出设计模式设计原则依赖倒置开放封闭扩展方式:组合基类指针 继承虚函数覆盖面向接口封装变化点单一职责一个类只有一个引起变化的原因里氏替换子类型必须能够替换掉它的父类型;主要出现在子类覆盖父类实现,原来使用父类型的程序可能出现错误;覆盖了父类方法却没有实现父类方法的职;接口隔离不应该强迫客户依赖于它们原创 2021-10-20 16:24:36 · 78 阅读 · 0 评论 -
排序算法大全
十一种排序暴力做法:冒泡选择插入希尔排序归并排序快排堆排序计数排序桶排序基数排序原创 2021-10-12 15:59:16 · 82 阅读 · 0 评论 -
DES/3DES加密算法
DES加解密算法简介对称加密,安全性较差,经常出现被破解的案例破解方法:暴力破解一转DES加密密钥长度:64bits(56bits key + 8bits奇偶校验)明文长度:64bits密钥扩展十六进制转二进制key1 = bin(int(key, 16))[2:]压缩置换密钥共8个字节, 其中每个字节前七个bit下图为PC_1置换表key2 = ''checkCode = ''for i in range(8): #取每个字节前7bit作为密钥 key2 +=原创 2021-09-30 16:14:49 · 580 阅读 · 0 评论 -
AES加密算法
AES加解密算法AES加解密算法简介算法字节代换S盒逆S盒行移位列混合列混合逆运算轮密钥加轮密钥扩展AES加解密算法简介密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法(实际上有所区别),是美国联邦政府采用的一种区块加密标准。由2001年发布,用以替换DES加密技术算法密钥长度: 固定为128b,196b,256b区块长度: 固定为128b加密算法:密钥与明文区块将被排列为两张4X4的矩阵表其中密钥的矩阵将以列为单位扩原创 2021-09-30 09:43:53 · 645 阅读 · 0 评论 -
mysql入门
术语简写:SQL(structured Query Language)结构化查询语言OLTP:对数据库增删改查(后端服务器)OLAP:对数据库查询 (后台服务器)DQL:(Data Query Language)数据查询语言----selectDML:(Data Manipulate Language)数据操作语言----insert、delete、updateDDL:(Data Define Language)数据定义语言----create、alter、dropDCL:(Data C原创 2021-09-04 20:16:29 · 54 阅读 · 0 评论 -
二叉树的三种遍历方式
初识二叉树时候,为三种遍历方式所困扰,不知道这三种遍历方式怎么记忆。随着开发经验的加深,开始逐渐明白,二叉树的三种遍历方式是以代码中对树的枝叶进行处理的位置而命名的。要了解三序遍历,并非先了解三序遍历实际的遍历数据的顺序,而是将三遍历对应的代码写出来。首先定义一颗二叉树struct bstree_node { KEY_VALUE data; struct bstree_node *left; struct bstree_node *right;};struct bstree { str原创 2021-07-11 18:03:40 · 113 阅读 · 0 评论 -
KMP算法
经过几个日日夜夜间断的努力,终于搞明白所谓的KMP算法了。首先解释下KMP算法:它的目的是为了提取字串,解决了暴力(Brute-Force)算法冗余的指针回溯,从而提高了算法性能。其主要使用《算法导论》中的next数组,加速匹配。举个栗子:母串:abcabcabcabcabcd子串:abcabcd初始代码写手大概回使用如下的匹配方式: do abcabcabcabcabcd abcabcd(d!=a ==> 母串指针+1) abcabcabcabcabcd a(原创 2021-06-25 01:39:21 · 100 阅读 · 0 评论