自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络编程Day04

线程管理一、基础概念 1、线程是进程的执行线路,它是进程内部的控制序列,或者说线程是它所在进程的一部分(进程是一个资源单位,线程是进程的一部分,是真正负责执行的) 2、线程是轻量级的,没有它自己独立的代码段、数据段、bss段、堆、环境变量、命令行参数、文件描述符、信号处理函数、当前目录等资源 3、线程有自己独立的栈内存、线程ID、错误码、信号掩码等 4、一个进程可以包含多个线程(多个执行线路),但是至少有一个,这个线程是主线程 5、ps -T -p [p...

2021-10-13 20:03:01 116

原创 网络编程Day03

多路复用: 使用一个进程(且只有一个主线程)同时监控若干个socket文件描述符的读写,这种读写模式叫做多路复用 多用于TCP服务端,用于监控若干个客户端的连接和数据的收发 优点:不需要频繁地创建进程、销毁进程,从而达到节约内存资源、时间资源,也能避免进程之间的竞争、等待 缺点:单个客户端的任务不能耗时太长,否则其他客户端就会感知到。 适合并发量高、任务量短小的情景,例如:Web服务器select: fd_set 是文件描述符的集合,是...

2021-10-13 20:02:27 159

原创 网络编程Day02

网络通信底层遵循TCP/IP协议,在系统中以socket接口方式呈现基于TCP协议的网络通信模型:服务端客户端创建socket对象创建socket对象准备通信地址(本机ip)+端口号准备通信地址(目标公网ip)+端口号绑定socket和通信地址...设置监听和排队数量...

2021-09-22 18:46:54 117

原创 网络编程Day01

一、Socket进程间通信基本特点:socket是一种接口技术,被抽象成一个文件来操作,可以让同一台计算机的进程之间通信,也可以让不同计算机的进程间通信(网络)同一台计算机的进程间通信:底层需要借助socket文件,进行同一计算机下的进程间通信intsocket(intdomain,inttype,intprotocol);功能:创建socket对象domain:...

2021-09-22 18:46:15 87

原创 Linux环境编程Day08-2

进程间通信基本概念:什么是进程间通信:是指两个或多个进程之间交互数据的过程,是因为进程之间是相互独立的,为了协同工作的需要必须要交互数据进程间通信的分类:简单的进程间通信:信号、文件、环境变量、命令行参数传统的进程间通信:管道文件XSI进程间通信:共享内存、消息队列、信号量网络进程间通信:套接字Socket传统进程间通信-管道(FIFO):管道是UNI...

2021-09-22 18:44:51 54

原创 Linux环境编程Day08

进程间通信基本概念:什么是进程间通信:是指两个或多个进程之间交互数据的过程,是因为进程之间是相互独立的,为了协同工作的需要必须要交互数据进程间通信的分类:简单的进程间通信:信号、文件、环境变量、命令行参数传统的进程间通信:管道文件XSI进程间通信:共享内存、消息队列、信号量网络进程间通信:套接字Socket传统进程间通信-管道(FIFO):管道是UNI...

2021-09-10 20:48:21 52

原创 Linux环境编程Day07

进程的正常退出:1、在main函数中执行returnn,该返回值可以被父进程接收到的,在main函数中与exit几乎等价的2、进程调用了exit函数,该函数是标准库函数voidexit(intstatus);功能:在任何时候调用此函数都可以结束进程status:结束状态码EXIT_SUCCESSEXIT_FAILURE...

2021-09-10 20:47:51 67

原创 Linux环境编程Day06

进程的基本概念:1、程序与进程程序就是存储在磁盘上的可执行文件,当程序被加载到内存中开始运行时就叫做进程。一个程序可以被多次加载生成多个进程,进程就是出于活动状态的计算机程序2、进程的分类进程一般分为三种类型:交互进程、批处理进程、守护进程守护进程一般都处于活跃状态,运行在后台,由操作系统在开机时通过启动脚本自动地创建3、查看进程简单形式:ps显示当前用户的...

2021-09-10 20:47:20 61

原创 Linux环境编程Day05

目录操作intmkdir(constchar*pathname,mode_tmode);功能:创建目录mode:目录的权限,注意必须要有执行权限,否则无法进入intrmdir(constchar*pathname);功能:删除空目录intchdir(constchar*path);功能:进入某个目录,相当于cd命令char*getcwd(char*buf,size_tsi...

2021-09-06 20:13:54 171

原创 Linux环境编程Day04

一、文件同步:1、在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘的读写次数,提高了读写的效率2、这种机制带来的后果就是磁盘中的数据与实际写入的数据不匹配,系统提供了三个函数可以让缓冲区中的数据立即写入到磁盘上voidsync(void);功能:把缓冲区中的数据立即同步到磁盘上注意:并不会等待数据全部同步完,而是把缓冲区的数据加入写入队列后,立即返回intfsync(intfd);功能:把指...

2021-09-06 20:13:27 103

原创 Linux环境编程Day03

内存管理总结:1、mmap/munmap底层是不维护任何东西,只返回一个映射后的内存首地址,所映射的内存位于堆中2、brk/sbrk底层维护一个指针,记录了所映射的内存结尾下一位,所映射的内存也是位于堆中,底层调用了mmap/munmap3、malloc/free底层维护一个双向链表和必要的维护信息,所映射的内存也是位于堆中,底层调用了brk/sbrk4、每个进程都有4G(32位系统)的虚拟内存空间,虚拟内存只是个数字,必须与物理内存建立映射关系才能使用...

2021-09-06 20:12:57 56

原创 Linux环境编程Day02

一、内存管理用户层STL自动分配/释放内存调用C++C++new/delete调用CCmalloc/free调用POSIXPOSIXbrk/sbrk调用Linux系统函数Linuxmmap/munmap调用内核kernel系统层内核...

2021-09-06 20:11:38 50

原创 Linux环境编程Day01

程序员必备技能:一门编程语言:C语言、C++数据结构与算法:表、树、图、查找、排序、STL操作系统:UNIX/Linux系统网络编程:TCP\IP(Socket技术、TCP、UDP、FTP协议)数据库:MySQL界面设计:Qt课程介绍:环境介绍内存管理文件管理信号处理进程管理进程通信线程管理线程同步网络编程UNIX...

2021-09-01 18:56:05 154

原创 数据结构与算法Day12

排序算法:排序算法的稳定性:在待排序的数组中,如果有值相同的数据,排序过程中如果无论如何都不会改变它们俩的前后顺序,则认为该排序算法是稳定的注意:算法的时间复杂度并不能完全地代表算法的实际执行时间,有些时候看似复杂度高的算法反而速度快冒泡:数据左右进行比较,把最大的数据交换到最后,特点是该算法对数据的有序性敏感,在排序过程中如果发现有序可以立即停止,如果待排序的数据基本有序时,冒泡排序的效率非常高。...

2021-09-01 18:55:12 302

原创 数据结构与算法Day11

图的存储结构:邻接矩阵:用一个一维数组来存储n个顶点,用一个n*n的二维数组存储顶点之间的边charV[n]={A,B,C,D,E,F};ABCDEFA[0][1][1][0][0][0]B[1][0][0][1][0][0]C[1][0][0][1][0][1]D[0][1][1][0][1][1]...

2021-09-01 18:54:39 52

原创 数据结构与算法Day10

平衡二叉树前提是有序的二叉树,它的左右子树的高度差不超过1,而且它的所有子树也要满足这个条件。如果一棵有序二叉树呈单支状(接近单支状),它的查找效率接近链表,因此如果让它达到平衡的状态它的效率才最高由于节点的位置是受值的影响,因此只能进行调整,而不能强行修改二叉树不平衡的基础原因:xy/\...

2021-09-01 18:54:14 72

原创 数据结构预算法Day09

二叉树的常考的笔试面试题:1、把一棵二叉树转换为它的镜像树2、输入两棵二叉树A、B,判断B是不是A的子结构(我们约定空树不是任意一棵树的子结构)3、计算出有序二叉树中第k大的数4、判断一棵二叉树是否是对称5、将一棵有序二叉树转换为一个有序的双向循环链表6、通过一个函数,把一棵二叉树按照之字型打印,即第一层从左往右打印,第二层从右往左打印,第三层又从左往右打印,以此类推。【使用两个栈】线索二叉树:规律:在有n个节点的链...

2021-09-01 18:53:43 84

原创 数据结构与算法Day08

复习:树型结构:1、树的基本概念一种具有一对多关系的数据结构有且只有一个没有前趋的节点,称为根节点树具有递归性2、树的表示法倒悬树、凹凸法、嵌套法3、树的专业术语节点:构成树的基本元素,节点也是树节点的度:该节点子树的数量树的度(密度):树中节点的数量树的高度(深度):树中的最大层数叶子节点:节点的度为0的节点...

2021-09-01 18:53:04 69

原创 数据结构与算法Day07

二叉树:是一种常用的数据结构,处理起来比较简单方便,而且普通树可以很方便地转换成二叉树使用。定义:节点度最多为2二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。二叉树的性质:【重点】性质1:二叉树的第i层上至多有2^(i-1)(i≥1)个节点满二叉树:每层的节点数都是2^(i-1)完全二叉树:...

2021-09-01 18:52:27 59

原创 数据结构预算法Day06

通用链表:节点:指针域void*ptr;链表数据项:头节点指针节点数量运算:常规功能+回调函数树型结构:1、树的基本概念一种表示层次关系(一对多)的数据结构有且仅有一个特定的节点,该节点没有前趋,被称为根节点。剩余的n个互不相交的子集组成,其中的每一个子集也都是一棵树,被称为根节点的子树注意:树型结构具有...

2021-09-01 18:52:02 76

原创 数据结构与算法Day04

封装链表:1、单链表原因:尾添加的效率低、非法下标判断也很低节点:数据域指针域链表数据项:头指针尾指针节点数量2、静态链表节点:数据域游标静态链表的节点存储在连续的内存中,通过游标来访问下一个节点这种链表在插入删除时只需要修改游标的值,...

2021-09-01 18:51:18 46

原创 数据结构与算法Day03

复习:1、什么是数据结构是专门研究数据之间关系和操作的学科,而非计算方法数据结构+算法=程序2、逻辑结构与物理结构逻辑关系:集合:除了同属于一个集合外,数据之间没有任何关系表:数据之间存在一对一关系树:数据之间存在一对多关系图:数据之间存在多对多关系物理结构:...

2021-09-01 18:50:44 36

原创 C语言部分总结

2021-08-30 15:35:26 41

原创 数据结构与算法Day02

功能受限的表:栈:只有一个进出的出入口的表结构,先进后出,FILO顺序栈:数据项:存储元素的内存首地址栈的容量栈顶位置运算:创建、销毁、入栈、出栈、栈满、栈空、栈顶注意:栈顶指向顶部的第一个数据,称为满增栈...

2021-08-11 19:51:05 58

原创 数据结构与算法Day01

一、什么是数据结构1、数据结构的起源1968年,美国高德纳教授,《计算机程序设计艺术》的第一卷《基本算法》的出版,开创了数据结构和算法的先河。数据结构是一门研究数据之间关系和操作的学科,而非计算方法。数据结构+算法=程序,沃斯凭借这个观点写的论文,获得图灵奖,这句话展示了程序的本质。2、数据结构的基本概念数据:所有能够输入到计算机中,能够被程序处理的描述客观事物的符号。数据项:有独立含...

2021-08-11 19:50:28 45

原创 从零开始学C语言(16)

复习:结构:结构是一种由程序员自己设计的数据类型,用于描述一个事物的各项数据,由若干个基础的数据类型组成设计:struct结构体名{类型成员名;...};定义结构变量struct结构体名结构体变量;注意:也可以在设计结构体时直接定义结构体变量访问成员:结构体变量.成员名结构体指针->成员名...

2021-08-02 18:57:55 83

原创 从零开始学C语言(15)

结构:结构是一种由程序员自己设计的数据类型,用于描述一个事物的各项数据,由若干个不同的基础类型组成。设计:struct结构体名{类型1成员名1;类型2成员名2;...};定义结构变量:struct结构体名变量名;注意:在定义结构变量时,struct不能省略结构体变量初始化:st...

2021-08-02 18:57:27 201

原创 从零开始学C语言(13)

复习:1、文件包含#include把一个头文件导入到当前文件中#include<>#include""系统是通过环境变量指定头文件的加载路径还可以通过编译参数-I/path指定头文件的加载路径2、宏常量#define宏名字面值数据如果在代码中使用了宏,在预处理时会把所有的宏替换为宏名后面的字面值数据优点:提高代码可读性、提高可扩展性、提高安全性、...

2021-08-02 18:56:37 87

原创 从零开始学C语言(12)

复习:1、输出缓冲区程序输出的数据并没有立即写入到"文件",而是先存储到了缓冲区中,当满足一定条件时才会写入到文件中1、遇到\n2、遇到输入语句3、缓冲区满4k4、程序结束5、手动刷新fflush2、输入缓冲区在终端输入的数据此时由终端保管,当按下回车后,数据由终端写入到程序的输入缓冲区,scanf函数再从缓冲区中读取数据到给变量赋值1、当想要输入的是整型、浮点型数据,而缓冲区的数据是字符或符号时,此时...

2021-08-02 18:56:02 54

原创 从零开始学C语言(11)

复习:字符串:由字符组成的串型结构,'\0'是它的结束标志存在形式:字符数组:栈内存可以修改要为'\0'预留位置字符串字面值:代码段只读修改就会产生段错误末尾隐藏一个'\0'地址constchar*str="hehe";sizeof("hehe")结果是5末尾有'\0'sizeof(str)结果是4str是指针...

2021-07-25 22:55:03 94 2

原创 从零开始学C语言(10)

复习:指针数组与数组指针:指针数组:成员是指针的数组int*arr[10];数组指针:专门用于指向数组的指针int(*arr)[10];指针与数组名区别:数组名就是数组的首地址,数组名与数组的内存之间是映射关系,相当于一个特殊的指针,是常量,是不能修改的数组作为函数参数时蜕变成指针,所以长度才丢失,因此需要额外传递长度参数所以数组名可以解引用,如果指针指向数组,指针可以使用中括号来使用,也就是指针也可以当做数...

2021-07-25 22:54:34 93

原创 从零开始学C语言(9)

什么是指针:类型定义指针变量整型内存编号为什么要使用指针:1、函数之间共享变量时、输出参数2、提高传参效率(指针变量4|8字节)3、使用堆内存时如何使用指针:定义:类型*变量名_p;变量名以p结尾,与普通变量以示区分一个*不能连续定义指针变量初始化为NULL类型决定了能访问的字节数赋值:变量名_p=&变量名|m...

2021-07-25 22:54:07 65

原创 从零开始学C语言(8)

什么是指针:指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,代表了内存的编号,通过这个编号可以访问对应的内存为什么要使用指针:1、函数之间相互独立,但有时候需要共享变量传参是单向值传递全局变量容易命名冲突使用数组还需要传递长度命名空间是独立的,但是地址空间是同一个,所以指针可以解决这个问题2、由于函数之间传参是值传递(内存拷贝),对于字节数较多的变量,值传...

2021-07-25 22:53:27 49

原创 从零开始学C语言(7)

复习:自定义函数:1、函数声明告诉编译器函数的格式,方便它检查调用者的参数、返回值2、隐式声明当调用函数时如果没有函数声明、定义,编译器会猜测函数的格式,函数的参数按照调用者提供的实参猜测,返回值默认猜测为int类型C89:完全猜对,没有警告C99:完全猜对,也会警告3、函数定义函数的定义出现在调用之前,可以省略声明4、函数传参值传递:...

2021-07-25 22:52:51 54

原创 用C语言写五子棋

五子棋:需要的数据:(全局)1、定义棋盘二维数组15*15空位置'*'2、定义棋子角色变量白棋'#'黑棋'$'3、定义变量用于记录下棋的位置业务逻辑:(实现成一个个函数)是否需要初始化for(;;){1、清理屏幕、打印棋盘2、落子输入坐标,...

2021-07-19 21:02:47 500

原创 从零开始学习C语言之作业1

0.1练习1:定义各种类型的变量并初始化,使用printf来显示练习2:定义各种类型的变量并初始化,使用scanf输入,printf输出0.2练习1:输入三个整数,从大到小显示?练习2:输入一个年份,判断是闰年还是平年?四闰百不闰,四百闰练习3:输入一个年份和月份,判断该月有多少天?练习4:输入一个三位整数,判断是否是水仙花数?练习5:输入一个成绩,判断等级[100,90]...

2021-07-16 19:36:34 126

原创 从零开始学习C语言(6)

复习:进制转换:十进制转二进制:求余,直到商为0为止,过程中产生的余数就是二进制(逆序)二进制转十进制:2^(n-1)每位相加二进制转八进制:每三位二进制位对应一位八进制二进制转十六进制:每四位二进制位对应一位十六进制超过10用ABCDEF表示代码中0开头的是八进制数据,0x/0X开头的是十六进制数据printf%o以八...

2021-07-16 19:35:44 118

原创 从零开始学习C语言(5)

进制转换:为什么要使用二进制、八进制、十六进制?因为现在的CPU只能识别高低两种电流,只能对二进制数据进行计算二进制数据虽然可以直接被CPU识别计算,但是不方便书写、记录,所以把二进制数据转换成八进制是为了方便记录到文档中随着CPU的不断发展位数不停增加,由早期的8位逐渐发展到现在的64位,因此八进制不再能满足需求,所以发展出了十六进制,由于历史原因八进制还不能完全地退出历史舞台。十进制转二进制:(转其他进制...

2021-07-16 19:35:05 392

原创 从零开始学习C语言(4)

二维数组:一维数组相当于把变量排成一排,通过编号访问二维数组相当于把变量排成矩阵,通过行号和列号访问定义:类型数组名[行数][列数];intarr[3][5];[0,0][0,1][0,2][0,3][0,4][1,0][1,1][1,2][1,3][1,4][2,0][2,1][2,2][2,3][2,4]使用:数组名[行下标][列...

2021-07-16 19:34:26 62

原创 从零开始学习C语言(3)

复习:1、C代码变成可执行程序的过程预处理:查看宏函数的替换结果,检查宏函数gcc-E编译:理解C代码的底层原理,函数重载gcc-S汇编:生成代码库,静态库、共享库gcc-c链接:是多文件编程的基础gcca.ob.oc.o...2、gcc编译器常用参数-E-S-c-std=gnu99-o-I-l-Wall-Werror-D(命...

2021-07-16 19:33:45 63

空空如也

空空如也

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

TA关注的人

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