自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

观赏的博客

跪求各位大神指导指导。

转载 linux网络学习博客汇总

目录一基础理论篇二初级实践篇三进阶高级篇四拓展知识篇一、基础理论篇01、网络协议入门02、LAN、WAN、WLAN、VLAN 和 VPN 的区别03、IP 地址介绍04、广播地址介绍05、无连接和面向连接协议的区别06、因特网的IP协议是不可靠无连接的,那为何当初不直接把它设计为可靠?07、C/S和B/S架构的区别二、初级实践篇08、编程准备:字节序、地址转换09、套接字的介绍10

2017-09-03 14:07:15 1257

转载 八大排序算法总结(超详细)

概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。         当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。   快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的

2017-08-16 05:44:44 367

转载 linux操作系统学习心得

经过这一段时间的学习,自己对Linux也有了一定的认识,今天这篇博客对以往的知识进行一个总结吧。以往linux学习的博客,从上而下是学习深入的过程,我的博客链接如下:第一篇:《Linux操作系统分析》之分析计算机如何启动以及如何工作运行第二篇:《Linux操作系统分析》之分析精简的Linux的内核中断和时间片轮询第三篇:《Linux操作系统分析》之跟踪分析Linux内核的启动过程第四篇:《Linu

2017-08-16 05:19:49 3562 3

转载 linux进程管理原理

Linux 是一种动态系统,能够适应不断变化的计算需求。linux 计算需求的表现是以进程的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务)。因此,对进程及其调度进行一般管理就显得极为重要。     在用户空间,进程是由进程标识符(PID)表示的。从用户的角度来看,一个 PID 是一个数字值,可惟一标识一个进程。一个 PID 在进程的整个生命期间不会更

2017-08-16 05:09:57 9021

转载 海量数据处理

前言   一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名 :-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。    毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必

2017-08-12 15:24:55 178

原创 TCP与UDP小结

TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,

2017-09-06 00:23:57 397

转载 常用算法分析与设计

算法设计与分析P问题,非P类问题,NP问题,NPC问题P问题:如果一个问题可以找到一个能在多项式的时间(n在底数上面)里解决的算法,那么这个问题就是P问题。NP问题:可以在多项式时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式时间里猜出一个解的问题。NPC问题(NP-完全问题):存在这样一个NP问题,所有的NP问题都可以规约化为它,换句话说,只要解决了这个问题,那么所有的NP问题

2017-09-06 00:15:58 1716

原创 死锁

一、死锁的概念:  1、死锁的现象描述:    在很多应用中,需要一个进程排他性的访问若干种资源而不是一种。例如,两个进程准备分别将扫描的文档记录到CD上。进程A请求使用扫描仪,并被授权使用。但进程B首先请求CD刻录机,也被授权使用。这时,A请求使用CD刻录机,但这个请求在B释放CD刻录机前会被拒绝。但是,进程B非但不会释放CD刻录机,还去请求扫描仪。这时,两个进程僵持不下,都被阻塞,并一直

2017-09-03 14:32:51 460

原创 判断某个字符串是否是合法IP

使用的头文件以及宏定义:#include <stdio.h> #include <string.h> // strlen()#include <assert.h> // assert()#include <ctype.h> // digit()#define FALSE 0#define TRUE 1#define BOOL int函数内容:BOOL IsVal

2017-09-01 02:26:03 1603

原创 迭代器失效总结

迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。     首先对于vector而言,添加和删除操作可能使容器的部分或者全部迭代器失效

2017-08-25 13:02:48 209

转载 面试题

1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代

2017-08-25 12:59:48 158

原创 《计算机网络》笔记

把计算机网络中的知识点,记录下来,方便自己回顾,不定时更新 ARP协议:地址解析协议 层次:网络层 作用:解决在同一局域网中主机或路由器的IP地址与物理地址的映射问题。 实现:在主机ARP高速缓存中存放一个从IP地址到物理地址的映射表,并且这个映射表还经常更新(新增和超时删除) 知识点: 1,请求分组是广播的,响应分组是单播的。 2,在发送请求分组时,将自己的IP地址与

