自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 生产者消费者

生产者与消费者模型生产者:生产数据的线程消费者:使用、处理数据的线程缓冲区:用于隔离生产者和消费者,这样可以避免互相等待,提高运行效率生产者快于消费者:缓冲区会爆满消费者快于生产者:缓冲区一直空使用条件变量可以解决生产者与消费者之间的效率不匹配问题。生产者快于消费者,通过消费者加速消费,生产者睡眠降低生产速度消费者快于生产者,通过生产者加速生产,消费者睡眠降低消费速度线程与socket编程由于TCP是面向连接的协议,需要一对一通信,需要每个客户端进行服务,之前是为每个客户端创建一个进程来

2021-04-09 09:07:07 131

原创 线程基础与死锁

线程线程介绍:线程就是进程中负责执行的部分,是进程内部的控制序列,它是轻量级的,没有自己独立的内存资源:代码段,数据段(data,dss)、堆区、环境变量、命令行参数、文件描述符、信号处理函数、当前的工作目录线程拥有独立的栈内存,也就是它自己独立的局部变量。一个进程中至少有一个线程,我们把它叫做主线程,也可以再创建多个线程。注意:进程是一个资源单位,线程是一个执行单位,线程是进程的一部分,进程中正是有了线程才能动起来POSIX线程早期各计算机厂商自己私有的线程库,接口实现的

2021-03-29 15:02:18 113

原创 多路复用

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

2021-03-29 14:59:43 258

原创 网络编程

网络编程底层遵循TCP/IP协议,在系统层Socket接口呈现。基于TCP协议的网络通信模型TCP协议的网络通信模型服务端客户端创建Socket对象创建Socket对象准备通信地址(本机)准备通信地址+端口号(目标)绑定Socket对象和通信地址连接服务端设置监听和排队数量等待客户端连接接收请求发送请求响应请求接收请求关闭Socket关闭Socket​ 等待客户端连接​ 分配一个新的Socket对象+进程或线程

2021-03-29 14:58:05 58

原创 本地进程间通信

进程间通信-SocketSocket是一种接口技术,可以让不同的进程进行通信,有两种方式:既可以同一计算机上的,也可以是不同计算机上的进程。同一计算机上socket通信:注意:底层需要借助socket文件,进行同一台计算机下不同进程之间的通信int socket(int domain, int type, int protocol);功能:创建socket对象domain: AF_UNIX,AF_LOCAL 选择使用socket文件进行通信type: SOCK_STREAM 数

2021-03-19 11:53:40 258

原创 进程间通信

进程基本概念1、进程与程序进程就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行进程一个进程被多次加载时生成多个进程进程就是处于活动状态的计算机2、进程的分类进程一般分为三种类型:交互进程、批处理进程、守护进程守护进程一般处于活动状态,运行在后台,由系统在开机时通过启动脚本来自动创建3、查看进程简单方式 ps 显示当前用户有控制终端的进程信息列表方式 ps auxw 显示所有进程详细信息字符意义a所有用户的控制终端的进程u无控制终端的进程x显

2021-03-15 09:02:09 93

原创 信号处理

信号处理基本概念1、中断​ 当程序接受到信息中止当前执行的程序,转而执行其他任务,等其他任务执行完成后再返回,这种执行模式叫中断,分为硬件中断和软件中断2、信号​ 是一种软件中断,由操作系统发出,程序接收后会执行相应的操作3、常见信号信号产生形式结果SIGINT(2)Ctrl+cSIGQUIT(3)Ctrl+\终止+coreSIGFPE(8)终止SIGKILL(9)SIGSEGV(11)终止+core4、不可靠信号和可靠信

2021-03-15 09:00:41 546

原创 文件操作

文件操作文件同步:1、在写入数据时,内存与磁盘之间有一个缓冲区,这个缓冲区机制是为了降低读写次序,从而提高读写效率。2、但这种机制带来的后果就是磁盘中的数据与实际写入的数据不匹配,那么系统提供三个函数可以让缓冲区中的数据项立即写入到磁盘上void sync(void);功能:把缓冲区中的数据同步到磁盘注意:并不会等待数据同步结束才返回,而是把缓冲区的数据加入写入的队列,然后立即返回int fsync(int fd); 功能:把指定的文件的内容从缓冲区同步到磁盘注意:会等到完全写入到磁盘才

2021-03-15 08:58:20 100

