- 博客(106)
- 收藏
- 关注
原创 TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
在有关TCP连接的很多配置中,有很多选项有的配置 net.ipv4.tcp_rmem:这个参数定义了TCP接收缓冲(用于TCP接收滑动窗口)的最小值、默认值、最大值net.ipv4.tcp_wmem:这个参数定义了TCP发送缓冲(用于TCP发送滑动窗口)的最小值、默认值、最大值netdev_max_backlog:当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。
2016-04-18 22:28:01
856
原创 C++虚函数表详细解释及实例分析
C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图
2016-04-06 22:20:01
8092
原创 linux系统性能优化及瓶颈分析
一,用vmstat分析系统I/O情况[root@localhost ~]# vmstat -n 3 (每个3秒刷新一次)procs-----------memory--------------------swap--- ---io---- --system---- ------cpu--------r b swpd free buff
2016-04-04 19:49:15
8464
原创 C/C++中的预编译指令
程序的编译过程可以分为预处理、编译、汇编三部分,其中预处理是首先执行的过程,预处理过程扫描程序源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程读入源代码之后,会检查代码里包含的预处理指令,完成诸如包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码的工作。下面介绍一些C/C++中预编译的指令。一 #指令预处理指令以#号开头,并且#号必须是该行除了
2016-03-30 23:17:28
19308
2
原创 线程同步之互斥锁、读写锁和条件变量
一,使用互斥锁1,初始化互斥量[cpp] view plain copypthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_init(pthread_mutex_t*mutex,pthread_mutexattr_t*attr
2016-03-28 23:22:26
1813
原创 Linux 线程同步的三种方法
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。一、互斥锁(mutex)通过锁机制实现线程间的同步。初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。静态分配:pthread_mutex_t mutex = PTHR
2016-03-28 22:59:59
1062
原创 RTP 协议
RTP 协议概述:实时传送协议(Real-time Transport Protocol或简写RTP,也可以写成RTTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合R
2016-03-25 21:17:48
476
原创 RTSP实例解析
核心提示:rtsp简介(ZT) Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和 Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一 种可扩展的框架,使能够提供能控制的,按需传输实时数据,比如音频和视频文件 rtsp简介(ZT)Real Time Streaming Protoc
2016-03-25 21:05:16
919
1
原创 关于sizeof
首先要明确sizeof是运算符不是函数。sizeof()。括号内的内容在编译过程中是不被编译的,而是被替代类型。 如a = 8;sizeof(a),a不管是什么,只是被替换成类型sizeof(int),结果是4.如果sizeof(a=6)呢,也是一样被替换成a的类型int。但要注意a=6是不被编译的,所以执行完sizeof(a=6)后,a的值还是8。是不变的。请记住一下的几个结
2016-03-23 20:21:21
565
原创 C++ 关键字const
const主要为了防止所修饰的变量再次被修改。一般在定义的时候初始化但const类的成员变量必须在构造函数的初始化列表中初始化。 以下是const的常见用法: 1,用于定义常量变量,这样这个变量在后面就不可以被修改const int a = 9; a=8;//错误不能再被修改 2,保护函数参数不被改变void foo(const int& val){
2016-03-22 23:31:41
431
原创 TCP传输控制协议总结
TCP位于TCP/IP四层协议的第三层,属于传输层协议。它提供面向连接的 可靠的字节流服务。 TCP通过一下方式提供服务: 1. 应用数据被分割成TCP认为最合适发送的数据块。这和UDP完全不一样,应用程序产生的数据报长度保持不变。由TCP传递给IP的信息单位称为报文段或段。 2.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能即是收到
2016-03-22 00:51:57
2601
1
原创 智能指针
在C++中,我们使用普通指针指向一个内存对象时,在使用完之后我们需要释放它。demo_ptr* = new demo_ptr;demo_ptr->foo();delete demo_ptr;如果我们在使用完之后忘记delete或者foo调用发生异常都会造成内存泄漏。这个时候智能指针的出现就是为了控制对象的生命周期。在智能指针中一个对象什么时候什么条件下释放由智能指针自身控制,用户不需要
2016-03-20 00:57:24
665
原创 C++内存管理
这个问题已经被其他高手说的很多了,今天我也想谈一下我对C++内存管理的理解以及我在代码中是怎么内存管理的。一。内存分布: C++内存分布主要有: 1,程序代码区:存放函数体的二进制代码。 2,常量区:存放数据常量 3,全局区(静态区):存放全局和静态变量(初始化和未初始化相邻存放) 4,栈区:存放局部变量,函数参数 5,堆区:存放new出来的变量或对象。
2016-03-19 12:41:03
1077
原创 new 和malloc的区别
1,malloc是c/c++标准库函数,new是c++运算符2,maloc返回指针类型是void*,new出来的指针具有类型信息3,malloc不能调用类的构造函数,new可以。为什么malloc不能调用构造函数?因为malloc是库函数,不是运算符,不在编译器的控制范围之内,不能将构造函数的执行强加给malloc。
2016-03-18 16:53:26
385
原创 慢启动快速恢复
上面讨论的两个机制都是没有检测到拥塞的情况下的行为,那么当发现拥塞了cwnd又该怎样去调整呢?首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网
2016-03-18 12:17:17
1393
原创 哈希表
哈希表的概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。散列存储的基本思路 以数据中每个元素的关键字K为自变量,通过散列函数H(k)计算出函数值,以该函数值作为一块
2016-03-18 01:26:05
467
原创 Linux下物理内存和虚拟内存交换机制
Linux下物理内存和虚拟内存交换机制 Vmstat是Virtual Memory Statistics虚拟内存统计缩写:物理内存是计算机内存的大小,从物理内存中读写数据比硬盘中读写数据要快很多,而内存是有限的,所以就有了物理内存和虚拟内存的概念。物理内存就是硬件的内存,是真正的内存。虚拟内存是为了满足物理内存不足采用的策略,利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间也
2016-03-17 22:29:39
4502
1
原创 腾讯后台开发面试题及答案
转自:http://blog.csdn.net/ibmfahsion/article/details/11992403?utm_source=tuicool&utm_medium=referral简单归纳:fd只是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。文件描述符的操作(如: open)返回的
2016-03-17 01:24:47
8093
原创 TCP 的那些事儿(下)
转自:http://kb.cnblogs.com/page/209101/ 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前
2016-03-16 01:04:46
653
原创 TCP那些事
TCP那些事上: http://kb.cnblogs.com/page/209100/TCP那些事下:http://kb.cnblogs.com/page/209101/
2016-03-16 00:41:36
472
原创 epoll详解
转自:http://blog.csdn.net/xiajun07061225/article/details/9250579什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kern
2016-03-16 00:26:26
577
原创 TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
转自:http://blog.csdn.net/yusiguyuan/article/details/28625129?utm_source=tuicool&utm_medium=referral在有关TCP连接的很多配置中,有很多选项有的配置net.ipv4.tcp_rmem:这个参数定义了TCP接收缓冲(用于TCP接收滑动窗口)的最小值、默认值、最大值net
2016-03-16 00:16:00
4513
1
原创 函数对象/仿函数
转自:http://www.cnblogs.com/weiqubo/archive/2011/02/16/1956552.html提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。
2016-03-15 21:55:57
848
原创 Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)
转自;http://www.rootop.org/pages/2773.htmlPS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于10
2016-03-15 01:07:00
409
原创 大型网站系统架构的演化
大型网站系统架构的演化转自http://www.cnblogs.com/leefreeman/p/3993449.html前言 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一
2016-03-13 23:33:11
295
原创 ICMP协议
ICMP协议http://www.cnblogs.com/jingmoxukong/p/3811262.html目录ICMP协议1、ICMP简介ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。 ICMP的协议号为1。ICMP报文就像是IP报文的小弟,总顶着IP报文的名头出来混。因为ICMP报文是在
2016-03-13 13:19:31
783
原创 希尔排序
希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。其实,希尔排序本质也就是直接插入算法的升级,希尔的基本思想,就是先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量大小再进行排序,待整个序列中的元素基本有序(增量足够小,通常为1
2016-03-13 00:18:27
434
原创 临界区,互斥量,信号量,事件的区别
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 临界区(Critical Section)保证在某一
2016-03-10 23:32:18
3142
原创 问题总结
问题总结:1, 做过哪些服务?2, 公司平台的系统结构? 3, 数据库出现瓶颈怎么优化?优化:将写入的数据同步到其他的数据库供读取数据使用。总体思想:将读业务和写义务分开。 如果分开之后还是不行,读业务数据压力解决不了,就将读业务数据在按 实际客户业务分布4,cms当掉了 怎么处理的?双击热备的实现?
2016-03-10 23:29:33
393
转载 可靠传输的实现
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口
2016-03-09 19:13:25
861
原创 重温C++ 之 重载操作符
重载操作符是具有特殊名称的函数:保留字operator 后接需要重载的操作符。 重载操作符必须具有一个类类型或枚举类型的操作数。 不能被重载的操作符有:: .*
2016-02-20 20:25:55
626
原创 STL中erase()小心使用
http://blog.sina.com.cn/s/blog_67b6b720010114d3.htmlerase()函数的功能是用来删除容器中的元素删除某个容器里的某个元素:c.erase(T);看似一个简单的动作,然而对不同类型的容器,内部却做了截然不同的事情,后面介绍。假设有这样一个题目,将某个容器中所有满足条件N == X的元素删除,按照常规的思路应该有类似这样的代码:// 假
2015-10-29 23:09:23
579
原创 do...while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在
2015-08-27 23:15:53
487
原创 安防基础知识
一、 目前安防视频监控 的普遍现状:1,前端主要以模拟摄像机为主。模拟摄像机的天生弊端 导致监控录像画质无法超越D1。2,模拟信号收到电磁干扰,画面常常有雪花噪点和干扰条纹等。3,监控录像的噪点与干扰导致录像码流(硬盘消耗)浪费。4,模拟监控布线多而繁琐。
2015-08-17 23:30:51
1312
原创 桥接模式
//把class的接口与其实现分离,从而要达到真正的数据隐藏之境,而其不二法门就是运用“桥连接模式(Bridge Pattern)”//桥连接模式需要把目标类型分为两部分,接口部分和实现部分[cpp] view plaincopyprint?#include class Cimpl; class C//接口部分 { public: C( int
2015-02-04 15:45:23
515
转载 用VC进行64位编程
献给c/c++的同学。它包括创建一个64位安全的应用程序或者是从32位迁移到64系统的所有步骤。该介绍一共包括28课,涉及的内容有64位系统,64位应用程序的构建,如何找64位代码的问题和如何优化。第一课:64位的系统是什么 在写这个课程的时候,有2个流行的微处理器的64位架构:IA64和Intel64. 1、IA-64:是Intel和Hewlett Packard 共同研发6
2014-11-17 09:25:21
2967
转载 如何编写windows服务程序
这两天想学习关于如何编写windows服务程序的知识,就上网查了些资料。看了一篇文章《用C 语言编写Windows 服务程序的五个步骤》。但可能由于译者的疏忽,忘记了将关键代码放入该文档,导致初学者可能会看不懂。所以又查阅了相关资料。自己完成了《用C 语言编写Windows 服务程序的五个步骤》中的样例程序。 在本文中我希望能给初学者一些帮助,大致讲一下编写windows服务程序需
2014-11-09 12:15:30
953
转载 动态库与静态库优缺点比较
动态库与静态库优缺点比较(2012-10-18 15:31) 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。 例如我要在一段代码中多次交换两个变
2014-09-09 14:26:07
48286
7
转载 VC++中CMAP用法
【转】VC++中CMAP用法参考一:映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”,就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。映射类最适用于需要根据关键字进行快速检索的场合,我们的程序中就用映
2013-05-18 19:51:41
3788
原创 朋友转发
如果你编程不规范,可以学习《高质量的C++编程》如果对MFC不甚了解,可以先学习《win32 API编程指南》,然后再《深入浅出MFC》如果对多线程不了解,可以学习《windows核心编程》关于线程与内核对象同步的知识如果对面向对象思想不了解,可以学习《设计模式》,其中第一章最精华;再进一步可以学习《敏捷开发原则》如果以上都已通晓。编程思想上可以看看《泛型编程与ST
2012-12-22 19:42:00
603
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人