自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于http协议实现的自主web服务器

在学习完网络的基本知识后,一直希望有一个能够将所学知识能够结合实际进行练习的机会。因此,我在这里做了一个简单的模拟服务器工作的小项目。这个简单的服务器程序将能基本实现基本的被访问的功能,能够收到浏览器或其他主机上进行的访问,并能够对请求做出基本的相应,项目是基于http协议的,因为http协议一般在我们日常的网络行为中使用的还是比较高频的。http协议有这么几个基本的特点:1.简单快速...

2019-02-26 12:12:11 1032

原创 基于huffman树的文件压缩工具

通过对文件压缩的内部原理的学习,让我现在也有了想要自己实现一个文件压缩工具的想法。那么,想要实现这样一个工具,首先我们先梳理一下,需要用到那些知识点。1.什么是文件压缩?为什么要进行文件压缩文件压缩就是通过某一种机制让文件变得更小,并且还能够通过对应的方式进行还原,如果不能进行还原,那么压缩就没有意义了。压缩的目的就是为了让文件的存储更加节省空间,也可以便于传输。2.文件压缩的分类?...

2019-02-25 12:44:35 449

原创 高级IO模型

高级IO模型,具体来说,可以划分成五种:阻塞IO,非阻塞IO,信号驱动IO,异步IO以及多路转接IO。首先简要介绍,这几种模型的特点:阻塞IO:为了完成功能,会发起调用,如果发现当前不具备完成条件,则等待非阻塞IO:为了完成功能发起调用,如果发现当前不具备完成条件,直接就会报错返回我们把阻塞与非阻塞放到一起对比,可以看出这两者是恰好相反的,就是看不具备完成条件的情况下,发起的调...

2019-02-28 00:43:34 177

原创 指针

