自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 关于两组不相交的数组的biset

【代码】关于两组不相交的数组的biset。

2023-07-05 21:28:41 168

原创 排序算法汇总

https://blog.csdn.net/weixin_30342639/article/details/105343780#include#include#include#includeusing namespace std;// https://blog.csdn.net/weixin_30342639/article/details/1053437801、选择排序- 不稳定!2、冒泡排序-稳定3、插入排序-稳定4、快排5、堆排6、归并排序–稳定(稳定的只有插入、冒泡、归并)下面是非比较排序

2023-07-04 20:59:19 635

原创 矩阵以及搜索

【代码】矩阵以及搜索。

2023-07-04 12:49:39 163

原创 图论笔记整理

如果是要找到所有可能结果中最短或者最优的,那么BFS会更加高效,因为BFS是一种一种的尝试,在把所有可能情况尝试完之前,无法确定那个是最短的,所以DFS必须把所有情况都找一遍,才能确定最终答案(DFS的优化就是剪枝,不剪枝很容易超时)。因为DFS会首先的吧一种可能搜索到底,才会回溯去搜索下一种情况,只要找到一种情况满足则可以返回了。但是BFS必须所有可能的情况同时尝试,再找到一种满足条件的结果的同时,也尝试了很多不必要的路径。实际上呢,和图的形状有关系,当图的深度比较大,DFS占用空间比较大,其次就是。

2023-07-04 12:42:24 697

原创 汇编语言设计

汇编语言设计、IA32寄存器、指令系统

2022-11-21 16:18:18 929 1

原创 函数调用堆栈详细过程

问题1:main函数调用sum,sum执行完后,怎么知道回到哪个函数中?问题2:sum函数执行完,回到main后,怎么知道从哪行指令开始运行。要描述一个栈,需要知道栈底和栈顶就可以了。其中esp来标识栈顶,ebp来标识栈底。(栈是从高地址向低地址增长的,所以ebp要比esp的地址大)

2022-10-30 16:34:48 517

原创 C++11创建线程/多线程

这里只讨论在C++11中创建线程的写法.线程的创建有多种方式,c++11中,创建一个线程是通过一个定义一个thread对象进行的,thread类的使用如下:由于实现(内部的实现这里不在探讨),std::thread()创建一个新的线程可以接受任意的可调用对象类型(带参数或者不带参数),包括lambda表达式(带变量捕获或者不带),函数,函数对象,以及函数指针。下面简单的探讨一下。在启动了一个线程(创建了一...

2022-06-10 10:04:05 6252

原创 堆与堆排序

堆排序参考自:链接: link1 概念1) 堆的基本概念堆 是一种特殊的树,满足以下条件即为堆:首先堆是一个完全二叉树堆中每一个节点的值都必须大于等于(或小于等于)其左右子节点的值每个节点都大于等于其子树节点的堆叫“大顶堆“或大根堆,根是最大值每个节点都小于等于其子树节点的堆叫“小顶堆“或小根堆,根是最小值因为堆的要求不像二叉搜索树那么严格。他只要求某个节点的子节点大于或小于该节点,因此同一组数据,可以构建多种不同形态的堆:2)堆的表示堆是完全二叉树,大部分时候都是使用数组来存储

2022-03-25 20:42:09 2586

原创 ZooKeeper的简单使用

1解压tar -zxvf zookeeper-3.4.10.tar.gz2 修改配置文件进入解压后的目录中,进入conf目录,打开zoo_sample.cfg。需要修改的是里面的datadir,zk节点上的数据最终就是存到这个目录中的。我们可以自定义这个目录。如:将其修改成:(在解压后的目录中新建一个data目录)dataDir=/home/ubuntu/tool/zookeeper-3.4.10/data3 zk也是cs模型在zoo_sample.cfg中可以看到,他默认工作在2181端

2022-03-21 17:14:41 3718

原创 C中的可变参数列表的使用

