- 博客(90)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 五种I/O模型详解
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。 例如普通B/S模式(同步):提交请求->等待服务器处理->处理
2017-11-10 12:39:03
1439
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 设计模式之单例模式(C++代码实现)
1、单例模式:单例模式:用来创建独一无二的,只能够有一个实例的对象。 单例模式的结构是设计模式中最简单的,但是想要完全实现一个线程安全的单例模式还是有很多陷阱的。2、应用场景:共享数据或者共享访问点; 创建一个对象需要消耗的资源过多,如访问IO和数据库等资源; 需要定义大量的静态常量和静态方法(工具类)单例模式的应用场景:有一些对象其实只需要一个,比如:windows Task Manager
2017-11-10 12:22:26
1316
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 传输层两大协议:TCP与UDP详解(两者的联系与区别)
一、TCP协议1、TCP协议报文格式TCP协议报文格式详解2、TCP“三次握手”建立连接位码即tcp标志位,有6种标示:SYN(synchronous建立联机)ACK(acknowledgement 确认)PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急)Sequence number(顺序号码)Acknowledge number(确认号码)1)第一
2017-10-02 17:49:59
2599
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 网络层:IP协议详解(IP协议真的得看这篇)
1、IP协议概念IP(Internet Protocol , 互联网协议)主要用于互联网通信。IP协议用于将多个包交换网络连接起来,他在原地址和目的地址之间传输数据报,还提供对数据大小的重新组装功能,以适应不同网络的要求。IP协议是TCP/IP协议族的核心协议,最常用的IP协议的版本号是4,即IPV4 ,它的下一个版本就是 IPV6。2、IP协议报文格式(1)版本 占4位,指IP协议的版本。通信双方
2017-10-02 04:33:34
10958
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数据链路层:ARP协议详解(绝对经典)
1、ARP协议定义: 地址解析协议,工作在数据链路层,在本层和硬件接口联系,同时向上层提供服务。IP数据包常通过以太网发送,以太网设备不识别32位IP地址,他们是以48位以太网地址传输以太网数据包的,因此需要IP转化为以太网目的地址。ARP协议用于将网络中的IP地址解析为Mac地址以保证通信的顺利进行。RARP则反向解析地址协议,负责将链路层Mac地址转化为网络层IP地址。2、ARP和RARP使用
2017-10-02 01:00:22
11178
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 链路层基本问题 : 封装成帧、差错检测、流量控制
一、封装成帧1、MAC帧类型字段 (2个字节): 用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。数据字段 (46-1500): 正式名称是MAC客户数据字段最小长度64 字节-18字节的首部和尾部 = 数据字段的最小长度。 FCS字段 (4 字节): 当数据字段的长度小于 46 字节时,应在数据字段的后面加入整数字
2017-10-01 20:22:38
2354
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 应用层协议:HTTP与HTTPS协议详解、二者的区别
http协议详解1、HTTP协议:超文本传输协议是一种分布式、合作式、多媒体信息系统服务,面向应用层的协议。是一种通用的,不分状态的协议。是一种请求/应答协议。1.1、HTTP/1.0和HTTP/1.1的比较RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1 。HTTP1.0 与HTTP1.1 向后兼容,也
2017-10-01 00:24:28
5055
原创 域名详解
定义是由一串用 “.” 分割的字符组成的Internet上某一台计算机或计算机组的名称,域名的本质是IP地址的一个映射,域名的目的是便于记忆和沟通的一组服务器的地址。域名解析域名解析的过程实际上是将域名还原为IP地址的过程(1)首先浏览器先检查本地hosts文件是否有这个网址映射关系,如果有就调用这个IP地址映射,完成域名解析。 (2)如果没找到则会查找本地DNS解析器缓存,如果...
2018-02-25 20:10:37
2297
原创 求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
题目描述:给定一个数字n,统计1~n之间的n个数字的二进制的1的个数int Nums_Of_Bit_1(int num) { int* number = new int[num]; int pow = 1,before =1;int count = 0; for(int i=1; i if (i == pow){
2017-10-28 00:43:48
1384
原创 剑指offer:二叉树中和为某一值的路径
题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。分析:路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 用递归的思想去把和分解代码实现:#include <iostream>#include <vector>using namespace std;typedef struc
2017-10-06 16:18:15
367
原创 找出无序数组最小的K个数(基于快排,效率高)
#include <iostream>using namespace std;void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}void GetLeastNumbers_Solution(int input[],int start, int end, int k) { int
2017-10-04 00:30:06
973
原创 面试题:根据Unix时间戳计算时间
根据Unix时间戳计算时间,不分年月大小,每月三十天,每年按360天计算。开始时间1970/01/01 00:00:00,输入秒数,显示时间思路一:进位,60秒进1分钟,60分进1小时,24小时进1天,30天进1月,12月进1年,依次建立循环while (second > 60) { second -= 60; minute += 1;
2017-08-24 21:23:56
2245
原创 面试题:找两个有序数组所有数第K小的数
给定两个有序数组arr1和arr2,再给定一个整数k,返回两个数组中所有数中第k小的数。要求:如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(min{M, N}) )例如:arr1 = {1,2,3,4,5}arr2 = {3,4,5}k = 1;因为1为所有数中最小的,所以返回1arr1 = {1,2,3}arr2 = {3,4,5,6}k = 4因为3为所
2017-08-23 18:26:08
2099
原创 操作系统:虚拟页式存储管理(缺页中断、页面置换算法)
1、基本工作原理1、基本工作原理在进程开始运行之前,不是全部装入页面,而是装入一个或者零个页面,之后根据进程运行的需要,动态装入其他页面;当内存已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。在使用虚拟页式存储管理时需要在页表中增加一些内容:页号、驻留位(中断位)、内存块号、外存地址、访问号、修改位驻留位:表示该页在外存还是内存;访问位:表示该页在内存期间是否被访问
2017-08-21 00:19:31
11362
原创 Linux系统:软链接与硬链接的原理分析
1、相关概念1、索引节点inode(index node):inode就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。inode 是 UNIX/Linux 操作系统中的一种数据结构,其本质是结构体它包含了与文件系统中各个文件相关的一些重要信息。每一个索引节点都是一个表项,包含有关文件的信息(元数据): 文件类型,权限,UID,GID 链接数(指向这个文件名路径
2017-08-20 17:52:27
1552
原创 C/C++关键字解析
2、C/C++分别有多少个关键字? 假如别人问某一个关键字是否属于C/C++,要能正确的答出来。1)由ANSI标准定义的C语言关键字共32个 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned co
2017-08-18 16:46:31
970
原创 c++面试常考的知识点汇总
1. 链表和顺序表的优缺点,在什么场合下适合顺序表,什么场合下适合用链表。1)顺序表存储 原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度 优点:存取速度高效,通过下标来直接存储,访问速度快,通过下标访问 缺点:a.插入和删除比较慢,b.不可以增长长度 比如:插入或者删除一个元素时,整个表需要遍历或移动元素来重新排一次
2017-08-18 16:45:42
1577
原创 面试题:最常见最有可能考到的C语言面试题汇总
1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL(无符号长整型) 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#defineMIN(A,B) ((A) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题
2017-08-17 17:03:54
29808
1
原创 测试Markdown
一级标题二级标题四级标题这是高阶标题(和一级标题效果一样)这是次阶标题(等同二阶标题)无序列表*1 *2 *3无序列表-1 -2 -3有序列表1.你大爷 2.你大伯 3.你叔 4、你哥 这是一个引用 第二个引用 第三个引用 二级 一级int main(){ return 0;
2017-08-13 16:44:54
451
原创 微信红包问题:找出某个出现次数超过红包总数一半的红包的金额(面试题)
1、问题描述春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。测试样例:[1,2,3,2,2],5返回:22、问题思路可以使用ma
2017-08-13 13:24:26
2125
原创 字符串替换:用参数字符数组成员替换字符串中的占位符(面试题)
1、问题描述:请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。给定一个字符串A,同时给定它的长度n及参数字符数组arg和它的大小m,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。
2017-08-12 23:31:29
4893
转载 C语言存储空间布局以及static解析
本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法。采用linux环境来测试c语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查看到进程存储区各段的大小。采用VC6.0来测试static的常见用法,是因为我们利用VC6.0很容易创建一个工程,该工程可以包含很多源文件,这样就很方便我们测试本文件与其他文件之间的关系了。
2017-08-12 07:29:13
705
原创 有趣的C语言面试题
1、gets() 和 fgets()函数问题:找出下面代码的问题#include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The buffer entered is [%s]\n",buff); r
2017-08-10 16:07:31
470
原创 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
八大排序算法发表于2012/7/23 16:45:18 662397人阅读分类: c/c++ 数据结构与算法概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间
2017-08-09 22:29:23
904
原创 数据结构:排序算法之交换排序(冒泡排序、快速排序)
1、冒泡void bubbleSort(int a[], int n){ for(int i =0 ; i< n-1; ++i) { for(int j = 0; j < n-i-1; ++j) { if(a[j] > a[j+1]) { int tmp = a[j] ; a[j] = a[j+1] ; a[j+1] = tmp; } } }}/*
2017-08-09 22:18:11
496
原创 面试题:找出公司员工最喜欢的k种水果
1、问题本公司现在要给公司员工发波福利,在员工工作时间会提供大量的水果供员工补充营养。由于水果种类比较多,但是却又不知道哪种水果比较受欢迎,然后公司就让每个员工报告了自己最爱吃的k种水果,并且告知已经将所有员工喜欢吃的水果存储于一个数组中。然后让我们统计出所有水果出现的次数,并且求出大家最喜欢吃的前k种水果。void GetFavoriteFruit(const
2017-08-09 21:53:20
1017
原创 数据结构:排序算法之堆排序和选择排序
1、堆排序void HeapAdjust(int array[], int root, int size){ int parent = root; int child = root*2 + 1; while(child < size) { //还剩三个数据时:1(0), 2(1), 3(2)左右孩子需要调整,此时:child+1 == child if(child+1 <= si
2017-08-08 00:52:55
383
原创 数据结构:排序算法之插入排序
1、直接插入排序void InsertSort(int array[], int size){ for(int idx=1; idx<size; idx++) { int temp = array[idx]; int end = idx-1; while(end>=0 && array[end] > temp)
2017-08-08 00:40:08
346
原创 数据结构:将二叉搜索树转换成一个排序的双向链表
1、将二叉搜索树转换成一个排序的双向链表。提示:要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。--中序线索化的变型。 Node* BSTreeToList() { if(_pRoot == NULL) return NULL; Node* pHead = _pRoot; //找到最左边的结点,即转
2017-08-08 00:32:11
414
原创 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
1、判断二叉树是否为完全二叉树:层序遍历,从上到下,从左到右,遍历二叉树;当遇到一个节点的左子树为空时,则该节点的右子树为空和后面遍历的节点都为叶子节点,否则不是完全二叉树。当该节点只有左子树时,且该子树为叶子结点,否则不为完全二叉树。判断实现:bool _IsCompleteBinaryTree(BinaryTreeNode* pRoot) { if(pRoot ==
2017-07-31 23:48:19
787
原创 基于udp的网络群聊系统
一、系统简介这是一个基于udp协议的网络群聊系统,为什么选择udp协议呢?这就需要了解TCP协议与udp协议。1)TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B
2017-07-31 00:58:20
958
原创 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
1、栈和队列分析栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front)。2、两个队列实现一个栈:利用队列先
2017-07-19 23:44:31
607
原创 ]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)
1、判断两个链表是否相交,若相交,求交点。(假设链表不带环)两个指针同时指向两个链表,分别依次往后遍历链表到最后一个节点,如指针的值相同(即节点地址相同),反之没有交点。int IsCross(Node* pHead1, Node* pHead2){ Node* Node1 = pHead1; Node* Node2 = pHead2; if((NULL == pHead1) ||
2017-07-19 13:32:49
620
原创 数据结构:单链表操作之如何判断链表是否带环及相关操作
//判断链表是否有环int HasCircle(Node* pHead){Node* low=pHead;Node* fast=pHead; while(fast != NULL && fast->next != NULL) { low=low->next; fast=fast->next->next;
2017-07-16 01:57:25
411
原创 LInux:shell 命令:字符串截取
1、cut命令截取使用说明cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。主要参数-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。-c :以字符
2017-07-11 18:06:36
2728
原创 Linux: 系统配置 crond 和 crontab(有图有代码有真相!!!)
1、相关概述linux下工作调度的种类有:at , cron 一种是例行性的,就是每隔一定的周期来办某事。一种是突发性的,就是做完这一次没有以后。crontab这个命令所设置的工作将会一直循环进行下去,循环的时间可以是分钟、小时、每周、‘每月、每年等,crontab除了命令执行外,也可以编辑/etc/crontab来支持,而crond就是让crontab生效的服务。2、
2017-07-11 17:18:32
754
原创 LInux:shell 彩色进度条实现(有图有代码有真相!!!)
一、进度条原理(以前的博客详细讲述过):http://blog.csdn.net/sharp_up/article/details/55506555二、颜色设置// 字体颜范围(前景颜色):30~39 30:黑31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色 // 字背景颜色范围(背景颜色):40~49
2017-07-02 18:47:26
2550
原创 Linux:shell脚本命令: >/dev/null 2>&1 的理解
1、可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用. 禁止标准输出. 1 cat $filename >/dev/null # 文件内容丢失,而不会输出到标准输出. 禁止标准错误. 2>/dev/null 这样错误
2017-07-02 03:43:57
1473
1
原创 Linux: shell命令 eval (有图有代码有真相!!!)
一、eval 命令定义shell中的eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。不过这些变量本身并不复杂。eval 命令也可以用于回显简单变量,不一定是复杂变量。功能说明:告知shell取出eval的参数,重新运算求出参数的内容。语
2017-06-15 18:24:49
1079
原创 Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)
一、命令代换(命令替换)由 ` ` 或 $() 括起来的也是一条命令,shell先执行该命令,再将结果立刻代换到当前命令行中。简单例子:DATE=`date`echo $DATE DATE=$(date) echo $DATE执行结果:二、优缺点:1、反引号的缺点1).它比较陈旧
2017-06-15 16:18:46
961
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人