自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序算法的比较

1.冒泡排序(时间复杂度O(n^2),空间复杂度O(1),不稳定排序) 首先定义一个变量size_t bount=0 [0,bound)的区间已经排好序的区间,[bound,size)待排序的区间 从第二个数字开始,每一个数字都会和前一个数字进行比较,如符合则交换void BubbleSort(int array[],size_t size){ if (size == ...

2018-08-16 16:19:44 181

原创 浅析无符号整型和有符号整型

整型包括长整型(long),短整形(short),整型(int),字符型(char)。众所周知,char是字符类型。但其实char也是一个比较古怪的整型,长度为1字节 (默认是无符号类型)。然后我们来解释一下有符号数和无符号数,首先我们要明白有符号和无符号都是针对二进制数来讲的,并且他们都是以补码的方式在计算机中存储的。 有符号数:用最高位最符号位,‘0’代表正数,‘1’代表负数,其余位用作

2017-11-04 17:20:00 17017 2

原创 c语言的三种数字排序方法

选择排序 冒泡排序 比较

2017-10-04 16:19:47 26338

原创 c语言中的几个关键字

c语言中几个重要的关键字

2017-09-29 18:15:04 373

原创 设计模式:单例模式

概念:在一个进程中一个类只能实例化出一个对象的设计模式懒汉式:在你真正用到的时候才去创建这个单例对象饿汉式:不管你用不用的上,在你创建这个类的时候就直接创建对象#include<stdio.h>#include<iostream>#include<thread>#include<mutex>using namespace std...

2018-09-04 21:35:46 176

原创 python--CSDN爬虫

 # encoding:utf-8__author__ = 'Sun'import reimport urllib.requestimport urllibimport queueimport threadingimport osqueue = queue.Queue()visited = set()cnt = 0class CsdnBlogSpider(th...

2018-09-02 10:58:13 435

原创 C语言大纲

C语言大纲

2018-08-21 11:04:43 311

原创 智能指针——auto_ptr

智能指针:自动的管理指针所指向动态资源的释放 首先我们先来看一下这个最古老的智能指针auto_ptr 但是他存在管理权转移的问题 这是一个最基本的auto_ptrtemplate <class T>class Autu_ptr{public: Autu_ptr(T *ptr) :_ptr(ptr) {} //拷贝构造 //管理权...

2018-08-20 17:46:03 156

原创 智能指针——shared_ptr&weak_ptr

一个带有定制删除器的shared_ptr,因为有些指针比如说文件中指针,我们在释放文件指针的时候不能简单的使用free直接将文件指针释放掉,此时我们就应该传入一个仿函数,在我们传入文件指针的时候,调用这个仿函数来释放这个指针即可,不同的指针定制不同的释放函数这是我们的思想template <class T>struct Delete{ void operator()(T...

2018-08-20 17:13:45 1218

原创 TCP协议-滑动窗口

滑动窗口的出现是因为我们我们得确人确认应答机制致使数据的传输效率比较低下,所以们就引入了滑动窗口 首先滑动窗口的大小是我们无需等待ack确认应答即可直接发送的数据最大值比如说此图 我们首先将4000字节的数据全部发送给对端,在我们发送数据的同时,对端也会给我们发送ack,一旦我们接收到了0-1000数据的ack(下一条数据时1001),那么我们的窗口就会往后移动,就是这样的...

2018-08-14 22:06:17 159

原创 TCP协议

TCP的三次握手四次挥手 三次握手:建立连接(保证连接建立的可靠性) 四次挥手:解除连接 三次握手连接四次挥手断开连接 理解ESTABLISHED:进入此状态下即可发送数据理解TIME_WAIT状态:进入TIME_WAIT并不会马上将我们刚开始绑定的端口号释放而是在两个MSL之后在会将这个端口号释放掉,那么为什么是两个MSL(MSL是TCP报文的最大...

2018-08-14 16:06:02 183

原创 网络基础(二)

应用层(重要写代码) 协议:是双方的一种约定  报头:HTTP协议(超文本传输协议) URL:通俗来说网址  urlencode:特殊字符的编码urldecode:编码之后的解码  http抓包  http常见Header: Cookie:保存身份标识,避免重复登录,存字符串,保存数据有限(4K) ...

2018-08-11 10:15:28 130

原创 网络基础(一)

广域网和局域网局域网LAN:计算机多了,通过交换机和路由器连在一起 广域网:将远隔千里的计算机都连在一起广域网和局域网只是一个相对的概念 协议协议:是一种约定协议分层:是为了封装协议,即我们在使用其它层的东西时不用关注其他层的技术细节协议可自定制 网络协议协议分层OSI协议(七层模型):层级过多太复杂,所以我们一般会使用TCP/IP协议(...

2018-08-11 10:09:14 162

原创 网络编程套接字(socket)

网络编程基础知识IP地址(网络层):即网络中的门牌号,用点分十进制表示(默认IPV4) 端口号(传输层协议) 一个2字节16位的整数 用来标识一个进程 IP地址+端口号可以标识一个唯一的进程 一个端口号只能被一个进程占用   端口号和进程PID的区别?端口号是在网络传输的方面对进程的标识进程ID是在操作系统上对它的一个唯一的标识...

2018-08-11 10:03:06 207

原创 字符串函数的模拟实现

//strlen//1.size_t my_strlen(char *str){ if (*str == '\0') { return 0; } return 1 + my_strlen(str+1);}//2.//int my_strlen(char *str)//{// char *p = str;// while (*p != '\0');// {// ...

2018-07-31 17:25:17 122

原创 关于指针的一些计算

int main(){ //int a[5] = { 1, 2, 3, 4, 5 }; //int *ptr = (int *)(&a + 1); //printf("%d,%d", *(a + 1), *(ptr - 1));//2 5 /*int a[4] = { 1, 2, 3, 4 }; int *ptr1 = (int *)(&a + 1); int ...

2018-07-31 15:55:38 139

原创 测试客户端

项目要求目的自己模拟一个curl函数,但是curl命令是自己构造一个HTTP请求发送给我们的目标服务器,而我们是自己构造一个HTTP请求发送给我们的命令行参数第二个参数(url),然后再从服务器端接受响应打印到标准输出 我们的执行命令是./client https://www.baidu.com/ 程序开始执行之后根据提示从标准输入中一行一行的读取字符串然后去构造HT...

2018-07-29 16:23:47 519

原创 笔试必考:关于数组的一些计算

#include<stdio.h>#include<unistd.h>#include<string.h>int main(){ //一维数组 //本系统为64位 //int a[] = {1,2,3,4}; //printf("16::%ld\n",sizeof(a)); //printf("8::%ld\n",sizeof(a...

2018-07-27 15:08:13 126

原创 通讯录项目

首先我们的通讯录包括4条用户信息:ID姓名电话地址我们的对通讯录的操作包括增加一条用户信息删除一条用户信息查找用户信息(模糊匹配)修改一条用户信息:输入姓名修改地址和电话打印通讯录的全部用户信息退出通讯录系统我们用以保存用户信息的就是我们的链表接下来我们先来看一下头文件#include<stdio.h>#include<unistd.h>#include<stdlib...

2018-06-10 17:48:48 282

原创 c++强制类型转换

C语言我们从c语言的强制类型转换(显示和隐式)开始说起:我们先写一个例子来回顾一下我们的强制类型转换#include<stdio.h>#include<iostream>using namespace std;int main(){  //隐式类型转换  //1.  //将一个int型的数赋给double型  int a = 10;  double b = a;  cout...

2018-06-09 18:29:11 155

原创 虚拟机未正常关闭

写这篇博客是因为我自己无数次的,忘记关虚拟机,然后强制关机,在开机的时候,然后就整个人都不好了,在网上找了好多种办法,其中最常见的一种就是找到我们保存虚拟机的文件夹,找到里面的以lck为结尾的文件夹,将其全部删除,其实虚拟机在正常关机的时候就会将这些文件自动的删除掉,所以,如果虚拟机没有正常关机的话,那这些文件当然就不会被删除啦,那不会被删除我们虚拟机在开机的时候发现这些文件还在,那么他就会以为这...

2018-06-09 17:56:29 2807 1

原创 面试题:中国象棋将帅问题

中国象棋将帅问题(输出所有将帅的合法位置)我们看一下怎么来看将和帅的位置,来比较她们两的位置是否会冲突我们用数字1~9来标记棋子的位置然后进行比较A=将,B=帅本题的难点其实是在如何使用一个变量来保存这一个将,还有另一个帅的位置第一种方法那我们其实可以这样,我们可以使用一个8个比特的变量来保存这两个数据,前四个比特来保存A的位置,后四个比特来保存B的位置四个比特刚好可以保存2^4=16个数字而我们...

2018-06-08 21:36:41 426

原创 面试题:字符串移位包含问题

问题描述挺简单的,就是给两个字符串,判断一个是否可以被另一个循环移位(定义向右循环移位)得到的字符串包含(也可为本身,也可为子串)解法一我们可以先直接进行字符串的移位工作,在进行字符串包含的判断,从而遍历器所有的可能性但是这个方法比较浪费,因为要遍历所有的可能性并且要进行字符串的移位,并且在移位的过程中一不小心就会将字符串覆盖掉,所以一定要小心代码如下//直接翻转bool Judge( char ...

2018-06-08 21:34:41 652

原创 Linux——信号

信号概念:是进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。我们可以通过命令kill -l来查看所有的信号哈哈哈哈乍一看会以为是64个信号,但是仔细看没有31和32信号,所以其实只有62个信号啦产生信...

2018-06-03 22:03:48 157

原创 进程间通信(二):消息队列

消息队列是操作系统为两个无关进程准备的通信方式,每个消息队列都有一个他自己的ID我们用来标识消息队列消息队列的不足就是我们发送消息的最大长度有限制,并且操作系统提供的消息队列的个数也是有限的此ID用如下函数创建此函数中的path为一个路径,讲道理这个路径其实可以随便定义,一般定义成当前目录即可,然后这个proj_id就是一个数字而已可以随便设,啊就是这样,但是我们要知道同一个路径同一个项目ID数完...

2018-05-23 08:20:41 176

原创 进程间通信(一):管道

让毫不相关的进程想办法让他们看到一份公共资源管道的目的数据传输资源共享(多个进程共享)通知事件进程控制(控制之前进行沟通)管道:将一个进程连接到另一个进程的数据流称为管道管道的特点管道只能单向传输,如果需要双向传输,建立两个管道即可管道的生命周期随进程变化,进程退出,管道释放管道提供字节流服务内核会对管道的操作进行同步和互斥一般管道大小为4096匿名管道(只允许有血缘关系的两个进程相互通信):pi...

2018-05-22 21:53:29 253

原创 简易版shell

我门用exec函数来写一个简易版的shell 我们先理一下步骤: 首先将输入的在命令解析为一个一个的命令,就去掉空格,我们可以使用strtok函数(创建命令) 然后在创建一个进程让它去执行这个命令(解析命令并执行) 父进程等待进程结束了返回之后,继续执行原来的代码 #include <stdio.h>#include <sys/type...

2018-05-19 23:38:05 128

原创 进程控制

进程创建fork从已经存在的进程创建一个进程,新进程称为子进程,原进程称为父进程,调用此函数子进程返回0,父进程返回子进程的进程ID进程调用fork之后:分配新的内存和数据块给子进程将父进程的数据拷给子进程调用失败的原因:系统内有太多的进程实际用户的进程数达到了最大值fork之后父子进程一起执行代码,但是谁先执行由调度器决定通常父子进程的代码共享,当父子进程不在写入数据的时候,此时数据也共享,但是...

2018-05-19 23:29:41 103

原创 模板:泛型编程

模板:就是与类型无关的逻辑代码模板函数:就是要实现和类型无关的函数那么为什么会有模板这个东西呢?我们在实现swap函数和isequal函数,他们都是一些与类型相关的函数,并且如果我们要根据类型实现多个swap函数的化那么代码的重复率就会特别高,此时我们就可以用模板来实现此函数我们可以先写一个交换函数的栗子#include <iostream>using namespace std;te...

2018-05-16 21:02:36 292

原创 动态内存管理

c语言中我们学过的申请动态是malloc,释放动态内存为free但时c++,我们有增加了new和delectnew和delect,new[]和delect[]首先我要说的是new,delect都是关键字在c++中,然后这些内存管理都要匹配使用,不能混着乱用那么malloc/free和new/delect的区别和联系是啥?a.她们都是内存管理的入口b.malloc/free是c/c++标准课里的函数...

2018-05-14 11:07:24 141

原创 进程概念

进程的基本概念系统调用:操作系统对外的一层接口,供上层开发使用,这部分接口就叫做系统调用库函数:是对系统调用的一层封装进程:将程序编译一个可执行文件之后,在操作系统中运行,然后由操作系统将它管理起来PID:进程的一个唯一的标识码PCB:进程控制块(描述进程)linux下特有的PCB:task_struct1.进程标识符2.知道程序执行的代码和数据在哪(用一个指针来保存代码和数据的地址)3.进程都打...

2018-05-14 10:37:13 152

原创 模板实现双向链表和顺序表

首先是带头结点的双向链表#include <iostream>#include <stdio.h>#include <assert.h>using namespace std;template <class T>struct ListNode{ ListNode<T> *_prev; ListNode<T...

2018-05-14 10:29:15 119

原创 探索c++的对象模型(二):菱形继承的多态模型

首先我们已经知道了多继承和单继承的对象模型接下来我们来看一个复杂的菱形继承菱形继承的多态继承#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<iostream>using namespace std;class A{public:      virtual void func1()     {       ...

2018-05-07 07:27:02 175

原创 探索c++的对象模型(一):单继承和多继承的对象模型

虚函数表就是通过一块连续内存来保存虚函数的地址单继承虚函数的对象模型class A{public:     virtual void func1()     {           printf("A::func1\n");     }     virtual void func2()     {           printf("A::func2\n");     }public:     i...

2018-05-07 07:23:05 128

原创 继承和多态

继承概念继承:是一种复用的手段,子类里拥有所有的父类里的成员,三种继承关系的父类成员在子类下的访问关系的变化继承关系基类的public成员基类的protected成员基类的private成员public继承仍为public成员为protected成员不可见protected继承变为protected成员为protected成员不可见private继承变为private成员变为private成员不可...

2018-04-27 21:28:04 119

原创 c++:类和对象

一:概念c++不是一个完全面向对象的语言,它是基于面向对象的语言,因为我们的c++语言中还包含C语言的东西,而我们的C语言是一个面向过程的语言面向对象的的三大特征:封装继承多态类:里面有数据(变量)和方法(函数)三种访问限定符:public:可从类的外部直接访问,private/protected不可从外部直接访问                          每个限定符可以使用多次,每个限定...

2018-03-27 11:08:08 230

原创 剑指offer(面试题17):合并两个已排序的链表

我们要做的就是合并两个有序链表,使之合并之后依旧有序 那么我们要怎么做呢首先我们从合并链表的头结点开始,首先链表1的头结点的值小于链表2的头结点的值,因此合并后新链表的头结点即链表1的头结点, 然后我们继续往后遍历,画图如下 就这样按图上的一直往下遍历,那遍历结束的标志又是什么呢 就是只要是任意一个链表已经遍历完了,cur指针指向空的时候,将另一个没有遍历完的链表直接加到新链表的后面就行,因

2018-03-27 11:01:35 162

原创 函数重载

函数重载:函数重载是函数的一种特殊情况,c++允许在同一作用域下声明几个同名函数,但是整几个同名函数的形参列表必须不相同(参数个数不同,参数的类型(对应位置的参数),顺序也不相同)返回值不一样不能视为函数重载  为什么c++支持函数重载?而c语言不行? 首先我们看一下编译的过程:预处理:头文件展开/去注释/宏替换  test.i                   ...

2018-03-15 17:51:18 130

原创 c++中的指针与引用

引用:不是定义一个变量,而是给已经存在的变量取一个别名,所以引用一定要初始化定义的格式:类型& 引用名=已定义过的变量名引用的特点:1.变量可以有多个别名                    2.引用必须要初始化                    3.一个引用不可为多个变量,并且不可变                    4.在引用是可以加限制,但不能少限制一个例子:int a=1...

2018-03-15 17:47:22 111

原创 剑指offer(面试题):找出链表中的倒数第K个节点

首先我们先创建一个链表,链表的创建在上一个链表的逆序打印中已经说过了,链接如下 http://blog.csdn.net/qq_36767247/article/details/78828609 其实就是简单的初始化,创建节点,然后在尾插节点就行 好了我们进入正题此题中我们可以利用快慢指针 定义两个指针,一个指针先走K步,然后两个指针一起走,此时两个指针就距离为K,所以当快指针走到NULL的此移花接木大法对

2017-12-27 23:07:38 228

空空如也

空空如也

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

TA关注的人

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