自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 池化技术-版本四

通过可变参数模板来解决。可变参数模板可以支持不同参数的构造函数来创建对象。版本3问题: 不支持参数不同的构造函数。

2022-10-25 15:24:01 179 1

原创 池化技术-版本三

通过自动回收用完的对象来解决。这里用智能指针就可以解决,在创建智能指针时可以指定删除 器,在删除器中不删除对象,而是将其回收到对象池中。这个过程对外界来说是看不见的,由智能指针 自己完成。使用C11 的智能指针管理对象的生存期,重写删除器,使删除器与对象池结合;1.对象如果没有归还给对象池,对象无法销毁。2.对象如果在对象池外释放,对象池无法感知。

2022-10-25 15:08:29 276

原创 池化技术-版本二

对象池类型中设计两个队列, 一个是空闲队列,一个是活动队列;设计一个私有方法AddObject();1)对象池中的对象没有到达上限,无法增加对象。3) 不知道借出对象的个数和空闲对象的个数;2)丢失的对象会造成内存泄漏。

2022-10-25 15:01:26 170

原创 池化技术-版本一

设计: 对象池类设计为模板类型, 使用queue存储池对象, 提供borrowObject(),和 returnObject() 两个接口函数。版本1: 需求:可以取得和归还池对象,池对象组织形式为先进先出 (FIFO),队列中池对象的个数要有上限, 可以管理不同类型的池对象。

2022-10-25 14:56:23 134

原创 池化技术-介绍

其二,也是最重要的一点,缓存中的对象是没有一个完整生命周期的概念,而对象池中的对 象是具有生命周期的,我们甚至可以对对象的生命周期施加影响。所以,对象池技术的本 质简单来说就是:将具有生命周期的结构化对象缓存到带有一定管理功能的容器中,以提高对象的访问 性能。本质上,池是在资源使用时将使用率高且可以复用的对象保存在一个类似容器的地方,对这些对象 进行复用,从而降低非必须的系统资源开销、提高程序的响应速度、改善效率。常用的池技术有:对象池, 内存池,Socket连接池、数据库连接池、线程池等。

2022-10-25 14:51:11 600

原创 数据结构-HashTable(哈希表/散列表)

哈希函数其实就是我们常说的哈希算法,主要应用在以下这几个方面:文件校验、数字签名、鉴权协议。常用的哈希算法有以下这些。MD5:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。MD5是输入不定长度信息,输出固定长度128bits的算法。SHA-1:常用于HTTPS传输和软件签名。SHA-2:SHA-224/SHA-256/SHA-384/SHA-512并成为SHA-2。

2022-09-22 20:28:49 330

原创 数据结构-RBTree(红黑树)

红黑树(Red Black Tree)是一种自平衡二叉查找树,是在计算机科学的中用到的一种数据结构,典型的用途是实现关联数组,红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能它虽然是复杂到,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的:它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。

2022-09-22 20:06:51 73

原创 Linux 库文件生成与使用

1、什么是库文件库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so, 如下图所示:2、静态库的生成与使用2.1 静态库的生成以下是需要生成静态库的”.c...

2021-12-02 10:50:27 107

原创 Linux C程序编译与调试

1、Yum 仓库搭建及 gcc 的安装(1) 准备安装包,安装包再系统光盘“rhel-server-6.3-i386-dvd.iso”的镜像文件中(2) 将安装包添加到 VMware 的虚拟光驱中(3) 在系统终端中切换到管理员用户(4) 挂在光盘 mount /dev/cdrom /mnt(5) 在 /etc/yum.repos.d 目录中写配置文件 test.repo(6) 验证 yu...

2021-11-28 16:55:01 197

原创 算法 选择排序

1、算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。从大到小排序从小到大和从大到小 原理一样#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//选择排序法void SelectSort(int* arr, int len){ int tmp;...

2021-11-27 15:24:37 824

原创 算法 求素数(三种方法.线性筛选法)