原创 系统调用

系统调用:(系统API)系统调用就是操作系统提供的一些功能供程序员使用,这些系统调用已经被封装成了C函数的形式,但它们不是标准C的一部分一般应用程序运行在用户态(0-3G),使用系统调用时进入内核态进行系统调用(3-4G)常用的标准库函数大部分时间都运行在用户态,底层偶尔也会调用系统调用进入内核态系统调用的代码是内核的一部分,其外部接口以共享库函数形式提供(linux-gate.so.1 /l ibc.so.6 ),并且这些接口的实现利用软中断进入到内核执行其真正的系统调用代码time ./a.

2021-03-11 18:58:33 81

原创 内存管理

内存管理用户层STL(最高级)自动分配/自动释放调用C++库C++new/delete调用CCmalloc/free调用POSIXPOSIXbrk/sbrk调用LinuxLinuxmmap/munmap调用内核(kernal)​系统层kernalkamlloc/vmalloc调用驱动dirverget_free_page内层汇编指令进程映像程序是存储在磁盘上的可执行文件,当程序运行时,系统就会将

2021-03-11 18:55:42 64

原创 Linux环境编程

Linux环境编程程序员必备技能:一门编译语言 C语言 C++数据结构与算法 表、树、图 查找、排序 STL操作系统 Linux系统网络编程 TCP/IP(Scoket、TCP、UDP、FTP、HTTP)数据库 MySQL界面设计 QtUNIX系统介绍:BCPL->newB->C->UNIX最早版本的UNIX诞生于1970年的贝尔实验室,作者丹尼斯.里奇,肯.汤普逊。是最早的多用户、多任务、支持

2021-03-09 09:05:20 383

原创 简单的查找与排序算法

算法数据结构中的算法,指的时数据结构所具备的功能解决特定问题的方法,它是前辈的一些优秀的经验总结算法的五大特征:有穷性(Finiteness):算法的有穷性是指算法必须能在执行bai有限个步骤之后终止;确切性(Definiteness):算法的每一步骤必须有确切的定义;输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;可行

2021-03-05 09:45:40 163 1

原创 图的简单了解

图(Graph) 型结构​ 什么是图型结构:由有穷且非空的顶点和顶点之间的边组成的集合​ 通常表示:G(V,E),G代表了一个图,V是图中顶点的集合(元素),E是图中边的集合(元素之间的关系)无向图:边用(A,B)方式表示,点到点之间是互通的在无向图中,任意两个顶点之间都有边,则该图称为无向完全图,则含有n个顶点的无向完全图有n*(n-1)/2条边有向图:边用<A,B>方式表示,仅表示A到B点,有向图中的边也称作弧,B是弧头,A是弧尾在有向图中,任意两个顶点之间都有方向相反的两条

2021-03-02 17:29:06 114

原创 线索二叉树、平衡二叉树

1、线索二叉树规律:在有n个节点的链式二叉树中必定存在n+1个指针域正因为链式二叉树中有很多的空指针,可以让这些指针这向下一个节点,这样在遍历时可以不用递归,二使用循环,可以提高遍历速度。#include <stdio.h>#include <stdlib.h>#include <stdbool.h>// 线索二叉树typedef struct TreeNode{ int data; struct TreeNode* left; struct Tr

2021-03-02 17:14:31 300

原创

树树型结构1、树的进本概念​ 是一种表示层次关系(一对多)的数据结构​ 有且仅有一个特定的节点,该节点没有前驱,被称为根节点。​ 剩余的n个互不相交的子集,其中的每个子集也都是一棵树​​ 注意:树型结构具有递归性(树中有树)2、树的表示方法:倒悬树、嵌套法、凹凸法3、树的专业术语:​ 节点:组成树的基础元素,同时节点也是一棵树​ 节点的度:该节点子树的数量​ 树的度(密度):树中节点的数量​ 树的高度:树的层数​ 树的深度:树的最大层次数就是它的深度​ 叶子节点:节点的度为0的

2021-03-02 16:58:28 49

原创 封装链表

封装链表尾添加的效率低,非法下标的判断效率也很低1、单链表节点:​ 数据域​ 指针域数据项:​ 头指针​ 尾指针​ 节点数量#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define TYPE int // 单链表的实现// 设计节点typedef struct Node{ TYPE data; struct Node* next;}Node;Node* cr