2017-08-18 15:25:09 214

原创 判断字符串中有无重复字符,不使用额外的数据结构

CareerCup一道题。原题:Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?additional data structures我的理解是指自己再定义的数据结构。在这里考虑用数组、bitset

2017-08-16 04:59:59 657

转载 说说makefile那些事

工作至今,一直对Makefile半知半解。突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不如烂笔头,便来说说Makefile那些事儿。 Makefile到底是个啥玩意儿  Makefile就是一文本文件。———————————————–$ file MakefileMakefile: ASCII make commands text

2017-08-12 22:36:34 317

原创 Makefile中语句的顺序

最近碰到一个makefile文件,make之后发现不是按照从上到下的顺序执行的,立刻查找了一下原因,专门记下。在linux下,makefile的执行实际上分为两个阶段进行第一阶段:读取所有的makefile文件(包括“MAKEFILES”变量指定的、指示符“include”指定的、以及命令行选项“-f(–file)”指定的makefile文件),内建的变量、明确规则和隐含规则,并建立所有目标和依赖

2017-08-12 22:21:55 5645

原创 《effective C++》读书笔记

最近又重新开了一遍《effective C++ 》3e,对于以前不懂的地方也有了深刻体会。为了方便自己的查阅,将此我讲书中的一部分内容摘要记录。1,让自己习惯C++ 条款01:视C++为一个语言联邦 C++分为四个语言联邦: - C:主要是C的部分,区块、语句、预处理、内置数据类型、数组、指针等等。 - Object-Oriented C++:这部分就是C with Class强调的。包

2017-08-12 21:58:47 204

转载 设计模式之迭代器

概述:        在现在的电视机中,我们使用[后一个]和[前一个]按钮可以很方便的换台,当按下[后一个]按钮时,将切换到下一个预置的频道。想象一下在陌生的城市中的旅店中看电视。当改变频道时,重要的不是几频道,而是节目内容。如果对一个频道的节目不感兴趣,那么可以换下一个频道,而不需要知道它是几频道。        这个其实就是我们迭代器模式的精髓:提供一种方法顺序访问一个聚合对象中各个元素,

2017-08-07 16:45:23 164

转载 设计模式之单例

什么是单例模式?单例模式(Singleton Parttern)保证一个类仅有一个实例,并提供一个访问它的全局访问点。类似于全局变量,但是效果比全局变量更优,全局变量必须在程序开始就创建,如果后面没有用到,会造成资源的浪费。为什么要创建单例模式?有一些对象我们只需要一个,比方说:线程池(threadPool)、缓存(cache)、对话框、注册表(registry)的对象、日志对象,充当打 字机,

2017-08-07 16:36:55 116

原创 判断一颗二叉树是是否是另一颗树的子树。

题目描述:.判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。 **难点分析: 要判断树2是否是树1中的节点,就需要遍历树1中节点与树2根结点比较。如果相同,则树1,树2同时遍历比较。两棵树进行两层遍历,对于技巧要求较高。思路: 将过程分为两步: 1,通过递归,在树1中每次给出一个节点。 2,通过递归,在树2中判断该结点所在树是否与树2一样。实现代码://节点信息:s

2017-07-29 00:06:50 397

原创 求链表A与链表B的差集

题目描述: 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。 链表结点的结构类型定义如下: struct node { int elem; node* next; };

2017-07-27 02:30:28 726 1

原创 二维数组中的查找

题目描述: 一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高。难点分析: 一遍情况下,我们在二维数组中查找某一个元素,都是将数组遍历一遍。此时时间复杂度为O(M+N) 但是,本题中的二维数组的情况比较特殊。从左到右递增,从上到下递增,而且要求效率尽可能高。提示可以利用此规律,进行较快的查找。思路: 根据题意,知道,二维矩阵中,某一行最大数在最左

2017-07-27 00:06:15 237 2

原创 链表只翻转一部分

