自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 资源 (1)
  • 收藏
  • 关注

原创 阻塞和非阻塞等待

阻塞式等待#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/wait.h>int main(){ pid_t pid; pid=fork(); if(pid<0) { printf("fork error\n"); return 1; }

2016-07-31 10:32:37 1702

原创 Jump Game

描述   Given an array of non-negative integers, you are initially positioned at the first index of the array.   Each element in the array represents your maximum jump length at that position.   De

2016-07-29 19:15:58 284

原创 socket编程用线程实现TCP协议通信

函数介绍:       int socket(int domain, int type, int protocol);DESCRIPTION       socket() creates an endpoint for communication and returns a descriptor. Name                Purpose

2016-07-26 20:42:36 783

转载 死锁的产生和解决

死锁的四个条件是:  禁止抢占:no preemption,即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。  持有和等待:hold and wait,进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。  互斥:mutual exclusion,进程至少已经占有一个资源,但又申请

2016-07-24 17:48:46 528

原创 ip报头,tcp报头,udp报头解析

ip报头结构版本号(Version):标明了IP 协议的版本号,目前的协议版本号为4。下一代IP 协议的版本号为6。●报文长度:指 IP 包头部长度,占4 位。●8 位的服务类型:包括一个3 位的优先权字段(COS,Class of Service),4 位TOS 字段和1 位未用位。4 位TOS 分别代表最小时延、最大吞吐量、最高可靠性和最小费用。●总长度

2016-07-24 17:31:43 13897

翻译 ip报头分片

分片介绍:        IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组        在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题。分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素。为什么需要分片:        每一种物理网络都

2016-07-24 17:08:14 3356

原创 路由表的建立策略

路由表介绍:      路由表是指路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。路由表的分类:1.静态路由表由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构

2016-07-24 14:28:15 2625

原创 NAT原理

NAT(Network Address Translation,网络地址转换):       当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。优点:1.宽带分享:这是 NAT 主机的最大功能。2.安全防护:NAT 之内的 PC 联机到 Internet 上面时,他

2016-07-24 13:10:48 565

原创 tpc三次握手和四次断开

TCP介绍:   传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。   应用层向TCP层发送用于网间传输的、用8位字节表示的数

2016-07-24 11:50:28 3226

原创 TCPDUMP介绍和使用那个

介绍:       TcpDump是Linux中强大的网络数据采集分析工具之一,是根据使用者的定义对网络上的数据包进行截获的包分析工具。      tcpdump存在于基本的 FreeBSD系统中,由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算

2016-07-24 11:08:20 465

原创 贪心算法

介绍 贪心法,又称贪心算法、贪婪算法、或称贪婪法,是一种在每一步选择中都采取在当前状态 下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。[1]比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最

2016-07-23 18:08:37 833

原创 每次弹出一个栈的最小元素

