- 博客(76)
- 收藏
- 关注
原创 自主Web服务器
项目名称:自主web服务器实现环境:Linux、MySQL、浏览器项目描述:1、实现最基本的HTTP/1.0版本的web服务器,客户端能够使用GET、POST方法请求资源2、服务器将客户请求的资源以html页面的形似呈现,并能够进行差错处理(如:客户请求的资源不存在时,服务 器能够返回一个404的页面)3、服务器能进行简单的cgi运行。如当客户在表单中输入数据后,服务器能够将运行结果返回客户4、能够通过页面对数据库进行操作,如增删查改等操作应用技术:网络编程(TCP/IP协议,http协议)
2021-05-26 19:52:07
274
原创 剑指offer32 - 把数组排成最小的数(c++)
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。题解:可以用全排列的做法找到最小的数,但是这样就会使得最后得结果要在n!个数中进行比较,这样比较的次数和最后的结果个数太多,所有我们可以用下面的办法,只需要在sort()函数中自定义一个Compare,让按照Co...
2020-03-27 17:45:19
286
原创 剑指offer27 - 字符串的排列(c++)
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。**题解:**先将第一个数字与后面每一个数字进行交换,然后排列后面的(begin + 1,end)个数。排列完成之后,将交换后的数交换回来,方便下一次进行交换。主干部分:swap(str[i],str[beg...
2020-03-27 17:44:23
282
原创 Linux --- 多线程
一.线程的基本概念1.线程概念进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映...
2019-10-08 18:26:49
193
原创 Linux --- 进程信号
一.信号入门1.生活应用的信号街道上的红绿灯就是一个信号。下课的铃声古代的狼烟2技术应用角度的信号(1)用户输入命令,在shell下启动一个前台进程用户按ctrl + c,这个键盘输入产生了一个硬件信号,被os获取,解释成信号,发送给目标前台进程前台进程因为受到信号,从而引起进程退出。3.注意Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台...
2019-10-06 14:57:00
163
原创 进程间通信
一.进程间通信介绍1.进程间通信目的(1)数据传输:一个进程需要将它的数据发送给一个进程。(2)资源共享:多个进程之间共享同样的资源。(3)通知事件:一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件(4)进程控制:有些进程希望完全控制另一个进程的进行(如debug进程),此时控制进程希望能够拦截另一个进加粗样式程之间的所有陷入和异常,并能够及时知道它的状态改变。2.进...
2019-10-05 15:37:28
227
原创 Linux进程控制
1.进程创建fork()为什么有两个返回值?(1)fork()会创建子进程,两个进程都会指向return语句,所有又两个返回值。(2)fork()之后if和else会同时执行,id有两份,子进程查第一份,父进程查第二份。(3)创建一个进程,就等于多了一个PCB,地址空间,页表,映射关系。(4)fork()之后,父子进程代码共享,数据以写时拷贝的形式各自私有一份。(速度更快,效率更高,节...
2019-10-04 14:12:10
176
原创 Linux进程概念
一.冯诺依曼结构(1)输入设备:键盘,鼠标,扫描仪,写字板(2)输出设备:显示器,打印机(3)存储器:存储器是用来保存程序和数据,以及运算的中间结果和最后结果的记忆装置。计算机的存储系统分为内部存储器(简称内存或主存储器)和外部存储器(简称外存或辅助存储器)。主存储器中存放将要执行的指令和运算数据,容量较小,但存取速度快。外存容量大、成本低、存取速度慢,用于存放需要长期保存的程序和数据。...
2019-10-03 14:11:21
199
原创 vim编译器的使用和gdb调试程序
一.vim编译器的使用vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且 还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。1.vim的基本概念(三种模式)(1)正常/普通/命令模式控制屏幕光标的移动。字符。字或行的删除,移动复制某区段及进入i...
2019-10-02 15:32:51
804
原创 Linux基本指令
想要了解Linux的基本指令,就必须先学会Xshell远程登录Linux(1)现在Linux主机的终端下面敲ifconfig指令,查看ip地址(2)在Xshell终端下敲 ssh [ip],如果网络畅通,将会提示输入用户名和密码,输入即可正确登录。(3)Xshell下的复制:ctrl + insert 黏贴:shift + insert;其它的健都无法使用。Linux下的基本指令1....
2019-10-01 22:01:43
439
原创 c++ --- 类型转换
在学习c++类型转换之前,我们要先看一下c语言时学习的类型转换。c语言学过两种类型转换:(1)隐式类型转换(2)显示的强制类型转换void Test(){ int i = 1; //隐式类型转换 double d = i; printf("%d,%.2f\n",i,d); int* p = &i; //显示的强制类型转换 int address = (int)p...
2019-09-30 14:51:25
188
原创 c++ ---智能指针
为什么要使用智能指针?智能指针的作用就是管理一个指针,因为存在以下的情况:申请的空间在函数结束的时候忘记释放,造成内存泄漏。使用智能指针可以很大程度上避免这一问题,因为智能指针就是一个类,当超出了类的作用域之后,类就会自动调用析构函数,析构函数就会自动释放资源。所以析构函数的作用就是在函数结束时自动释放空间,不需要手动释放内存空间。一.RAII(1)RAII,也称为“资源获取就是初始化”,...
2019-09-29 19:38:34
143
原创 c++ --- 异常
在没学习c++之前,我们如果在程序中遇到异常错误,可能会用以下的处理方式1.终止程序,如assert,缺陷:用户难以接受,如果发生内存错误,除0错误就会终止程序。2.返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是把错误码放到errno中,表示错误。1.c++异常异常是一种处理错误的方式。当一个函数发现自己无法处理的错误的时候,就会抛出异常,让函数直接或者...
2019-09-29 14:48:17
238
原创 c++ --- 多态
多态1.概念:多态就是多种形态。具体来说就是完成某个行为,当不同的对象去完成的时候会产生不同的状态。2.构成条件(1)被调用的对象必须是指针或者是引用。(2)被调用的对象必须是虚函数,且完成了虚函数的重写。(3)虚函数:就是在类的成员啊哈桑农户的起那面加上virtual关键字(4)虚函数的重写:派生类中有一个基类完全相同的虚函数,我们就称子类的虚函数重写了基类的虚函数,...
2019-09-28 18:33:05
135
原创 c++ 继承
一.继承1.继承的概念继承是面型对象程序设计使代码可以复用的最重要的手段,它允许使用者在保持原有类特性的基础上进行扩展,增加功能,这样可以产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。2.继承的格式class Person{ public: void Print() { std::cout << "id" <...
2019-09-28 14:34:03
234
原创 c++ --- list
1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每一个元素存储在互不相关的独立结点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list相似,最主要的不同在于forword_list是单链表,只能朝前迭代,让其简单高效。4.与其他序列式容器相比,list通常可以在任...
2019-09-26 19:34:19
456
原创 c++ --- vector
一.vector的介绍和使用(1)vector是可变大小数组的序列容器。(2)就像数组一样,vector也采用连续存储空间来储存元素。也就意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。(3)本质上讲,vector使用动态分配数组来存储它的元素。当新元素插入的时候,这个数组需要被重新分配大小,为了增加存...
2019-09-26 18:42:24
184
原创 c++ --- STL --- string
c++最为重要的一大组成部分就是STL,它不仅仅是一个可复用的组件库,而且是一个包罗数据结构和算法的软件框架。STL的六大组件:一:序列式容器, 有string,vector, list, deque二 : 关联式容器, 有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap三: 其...
2019-09-25 18:19:18
168
原创 c语言 --- 程序环境
程序环境分为两种:翻译环境和执行环境。下面就对这些情况做下总结。一.翻译环境(1.)翻译环境中源代码被转换为可执行的机器指令。(2)组成一个程序的每个源文件通过编译过程分别转换为目标代码(object code)。(3)每一个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。(4)链接器同时也会引入标准c函数库中任何被该程序所用到的函数,而且它可以搜索程序员...
2019-09-23 11:56:06
343
原创 c语言 --- 文件操作
以前在没学习c语言的时候,如果有人问我,什么是文件的话,我会这样回答,文件就是存储在磁盘上的一些数据。。。好像有点说得过去。当学习了之后对文件进行了如下的总结:什么是文件在程序设计中,我们谈的文件有两种:程序文件、数据文件程序文件:包括源程序文件(后缀为.c),目标文件(windows环境下的后缀为.obj),可执行程序(windows环境下的后缀为.exe)数据文件:文件中的内容不一定...
2019-09-22 14:31:22
215
原创 c语言 --- 动态内存开辟
我们在学习内存的时候,都会知道下面三种内存开辟的方式:1.从静态存储区分配,生命周期随程序的结束而结束,比如全局变量,static变量2.从栈空间分配,函数调用完其被自动释放3.从堆空间分配,即动态内存开辟,比如:malloc,calloc,realloc,何时申请何时释放其中最主要的就是第三种内存开辟方式,下面就一一进行总结。一.为什么存在动态内存开辟int val = 20;/...
2019-09-21 14:35:05
863
原创 C语言自定义类型
在学习C语言的时候,它有很多的自定义类型,例如:结构体,枚举,联合。。。这些类型在我们的日常使用的时候,或多或少的都会遇见到,下面就系统的介绍一下这几种类型。一.结构体1.结构体类型的声明:通俗点来说,结构就是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的成员变量。如下所示:struct goods{ char name[20] //商品的名字 int size...
2019-09-19 15:17:15
1207
原创 C语言中常见的字符函数和字符串函数
1.求字符串的长度strlen函数:1.函数介绍size_t strlen (const char * str);字符串已经’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’0’);参数指向的字符串必须要以’\0’结束注意函数的返回值为size_t,是无符号的模拟实现//strlen函数的模拟实现#include<iostrea...
2019-09-17 16:17:44
340
原创 C++模板
模板是泛型编程的基础,泛型编程即以一个独立于任何特定类型的方式编写代码。模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具,所有模板就是将本来应该我们做的重复的事情交给了编译器下面,我们先看一个例子,了解一下什么是模板?一.函数模板1.格式:template <typename T1 , typename T2, … typename Tn>...
2019-09-15 15:27:17
458
原创 指针
很多人在学习指针的时候,可能只停留在表面的理解,并没有深入的思考指针的特性。就比如只了解以下的基础知识:指针就是一个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小是固定的4 / 8 个字节,(32位平台 / 64位平台)指针是有类型,指针的类型决定了指针 + - 整数的步长,指针解引用操作时候的权限。指针的运算。对于指针的其他方面的理解,就如下所示:一.字符指针字符指...
2019-09-15 13:50:05
334
原创 数据在内存中的存储
关于数据在内存中的存储这一方面,之前没有系统的了解过。不过之后的学习,我有了深刻的认识。首先,先了解以下现有的数据类型吧。一.数据类型1.整形char(unsigned char / signed char)short(unsigned short [int] / signed short [int] )int(unsigned int / signed in...
2019-09-09 15:52:44
189
原创 C++单例模式
单例模式是面试官非常爱考的一种设计模式。当我第一次接触的时候,感觉这是个什么鬼?不过自己还是坚持下来,下面是我关于这个模式的一些思路和想法。1.单例模式的概念:通俗点来说,一个类只能创建一个对象即为单例模式。在很多时候,为了更安全,可靠的访问某个服务器的话,就必须要设计出一个独立的对象去访问它,而其他对象则不能够进行访问。单例模式的实现主要有两种方式:饿汉模式和懒汉模式。2.饿汉模式...
2019-09-08 12:09:44
253
原创 C++内存管理
1.C++的内存分布int value = 1;static int staticvalue = 1;void Test(){ static int staval = 1; int val = 1; int num1 = {1,2,3,4}; char char2[] = "abcd"; char* char3 = "abcd"; int* ptr1 = (int*)mall...
2019-09-05 18:28:17
149
原创 类和对象(下)
1.构造函数的初始化#include<iostream>using namespace std;class Student{ public: Student(int id,string name) { _id = id; _name = name; } Private: int _id; int _name;};对于上...
2019-08-22 13:34:33
143
原创 类和对象(中)
一.类的6个默认成员函数初始化:构造函数完成初始化工作清理:析构函数完成清理工作拷贝:拷贝构造是用同类对象初始化创建对象复制:赋值重载主要是把一个对象赋值给另一个对象取地址重载:主要是普通对象和const对象取地址,这两个很少会自己实现二.构造函数1.概念:构造函数是一个特殊的成员函数,名字与类名相同,船舰类类型对象的时候由编译器自己调用,保证每个对象都有一个合适的初始值,并...
2019-08-19 17:19:25
143
原创 类和对象(上)
c语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分为不同的对象,靠对象的交互完成。一。类的引入c语言中,结构体只能定义变量,在C++中,结构体不仅可以定义变量,也可以定义函数class Student { void SetStudentInfo(const char* name, const ch...
2019-08-19 12:06:06
154
原创 网络基础---传输层
负责数据能够从发送端到接收端。一. 端口号1. 在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”来标识一个通信。源IP:指的就是发送数据包的那个电脑的IP地址。目的IP:就是想要发送到的那个电脑的IP地址。源端口号:源端口就是本机程序用来发送数据的端口。目的端口号:目的端口就是对方主机用哪个端口接收。协议号:ip协议是网络层协议,三层的,...
2019-07-20 15:31:56
383
原创 网络基础---应用层
一. 应用层程序员写的一个个解决实际问题,满足我们日常需求的网络程序,都在应用层。1. 协议网络协议,也可简称协议,由三要素组成:(1)语法:即数据与控制信息的结构或格式;(2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;(3)时序(同步),即事件实现顺序的详细说明。计算机通信网是由许多具有信息交换和处理能力的节点互连而成的。要使整个网络有条不紊地工作,就要求每个节点...
2019-07-16 12:06:36
190
原创 网络编程套接字
一,基础知识1.源目标地址和目的地址源目标地址:指明了此数据包是由哪个IP发送出来的。目的IP地址 :指明了此数据包的目的地址是哪个IP。2.端口号端口号是传输层协议的内容。(1)端口号是一个2字节16位的整数(2)端口号用来标识唯一一个网络进程,告诉操作系统,当前这个数据要交给哪一个进程来进行处理。(3)IP地址+端口号能够标识网络上某一个主机的某一个进程。(4)一个端口号只能...
2019-07-09 15:31:27
183
原创 网络基础(一)
一.网络发展独立模式:计算机之间相互独立。网络互联:多台计算机连接在一起,完成数据共享。局域网(LAN):计算机数量多了,通过交换机和路由器连接在一起。(1)路由器(Router):是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。(2)网络 交换机,是一个扩大网络的器材,能为子网络中提供更多的连接 端口,以便连接更多的计算机。...
2019-07-09 13:29:25
445
原创 Linux - 信号
一.信号的基本概念1.概念:信号其实通俗的来说就是操作系统与进程之间某些事件发生的一种通知机制。2.信号的产生由随机性------异步。3.要能够识别信号的前提条件是你认识信号。4.在信号还没有产生的时候,其实你也知道它该怎样处理,你是识别它的。5.我们为什么能够识别信号,因为大部分场景,我们都是见过的,其实就是大部分信号我们都是认识的。6.信号是给进程发送的,进程想要处理信号就必须首...
2019-06-22 16:21:18
123
原创 Linux - 基础IO
一.回顾c语言的接口1.向文件中写入数据(hello world)#include<stdio.h>#include<errno.h>#include<string.h>int main(){//FILE --->它是c语言中的一个文件指针(结构体) FILE * fp = fopen("log..txt","w"); if(!fp) ...
2019-05-25 20:04:59
218
原创 C++多态
1.多态的定义1.1简介:通俗来说,就是指多种形态,具体而言,就是完成某件事情,不同的人的解决方法回不同。1.2按照网上的定义:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给...
2019-03-25 20:18:05
157
原创 C++中的继承
1.继承的概念和定义继承是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承是设计层次的复用。class Person{public: void Print() { cout <<"name" << _name...
2019-03-22 20:10:11
166
原创 C++实现一个日期类
class Date{public: int GetMonthDay(int year, int month) { int monthArray[13] = {0, 31, 28, 31, 30, 30, 31, 31, 30, 31, 30, 31, 31}; if (month == 2 && ((year%4 == 0&& year%100!=...
2019-01-17 16:19:38
260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人