2021-02-01 09:20:27 504 1

原创 了解栈和队列,以及实现

栈和队列功能受限的表结构:对表结构加以限制、形成特殊的表结构栈:只有一个出入口的表结构,先进后出 FILO(栈的缩写:First In Last Out)​ 空增栈: top初始值:0 入栈 top++​ 满增栈: top初始值:-1 ++top 入栈​ 满减栈: top初始值:cal-1 出栈 top–​ 空减栈: top初始值:cal top-- 出栈​ 顺序栈:​ 数据项:​ 存储元素的内存首地址​ 栈的容量​ 栈定位置​ 运算:​ 创建、销毁、栈空、入

2021-01-19 19:00:22 97 1

原创 数据结构

数据结构一、什么是数据结构1、数据结构的起源1968年,美国 高德纳 教授,《计算机程序设计艺术》第一卷《基本算数》出版,开创了数据结构与算法的先河。​ 数据结构是一门研究数据之间关系和操作的学科,而非计算方法​ 数据结构+算法=程序 沃斯,凭借这个观点获得了图灵奖,因为这句话展示了程序的本质2、数据结构的基本概念​ 数据:所有能够输入到计算机中的,并能被程序处理的描述客观事物的符号​ 数据元素:数据的基本单位,也叫节点、记录 (原材料)​ 数据项:有独立意义的数据的最小单位,也叫做域

2021-01-17 19:38:33 143 1

原创 了解输入输出

输出缓冲区:程序输出的数据并不能立即显示到屏幕("文件")上,而是先存储到输出缓冲区中,当满足一定条件时才会显示("写入文件")出来: 1、遇到\n后,先显示之前缓冲区的数据 2、当程序结束时也会输出 3、遇到输入语句(scanf)也会输出 4、当输出缓冲区满4k时 5、手动刷新 fflush(stdout)--仅限Linux用 stdout:输出缓冲区 缓冲区机制就是提高数据的读写速度,可以让告诉的CPU与低速的输入输出设备之间协调工作输入缓冲区:程序并不会立即获取到从键

2021-01-08 14:21:03 124

原创 快速了解字符串

字符串字符:char ch;在计算机中字符是以整数形式存储在内存中,当需要时显示字符时,计算机会根据ascll码表中的对应关系来显示出相应的符号或图案 单引号括起来的 '\0' 0 空字符(不是空格) '0' 48 'A' 65 'a' 97 字符的输入: scanf("%c",&ch); 接收一个字符 ch = getchar();字符的输出: printf("%c",ch); putchar(ch);串:是一种数据结构,是由一组连续的若干个相

2021-01-05 11:06:56 167

原创 堆与malloc的故事

堆什么是堆内存:是进程中的一个内存段,由程序员手动管理。特点是足够大(理论上和物理内存一样大),缺点使用麻烦为什么要使用堆内存:1、随着程序越来越复杂,数据会越来越多2、其它内存段的申请和释放不受(程序员)控制,堆内存的申请释放受程序员控制如何使用堆内存:注意:在C语言中没有控制堆内存的语句,只能使用C标准库中提供的函数要用这4个函数需要<stdlib.h>这个头文件 void *malloc(size_t size); int* p = malloc(4);

2021-01-04 18:33:13 311

原创 指针简述

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

2020-12-23 14:39:53 262

原创 Ubuntu系统部分使用技巧

Ubuntu系统使用技巧:​ Ctrl+alt+t: 打开终端​ Ctrl+L: 清屏​ Tab: 自动补全​ up/down: 调出执行记录​ Ctrl+Alt+方向键: 切换工作区​ Alt+Tab: 切换任务​ 过滤:grep “关键字” 执行文件名重定向、管道、通配符​ 重定向:就是把命令的执行结果写入到文件中​ cmd > filename 把命令的执行结果以清空的方式写入到文件中,如果没有存在的文件则 新建一个​ cmd >> filenam

2020-12-08 18:39:25 484

原创 Linux的基本操作符和基础操作指令

Linux的基本操作符和基础操作指令提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录Linux的基本操作符和基础操作指令前言一、Linux中的文件夹都有啥?二、Linux中的特殊符号三、Linux终端里的基本操作符文件相关的命令:目录相关的命令:网络相关目录:其他相关命令:总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容

2020-12-07 19:23:05 215

空空如也

空空如也

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

TA关注的人

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