
日志
文章平均质量分 64
域中四大
这个作者很懒,什么都没留下…
展开
-
PowerPC平台移植RTL8822BU
PowerPC 平台移植RTL8822原创 2022-11-21 17:52:48 · 1587 阅读 · 0 评论 -
log4cpp初入门
log4cpp使用教程原创 2022-11-20 18:10:41 · 644 阅读 · 0 评论 -
STL容器简介
C++STL库容器简介原创 2022-09-27 23:00:54 · 296 阅读 · 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 · 2796 阅读 · 0 评论 -
内存泄露了好烦,搞个内存泄漏检测插件试试
目录内存泄漏原因危害解决方案如何知道内存泄漏如何定位哪一行代码引起内存泄漏手动实现工具方案一方案二现有工具介绍内存泄漏原因代码不带垃圾回收机制动态分配(malloc、new)了内存没用释放(free、delete)危害导致某些内存被系统强制回收进程可能被强制killmalloc或者new等动态内存分配失败解决方案如何知道内存泄漏如何定位哪一行代码引起内存泄漏file、func、LINEbuiltin_return_address()addr2line -f -e xxx.原创 2022-04-18 13:09:28 · 308 阅读 · 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 · 264 阅读 · 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 · 2419 阅读 · 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 · 2991 阅读 · 0 评论 -
Nginx(filter)过滤模块开发
目录upstream(转发)模块filter(过滤器)模块handler(前置挡板)模块upstream(转发)模块filter(过滤器)模块模块配置位置选择NGX_HTTP_MAIN_CONF //放置到http的根目录下handler(前置挡板)模块...原创 2022-03-28 16:51:25 · 5468 阅读 · 0 评论 -
【C++11特性】右值、左值、右值引用、左值引用
目录右值引用与移动语义moveforward判定左值还是右值的方法右值引用与移动语义避免无谓的复制,提高了程序性能避免深拷贝,优化性能&& 可能是右值引用也可可能是左值引用& 也可能是左值左值,是能够被赋值的右值,是临时的movea = MyString("Hello"); // moveMyString b = a; // copyMyString c = std::move(a); // move, 将左值转为右值forward左值变右值不改变值原创 2022-03-21 15:12:33 · 990 阅读 · 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 · 1392 阅读 · 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 · 1424 阅读 · 0 评论 -
ubuntu 18.04 iso虚拟机安装
下载 ubuntu18.04下载地址:http://big.xiazaicc.com/bigfile/500/ubuntu-9.10-desktop-i386.iso打开VMware workstation,进入主页,选择创建新的虚拟机选择自定义,一路下一步,直至选择镜像文件。选择刚刚下载的ubuntu 18.04 iso文件下一步,输入用户名密码,此处密码为获取root权限时候需要输入的密码,需要记忆。下一步,此处需要设置该虚拟系统存放路径,以后需要复制虚拟机,只需要复制该路径便可。接下原创 2022-03-16 20:52:57 · 2089 阅读 · 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 · 4141 阅读 · 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 · 434 阅读 · 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 · 6737 阅读 · 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 · 664 阅读 · 0 评论 -
内存池的实现原理
内存池实现意义避免频繁开辟空间解决堆空间频繁开辟与关闭的造成的内存碎片。这种碎片会随着程序运行的递进,碎片内存越来越多,导致无法再次malloc而引起的程序崩溃不建议自己实现内存池,使用开源内存池jemalloctcmalloc方案1:使用链表该方案就是开辟空间只开辟,不释放,然后使用链表管理起来。typedef struct memnode { void *addr; uint32_t size; bool flag;//是否被使用 struct memnode *next;原创 2022-01-25 14:05:49 · 684 阅读 · 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 · 1784 阅读 · 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 · 584 阅读 · 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 · 1279 阅读 · 0 评论 -
区块链简介
目录区块链是什么强调区块链与比特币的关系区块链的技术要点P2P网络技术分布式账本技术共识机制密码学区块链分类区块链的必要性人工智能流派个体智能结构门派(联结主义)功能门派(符号主义/逻辑注意)行为门派(控制主义)群体智能分布式人工智能区块链是什么利用链式数据结构来验证并存储数据利用分布式节点共识算法生成和更新数据利用密码学的方式保证数据传输和访问的安全利用智能合约(自动化脚步代码组成的)来编程和操作数据分布式基础架构与计算范式强调安全共识(接受众人监管)链式数据结构分布式架构计原创 2022-01-12 21:51:30 · 11988 阅读 · 2 评论 -
MYSQL索引机制
目录约束主键索引唯一索引普通索引组合索引最左匹配原则全文索引辅助索引覆盖索引聚集索引innodb表结构查询模式非聚集索引(辅助索引)myisam表结构查询模式索引失效索引原则约束外键约束约束与索引的区别索引实现索引存储innodb体系结构Buffer PoolChange buffer约束主键索引非空唯一索引,一个表只有一个主键索引;在 innodb 中,主键索引的 B+ 树包含表数据信息 PRIMARY KEY(key)唯一索引不可以出现相同的值,可以有NULL值 UNIQUE(key)原创 2022-01-08 21:57:20 · 1110 阅读 · 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 · 425 阅读 · 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 · 1155 阅读 · 0 评论 -
异步请求池
请求池通过第三方请求来做的事情DNS/NTPHTTPmysqlredis模型请求组件线程池协程异步请求池请求组件的必然性由于这种请求是需要消耗时间的,所以设立请求组件,防止该操作阻塞业务进程异步请求池发送数据(commit)启用单独线程接收返回(thread_callback)初始化发送与接收方法(init)销毁该异步请求相关资源(destroy)void init(void){ epfd = epoll_create() pthread_create}原创 2021-12-09 21:28:45 · 863 阅读 · 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 · 1344 阅读 · 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 · 2113 阅读 · 0 评论 -
static、const的关联(只讨论C++)
众所周知,static作为修饰语句的三种作用修饰函数内的变量, 使得该变量不会随着函数销毁而销毁修饰函数外部变量,使得该外部变量由外部链接类型转换为内部链接类型修饰函数, 使得该该函数由外部链接类型转换为内部链接类型其const的作用为:使得变量不可出现更改。const修饰外部变量时候, 也会将该变量转变为内部链接类型, 作用同static修饰函数外部变量或函数...原创 2021-11-15 11:06:31 · 213 阅读 · 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 · 1029 阅读 · 0 评论 -
布隆过滤器浅析
海量数据中查询数据是否存在hash函数以及冲突处理冲突:映射函数 Hash(key)=addr ;hash 函数可能会把两个或两个以上的不同 key 映射到同一地址,这种情况称之为冲突(或者 hash 碰撞)负载因子:数组中存储元素个数/数据长度,负载因子越小,冲突越小冲突处理:链表法:将冲突元素使用链表链接起来,冲突元素超过256(经验值)时候,该链表转化为平衡二叉树数据库、redis等使用头插法, 他们认为最后插入的元素后续访问的可能性更高开放寻址法:插入数据遇到该位有数据,则向后推一定原创 2021-10-31 23:14:10 · 115 阅读 · 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 · 97 阅读 · 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 · 169 阅读 · 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 · 90 阅读 · 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 · 101 阅读 · 0 评论 -
查看python能够支持的包的版本
pip debug --verboseWARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these details, since the output and options of this command may change without notice.pip version: pip 21.3.1 from C:\Users\5030原创 2021-10-25 23:47:56 · 2102 阅读 · 0 评论 -
深度理解红黑树增删节点
示意图红黑树特性:一. 每个节点红色的或黑色的二. 根节点是黑色的三. 每个叶子节点是黑色的四. 若某节点红,则其子节点为黑色五. 对于某个节点,从该节点到其子孙节点的所有路径上,包含相同数目的黑节点红黑树时间复杂度:O(lgn)红黑树应用:主要用来存储数据,如:Java集合中的TreeSet和TreeMap,C++中的set、map, linux中的虚拟内存管理红黑树----左旋...原创 2021-10-23 14:21:49 · 223 阅读 · 0 评论 -
结构型设计模型
单例模式定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。 ——《设计模式》GoF工厂方法定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 ——《设计模式》GoF要点解决创建过程比较复杂,希望对外隐藏这些细节的场景;比如连接池、线程池隐藏对象真实类型;对象创建会有很多参数来决定如何创建;创建对象有复杂的依赖关系;抽象工厂定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具原创 2021-10-21 21:55:01 · 620 阅读 · 0 评论 -
创建性设计模式
设计模式定义:设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案;学习方式找稳定的和变化点,把变化点隔离出来先满足设计原则,慢慢迭代出设计模式设计原则依赖倒置开放封闭扩展方式:组合基类指针 继承虚函数覆盖面向接口封装变化点单一职责一个类只有一个引起变化的原因里氏替换子类型必须能够替换掉它的父类型;主要出现在子类覆盖父类实现,原来使用父类型的程序可能出现错误;覆盖了父类方法却没有实现父类方法的职;接口隔离不应该强迫客户依赖于它们原创 2021-10-20 16:24:36 · 103 阅读 · 0 评论 -
排序算法大全
十一种排序暴力做法:冒泡选择插入希尔排序归并排序快排堆排序计数排序桶排序基数排序原创 2021-10-12 15:59:16 · 108 阅读 · 0 评论