用筛选法求100之内的素数1. 求素数最初的素数比较暴力,也只是能判断一个数是不是素数或者求n以内的素数个数,用最朴素的算法来写就是下面这样的num = 0;for(i=2; i<=n; i++){ for(j=2; j<=sqrt(i); j++) if( j%i==0 ) break; if( j>sqrt(i) ) prime[num++] = i;}这种算法时间复杂度是o(n*sqrt(n)),用这种方法,当

2021-11-25 18:17:17 1761 1

原创 Linux 常用命令(用户管理命令)

6、用户管理命令6.1 系统存储用户信息的文件/etc/passwd 存储用户基本信息/etc/group 存储用户组的信息/etc/shadow 存储用户的密码6.2 添加新用户useradd newname 添加一个新的用户 newname选项: -g 执行新用户的主组 -G 将新用户添加到副组 -s 指定新用户...

2021-11-25 13:58:04 265

原创 Linux 常用命令(进程管理命令)

5、进程管理命令5.1 ps默认显示与当前终端有关的进程信息-e 显示系统中所有的进程信息-f 显示更多的进程属性信息(全格式)-L 显示进程中的线程 ID5.2 pstree以树状图形式显示进程之间的关系5.3 kill结束或者挂起一个进程-9 强制结束进程-stop 挂起进程5.4 pkill结束一组同名的进程5.5 &am...

2021-11-25 13:54:40 306

原创 Linux 常用命令(文件压缩与解压命令)

4、文件压缩与解压命令4.1 tar将文件打包或者解包◼ c 创建包文件◼ f 指定目标为文件而不是设备◼ v 显示详细过程◼ t 显示包中的内容而不释放◼ x 释放包中的内容◼ z GNU 版本新加的,使得 tar 有压缩和解压的功能下图为 tar 打包过程:下图为 tar 解包过程:4.2 gzip对文件进行压缩或者解压下图为 ...

2021-11-25 13:50:50 469

原创 Linux 常用命令(文件编辑命令)

3、文件编辑命令3.1 三种模式介绍◼ 命令模式◼ 插入模式(编辑模式)◼ 末行模式3.2 模式切换命令模式切换到插入模式:1. a //进入到当前光标后开始编辑 2. A //进入到当前光标所在行的行末开始编辑3. i //进入当前光标位置开始编辑4. I //进入当前光标所在行的行头开始编辑5. o //进入当前光...

2021-11-25 13:47:54 6343

原创 Linux 常用命令(文件查看命令)

2、文件查看命令2.1 cat2.1.1 查看文件内容,示例如下:2.1.2 合并文件,示例如下:2.1.3 往文件中写入数据, Ctrl+d 是结束输入,示例如下:2.2 more当一个文件的内容超过一个屏幕能显示的行数,使用 more 可以分屏显示文件内容。 使用方式: more filename2.3 less文本内容查看器,查看文件内容,但是文件内容不会显示到界面上2.5 hea...

2021-11-25 13:42:01 572

原创 Linux 常用命令(基础命令)

1.1 pwd显示当前位置的绝对路径,示例如下:1.2 cd切换目录,cd 后的参数表示要切换到的位置,可以使用绝对路径或相对路径,示例如下:1.3 ls显示目录中的文件,示例如下:1.4 man帮助手册,用来查看命令、系统调用,库函数等帮助信息,示例如下:1.5 touch创建普通文件,示例如下:1.6 mkdir创建目录文件,示例如下:...

2021-11-24 22:55:24 193

原创 Linux 系统文件类型与文件权限

1、文件类型 Linux 下所有的东西都可以看做文件,Linux 将文件分为以下几种类型:◼ 普通文件 ‘-’◼ 目录文件 ‘d’◼ 管道文件 ‘p’◼ 链接文件 ‘l’◼ 设备文件(块设备 ’b’ 、字符设备 ‘c’)◼ 套接字文件 ‘s’Linux 上不以文件的扩展名区别文件类型,而是在文件属性中有一列专门记录文件类型。 这五种文件在 Linux...

2021-11-24 14:35:54 396

原创 Linux 系统目录结构介绍

