- 博客(62)
- 资源 (4)
- 收藏
- 关注
原创 gtest 单元测试工具的基本使用
gtest 单元测试gtest 简介gtest 优点安装 gtest测试 demogtest 简介gtest是Google的一套用于编写C++测试的框架,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。gtest 优点好的测试应该有下面的这些特点,我们看看GTest是如何满足要求的。测试应该是独立的、可重复的。一个测试的结果不应
2022-05-07 19:01:00 2704
原创 Valgrind 内存管理工具Memcheck 基本使用
ValgrindValgrind 工具简介Valgrind 安装内存检测工具包 Memcheck检测范围测试案例注意事项:结果分析总结Valgrind 工具简介Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,他的作者是获得过Google-O’Reilly开源大奖的Julian Seward,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等,内存检测,我们可以使用它的工具:Memcheck。Valgrind 安装方法
2022-05-04 18:39:48 3787
原创 TFS淘宝分布式文件核心存储引擎源码架构剖析实现
相关背景介绍相关设计技术介绍文件系统接口文件系统是一种把数据组织成文件和目录方式,提供基于文件的存取接口,并通过权限控制。扇区磁盘读写的最小单位就是扇区,一般每个扇区是 512 字节(相当于0.5KB);文件的基本单位块 - 文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。在 Linux 系统中可以用 stat 查看文件相关信息文件结构目录项区:存放目录下文件的列表信息文件数据: 存放文件数据inode区:(inode table)
2022-05-02 20:16:43 2487 3
原创 Nginx 内存池剖析
Nginx 内存池剖析为什么要使用 Nginx 内存池传统直接调用内存分配函数的弊端弊端的解决之道什么是Nginx 内存池什么是内存池技术内存池如何解决弊端内存池的设计思想分而治之Nginx 内存池结构体图内存池模块部分源代码为什么要使用 Nginx 内存池传统直接调用内存分配函数的弊端弊端一:高并发时较小的内存块使用导致系统调用频繁,降低了系统的执行效率弊端2:频繁使用时增加了系统内存的碎片,降低内存使用效率内部碎片 - 已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;产
2022-03-06 21:03:07 2208
原创 linux下信号量解决线程同步
信号量问题同一个进程内的各个线程,共享该进程内的全局变量如果多个线程同时对某个全局变量进行访问时,就可能导致竞态。解决办法: 对临界区使用信号量、或互斥量。信号量1)什么是信号量此时所指的“信号量”是指用于同一个进程内多个线程之间的信号量。即POSIX信号量,而不是System V信号量(用于进程之间的同步)用于线程的信号量的原理,与用于进程之间的信号量的原理相同。都有P操作、V操作。信号量的表示:sem_t 类型信号量的初始化sem_init原型:int sem
2022-02-21 18:14:33 424
原创 linux下线程使用
什么是线程线程,是进程内部的一个控制序列。即使不使用线程,进程内部也有一个执行线程。为什么要使用多线程使用fork创建进程以执行新的任务,该方式的代价很高。多个进程间不会直接共享内存线程是进程的基本执行单元,一个进程的所有任务都在线程中执行,进程要想执行任务,必须得有线程,进程至少要有一条线程,程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程线程的优点缺点线程的优点、缺点优点: 创建线程比创建进程,开销要小。缺点: 1)多线程编程,需特别小心,很容易发生错误。2)多线程调
2022-02-21 18:02:23 753
原创 linux下高性能网络框架epoll的通信小demo
高性能网络框架 epoll 的通信小 demoepoll 相关 API 介绍测试代码测试效果总结epoll 相关 API 介绍1.创建EPOLL 句柄int epoll_create(int size);2.向EPOLL对象中添加、修改或者删除感兴趣的事件int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);op取值:EPOLL_CTL_ADD 添加新的事件到epoll中EPOLL_CTL_MOD
2021-11-30 20:34:13 795
原创 linux文件操作文件写入相同字节,调用次数与耗时关系
在 linux 平台下,使用 write 函数写入 500 Mb 每次写入 16个字节,与8个字节运行时间比较运行结果比较16 字节写入源码测试效果8字节写入源码测试效果总结16 字节写入源码#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<unistd.h>#include<sys/stat.h>#include<fcntl.h>#
2021-11-08 20:39:52 1012
原创 c/c++基于liunx平台tcp协议通信分数据段发送小demo
引言*:tcp 是网络通信的一种协议,协议的话对于程序员来说就是按照约定的协议编写程序即可,具体编码的话相对于 之前做过的 socket 通信的 demo 来说 socket 通信来说并不会使用全新的API ,只是按照 tcp 协议按照要求 在发送消息的头部 加上相应的信息即可.这里写目录标题网络编程四层 TCP/ip协议封装TCP协议头部三次握手四次挥手分包和粘包TCP分包TCP 粘包分包和粘包解决方案网络通信 tcp 协议分段发送测及其代码预期实现客户端代码服务器端代码网络编程四层 TCP/ip先
2021-11-01 21:11:07 933
原创 通过c/c++使用循环链表实现约瑟夫问题
约瑟夫问题问题导入预期测试效果循环链表原理图尾插法原理图循环链表结构体定义循环链表初始化插入元素 尾插法遍历双链表元素总结问题导入据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始
2021-10-21 21:25:41 1606
原创 linux中的信号量
linux系统信号量问题引入何为信号量相关API测试demo预期实现demo源码测试效果总结问题引入当我们想让我们的程序同时只能被一个进程运行时,我们需要使用到信号量来实现.何为信号量信号量,是一种特殊的变量。只能对信号量执行P操作和V操作P操作, 如果信号量的值 > 0, 则把该信号量减1 如果信号量的值 ==0, 则挂起该进程。 V操作: 如果有进程因该信号量而被挂起,则恢复该进程运行 如果没有进程因该信号量
2021-10-16 21:53:14 673
原创 linux下理解僵尸进程&孤儿进程&守护进程测试范例及源码
目录测试代码孤儿进程孤儿进程测试 demo僵尸进程僵尸进程测试 demo守护进程守护进程测试 demo进程守护使用接口 API 实现测试代码#define _GNU_SOURCE#include<sched.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<stdint.h>#include<sys/wait.h>#include<s
2021-09-30 22:28:14 491
原创 QT5.96+VS2017实现实验室器材管理系统源代码及其发包发布
文章目录项目需求项目测试效果登录界面账号密码校验器材管理界面借器材归还器材输入学号查询定位借到器材项目的打包发布总结程序下载网盘连接项目需求这个管理系统是我给我们学院的实验室开发,以便管理实验器材.使用Qt平台实现实验器材管理系统,完成实验器材的实时跟踪,录入信息、查询数量、更新信息等功能;如有闲置的实验器材可供学生和老师预约借出,租借实验器材的学生和老师提出预借,使用后按时归还器材要求:1、研究数据库技术。2、研究QT平台的程序编写方法和数据传输方法。3、完成电脑方的应用程序设计:实现登录,
2021-09-18 14:12:30 1352 12
原创 Qt5实现与单片机ATS89S51通信
Qt实现与单片机直接的通信上位机+单片机代码测试环境项目目标实现效果关键通信类 QSerialport总结这是我大二下学期的单片机课设做的一个小项目,实现上位机与下位机之间的通信.测试环境开发环境:Qt5.96 Mingw32-bit keil3项目目标1、实现下位机基于STC单片机控制LED灯模块、独立键盘模块.2、实现基于Qt的上位机与下位机进行串口通信.3、通过上位机发送指令对下位机进行控制,如对LED灯进行亮灭控制,并通过界面方式显示.实现效果参数配置窗口上位机控制界
2021-09-13 22:36:15 3676 3
原创 通过c/c++在linux系统实现Mini型http服务器的并发访问
文章目录预期实现相关设计AIP调用系统函数介绍程序源码相关 html 格式参考文件总结预期实现测试平台:通过 MobaXterm Personal Edition 连接的本地 Ubuntu 4.2.0-27-generic当服务器端程序运行后,在浏览器网址搜索栏输入 192.168.60.132/qiniu.html登录到我的服务器端. 这个ip地址是我电脑的ip地址.在l inux shell 窗口 输入 ip addr 可获取本机ip编译文件由于实现并发访问使用到线程函数 pthread_
2021-09-10 22:48:45 916
原创 通过c/c++在linux平台实现服务器/客户端直接的通信
文章目录预期实现通信流程图解相关API服务器端==socket====bind====listen====accpet==客户端socket==connect==相关实现代码服务器端客户端总结预期实现测试平台 Ubuntu 4.2.0-27-generic实现回声服务器的客户端/服务器程序,客户端通过网络连接到服务器,并发送任意一串英文信息,服务器端接收信息后,将每个字符转换为大写并回送给客户端显示。服务器端运行server等待客户端连接客户端运行client连接上服务器端并发送 “this i
2021-09-05 09:52:53 3093 8
原创 并行搜索
并行搜索并发的基本概念所谓并发是在同一实体上的多个事件同时发生。并发编程是指在在同一台计算机上“同时”处理多个任务。要理解并发编程,我们必须要理解如下一些 基本概念:进程就像工厂里的车间,承担“工厂”里的各项具体的“生产任务”,通常每个进程对应一个在运行中的执行程序,比如,QQ 和微信运行的时候,他们分别是不同的进程。测试代码如下#include<stdio.h>#include<Windows.h>#include<time.h>#includ
2021-05-16 14:51:52 214
原创 数据结构算法之二分查找
二分查找二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。再重复根据中间数确定目标范围并递归实行对半分割,直到中间数等于待查找的值或是目标数不在搜索范围之内!#include<stdio.h>#include<Windows.h>int int_compare(const void *key1,const void *key2){ const int *ch1 = (const int*)key1; const int *ch2 = (c
2021-05-16 14:48:39 112 2
原创 数据结构算法之快速排序
快速排序每次选取第一个数为基准数;然后使用“乾坤挪移大法”将大于和小于基准的元素分别放置于基准数两边;继续分别对基准数两侧未排序的数据使用分治法进行细分处理,直至整个序列有序。对于下面待排序的数组:163 161 158 165 171 170 163 159 162数 第一步:先选择第一个数 163 为基准数,以 163 为基准将小于它的数排在它前面,大于等于它的数排在其后,结果如下:162 161 158 159 163 170 163 171 165此处,快速长老介绍了具体排列
2021-05-16 14:46:43 81
原创 数据结构算法之归并排序
当两个组数据已经有序,我们可以通过如下方式(以下简称 归并大法)让两组数据快速有序我们可以依次从两组中取最前面的那个最小元素依次有序放到新的数组中,然后再把新数组中有序的数据拷贝到原数组中,快速完成排序.依靠这种思想,归并长老提出了如下的排序方法!具体步骤对于下面这一组待排序的数组163 161 158 165 171 170 163 159 162先以中间为界,把其均分为 A 和 B 两个数组(如果是奇数个,允许两组数相差一个)A 组 组B 组 组如果 A 和 B 两组数据能够有序,则
2021-05-16 14:44:34 139 2
原创 数据结构算法之希尔排序
插入排序虽好,但是某些特殊情况也有很多缺点,比如像下面这种情况:156 161 163 165 167 168 169 1 2169 前的元素基本不用插入操作就已经有序, 元素 1 和 2 的排序几乎要移动数组前面的所有元素!!! 于是,有个老帅哥就提出了优化此问题的希尔排序!希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。它与插入排序的不同之处在于,它会优先比较距离较远的
2021-05-15 18:54:44 336
原创 数据结构算法之插入排序
插入排序171 161 163 165 167 169首先, 我们只考虑第一个元素,从第一个元素 171 开始,该元素可以认为已经被排序;171 161 163 165 167 169取下一个元素 161 并记录,并让 161 所在位置空出来,在已经排序的元素序列中从后向前扫描;171 163 165 167 169该元素(171)大于新元素,将该元素移到下一位置;171 163 165 167 169171 前已经没有最大的元素了, 则将 161 插入到空出的位置161 171 16
2021-05-15 18:53:34 70
原创 数据结构算法之冒泡排序
冒泡排序当我们采用前面的选择排序时,我们仍然要将候选者遍历 5 遍,才能完成最终的排序,但其实,本身这些美女出了第一个外,已经很有序了,我们只需要把第一个和第二个交换,然后又和第三个交换,如此循环,直到和最后一个交换后,整个数组基本就有序了!161 171 163 165 167 169第一次交换161 163 171 165 167 169第二次交换161 163 165 171 167 169第三次交换161 163 165 167 171 169第四次交换161 163 165
2021-05-15 18:35:47 135
原创 数据结构算法之选择排序
第 1 节 选择排序从前有个王国,国王骄奢无度,贪图女色,后宫佳丽三千,但还是动用大量财力物力在全国范围内招妃纳妾,浸淫于女色之中。又是一年的选妃开始,今年国王对身高比较敏感,要求这些候选者按照从低到高的顺序排列,供其选择。。。宫廷首席太监小桂子于是命令所有小公公把宫女的身高都量出来并上报到他处,然后命令身为太监伴读小书童的你帮他按身高大小排好序,数据如下:163 161 158 165 171 170 163 159 162常规思维:第一步 先找出所有候选美女中身高最高的,与最后一个
2021-05-15 18:30:21 84
原创 数据结构算法之贪心算法
贪心算法贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。请看下面案例,假设有如下课程,希望尽可能多的将课程安排在一间教室里:课程 开始时间 结束时间美术 9:00 10:00英语 9:30 10:30数学 10:00 11:00计算机 10:30 11:30音乐 11:00 12:00这个问题看似要思考很多,实际上算法很简单:选择结束最早的课,便是要在这教室上课的第一节课接下来,选择第一堂课结
2021-05-15 18:26:29 211
原创 数据结构算法之回溯法求解
回溯的基本原理在问题的解空间中,按深度优先遍历策略,从根节点出发搜索解空间树。算法搜索至解空间的任意一个节点时,先判断该节点是否包含问题的解。如果确定不包含,跳过对以该节点为根的子树的搜索,逐层向其祖先节点回溯,否则进入该子树,继续深度优先搜索。回溯法解问题的所有解时,必须回溯到根节点,且根节点的所有子树都被搜索后才结束。回溯法解问题的一个解时,只要搜索到问题的一个解就可结束。回溯的基本步骤定义问题的解空间确定易于搜索的解空间结构以深度优先搜索的策略搜索解空间,并在搜索过程中尽可能避免无
2021-05-15 18:24:25 564
原创 动态规划算法
人工智能时代,各国都在大力研究机器人技术,也制造出各种各样的机器人,比如:为了解决男女失衡而制造的美女机器人,假如你参与了某美女机器人的研发,你在这个项目中要求实现一个统计算法:如果美女机器人一次可以上 1 级台阶,也可以一次上 2 级台阶。求美女机器人走一个 n 级台阶总共有多少种走法。分治法核心思想 : 从上往下分析问题,大问题可以分解为子问题,子问题中还有更小的子问题比如总共有 5 级台阶,求有多少种走法;由于机器人一次可以走两级台阶,也可以走一级台阶,所以我们可以分成两个情况机器人最后一次走
2021-05-15 18:21:28 76
原创 图的深度遍历和广度遍历
第 1 节 节 图的故事导入故事情节Jack 自从买车后,交通出行方便了,心自然就野了!身边的各种朋友自然就多了起来!有一天晚上,一个年轻漂亮的女同事生日,Jack 受邀请准时爽约!Jack 亲睐此女已久,只是介于家里的 LD 不敢越雷池一步,但是,一有机会,Jack 都会和此女接近,经常在一起,所以可以说是就当个哥们吧!Jack 当晚开心的和女同事喝酒、聊天,忘记了家的存在,不知不觉时间一下子指向了 10 点!此时,正沉浸在幻想中的 Jack 被老婆电话惊醒!不用接都知道,老婆的“圣旨”又来了!这
2021-05-15 18:12:06 593
原创 图的深度遍历实现A*算法
AI 游戏中的自动寻路-A*算法随着 3D 游戏的日趋流行,在复杂的 3D 游戏环境中如何能使非玩家控制角色准确实现自动寻路功能成为了 3D 游戏开发技术中一大研究热点。其中 A算法得到了大量的运用,A算法较之传统的路径规划算法,实时性更高、灵活性更强,寻路结果更加接近人工选择的路径结果. A*寻路算法并不是找到最优路径,只是找到相对近的路径,因为找最优要把所有可行路径都找出来进行对比,消耗性能太大,寻路效果只要相对近路径就行了。A* 算法的原理我们假设在推箱子游戏中人要从站里的地方移动到右侧的箱子
2021-05-15 18:04:00 282 4
原创 动态规划算法
人工智能时代,各国都在大力研究机器人技术,也制造出各种各样的机器人,比如:为了解决男女失衡而制造 的美女机器人,假如你参与了某美女机器人的研发,你在这个项目中要求实现一个统计算法:如果美女机器人 一次可以上 1 级台阶,也可以一次上 2 级台阶。求美女机器人走一个 n 级台阶总共有多少种走法。咋一看,无从下手,不急,我们不是讲了分治法嘛?这不是可以乘机表演一下?启发性思考:分治法核心思想 : 从上往下分析问题,大问题可以分解为子问题,子问题中还有更小的子问题比如总共有 5 级台阶,求有多少种走法;
2021-05-09 08:59:25 114
原创 数据结构算法之分支算法
分治算法五大常规算法 第 1 节 分治法 一个装有 16 枚硬币的袋子,16 枚硬币中有一个是伪造的,伪造的硬币和普通硬币从表面上看不出有任何差别,但是那 个伪造的硬币比真的硬币要轻。现有给你一台天平,请你在尽可能最短的时间内找出那枚伪造的硬币。 常规思维: 每次从待比较的硬币中取两枚进行计较,如果天平平衡(相等)就继续取剩下的硬币进行比较继续以上过程,直到找到硬币。强者思维:我们先将 16 枚硬币分为左右两个部分,各为 8 个硬币,分别称重,必然会有一半轻一半重,而我们要的就是轻的那组,重的
2021-05-06 15:36:02 736
原创 哈希表的应用之基因诊断
随着生物基因测试的技术成熟,科学家们可以通过基因相似度检测,现在要对 N 个人进行测试基 因测试,通过基因检测是否为色盲。 测试色盲的基因组包含 8 位基因,编号 1 至 8。每一位基因都可以用一个字符来表示,这个字符 是’A’、‘B’、‘C’、'D’四个字符之一。 如:ABDBCBAD 通过认真观察研究,生物学家发现,有时候可能通过特定的连续几位基因,就能区分开是正常者 还是色盲者。对于色盲基因,不需要 8 位基因,只需要看其中连续的 4 位基因就可以判定是正常 者还是色盲者,这 4 位基因编号分别是:(
2021-04-21 22:42:41 161
原创 哈希链表的实现
哈希表及其企业级应用 第 1 节 哈希表的故事导入 故事情节 为了提高开发团队精神,缓解工作压力,某 IT 公司组织开发团队的 12 位男同事和测试团队 的 12 位女同事开展真人 CS 4vs4 野战联谊!面对性感的女同事,男同事们个个摩拳擦掌,跃跃欲 试!野战活动那天,根据男女搭配,干活不累的原则,带队的专业教练让男同事站成一排,女同 事站成一排,然后要求从女生这排开始从 1 开始报数,每个报数的队员都要记住自己的编号: 1, 2, 3,4。。。。。。林子里响起了百灵鸟般的报数声哈希表 - 散列表,它
2021-04-21 22:39:04 539
原创 通过二叉树来实现哈夫曼编码树
第 4 节 树的企业级应用案例4.1 哈夫曼编码 哈夫曼(Huffman)编码算法是基于二叉树构建编码压缩结构的,它是数据压缩中经典的一种算 法。算法根据文本字符出现的频率,重新对字符进行编码。 首先请大家阅读下面两段中外小学作文: 中国 - 今天天气晴朗,我和小明出去玩!小明贪玩,不小心摔了一跤,小明被摔得哇哇哭了,小明的爸爸闻 声赶来,又把小明痛扁了一阵。小明的小屁屁都被揍扁了,因为小明把妈妈刚买给他的裤子弄破了! 外国 - 今天天气晴朗,我和乔伊·亚历山大·比基·卡利斯勒·达夫·埃利奥特·福克斯·伊
2021-04-11 19:00:03 1235
原创 数据结构算法之二叉查找树
家谱:又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。家谱是一 种特殊的文献,就其内容而言,是中华文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和 事迹等方面情况的历史图籍树状图是一种数据结构,它是由 n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除 了根结点
2021-04-11 18:50:27 193
原创 数据结构算法之通过栈实现四则运算
栈是我目前学到的感觉最简单的一种数据结构,它就是一个有限制性的链表,进栈的一段我们称之为top,出栈的一头我们称之为栈顶base,如下图它的基本结构形式是的一个栈顶指针,还有一个栈底指。typedef int Elemdate;typedef struct _Stack{Elemdate *top;Elemdate *base;}Stack;//这就是栈的一个基本构造形式具体实现略过。我们现在要利用栈实现计算一个带括号的四则运算。但是它栈的应用斯泽夫元素是我感觉到比较难以理解的地方,下面
2021-04-09 09:14:34 2178
原创 数据结构算法之堆的应用
数据结构算法之堆堆的故事导入比武招亲,为古代的招亲方式之一,由女方设下擂台,邀请公众参与,候选人以武功最好者 获得婚约。通常有两种形式:一是擂主由招亲的女生担任,谁挑战成功就成为新擂主。没人再比 试的话直接获得婚约;要是还有人比试,武功最好者获得婚约。二是自由擂主,武功最高者成为 擂主!这种擂台式的结婚有如下优点和缺点: 优点:可以找个猛男保镖保护,甚至一起闯荡江湖,四海为家 缺点: 不怕找个东方不败,就怕找个像同治帝一样的得了“怪病”堆的原理精讲/* 加油!聂宗其!,高处不胜寒,岁寒知
2021-03-30 22:50:58 119 2
消灭新冠2020v2.0
2020-10-17
EasyX_Help.chm
2020-03-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人