指针这个东西,在C语言和C++中,可以说是使用的非常广泛的,有很多人说C++比Java难学,就是难在指针这块。那么,什么是指针呢? 谈到指针,实际上就必须先要了解内存,在冯诺依曼体系结构中,五大硬件单元里面,内存扮演的是存储器的角色,基本上我们所有的程序运行都是以内存为载体。(所以说基本上,当然是有特例的,比如位操作,就属于特殊的操作,这是把数据加载到CPU中,在寄...

2019-02-28 00:04:52 550

原创 网络分层模型

网络分层一般是有OSI七层模型,和TCP/IP五层模型。一般来说,由于无论层这部分在软件行业使用的不是很广泛,他是属于硬件级别的,因此我们有时候也称为TCP/IP四层模型,忽略掉物理层这个部分。那么,为什么要进行网络分层呢?实际上,就是起到一个各司其职,模块化的作用。就是为了让使用更加的方便,每一层都有各自的通信协议,协议的存在,实际上,就是为了让一套标准,被广泛的使用,达到网络互...

2019-02-27 23:48:23 340

原创 判断链表是否带环

给定一个链表,判断链表中是否有环。为了表示给定链表中的给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。解决这...

2019-02-27 23:40:55 270

原创 搜索引擎与爬虫结合的示例:书虫找书

      这是我做的一款用于在网上搜索小说的小项目,我的具体设计是使用的一个搜索引擎模块与网络爬虫的结合。我的设想是让它和那种网上的专门用于寻找百度云盘资源的小工具类似的效果。      当你在页面上输入想要的资源的时候,会将所有有关于这个电子书的资源的链接返回到页面上,它将不局限于只是在网盘或者小说网站上,并且会将所有的用户并不太愿意接受的链接过滤掉,比如将某些要付费的就可以过滤掉。 ...

2019-02-27 10:45:08 690

原创 字符与字符串

在C语言里面,我们经常会遇到对字符和字符串的处理,但是有一个很大的问题是,C语言里本身是没有字符串这个类型的。通常我们实现字符串,是通过字符型常量,和字符型数组来代替的。也就是我们会把一个个字符放在一个常量区,用栈上开辟的指针变量来进行访问,或者是在栈上开辟一个数组空间,将字符放在一个数组中,遍历读取。而在c++里面一般我们可以使用STL模板库中,有一个string容器,这个容器是c++ ...

2019-02-27 00:29:46 139

原创 c++知识体系

2019-02-24 12:21:44 739 1

原创 栈和队列知识点梳理

栈和队列: 都属于特殊的线性结构栈:特殊的线性表,只有一个出入口,只能在其一端进行数据的插入和删除        特性:后进先出    出入数据都在栈顶可以看作只能进行尾插尾删的线性表 底层选择链式空间还是连续空间?顺序表只要不在头部和中间进行增删,就不需要进行数据的搬移,那么效率就非常高,并且顺序结构的实现相对简单 ,只需要在尾部操作,时间为O(1),当然链式结构也是...

2019-02-23 12:26:28 1533

原创 计算时间复杂度与空间复杂度

如何衡量一个算法的好坏?   复杂度:空间复杂度  +  时间复杂度事后统计法:就是在算法的程序运行结束后,根据实际运行结果衡量算法好坏事前估计法:就是在程序运行之前,先按照程序代码,来预估算法的好坏时间复杂度:用基本指令的运行次数而不是运行时间代表时间复杂度,同一个程序在不同配置的机器下的运行时间不一定相同 时间复杂度:基本语句的执行次数 ,一个关于问题规模N的数学表达式  ...

2019-02-23 12:26:16 354

原创 从C语言到c++的过渡

C++对C语言中设计不合理的地方的改进C++98相关的知识点   C++98中进行过对C语言的语法做成模板的方式,包括头文件时可以  .h 98以后这种方案就被抛弃了C++11相关的知识点 关键字:c99有32个。C++98继承C语言,有63个关键字, C++ 对C语言有那些拓展? 扩充了面向对象的概念,高度抽象化C++对C语言的增强 命名空间(na...

2019-02-23 12:26:05 273

原创 链表知识点梳理

链表是线性结构中的第二种结构,与顺序表不同的是  链表在物理存储结构上非连续,非顺序 元素的逻辑顺序是通过指向链表的指针链接次序实现 由于链表是在增删新元素时,才会动态增加新节点, 因而不用像顺序表一样考虑容量capacity的概念,只需要保留 有效数据长度 size即可。顺序表与链表的比较:内存碎片:频繁的像内存申请小的空间 空间使用率谁更高不确定  ,缓存使用率...

2019-02-22 01:58:26 415

原创 树形结构

树形结构是数据结构中一种很典型的结构,是一种非线性结构。与线性表截然不同的是,线性表的结构,是一个节点之后跟着一个节点。 而树状图,则是一个节点后面可能跟着两个或更多的节点,就好像是从一个节点中分出很多条树杈,看起来实际上就相当于将自然界的树给倒着放置一样。 这样,每个分出树杈的节点,我们称之为父节点,而这个父节点分出去的每个节点又可能再继续往下分,分...

2019-02-22 01:57:22 1814

原创 LinuxIO基础笔记梳理

在c库里IO的相关操作:回顾IO接口:fopen fclose,fwrite,fread,fseek文件相关系统调用:  系统调用接口:open,close,write,read,lseekLinux下的文件描述符:非负整数,文件的操作句柄,凭什么数字可以操作文件struct file{} 数组在进程中会打开很多文件,进程要对文件进行管理(描述(struct file)+组织(数组...

2019-02-22 01:55:50 145

原创 Linux进程控制笔记梳理

进程创建     使用系统掉用接口    fork()函数    复制PCB             子进程的复制:使用了写时拷贝技术(代码共享,数据独有)            返回值:父子进程的返回值各有不同,父进程返回子进程的pid,子进程返回0,以实现代码分流     父子进程返回值可以反过来吗?         不行,  不光是代码分流的功能,还有进程控制, 父进程使...

2019-02-22 01:53:50 125

原创 Linux进程信号笔记总结

信号:作用:为了通知我们某个事件的发生就是一个软中断,通知进程发生某件事情,打断进程当前的操作,去先处理这个事件必须认识信号,信号不是立即处理的。而实现记录下来,选择一个合适的事机处理信号必须有默认的处理方式,当然也可以改变。信号是可以被阻塞,暂时不处理信号的周期性:生命周期:产生》》注册》》注销》》处理linux信号的种类:kill -l 62个--两类(可靠/非可靠  ...

2019-02-22 01:52:21 209

原创 进程间通信笔记梳理

进程间通信:什么是进程间通信    两个进程间进行消息传递为什么进程间要通信    因为项目可能很大,进程之间通信,降低模块之间耦合度大型的项目的模块化,是各个模块进程之间协同运行(数据传输,数据共享,通知事件,进程控制) 为什么进程间通信要操作系统提供接口:        因为进程间的独立性,进程间通信变得非常复杂,需要操作系统提供用于进程间通信的统一的接口,...

2019-02-22 01:51:13 157

原创 Linux进程概念部分笔记梳理

冯诺依曼系统 冯诺依曼体系结构是现代计算机的硬件体系结构 输入设备:键盘 输出设备:显示器 存储器:内存 运算器:CPU 控制器:程序计数器,指令寄存器 硬盘不被作为存储器:读写速度太慢 而CPU处理速度非常快  机械硬盘:200MB/s   固态:400/500M    内存属于易失性介质,具有掉电易失性,因而不作为长...

2019-02-22 01:49:09 150

原创 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: falseclass Solution {public: bool isPal...

2019-02-22 01:37:12 121

原创 浅谈浅拷贝,深拷贝以及写时拷贝

浅拷贝关于浅拷贝,最初是在学习类中的成员函数时关于默认的拷贝构造函数是学到的。浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。要解决浅拷贝问题,C++中引入了深拷贝。说明:上述S...

2019-02-22 01:25:30 145

原创 C++函数传参的新方法---引用

关于传参方式,之前在C语言里面已经接触过了两种:传值调用和传址调用两种。而作为C语言的加强版,C++中自然也是将这两种方式,继承了下来,并且在C++里面也有了新的一种传参方式----引用。引用概念首先,从概念上讲,所谓的引用,就是给一个已经存在的变量,起了一个新的别名。其实它用的还是和被引用的对象是同一块内存空间,并没有重新开辟出一段新的内存空间。注:既然使用的是同一块空间,引用当然要注意...

2019-02-22 00:50:59 530

原创 C语言知识总结

2019-02-20 15:29:27 146

原创 Linux基本指令学习总结

初次接触到Linux系统时,不免曾让人感到惊讶,为什么在这样一个黑框框下,敲一段简单的几个词汇,就可以让电脑做出很多的事情。然而接触一段时间,就不免让很多人担心,这么多指令,如何记得过来,这也是一下劝退很多原本还有兴趣学习的人,其实,用书熟练之后,才能感受到这些命令行的强大。有人说,真正的程序员是没有鼠标的!!!事实上,当你用熟练了这些命令行之后,就会真的觉得,只要有个键盘就足矣命令行一般...

2019-02-18 02:35:04 662

原创 数据结构知识梳理

2019-02-17 16:33:04 167

原创 Linux网络编程知识体系结构

2019-02-17 01:35:12 298

原创 Linux操作系统编程知识梳理

2019-02-17 01:30:37 173

原创 链表面试题:反转单链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解决方案:头插法开辟新链表并逐个读取旧链表,头插进新链表,这样新的链表与原链表的结构就是反的,需要借助辅助空间/** * Definition for singly-linked lis...

2019-02-16 00:38:58 479

原创 多种排序方式

排序:给定的一串随机排列的记录,通过一种调整方法,让其按照某个或某些关键字的大小,形成一种递增或递减的顺序的排布,这种调整方法就叫排序稳定性 稳定性就是在排序前后,序列中的相对次序没有发生改变,就是稳定的,否则就是不稳定的也就是某个值在排序前在另一个值前面,经过某种方法排序后还在这个值前面,就说这个排序算法是稳定的内部排序 & 外部排序内部排序就是直接将所有数据全...

2019-02-16 00:12:51 196

原创 栈的面试题:实现最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.pus...

2019-02-15 23:37:46 190

原创 栈的面试题:逆波兰表达式求值

根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9所谓...

2019-02-15 23:02:43 275

原创 C++泛型编程---函数模板

首先说到泛型编程,实际上就是一种编写与数据类型无关的代码的思想,也就是说程序的执行,要能做到不受数据类型的限定。要能够体现出一种代码复用的思想,也就是说一次的编写,可以应用于不同类型的场景。关于处理不同的数据类型,其实在C++中,函数重载,已经可以做到了,比如说现在我要实现一个可以交换不同数据类型的交换函数,那么函数重载应该是这样的:void Swap(int& left, in...

2019-02-12 11:17:56 210 1

原创 重载,重写与重定义的区别

重载,是在学习命名空间时提出的,为了让同一个方法能处理不同的数据,而又不愿意像C语言里那样将函数命名成多个函数名,又需要避免命名冲突。在同一命名空间内被声明的几个具有不同参数列表的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列表来确定具体调用哪个函数,这种机制就是重载。重载不关心函数的返回值类型,即返回类型不同无法构成重载。此外,C++中的const成员函数也可以构成ov...

2019-02-11 23:43:32 2283 1

原创 自定义类型的总结

在C语言中,自定义类型是一种应用非常广泛的,典型的以结构体为例,比如你要描述一个学生,这个学生具有:姓名+年龄+性别+学号这么几项特征,而通常我们有可能要把学生来包装成一个类型,这样就可以重复性的用这个类型来定义出不同的每个学生。而结构体的出现就可以使得ç语言具有了这样能描述复杂类型的能力。一般的自定义类型我们主要学习这么几种:结构体,枚举,联合体知识点:  >结构体类型创建  &g...

2018-12-02 23:14:30 191

原创 交换整数程序

题目:请写出一个小程序,实现对两个整型数值一个和b的交换思路1:交换两个数值,最一般的做法,是创建一个临时变量临时,这个变量我们需要的不是它具体的值起到什么作用,而是要借用它所开辟出来的空间,进行被交换变量的暂时存放。将a的值存入temp,再将b存入a中,然后再将temp里存的a的值放入b中,即可实现a与b的交换,如图:#include<stdio.h>int mai...

2018-12-01 00:54:51 676

原创 C语言实现动态顺序表

关键知识点:动态顺序表的存储是以动态数组的方式,它比之静态顺序表,在空间的开辟上,更加的灵活。避免了静态顺序表的定长数组存储方式而导致空间开辟小了不够用,开辟大了造成内存浪费的特点。根据实际需要,自己掌控对内存空间大小的分配。因而动态顺序表在实际应用中更加广泛。对顺序表的主要操作:初始化顺序表 顺序表的尾插 顺序表的尾删 顺序表的头插 顺序表的头删 任意位置插入元素 任意位...

2018-11-23 00:29:38 269

原创 迈向程序人生的第一步

自我介绍首先做个自我介绍,我算是一个刚刚跨入程序猿世界的菜鸟,目前正在就读西安工业大学电子信息工程。虽然作为一名菜鸟,但还是怀着一颗鹰击长空的“野心”。由于兴趣使然,对程序员的世界,也一直不断的从各种渠道去了解探索。对我来说,每当成功解决了一个个bug,将code成功编译的时候,是一件很有成就感的事情。编程目标短期目标是掌握c/c++语言的基本特性,为了能正式挤进这个行业而拼上...

2018-10-18 00:13:26 142

空空如也

空空如也

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

TA关注的人

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