1、目录结构Linux 系统的目录结构是一颗倒状树。2、常见目录说明/bin 存放常用命令(即二进制可执行程序)/etc 存放系统配置文件/home 所有普通用户的家目录/root 管理员用户的家目录/usr 存放系统应用程序及文档/proc 虚拟文件系统目录,以进程为单位存储内存的映射/dev 存放设备文件/mnt 临时挂载点/lib 存放库文件/boot 系统内核及启动有关的文件/tmp 存放各种临时文件,是所有用户均可访问的地点...

2021-11-24 14:32:46 1115

原创 Linux 系统介绍

1、操作系统介绍Linux 就是一组软件,而软件分为操作系统软件和应用软件,当然 Linux 属于操作系统 软件。计算机是由一堆硬件组成的,为了有效的控制这些硬件资源,于是乎就有了操作系统的 产生,操作系统除了有效的控制这些硬件资源的分配,并提供计算机运作所需要的功能(如 网络功能)之外,为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一 组系统调用的接口。操作系统就是控制硬件的内核程序以及提供程序员使用的系统调用,而 Linux 也就是拥有这两个模块的...

2021-11-24 14:27:56 616

原创 C语言 文件 及练习

* 文件:* 标准输入设备:键盘(stdin)* 标准输出设备:屏幕(stdout)* 文件后缀名的作用:关联默认打开它的应用程序,可以修改* 文件分类* 文件操作* 文件指针:内存处理该文件的唯一凭证(类似学号)* 注意:1.文件路径的书写 .例如"D:\\1.txt"* 2.'\0'是字符串的结尾标记,但在文件中不需要* fread:返回值非常重要,如果返回值小于第三个参数(项目数),则表示文件读完* ftell:计算当前文件位置离开头的距离(字节)...

2021-11-24 14:17:54 99

原创 C语言 文件

1、文件基础 文件指存储在外部介质上的数据集合。常见的文件如下:为了简化各种设备的操作,使用户不必区分各种设备之间的区别,操作系统 把各种设备都统一作为文件来处理。从操作系统的角度看,每一个输入输出设备 都是一个文件。其中键盘是标准输入设备,其文件标识符为”stdin”,屏幕是标 准输出设备,其文件标识符为”stdout”。数据如流水一样从一处流向另一处,因此常将输入输出的数据称为数据流。数据从文件(外存)流向内存称为输入流,数据从内存流向...

2021-11-24 14:16:46 337

原创 C语言 结构体 共用体 及练习

* 结构体:自定义数据类型,不同类型打包在一起* 基本类型:内置类型,char,short,....double* 结构体定义: struct 结构体类型名 { 结构体成员1; .... 结构体成员n; }; 结构体的普通变量通过"."访问其成员 结构体的指针变量通过"->"访问其成员 typedef:定义类型....

2021-11-24 14:03:37 686

原创 C语言 自定义数据类型(结构体 typedef 共用体 位段 枚举)

1、结构体的定义及初始化通过数据类型来定义一个一个的变量,当需要很多相同类型的变量时有数组。 基本数据类型在使用时很方便,但是利用它们来描述现实世界就显得捉襟见肘。 例如需要保存一个班学生的信息”姓名,年龄,分数”,按照前面的学习需要单独 定义三个数组,一个保存姓名,一个保存年龄,一个保存分数。这样定义对于后面 的维护,修改,删除会带来麻烦。好比你用三个记事本一个记录学生姓名,一个记 录年龄,一个记录分数,如果删除姓名记事本中的第十个学生,而在年龄,分数记 事本中却删除了第十一个,这是很...

2021-11-24 14:00:51 706

原创 C语言 内存总结

* 内存总结* extern :引用外部符号(外部全局变量或函数)* static :静态,其作用1.改变内存区域;2.改变链接属性* 1.局部变量:定义在函数内部的变量 .可以被static (静态)修饰(注意和const)* 2.全局变量:定义在函数外部的变量.可以被static (静态)修饰(注意和const) 最大的问题"不安全"* 3.动态内存* 4.函数:存放在代码段,可以被static修饰 .在C中static主要用来修饰函数* 内部函数前面必...

2021-11-22 20:46:36 258

原创 C语言 动态内存 malloc calloc realloc free