一、可变参数列表的用途可变参数列表可以传递一组长度不定的入参。最典型的使用场景有 stdlib 的 printf,另外在cocos2d中也大量使用,例如CCMenu的create方法,ccanimation的创建之类的。不过按照我的理解,几乎80%的使用可变参数列表的场景,都可以使用数组来解决。但是使用可变参数列表的函数可以提供一种数组无法提供的东西:优雅。可以对比以下两种调用方式: int main(int argc, char ** argv) { varInputTest

2022-03-16 20:36:38 555

转载 C++中的类型转换

什么是类型转换?类型转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。C与C++的类型转换C中:(T)element 或者 T(element)C++中:reinterpret_cast<T*> (expression)dynamic_cast<T*> (expression)static_cast<T*> (expression)const_c

2022-03-14 09:00:32 611

原创 webbench的简单使用

1 安装1)首先在执行:wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz2)然后解压:tar zxvf webbench-1.5.tar.gz3)进入webbench-1.5,然后编译webbench。先执行make,再执行 sudo make install注意:这里可能会有ctags依赖包需要安装:可执行命令sudo apt-get install ctags来进行安装。这样webbench就安装成功

2022-03-04 10:30:54 3408

转载 彻底弄懂 Linux 下的文件描述符(fd)

文章目录1、从一个最常见的例子说起2、Linux中的文件描述符(file descriptor)3、Linux上打开文件举例4、C语言中文件描述符的使用5、Linux配置系统最大打开文件描述符个数6 、参考链接1、从一个最常见的例子说起在使用Linux的过程中, 我们平时经常看到下面这样的用法:echo log > /dev/null 2>&1> :表示将输出结果重定向到哪里,例如:echo "123" > /home/123.txt/dev/null :表示

2022-03-02 10:02:14 4456

原创 滑动窗口法

滑动窗口

2022-02-19 15:31:52 415

原创 muduo网络库的源码安装

##1下载解压并同时安装cmake2 编译1)修改cmakelist将CMakelist.txt文件中的option那一行注释掉,因为muduo库源码编译会编译很多unit_test测试用例代码,编译耗时长,我们也用不到。2)执行build.sh运行:sh build.sh开始编译,等到编译完成:3 安装运行:sudo sh build.sh install这个./build.sh install实际上把muduo的头文件和lib库文件放到了muduo-master同级目

2022-01-18 19:38:33 1034

原创 linux下静态库和动态库的创建和使用

1 关于静态库和动态库1.1 静态库(.a)之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。静态库试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结:静态库对函数库的链接是放在编译时期完成的。程序在运行时与函数库再无瓜葛,移植方便。

2022-01-18 17:21:20 1160

原创 liunx下boost库的安装

1 下载从boost的官网下载最新的安装包到本地一个新建的目录下并解压。tar -zxvf boost_1_78_0.tar.gz2 编译进入解压后的目录后,首先执行:./bootstrap.sh然后运行这一步生成的b2程序,进行源码的编译:./b2因为boost源码较大,所以这一步编译过程较长。3 安装编译完成后。再把上面的boost库头文件和lib库文件安装在默认的Linux系统头文件和库文件的搜索路径下,运行下面命令即可完成上述内容:(因为要给/usr目录下拷贝文件,需

2022-01-18 11:09:20 1381

原创 关于linux下内存对齐的一些探究

C\C++中,尤其是linux下,关于内存对齐的一些总结和规律。

2022-01-14 20:48:14 1559

原创 关于内存地址与寻址

首先理解位与字节的区别:①位(bit):计算机存储信息的最小单位。②字节(Byte):计算机存储信息的基本单元,1Byte = 8 bit。bit在大多数情况都以“了解硬件的工作原理”的方式出现的,Byte才是我们真正用于存储数据的单元,换句话说,我们存储的数据是精确到Byte而不会精确到bit。所以内存可以看做是一小块一小块字节组成的,我们进行的寻址得到的最小单元是字节! 这和操作是系统是没关系的。也就是说,字节是计算机最小可寻址的内存单元。但是和操作系统有关的是,用什么方式来表示内存中的地址

2022-01-14 17:32:02 2592

原创 回溯法(暴力搜索)

leetcode--回溯

2022-01-14 10:48:56 1803

原创 C++ 11中的bind解析

参考自:https://blog.csdn.net/zhouguoqionghai/article/details/45770523bind函数的返回值是一个函数对象/仿函数, 统一的一致性语法。1、bind函数(包装器/适配器)能够将用户提供的需要一个参数的函数对象调整为不需要参数的函数对象。需要的时候,绑定的值(这个例子中是123)存储在函数对象中,自动地传递给用户指定的函数。f = bind(my_handler, 123)一个匿名类(即这里的binder类)的成员变量捕获了函数指针的值和

2022-01-08 20:51:34 2081

原创 从暴力递归到动态规划

1 关于暴力递归2 从暴力递归到动态规划2 关于动态规划

2022-01-07 14:11:58 508

原创 C++有关排序的问题

1简述C++中经常会遇到与排序相关的问题,最常见的就是sort函数和priority_queue容器。对于基本数据类型,我们一般会按照升序或者降序来进行排列;而对于自定义的数据类型,我们通常需要自定义排序方案。2 sort的使用Sort函数使用模板: Sort(start,end,排序方法)2.1 用于基本数据类型以int类型为例。1 ) 默认从小到大排列sort默认下,也就是不适用第三个参数的时候,是升序排列。//从小到大排列vector<int> nums={13,