题目描述: 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). (提示:这个题是链表逆置的升级变型)难点分析: 在原来链表逆置的基础上添加了k作为新的限制条件而已。思路:

2017-07-24 00:54:48 256

原创 二叉树相关面试题汇总

说明:本博文在以前面试题的基础上汇总了二叉树的常见面试题。二叉树中封装的功能有: void _CreateTree(Node*& pRoot, const T array[], size_t size, size_t& index, const T& invalid);//创建树 Node* _CopyBinaryTree(Node* pRoot);//拷贝树 void _Dest

2017-07-23 12:45:23 383

原创 17_7_22 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。

题目描述: 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2。难点分析: 如果,通过O(N)的时间复杂度,通过两层循环,求出每个字符出现次数。发现有大于数组个数一半的,那么就可以得到该字符。 但是,面试官是不希望看到这个答案的。那么就需要一些比较巧妙的办法了。思路: 思路: 如果,某个字

2017-07-22 23:38:15 260

原创 17_7_22 求二叉树叶子节点的个数/求二叉树第k层的节点个数

题目描述: 求二叉树叶子节点的个数/求二叉树第k层的节点个数思路: 这两个题目的思想类似,都是利用二叉树的自相似性,把每次传进来的节点看做是一个二叉树的根结点。将问题细化,将每个节点的状态信息返回即可。节点以及二叉树信息:template <typename T>struct BinaryTreeNode{ BinaryTreeNode(const T& data)

2017-07-22 22:26:44 499

原创 17_7_21 二叉树的层序遍历

题目要求: 实现一颗二叉树的层序遍历难点分析: 没有要求,前序,或者中序、后序等常规一路走到底的遍历。 而是,按行从左到右遍历。第一次遇见,可能有点不适应。 需要想个办法,记录每一行应该走的顺序。 思路: 可以利用队列来实现。 1,先将根节点入队列, 2,进入循环,队首结点出队列,输出其值。 3,将其左右孩子节点入队列, 4,进行2-3循环,直到队列为空实现代码:template

2017-07-21 23:23:22 144

原创 17_7_20:计算一个整数二进制位中1的个数。

题目描述: 计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。难点分析: 如果,要判断每个位上的0或1。利用移位,然后和1相与,循环16次或32次或64次等等,这样不管正负,效率也还可以。 但是,题目要求效率尽可能的高。这样的话,就值得深思了。 关于效率问题。还得看位运算了。思路: 把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0

2017-07-20 14:43:41 254

原创 17_7_20:元素入栈出栈的合法性检测

题目描述: 元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。 入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。难点分析: 在出栈、入栈操作随机性比较强,不好把握它们的动态变换。 但是,要牢记栈的性质“后进先出”。第一个出栈的元素,肯定是当时栈空间中元素中最后进入的。即使,后来又有新的元素入栈,但是我们知

2017-07-20 13:51:03 192

原创 17_7_19:实现一个栈要求实现入栈、出栈、获得最小值的时间复杂度为O(1)

问题描述: 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) 。难点分析: 首先,我们知道,在栈的实现中,入栈、出栈操作的时间复杂度都是O(1)。 难就难在返回最小值的操作的时间复杂度。如果有一个值来存储的话,到时可以,但是,当有入栈,出栈操作时,这个最小值是不断变换着的。 所以,难点可以看成是:最小值如何存储,才能满足栈中元素

2017-07-19 23:58:52 427

原创 17_7_18:两个栈实现一个队列。两个队列实现一个栈