* 局部变量:在函数内部定义的变量* 全局变量:在函数外部定义的变量* 栈stack:局部变量,函数调用 1M左右* 如果需要的数组(内存)超过1M怎么办?* 如果需要变量作为数组的长度,在VS编译器是非法的,怎么办?* 上面的问题都可以通过动态内存解决* 创建动态内存: 分配区域在"堆(heap)",2G左右,很大,必须掌握,在数据结构中大量使用* malloc: 参数"需要创建的内存大小,以字节为单位";返回值 "返回申请的内存地址,如果申请失败返回NULL",*...

2021-11-22 20:26:33 378

原创 C语言 指针的应用2

* 指针==地址* &变量:获取该变量的地址* 类型 *变量;定义该类型的指针(地址)变量.例如 int *p;* p访问的是p变量本身,*p访问的是p所指向的内容* 指针的应用* 不同的函数变量名相同不是同一个变量,如果地址相同则一定是同一个* 野指针:也称悬挂指针,悬空指针,没有访问权限的指针* 结论:通过一个函数来修改实参的值,必须传指针和函数内部解引用* NULL:空指针,说明当前指针无效,不能解引用.和野指针有区别* todo 写一篇关于Swap的博客* todo..

2021-11-22 20:25:02 53

原创 C语言 二维数组

* 二维数组* 定义 类型 数组名[行长度][列长度];* 使用,通过下标访问* 二维数组作为参数传递(考试难点)* int arr[4];//一维数组名arr表示首元素的地址* 将二维数组看作一维* int (*p1)[4];//p1一定是指针,指向数组,该数组长度为4,类型为int. 指向数组的指针简称数组指针* int *p2[4];//p2一定是数组,长度为4且类型为整型指针的数组.简称指针数组#include <stdio.h>//输...

2021-11-22 20:23:39 495

原创 C语言 指针的应用

* 指针==地址* &变量:获取该变量的地址* 类型 *变量;定义该类型的指针(地址)变量.例如 int *p;* p访问的是p变量本身,*p访问的是p所指向的内容* 指针的应用* 不同的函数变量名相同不是同一个变量,如果地址相同则一定是同一个* 野指针:也称悬挂指针,悬空指针,没有访问权限的指针* 结论:通过一个函数来修改实参的值,必须传指针和函数内部解引用* NULL:空指针,说明当前指针无效,不能解引用.和野指针有区别* todo 写一篇关于Swap的博客* tod...

2021-11-22 20:22:27 650

原创 C语言 字符数组和字符串

* 字符数组和字符串是工作的重点,学习的重点,考试的难点* 字符数组 ,char arr[10]; 利用char定义的数组* 字符串:用 ""包括的字符序列,字符串的末尾有一个隐含的'\0'* 字符数组是否为字符串,就看字符数组是否有'\0' ,有'\0'就是字符串,否则不是* 0:0,'\0',false,NULL* strcpy:字符串复制的库函数* strlen:求字符串的长度. 例如"abc"->3 (不包含'\0')* 不安全:数组越界,不使用安全版本的函数...

2021-11-22 20:18:57 296

原创 C语言 指针基础

* 指针:也称为地址. 指针==地址* &变量:获取变量的地址,&称为取地址符.例如&a* 类型 *变量;//定义改类型的指针变量 . int *p;整型指针变量* *p:访问p所指向的变量,*称为解引用或者间接访问符.* 左值:放在"="符号的左边,改写变量的值* 注意:指针必须是相同类型才能赋值* "*",在定义变量时表示指针,在使用时表示解引用.例如int *p = &a; *p = 100;#include <st...

2021-11-22 20:10:10 210

原创 C语言 数组

* 数组 * 1.定义 类型名 数组名[长度];//注意,长度必须是整型常量,例如10* 2.使用 通过下标访问数组元素,注意下标从0开始,可以是变量* 如何区分数组长度和下标: 定义时为长度,使用时为下标* 如何区分定义和使用:定义前有类型,使用前没有类型* 3.数组arr长度公式:sizeof(arr) /sizeof(arr[0]) .前提,必须在定义数组的同一个函数中* 一定注意,不能对形参数组进行sizeof.它已经变成指...

2021-11-22 20:08:50 116

