自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (3)
  • 收藏
  • 关注

原创 基于HTTP协议的web服务器项目

项目简介:基于 HTTP 协议实现一个多线程服务器,客户端通过浏览器发送请求,服务器接收并分析客户端的请求方法和资源,从而执行相应的逻辑处理,最终将客户请求的资源以 HTML 页面的形式呈现,并能进行差错处理。项目思路:首先实现两个主机不同进程间的通信,当服务器收到请求后,要进行分析请求方法,当方法确定后应该拿到请求的资源,接下来要根据资源是否存在执行相应的逻辑处理。GET 方法:如果没有参...

2018-10-06 14:46:55 1657

原创 项目:文件压缩(huffman树)

原理:将每个字符转换成对应的编码,而编码都是由0和1组成,那么就可以用比特位来表示编码对应的字符,从而实现文件压缩;同样,再根据压缩的步骤反推,即可实现解压缩思路: 1,统计文件中各个字符出现的次数定义一个哈希表,用直接定址法,统计各个字符出现的次数; 要注意的是:字符的大小是-127~128,而哈希表的范围是0~255,所以使用直接定址法的时候需强转成无符号2,构建哈夫...

2018-08-27 14:46:24 251

原创 赋值运算符重载和内联函数

一、赋值运算符重载 1、概念: 重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。操作符重载也是一个函数,具有返回值和形参表。它的形参数目与操作符的操作数目相同,使用运算符重载可以提高代码的可读性。 不可以重载的运算符 : · 成员选择符 ·* ...

2018-08-07 17:54:26 795

原创 拷贝构造函数和析构函数