题目: 1,使用两个栈实现一个队列 2,使用两个队列实现一个栈 1,使用两个栈实现一个队列思路: 根据栈的FILO性质,将数据,全部存入第一个栈中; 再将第一个栈中数据全部放入第二个栈中; 这样,将数据从第二个栈中取出时,达到了FIFO效果。template <typename T>class MyQueue{public: MyQueue() {} void

2017-07-18 20:01:43 125

原创 17_7_17:复杂链表的复制

思路: 有两种解决办法: 第一种: 1,遍历一次链表,构建一条新链表,只复制_data以及_next。 2,再次遍历原来链表,获取每次遍历节点的_random,在一次循环中,再次遍历链表。获取_random指向的位置到头结点的长度。在新链表中,也指向相对位置。 时间复杂度:O(n^2)第二种: 1,遍历原来的链表,每次循环中,在旧节点后面插入一个新节点。添加的新节点的_data是它前驱节

2017-07-18 12:00:14 145

原创 17_7_17:删除一个无头单链表的非尾节点。从尾到头打印单链表

【基础题】 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表首先,给出节点信息#include <iostream>#include <cassert>typedef int DataType;typedef struct ListNode{ DataType _val; ListNode* _pNext;}Node, *PNode;1.删除一个无头单链表的非

2017-07-17 23:59:12 305

原创 shell实现彩色进度条

以前用C语言写过一个进度条。具体实现细节http://blog.csdn.net/qq_35524916/article/details/55657147 最近学习shell,就用彩色进度条来练练手。首先是,基础的进度条基本功能#!/bin/bashfunction bar(){ i=0 bar="" lable=('|' '\\' '-' '/') whlie

2017-07-17 01:32:09 703

原创 17_7_16:判断两个链表是否相交,若相交,求交点。如果链表带环呢?

1.【基础题】–1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】 2.【附加题】–请问下面的程序一共输出多少个“-”? #include <stdio.h>#include <unistd.h>int main(void) { int i; for(i=0; i<2; i++){ fork(); prin

2017-07-16 23:52:12 327

原创 17_7_15:判断链表是否有环+求环的长度+求环的入口。设计不能被继承的类,只能堆/栈上创建对象的类

1.【基础题】–判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度? 2.【附加题】–1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。 ps:以上三个问题是类似的。**1,基础题** 这个三个问题,都是处理单链表中存在环的情况。难度依次递增。(1)判断链表是否带环。 思路:定义两个指针:快指针与满指针 快指针f

2017-07-15 07:11:45 257

原创 17_7_14:逆置单链表+查找单链表的倒数第K个节点+非常规方法实现Add函数

1.【基础题】–逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表 2.【附加题】–实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、–等等**1,基础题:**/*注:本次代码处理的是不带环的单链表*/#include <stdio.h>#include <stdlib.h>typedef struct ListNode{

2017-07-14 20:39:12 265

原创 17_7_13:合并两个有序链表。实现1+2+3+...+n,不使用常规方法

1.【基础题】–合并两个有序链表,合并以后的链表依旧有序。 2.【附加题】–实现1+2+3…+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(这个题有多种解法,大家可以尽量去思考,这个题最优的解法时间复杂度是O(1),大家可以去尝试实现)1,基础题:#include <stdio.h>typedef struct ListNode{ int _val; struct

2017-07-13 06:24:54 298

原创 多线程与多进程服务器以及池的概念

1,多线程服务器mul_pth_server.c中代码:#include //不要忘记了#include #include #include #define P_NUMBER 255 //并发进程数量#define COUNT 5 //每次进程打印字符串个数#define LOGFILE "logFile.log" //日志文件char *s = "my mul_pth

2017-07-03 17:45:03 227

原创 Linux shell之eval、``与$()

eval简介:eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。也就是说,eval命令有两步。第一步,扫描,并置换。类似于C语言中编译期间的宏替换第二部,执行替换之后的命令。类似于C语言运行期间,将替换后的值带入程序中运行计算。这是eval最重要的功能。该命令适用于那些一次扫描无法实现其功能的变量,该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为

2017-07-03 14:36:06 457

原创 TCP三次握手与四次挥手

TCP是面向连接的协议。而运输连接有三个阶段:连接建立数据传送连接释放其过程示意图:本篇中点讲述“连接建立”与“连接释放”过程,以及它们的原理。相关知识点:TCP的功能:TCP全称“传输控制协议”,TCP提供一种面向连接的服务。在传送数据之前必须先建立连接数据传输之后要释放连接。由于TCP要提供可靠的、面向连接的运输服务,

2017-06-30 10:12:23 155

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