/************************************************描述: 定义栈的数据结构,实现一个能找到栈的最小元素的 函数,要求:push、pop、和求最小元素的时间复杂 度都为O(1)*************************************************//*************************

2016-07-22 20:11:18 370

原创 栈的压入弹出序列的合法性

/********************************************描述: 输入两个整数序列,第一个整数序列表示栈的压 入顺序,请判断第二个序列是否为栈的弹出序列方法: 定义一个栈,刚开始时将第一个元素压入栈中, 然后判断栈顶的元素和第二个序列的元素是否 相同,如果相同则pop掉栈顶的这个元素,否则 继续压入第一个序列到栈中,以

2016-07-22 20:07:38 336

原创 二叉树的后序序列

/****************************************************描述: 输入一个整数数组,判断该数组是不是某个搜索二叉树 的后序遍历。思路: 1、后序遍历中,最后一个节点为根节点。 2、数组可以分为两部分,前面的值比根 节点小,后面的值比根节点大。 3、利用递归的思想,将每个点都作为根 节点来判断,如

2016-07-22 20:05:05 927

原创 求二叉树的镜像

#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<queue>template<class T>struct BinaryTreeNode{ BinaryTreeNode* _left; BinaryTreeNode* _right; T _data;

2016-07-21 23:06:16 290

原创 顺时针打印矩阵

描述:给定一个矩阵,按照从外到里的顺序打印每一个 数字 分析 1、找到每个圈打印开始的地方(发现这个数的下标*2只要小于总的行和列就行) 2、每找到一个就循环打印 注意: 边界条件#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;void PrintMatexInCycle(int (*arr

2016-07-21 20:57:56 230

原创 数字在排序数组中出现的次数

描述:        统计一个数字在已排序数组中出现的次数。如{1,2,3,3,3,4,5} 3出现的次数为3次方法:       利用两次二分查找分别找到这个数第一次出现的下标和最后一次出现的下标,利用下标算出出现的次数。时间复杂度:O(logn)#define _CRT_SECURE_NO_WARNINGS#includeusing namespa

2016-07-12 17:12:22 230

原创 平衡二叉树

介绍: AVL树也就是平衡二叉树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。平衡因子: 节点的平衡因子是它的右子树的高度减去它的左子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2

2016-07-06 21:20:29 472

原创 数值的整数次方

描述: 模拟实现pow函数特殊情况: 底数为0且指数为负数的时候直接报错。 0的0次方在数学上没有意义,在这里当作1来处理。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#define RANGE 0.000001double Pow(double base, int exponent){

2016-07-03 15:26:44 249

原创 求一个已排序旋转数组中的最小的数

描述: 给一个已经排好序的数组,然后再将他进行旋转(将前n个数搬到末尾)如数组{1,2,3,4,5}旋转为{3,4,5,1,2},求数组中的最小数字。解法: 利用二分查找来提高查找效率。(原理:部分有序)。 代码:特殊情况: 数组{0,1,1,1,1}变为{1,1,1,0,1} 要将这种情况考虑进去。#define _CRT_SECURE_NO_WARNINGS#include<ios

2016-07-03 13:19:13 217

原创 求二进制中1 的个数

问题描述: 实现一个函数,输入一个整数,求这个整数的二进制中1的个数。方法1 每次让最右边的以为& 1,然后将这个数右移一位,当这个数为0的时候停止。 //缺点负数重1的个数不能求出,会陷入死循环int NumOf1(int x){ int count = 0; while (x) { if (x & 1 == 1) {

2016-07-02 20:14:36 220

原创 linux管道通信原理

管道:也是文件,可以用于有血缘关系的进程间的通信。 实现机制: 两个或多个进程之间想要通信由于他们各拥有自己的地址空间所以必须有一块公共的空间,而这块空间就需要内核为他们提供,也就是缓冲区。 管道有两端一端负责输入,一端负责输出,所以两端就分别连接两个进程。进程1负责将数据输入到缓冲区,进程2将缓冲区的数据拿出来,这样就实现了两个进程的通信。 管道被设计成为环形的数据结构,以便管道可以

2016-07-02 15:54:06 2303

原创 探索linux管道的容量

管道特点: (1)、单向通信。数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道。 (2)、管道只能用于有血缘关系的进程间通信。 (3)、流式服务。发送和接收大小不受特定格式的限制。 (4)、管道的生命周期和进程有关。 (5)、同步与互斥原则。#include<stdio.h>#include<sys/types.h>#include

2016-07-02 14:35:25 2201

原创 两个栈实现一个队列

栈的特点: 先进后出 队列特点: 先进先出 实现方法: 定义两个栈,在插入队列的时候往栈1中插入,在删除的时候先把栈1的数据全部插入到栈2中,然后删除栈2顶部的元素。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<stack>template<class T>class Q

2016-06-24 18:48:03 220

原创 重建二叉树

#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;struct BinaryTreeNod`这里写代码片`e{ int _value; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(int val

2016-06-24 14:59:34 222

原创 从尾到头打印链表

#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<stack>struct ListNode{ int _value; ListNode* _next; ListNode(int value) :_value(value), _

2016-06-24 00:23:08 202

原创 替换空格

给一个字符串,将其中的空格用一个东西替换 要求:时间复杂度O(n) 应用:网络编程中将特殊字符替换获得正确的参数值。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;void ReplaceBlank(char *str, size_t len)//len为数组的总长{ if (str ==

2016-06-23 23:50:59 237

原创 二位数组中的查找

题目: 给一个二维数组每一行的数字是从左到右是递增的,每一列的数字从上到下是递增的,查找一个数是否在这个二维数组中存在存在。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>using namespace std;bool Find(int* arr,int rows,int cols,int num)

2016-06-23 16:34:30 257

原创 设计一个类只能生成该类的一个实例

class Singleton{public: Singleton() { if (_count == 0) { cout << "进行构造函数" << endl; _count++; } else { cout << "构造失败"

2016-06-23 15:58:37 1186

原创 leetcode合并时间区间

给定一组非重叠的时间间隔的,插入一个新的时间间隔成区间(可能需要合并)。 实施例1:给定的时间间隔[1,3],[6,9],插入并在如[1,5]合并[2,5],[6,9]。 实施例2:给定[1,2],[3,5],[6,7],[8,10],[12,16],插入和作为合并[4,9]后为[1,2],[3,10],[12,16]。时间复杂度O(n),空间复杂度O(1) CODE#define _CRT

2016-06-22 17:06:14 1289

原创 求一个整数是否是回文(正着念和反着念都一样)

要求:不需要额外的空间。 分析: 1、负整数是回文? (例如,-1)(NO) 2、如果你正在考虑的整数转换为字符串,请注意使用额外空间的限制。 3、可以尝试扭转一个整数。前提是你已经解决了这个问题“反向整型”颠倒整数可能溢出。新思路: 不断地取第一位和最后一位(10 进制下)进行比较,相等则取第二位和倒数第二位,直到完成比较或者中途找到了不一致的位。CODE#define _CRT_SE

2016-06-22 00:18:19 1429

原创 反转一个整数

扭转的整数的数字。 例1:X =123,返回321 例2:X =-123,返回-321需要考虑的问题: 1、整数的最后一个数字是0,应该输出什么?即,例如10,100。 2、反向整数可能溢出?假定输入是32位的整数,则 逆转1000000003溢出。你应该如何处理这种情况? 抛出一个异常?好,但如果抛出异常是不是一种选择?然后,重新设计功能(即,添加一个额外的参数)。CODE#inclu

2016-06-21 23:40:52 2406

原创 并查集和(小米面试题)

并查集: 将N个不同的元素分成一组不相交的集合。 开始时,每个元素就是一个集合,然后按规律将两个集合进行合并。 原理: 两个数元素中选择一个元素作为根,让另一个元素对应下表的内容加到第一个元素对应下标的内容中,并把另一个元素下标对应内容变为第一个的元素。 (1)申请一块数组用以标记元素之间的关系 初始化 给定一个关系,用上图进行标记,如果两个元素之间不是同一个的根就把第二个元素当

2016-06-20 15:26:27 445

原创 linux PATH环境变量

PATH简介: PATH就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径。 比如在根目录/下可以输入命令ls,他就会在PATH中去找。echo $PATH命令查看PATH的值 我写了一个测试的程序,为了在整个系统中使用就需要加入路径在PATH中。 添加路径: 查看是否添加成功: 在别的地方运行:

2016-06-18 20:12:42 430

原创 常见的作业调度和进程调度算法总结

作业调度 <一>、先来先服务(FCFS, First Come First Serve): 简介:先来先服务调度算法是根据进程进入就绪队列的顺序来占用cpu,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。原理: 当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配

2016-06-18 17:28:58 5710

原创 二分搜索树的实现

#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;template <class K,class V>struct BinarySearchTreeNode{ K _key; V _value; BinarySearchTreeNode<K, V>* _left; Bi

2016-06-05 09:53:47 354

翻译 task_struct结构描述

1、Linux中的进程状态: 可运行状态 处于这种状态的进程,要么正在运行、要么正准备运行。正在运行的进程就是当前进程(由current所指向的进程),而准备运行的进程只要得到CPU就可以立即投入运行,CPU是这些进程唯一等待的系统资源。系统中有一个运行队列(run_queue),用来容纳所有处于可运行状态的进程,调度程序执行时,从中选择一个进程投入运行。在后面我们讨论进程调度

2016-06-04 22:44:36 320

原创 进度条的简易实现

要求: 实现一个简易的进度条,能够输出目前的进度,显示是否有卡顿。 代码

2016-06-04 22:15:20 340

原创 数组中重复的数字

问题: 在一个长度为n的数组中,数字的范围为0~n-1,其中的某些数字是重复的,但不知道几个数字重复,也不知道重复了几次,请找出一个重复的数字。方法一: 使用排序(时间复杂度O(nlogn)) 。 方法二 使用哈希表 从头到尾扫描数组,拿到一个数字之后先判断有没有该数字,没有的话就插入有的话就已经找到一个了。(时间复杂度O(

2016-06-02 21:29:58 252

翻译 vim配置和Taglist的安装

vim配置步骤:1、打开终端,touch .vimrc(建立一个普通的隐藏文件vimrc)。 2、用vim打开此文件(vim .vimrc). 3、给里面写配置文件。(可以根据选择添加或减少) map <F9> :call SaveInputData()<CR>func! SaveInputData() exec "tabnew" exec 'normal "+gP'

2016-05-29 11:45:30 136

空空如也

空空如也

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

TA关注的人

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