一、拷贝构造函数 1、概念: 只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造函数是特殊的构造函数,创建对象时使用已经存在的同类对象来进行初始化,由编译器自动调用。class Date{public: Date(int year, int mon...

2018-08-07 16:09:36 1661

原创 构造函数

一、概念: 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的生命周期内只调用一次,保证每个数据成员都有一个合适的初始值。 二、构造函数特性 · 函数名与类名相同; · 有返回值; · 新对象被创建时,由编译器自动调用,且在对象的生命周期内仅调用一次; ...

2018-08-07 15:30:09 189

原创 类的定义和封装

一、类的引入 · C语言中,”数据”和“函数”是分开的,语言本身并不支持“数据和函数”之间的关联性;所有的数据由一组“分布在各个以功能为导向的函数中”的算法所驱动,它们处理的是共同的外部数据。 · 在C++中,结构体内不仅可以定义变量,也可以定义函数;如下:#define _CRT_SECURE_NO_WARNINGS //编译出错,strcp...

2018-08-03 18:15:06 1420

原创 函数重载和引用

一、函数重载 函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个相同名称的函数,这些同名函数的形参列表(参数个数、参数类型、顺序)必须不同,返回值可同可不同,常用来处理实现功能类似、数据类型不同的问题。#include<iostream>using namespace std;int Add(int left, int right){...

2018-08-03 11:43:44 312

原创 缺省参数

缺省参数 在C语言中,函数没有指定参数列表时,默认可以接收任意多个参数; 在C++中,因为有严格的参数类型检测,所以,函数没有参数列表时,默认为void,不接收任何参数。 以下是例子:C++中:#include<iostream>using namespace std;void Test(){}i...

2018-08-02 17:54:45 7353 3

原创 初识C++

一、C++输入&输出 (1) C++标准明确提出不支持.h的头文件,为了和C区别开,也为了正确使用命名空间,C++规定头文件不使用后缀.h; (2)当使用 iostream.h 时,相当于在C中调用库函数,使用的是全局命名空间;当使用 iostream 时,该头文件没有定义全局命名空间,必须使用 namespace std,这样才能正确使用cout和 ci...

2018-08-02 16:04:47 121

原创 网络基本知识和TCP/IP模型

一、网络协议 (1)”协议”是一种约定; (2)协议是网络通信中的一个必要条件。 二、协议分层 特点:高内聚、低耦合,让每一层可以更专注地做自己的事情; 每层之间可以直接通信,一旦跨层,就不能进行通信; 分层最大的好处在于“封装”。 三、OSI七层模型 (1)O...

2018-08-01 16:56:12 171

原创 进程间关系和守护进程

一、进程组 (1)进程组是一个或多个进程的集合; (2)通常,进程组与同一作业相关联,可以接收来自同一终端的各种信号; (3)每个进程组都有一个唯一的进程组ID; (4)每个进程组都有一个组长进程,组长进程的标识是,其进程ID等于其进程组ID; (5)只要在某个进程组中有一个进程存在,则该...

2018-07-31 18:35:56 167

原创 线程同步与互斥

一、基本概念 (1)公共的资源称为临界资源; (2)访问临界资源的代码称为临界区; (3)互斥,为了保护临界区/临界资源的安全性; (4)同步,访问临界资源时需要按照一定的顺序; (5)原子性,对目标数据要么改了,要么没改,不存在改一部分的情况。 二、mutex(互斥量) ...

2018-07-30 18:29:59 226

原创 线程控制

一、POSIX线程库 ·线程函数库是用户级的,此库为pthread; ·链接线程函数库时要使用编译器命令的“ -lpthread”选项。 二、线程创建功能:创建一个新的线程函数原型: int pthread_create(pthread_t *thread,const pthread_attr_t *attr, void *(*s...

2018-07-30 12:52:10 141

原创 线程的基本概念及线程与进程的关系

一、深刻理解线程的基本概念 在一个程序里的一个执行路线 就叫做线程; 线程是在进程内运行的; 一切进程至少都有一个执行线程; (1)Linux下所谓的线程是用PCB模拟实现的; (2)Linux下的线程称为轻量级进程,以前所说的进程可以理解为只有一个执行流的进程 ; ...

2018-07-30 10:41:51 368

原创 静态库和动态库

静态库(.a): 程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库; 动态库(.so): 程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码;·一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码; ·在可执行文件开始运行前,外部函数的机器码由操作系...

2018-07-22 15:44:39 113

原创 对文件I/O的基本认识

一、文件I/O函数 常见的文件I/O函数有 open()、close()、read()、write()、lseek();open()函数函数功能:打开一个文件包含的头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h&g...

2018-07-21 18:16:40 232

原创 Linux下如何同时注释多行/同时取消多行注释

同时注释多行1、首先,将光标放在要注释的行首,然后按ESC进入命令行模式;2、按Ctrl + V进入 VISUAL BLOCK ;3、按 PgUp/PgDn选择要注释的行;4、按大写的i进入插入模式;5、输入//,按ESC保存即可同时删除多行注释这里写代码片...

2018-07-21 14:09:53 22617

原创 多态

一、多态的概念 同一种事物在不同场景下的多种状态; 多态的含义: 如果基类的指针指向基类的对象,则函数调用基类中的虚函数; 如果基类的指针指向派生类的对象,则函数调用派生类中的虚函数。 二、多态的分类 静态多态:在程序编译期间已经确定函数的行为; ...

2018-07-10 23:38:15 174

原创 信号量

一,信号的基本概念 如图1所示,用户输入命令,在外壳下启动一个前台进程; 通过组合键CTRL + C,CTRL + 1,CTRL + Z可以向前台进程发送信号; 进程所收到的信号都是由操作系统写的 .2,用户按下ctrl + c,键盘输入产生一个硬件中断; 3,如果CPU当前正在执行这个进程...

2018-07-08 23:21:56 149

原创 进程控制

一、进程的优先级 取值范围:-20 ~ 19. 值越小,优先级越高 二、调整优先级的方法 (1) 启动进程前调整: nice -n (n指优先级) (2) 程序运行过程中调整: renice 优先级 -p pid(进程号) (3) top—> r —> 输入pid —> 输入nice...

2018-07-03 22:51:52 87

原创 初识进程控制

一、进程的概念1、程序:为了实现特定任务的一系列指令的有序集合。 程序也可以这样表示: 代码 + 数据 2、进程: 从用户角度看:进程是程序的一次动态执行过程; 从操作系统角度看:(1)进程是系统分配cpu、内存、时间片等系统资源的基本单位;(2)是系统分配资源的最小单位;(3)每个进程都有自己独立的地址空间和运行状态。 进程也可以这样表示: 代码 + 数据 + PCB + 堆栈...

2018-07-03 21:56:05 174

原创 进程间通信——消息队列和共享内存

消息队列 ·消息队列提供了从一个进程向另一个进程发送一块数据的方法; ·每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值; ·消息队列也具有管道的缺点,即每个消息的最大长度是有上限的,每个消息队列的总的字节数是有上限的,系统上消息队列的总数也有一个上限。消息队列在内核中的表示 消息队列函数 1、创建和访问消息队列函数原型:int msgget(ke...

2018-06-13 19:54:13 1200

原创 进程间通信——管道

一,目的 ·数据传输:一个进程需要将它的数据发送给另一个进程·资源共享:多个进程之间共享同样的资源·通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。·进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够阻止另一个进程的所有陷入和异常,并且能够及时知道它的状态改变。二,分类 管道:命名管道,命名管道System V进程间通信:消息队列,共...

2018-06-13 16:57:52 141

原创 非比较排序——基数排序

【基数排序】 又名桶排序 LSD(Least Significant Digit first ) MSD(Most Significant Digit first)基本思想: 首先根据个位数的数值,在遍历数据时将它们各自分配到编号0-9的桶(个位数值与桶号一一对应)中。 分配结束后,接下来将所有桶中所盛数据按照桶号由小到大(桶中按先进先出)依次重新收集串起来,得到的仍是无序的数列; ...

2018-06-05 16:49:05 138

原创 非比较排序——计数排序

【计数排序】 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用 操作步骤: (1)确认数据的范围; (2)确定计数空间; (3)统计相同元素出现次数; (4)根据统计的结果将序列回收到原来的序列中 时间复杂度:O(n) 空间复杂度:O(m) ——>m:数据范围代码如下:void CountSort(int* array, int size){ int...

2018-06-05 16:32:10 123

原创 常见排序算法——归并排序

基本思想: 将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序, 然后将他们合并成一个序列。合并两个子序列的过程称为二路归并.由于归并排序不依赖于待排序元素序列的初始输入状态,每次划分时两个 子序列的长度基本一致,所以归并排序的最好、最差和平均时间复杂度均 为O(n*log2n ) 空间复杂度为:O(n) 它是一种稳定的排序算法void _MergeData(int...

2018-06-05 16:24:32 152

原创 常见排序算法——交换排序

利用交换元素的位置进行排序的方法称作交换排序 常用的交换排序的方法:冒泡排序和快速排序 【冒泡排序】 冒泡排序最好情况时间复杂度O(n),冒泡排序最坏情况下时间复杂度O(n^2) 冒泡排序空间复杂度O(1) 冒泡排序是一种稳定的排序算法void BubbleSort(int* array, int size){ int i = 0; for (i = 0; i ...

2018-06-05 16:18:47 3072

原创 常见排序算法——选择排序

基本思想: 每一趟(第i趟,i=0,1,…,n-2)在后面n-i个待排序的数据元素集合中选 出关键码最小的数据元素,作为有序元素序列的第i个元素。待到第n-2趟 做完,待排序元素集合中只剩下1个元素,排序结束 【直接选择排序】 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中 的最后一个(...

2018-05-30 17:51:56 297

原创 常见排序算法——插入排序

基本思想:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的,元素直到插入全部完为止。【直接插入排序】 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经 排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序 进行比较,找到插入位置即将array[i]插入,原来位置上的...

2018-05-30 16:01:43 194 1

原创 位图

位图所谓位图(bitmap),是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。使用位图法判断整形数组是否存在重复判断集合中存在重复是常见编程任务之一,...

2018-05-24 21:52:21 212

原创 动态顺序表的基本操作

seqlistd.h#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int DataType;typedef struct SeqListD{ DataType* _array; int _size; //有...

2018-04-25 21:25:41 107

原创 静态顺序表基本操作

测试环境VS2013 seqlist.h#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <malloc.h>typedef int DataType;typedef struct ListNode{ struct...

2018-04-21 15:50:43 270

原创 指针相关概念

通俗的说,指针就是地址;指针变量是变量,是一个用来存放地址的变量。 1.指针数组 指针数组是一个可以存放指针的数组。 例:int *arr1[10]; char *arr2[4];2.数组指针 数组指针是指向数组的一个指针。 例:int (*p)[10]; //p代表数组指针int *p[10]; //p代表指针数组注意: (1)[ ]的优先级要高于号的...

2018-03-23 13:19:42 181

原创 可变参数列表的解析

可变参数列表是通过函数实现为可变参数的形式,可以接受1个以上的任意多个参数,可变参数列表要求至少有1个确定的参数。 我们用的第一个可变参数列表的函数就是 printf函数 例:int printf(const char *format[,argument]...)int average(int n,...)可变参数列表是通过函数实现的,故函数传参时要形成临时变量且保存在栈桢...

2018-03-18 17:38:00 153

原创 MYSQL常用命令(一)

Mysql的运行环境:Centos6.5版本 一、MySQL数据库基础 1.安装Mysql。yum install mysql-server.i6862.启动Mysql服务service mysqld start3.关闭Mysql服务service mysqld stop4.创建库的基本语句:create database 库名;5.使用库:use 库名...

2018-03-12 17:55:08 203

原创 函数的调用过程(栈桢)

用下面这段代码来研究函数的调用过程#include<stdio.h>#include<stdlib.h>int myfun(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 0xAAAAAAAA; int b = 0xBBBBBB...

2018-03-11 18:05:49 433

原创 C语言常见基础题目(三)

第十一题:一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下;求它在第十次落地时,共经过多少米?第十次反弹多高?includeincludeincludeincludeincludeincludeincludeincludeincludeincludeinclude...

2018-02-20 18:10:50 1839

原创 C语言常见基础题目(二)

第七题:交换两个整数的值。includeincludeincludeincludeincludeincludeincludeinclude

2018-02-20 17:07:22 227

原创 C语言常见基础题目

第一题:在屏幕上打印9*9乘法口诀表。 //#define _CRT_SECURE_NO_WARNINGS 1 (VS编译器下使用 scanf 时需要在最开始加上这行代码)includeincludeincludeincludeincludeincludeincludeincludeincludeincludeincludeinclude

2018-01-31 17:09:11 2908 1

原创 三子棋

三子棋游戏

2018-01-05 01:05:58 160

嵌入式开发-平台开发工作中的笔记

嵌入式开发--平台开发工作中的笔记

2022-08-01

工作中关于嵌入式的笔记

工作中关于嵌入式的笔记

2022-03-17

工作中CPE及MIFI相关的随手笔记

嵌入式行业工作一年半以来的一些随手笔记

2021-01-22

空空如也

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

TA关注的人

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