原创 C语言 调试(数组练习)

调试: 启动调试(实心三角号)+断点,快速到达需要调试的代码周边#include <stdio.h>#include <string.h>#include <math.h>//一个数组arr中,所有的数字都成对出现,只有一个数字只出现一次,请找到它//例如1,3,2,7,6,3,2,6,1 -> 7int Single1(int arr[], int len){ int count = 0;//计数器 for (int i = 0;..

2021-11-22 20:07:51 204

原创 C语言 初识数组

数组: 定义:类型 数组名[长度]; 注意长度必须是常量.例如10或者4+6,不能是变量 初始化,如果只初始化一部分则剩余部分为0 使用:通过下标访问数组元素,注意下标从0开始,可以是变量(通过循环处理) 数组arr长度公式:sizeof(arr)/sizeof(arr[0]).前提是必须在定义数组的同一个函数中, 如果数组是形参则不可以(考试的重点) sizeof:求后面内容的字节 数组在进行参数传递时,需要传数组名和数组长度 返回值 函数...

2021-11-22 20:06:34 83

原创 C语言 函数体

返回值 函数名(参数列表){ 函数体}1.功能代码不能写在main函数中.如何改? 只需要将main换个新名字(名字必须唯一)2.工作当中(实际)的代码不通过scanf获取数据.数据从哪来? 通过参数列表传递数据3.在功能函数中不能通过printf直接输出结果.需要通过返回值返回void :没有,它可以修饰参数列表和返回值注意:1.参数列表可以为空;2.返回值可以没有,如果没有前面写void; 3.返回值最多只能1个,如果需要返回多个暂时使...

2021-11-17 21:16:53 904

原创 C语言 循环语句

一、内容提要1、for 循环;2、while 循环;3、do while 循环;4、break 的使用;5、continue 的使用。二、内容详解1、for 循环for(表达式 1;表达式 2;表达式 3){语句块 1}表达式 1:初始化;最早被执行;有且执行一次。表达式 2:判断,为真循环继续,为假循环结束;每次进入循环都需判断; 每次都执行。表达式 3:步进,修改循环因子值;执行完语句块 1 之后执行;每次都执行。for...

2021-11-17 20:20:43 687

原创 C语言 分支语言 if switch语句

一、内容提要1、if...else 语句;2、switch 语句。二、内容详解1、if...else 语句的三种表示1、if(表达式 1){ 语句块 1 }2、if(表达式 1){ 语句块 1 }else{ 语句块 2 }3、if(表达式 1){ 语句块 1 }else if(表达式 2){ 语句块 2 }...

2021-11-17 20:03:48 382

原创 C语言 输入输出printf scanf

变量: 可以改变的量 类型 变量名; 错误越早被发现,付出的代价越小 标识符命名规范: (变量名,函数名,宏名) 1.只能字母,数字和下划线_ 2.不能以数字开头 3.不能使用关键字 4.区分大小写printf:输出数据到屏幕 %d:输出十进制整数 %c:输出字符 %f:输出小数,包括float和double %s:输出字符串 %x:输出十六进制的整数 ,考试重点 %p:输出地址scanf_s:...

2021-11-17 19:36:29 945

原创 C语言 常量变量 数据类型

常量:不能修改的值 1.数字常量,例如 10,12.5,1.25*10^1(错误),1.25e1(考试) 2.字符常量,字符用''包括起来,例如'\0','\n','0','A','a' (计算机保存的是字符的编码) 0 换行 48,65,97 需要记忆 注意,字符只能保护一个字母或者数字或者符号.'ab'是错误的写法 ...

2021-11-17 19:33:32 284

原创 C语言 函数定义

返回值 函数名(参数列表){ 函数的实现}printf:输出数据到屏幕.库函数,编译器出厂时已经写好,我们可以使用,必须引用对应的头文件scanf:从键盘获取值变量:先定义,后使用^:按位异或sqrt:开根号#include <stdio.h>#include <math.h>//判断素数int main(){ int n; scanf_s("%d",&n); //for (int i = 2; i < n; i++)...

2021-11-17 19:29:12 208

空空如也

空空如也

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

TA关注的人

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