2021-12-11 14:10:54 1058

原创 LINUX下C/C++操作MySql

参考自:https://blog.csdn.net/fengxinlinux/article/details/75675360一 安装1)首先是再服务上安装mysql服务端和客户端,之前有相关记录2)再次就是安装相关的C库:sudo apt-get install libmysqlclient-dev3) 在数据库中创建所使用到的数据库和表,必要时创建所需要的用户这可以在mysql_client中操作:https://blog.csdn.net/luseysd/article/details

2021-11-21 21:51:26 1260 1

转载 多线程中的EPOLLONESHOT

epoll中EPOLLSHOT的使用EPOLLSHOT的作用主要用于多线程中epoll在某次循环中唤醒一个事件,并用某个工作进程去处理该fd,此后如果不注册EPOLLSHOT,在该fd时间如果工作线程处理的不及时,主线程仍会唤醒这个时间,并另派线程池中另一个线程也来处理这个fd。为了避免这种情况,需要在注册时间时加上EPOLLSHOT标志,EPOLLSHOT相当于说,某次循环中epoll_wait唤醒该事件fd后,就会从注册中删除该fd,也就是说以后不会epollfd的表格中将不会再有这个fd,也就不

2021-11-21 16:18:12 3569

原创 二叉树基础知识及遍历方式

参考自:link.二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。一、特殊的二叉树及特点1、斜树所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)。这就是斜树,应用较少2、满二叉树所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树。就是完美圆满的意思,关键在于树的平衡。根据满二叉树的定义,得到其特点为:叶子只能出现在

2021-11-15 11:26:07 1102

原创 LINUX高性能服务器编程

一 用进程池实现CGI服务器这个服务器实现的任务是,将客户端传送过来的信息打印出来1 方式一 ,没有使用类封装#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <unistd.h>#in

2021-11-09 09:34:12 1789

原创 EPOLL模型详解

参考自: http://blog.chinaunix.net/uid/28541347/cid-191916-list-4.html一 epoll综述1 selected 缺陷首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该值是1024,搜索内核源代码得到:include/linux/posix_types.h:#define __FD_SETSIZE

2021-10-28 15:44:43 1281

原创 关于EPOLL的LT与ET模式以及阻塞和非阻塞

在EPOLLLT(水平触发)模式下,也就是默认的模式,epoll_wait返回可读事件,表明socket一定收到了数据,我们可以调用read函数来读取数据。如果指定读取的数据大于缓冲区数据,无论socket是阻塞还是非阻塞的,read不会阻塞,read返回读取的真实数据。在read之后再次调用read,如果socket是阻塞的,read将阻塞,再次收到数据read才返回。此时如果指定读取的数据大于缓冲区,epoll_wait则不再触发,否则epoll_wait将再次触发,因为还有未读完的数据在缓冲区。在E

2021-10-28 15:43:52 4410 1

原创 LINUX C中的输入和输出使用方法!(结合在socket中的应用)

fgetsgetline等终端用什么普通文件用什么snprintf使用怎么这么广泛,为什么不用其他标准IO与文件IO,什么时候使用

2021-10-23 10:38:19 452

原创 C语言中的局部变量的作用域

局部变量是在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量(Local Variable)。函数的形参也是局部变量,也只能在函数内部使用。请看下面的例子:#include <stdio.h>int sum(int m, int n){ int i, sum=0; //m、n、i、sum 都是局部变量,只能在 sum() 内部使用 for(i=m; i<=n; i++) {

2021-10-19 16:37:26 1942

原创 深入探讨read write在普通文件和特殊文件中的使用

fputsreadwrite一般只用于文件上的适合在终端使用 的适合在设备、网络、管道等上使用的

2021-10-19 10:22:34 311

转载 sizeof和strlen的使用方法

首先得区别清楚:sizeof()是运算符,在头文件的类型为unsigned int,其运算值在编译时就计算好了,参数可以是指针、数组、类型、对象和函数等;strlen()是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化为指针了。该函数完成的功能是从代表该字符串的第一个地址开始遍历的,直到遇到结束符NULL。返回的长度大小不包括NULL。举个例子:char str[20] = “0123456789”;int a = strlen(str);

2021-10-18 19:25:28 307

原创 编译过程、可执行文件结构、make与Makefile

1 程序的编译过程参考自: link.首先提出几个问题:程序为什么要被编译器编译之后才可以运行?编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的?最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的?#include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的?不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM),以及不同的操

2021-10-13 11:12:48 912

原创 LINUX系统编程--9 SOCKET

跨主机的传输要注意的问题1、字节序问题区分大端、小端存储大端存储指的是低地址处放高字节;小端指的是低地址处放低字节。区分主机字节序:host网络字节序:network2、对齐32位的机器,存储向上对齐4个字节,例如一个结构有一个int(四个字节)和一个char(一个字节),加起来是5个字节,向上对齐到8个字节,所以在内存空间中占8个字节。在网络传输中的解决方法是,在网络传输中不进行对齐。3、类型长度问题int占多大?char占多大?在不同的机器上是不确定的。解决方法:int32_

2021-10-12 17:30:08 171

原创 LINUX系统编程-- 8 进程间通信

八 进程间通信主要内容:1、管道内核提供、单工、自同步机制匿名管道、命名管道2、XSI3、网络套接字socket0 模拟管道、队列进行通信(即顺序存储的循环队列通信)自己实现一个管道并进行通信,这里用的是顺序存储的循环队列模拟的。下面代码是不完整版,尚未完成,且有bug//mypipe.h#ifndef MYPIPE_H__#define MYPIPE_H__#define MYPIPE_READ 0x00000001UL#define MYPIPE_WRITE 0x000000

2021-09-21 18:50:40 238

原创 LINUX系统编程--7 高级IO

高级IO高级IO主要研究非阻塞IO首先要区分阻塞IO与非阻塞IO阻塞和非阻塞是文件本身的属性回忆在信号中:信号会打断阻塞中的系统调用。(如open这个系统调用,有可能被信号打断,打断会返回EINTR,这个是假错! open没有出错,只是在阻塞的过程中被信号处理函数打断了!)还有一种假错,叫EAGAIN,这也是一个假错!他的场景是IO是非阻塞的。以read为例,当read是以非阻塞形式读的时候后,读不到东西会马上返回,并设置error为EAGAIN,这也是一种假错,并不是read出错了,而是没有读

2021-09-19 21:24:29 146

原创 LINUX系统编程--6、线程

LINUX系统编程--6、线程六 线程1 线程的概念2 基本函数2.1基础函数2.2 线程的创建2.3 线程的终止2.4 线程的收尸2.5 栈的清理2.6 线程取消3 线程的竞争实例4 竞争故障5 线程同步之互斥量6 线程的池类算法7 线程令牌桶8 线程同步之条件变量9 线程同步之信号量10 线程属性、线程同步属性11 多线程中的重入12 线程和信号13 openmp六 线程内容:1 线程的概念2 线程的创建、线程的终止、线程的取消选项、栈的清理3 线程同步4 线程属性、线程同步的属性6 重

2021-09-16 15:52:25 306 1

原创 LINUX系统编程-- 5 信号

LINUX系统编程-- 5 信号五 信号1信号的概念和相关概念2 core文件:一个程序的某一个现场3 signal函数4ctrl+c是SIGINT的快捷方式(2号信号)5 实例6 信号的不可靠7 可重入函数8 信号的响应过程9 常用函数9.1 漏桶实例,流量控制9.2 令牌桶,流量控制9.3 令牌桶封装成库实例9.4 setitimer函数9.5 system10 信号集11 sigsuspend() 设置信号集状态与挂起 的原子操作12 sigaction(),区别于 signal()13 实时信号

2021-09-16 09:00:45 393

原创 LINUX系统编程--4 进程

LINUX系统编程--4 进程四 进程1 进程标识符pid2 进程的产生3 进程的消亡以及释放资源4 exec函数族5 shell命令的实现6 模拟实现shell7 用户权限和组权限!!!8 解释器文件(脚本文件)9 补充10 守护进程11 系统日志四 进程基本内容1 进程标识符pid2 进程的产生fork()、fork()3 进程的消亡以及释放资源4 exec函数族5 用户权限和组权限6 观摩课:解释器文件7 system函数8 进程会计9 进程时间10 守护进程11 系统日志

2021-09-16 08:59:19 493

空空如也

空空如也

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

TA关注的人

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