自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《深度探索c++对象模型》学习笔记

1、c++的布局和存取时间成本?封装并未给c++带来任何的空间或执行期的不良后果,c++在布局和存取时间上的主要额外负担由虚拟化引起。包括: 1)virtual function机制。用以支持一个有效率的“执行期绑定”。 2)virtual base class机制。用以实现“多次出现在继承体系中的base class,有一个的单一而被共享的实例”。2、虚拟继承虚拟继承是多重继承中特有的概念。虚

2016-05-31 15:48:51 2403

原创 设计模式总结:概念、原则、23种模式分析

1、什么是设计模式设计模式从本质上讲,是针对过去某种经验的总结。每种设计模式都是为了在特定条件下去解决某种问题。设计模式中的每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。它是可复用面向对象软件的基础。设计模式解决的是系统设计问题,设计模式是“术”,设计模式背后的用意才是“道”。GoF提出了23中设计模式,是对日常用到

2016-05-29 23:31:17 3678 1

原创 Unix网络编程-同步

1、互斥锁(量)和条件变量默认情况下互斥锁和条件变量用于线程间同步,若将它们放在共享内存区,也能用于进程间同步。1.1 互斥锁1、概述: 互斥锁(Mutex,也称互斥量),防止多个线程对一个公共资源做读写操作的机制,以保证共享数据的完整性。用以保护临界区,以保证任何时候只有一个线程(或进程)在访问共享资源(如代码段)。保护临界区的代码形式:lock_the_mutex(...);临界区unlo

2016-05-29 11:20:05 9342

原创 I/O复用和I/O模型

由《Unix网络编程卷1》总结而来。1、I/O复用同时监视多个I/O条件,在其中任意一个就绪时通知进程,这样的能力称为I/O复用。由select和poll函数支持,较新的还有Posix中的pselect函数。(Linux中还有epoll)。I/O复用应用场合:1)客户同时处理多个描述符时,必须使用I/O复用。2)客户同时处理多个套接字时(比较少见)。3)一个TCP服务器既要处理监听套接字,又要处

2016-05-27 18:39:00 558

原创 Linux网络编程和套接字

1、套接字概述套接字的本意是插座,在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。 常用的套接字类型有3种: 1)流套接字(SOCK——STREAM):使用了面向连接的可靠的数据通信方式,即TCP套接字; 2)数据报套接字(Raw Sockets):使用了不面向连接的数据传输方式,即UDP套接字; 3)原始套接字(SOCK——RAW):没有经过处理的IP数据包,可以根据自己程序的

2016-05-26 22:25:52 10093

转载 多线程如何实现同步

在多个线程并发执行访问同一个数据时,如果不采取相应的措施,将会是非常危险的。所谓同步(synchronization)就是指一个线程访问数据时,其它线程不得对同一个数据进行访问,即同一时刻只能有一个线程访问该数据,当这一线程访问结束时其它线程才能对这它进行访问。同步最常见的方式就是使用锁(Lock),也称为线程锁。锁是一种非强制机制,每一个线程在访问数据或资源之前,首先试图获取(Acquire)锁,

2016-05-26 17:37:04 2537

转载 C++11 多线程

C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件<thread>、<mutex>、<atomic>、<future>等用于支持多线程。使用C++11开启一个线程是比较简单的,下面来看一个简单的例子:#inclu

2016-05-26 16:32:26 413

转载 当析构函数遇到多线程 ── C++中线程安全的对象回调

编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x 的成员函数期间,对象 x 不会在另一个线程被析构?如何避免这种竞态条件是 C++ 多线程编程面临的基本问题,可以借助 boost的shared_ptr 和 weak_ptr 完美解决。这也是实现

2016-05-26 15:13:40 3635

原创 《图解HTTP》学习笔记(六)-确保Web安全的HTTPS

在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用 HTTPS 通信机制可以有效地防止这些问题。1、HTTP缺点事物皆有两面,HTTP也有其不足之处:1)通信使用明文,不加密,内容可能会被窃听;2)不验证通信方的身份,因此有可能遭遇伪装;3)无法证明报文的完整性,所以有可能已遭篡改。1、通信使用明文可能会被窃听 由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用

2016-05-25 09:58:03 1043

原创 《图解HTTP》学习笔记(六)-HTTP首部

1、HTTP 报文首部HTTP 协议的请求和响应报文中必定包含 HTTP 首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。1)HTTP请求报文:在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分组成。 2)HTTP响应报文:在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分组成。 在报文众多的字段当中,HTTP 首部

2016-05-25 00:15:20 3647

原创 《图解HTTP》学习笔记(五)-与HTTP协作的Web服务器

1、用单台虚拟主机实现多个域名一台Web服务器可搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器提升传输效率。即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以联想已具有多台服务器。另外,在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首

2016-05-24 21:13:11 656

原创 《图解HTTP》学习笔记(四)-返回结果的HTTP状态码

1、状态码告知从服务器端返回的请求结果HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。状态码由3位数字+原因短语组成,如 200 OK。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下 5 种。 2、2××成功2××的响应结果表明请求被正常处理。1)200 OK:

2016-05-24 20:51:40 1217

原创 《图解HTTP》学习笔记(三)-HTTP报文内的HTTP信息

1、HTTP报文用于HTTP协议交互的信息被称为HTTP报文,请求端的称之为请求报文,响应端的称之为响应报文。组成:HTTP报文本身是由多行(用CR+LF作换行符)数据结构构成的字符串文本,大致可以分为报文首部和报文主体两块。 请求报文和响应报文的首部内容由以下数据组成: 1)请求行:包含用于请求的方法,请求URI和HTTP版本2)状态行:包含表明响应结果的状态码,原因短语和HTTP版本3)首部

2016-05-24 18:00:57 1891 1

原创 《图解HTTP》学习笔记(二)-简单的HTTP协议

1、HTTP概述HTTP协议用于客户端和服务器端之间的通信,并通过请求和响应的交换而达成通信。请求由客户端发出,而服务器回复响应。1. 请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。 2.响应报文:由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。 2、HTTP是不保存状态的协议1)HTTP是不保存

2016-05-24 17:01:03 1463

原创 《图解HTTP》学习笔记(一)-了解Web及网络基础

1、使用HTTP协议访问Web当我们在网页浏览器(Web brow ser)的地址栏中输入 URL 时,Web 页面是如何呈现的?根据 Web 浏览器地址栏中指定的 URL,Web 浏览器从 Web 服务器端获取文件资源(resource)等信息,从而显示出 Web 页面。Web 使用HTTP(Hy perT ex t Transfer Protocol,超文本传输协议)协议作为规范,完成从客户端到

2016-05-24 15:43:44 868

原创 二分查找-有重复数和无重复数

1、适用于无重复数的版本二分查找要求数组有序,时间复杂度为O(lgn)。适用于无重复数的版本如下:#include<iostream>using namespace std;int biSearch(int a[], int n, int key){//非递归 int low=0, high=n-1, mid; while(low<=high) { mid

2016-05-24 14:27:31 3121

转载 二叉树-四种遍历及其他应用

对于每一个节点而言,先不断的往其左孩子方向搜索。先序和中序的差别就是,先序搜索左孩子之前先把该节点访问到,而中序要先不断搜索完左孩子,再访问该节点。1、先序遍历先序遍历按照根结点->左孩子->右孩子的顺序进行访问。1.递归遍历void preOrder1(BiTree *root){ if(root != NULL) { cout<<root->key<<" ";

2016-05-24 10:47:05 4030

原创 《程序员面试笔试宝典》学习笔记(六)操作系统

一、进程管理1、进程与线程有什么区别1.定义: 1)进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位。 例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等,然后,该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其它相关资源,该进程就被运行起来。2)线程是进程的一个实体

2016-05-22 10:12:11 3512

原创 leetcode8- String to Integer (atoi 字符串转整数)

实现字符串转为整数的功能:class Solution {public: int myAtoi(string str) { int n=str.size(); if(n==0) return 0; int i=0; while(i<n && str[i]==' ') {//(1)过滤掉前面的空格

2016-05-20 22:15:19 571

原创 《程序员面试笔试宝典》学习笔记(五)程序设计基础

十、变量1、全局变量和静态变量有什么异同全局变量的作用域是整个程序,它只需要在一个源文件中定义,就可以作用于所有的源文件,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。若某一个局部重新定义了这个变量,则全局变量作用域是除了这个局部外的整个程序,它的生命期与程序生命期一样长。静态局部变量具有局部的作用域,只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。它和

2016-05-20 21:52:11 3941

原创 《程序员面试笔试宝典》学习笔记(四)程序设计基础

六、结构体与类1、C语言中struct 和union 的区别是什么struct (结构体)与union (联合体)是C语言中两种不同的复合型数据结构。区别: 1)联合体中所有成员共用一块地址空间,联合体的长度为其最长的成员的长度;而结构体中所有成员占用空间是累加的(需要考虑字节对齐)2)对于联合体的不同成员赋值,将会对它的其它成员重写,原来的值不复存在;而对结构体不同成员赋值

2016-05-20 16:08:58 675

原创 《程序员面试笔试宝典》学习笔记(三)程序设计基础

二、内存分配1、内存分配的形式有哪些?一个C/C++编译的程序所占用的系统内存一般分为以下几个部分:1)由符号起始的区块(BBS, Block Started by Symbol)段:存放程序中未初始化的全局数据和静态数据的一块内存区域。BSS段属于静态内存分配,程序结束后静态变量资源由系统自动释放。2)数据段:存放程序中已初始化的全局变量和静态数据。数据段也属于静态内存分配。3)代码段:也叫文本段

2016-05-19 23:45:19 3708

原创 《程序员面试笔试宝典》学习笔记(二)程序设计基础

1、 static (静态)变量有什么作用1、静态成员特点1)对于非静态成员,每个类对象都有自己的复制品。被static修饰的成员变量和成员方法独立于该类的任何对象,只有一份复制品。也就是说,它不依赖类特定的实例,被类的所有实例共享。2)静态数据成员存储在全局数据区,在定义时要分配空间,故不能在类声明中定义。由于静态数据成员属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生

2016-05-19 17:27:10 3168

转载 《程序员面试笔试宝典》学习笔记(一)

1、extern的作用区分extern在C语言中和C++语言中的作用: (1)C语言中extern声明的函数和变量可以被该文件外部模块引用。 (2)C++语言中除了该作用还可以声明extern “C”声明一段代码编译连接的方法为C语言的方法。(a)extern是C/C++语言中声明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量在本模块或其他模块中使用。 (b)

2016-05-19 10:24:54 1240 1

原创 九度-1198:a+b(大数相加)

题目描述: 实现一个加法器,使其能够输出a+b的值。 输入: 输入包括两个数a和b,其中a和b的位数不超过1000位。 输出: 可能有多组测试数据,对于每组数据, 输出a+b的值。 样例输入: 2 6 10000000000000000000 10000000000000000000000000000000 样例输出: 8 10000000000010000000000000

2016-05-18 17:43:54 785

原创 《c专家编程》学习笔记(二)

1、虚拟内存虚拟内存的基本思路是使用廉价但缓慢的磁盘来扩充快速但昂贵的内存。操作系统负责具体细节,使得每个进程都以为自己拥有整个地址空间的独家访问权,这个幻觉依靠虚拟内存实现。所有进程共享机器的物理内存,当内存用完时就用磁盘保存数据。在进程运行时,数据在磁盘和内存之间来回移动。内存管理硬件负责把虚拟地址翻译为物理地址,并让一个进程始终运行于系统的真实内存中。应用程序程序员只看到虚拟地址,并不知道自己

2016-05-16 10:21:37 496

原创 《c专家编程》学习笔记(一)

1、typedef和#define的区别1、typedef:typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。可以增强程序的可读性,以及标识符的灵活性。2、#define:#define为宏定义语句,是预处理指令。通常用来定义常量(包括无参量与带参量)。它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及

2016-05-14 23:02:15 1802

原创 《TCP/IP详解》学习笔记-第22/23章 TCP坚持定时器,保活定时器

对每个连接,TCP管理4个不同的定时器。 1) 重传定时器:使用于当希望收到另一端的确认。 2) 坚持(persist )定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。 3) 保活(keepalive)定时器:可检测到一个空闲连接的另一端何时崩溃或重启。 4) 2MSL 定时器:测量一个连接处于TIME_WAIT状态的时间。总结:坚持定时器用于防止通告窗口为0以后双方

2016-05-14 12:36:18 466

原创 《TCP/IP详解》学习笔记-第21章 TCP的超时与重传

超时重传是TCP协议保证数据可靠性的另一个重要机制,原理是TCP每发送一个报文段,就对这个报文段设置一次计时器。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。1、超时超时时间的计算是超时的核心部分,TCP要求这个算法能大致估计出当前的网络状况,虽然这确实很困难。要求精确的原因有两个:(1)定时太久会造成网络利

2016-05-13 17:20:16 895 1

原创 《TCP/IP详解》学习笔记-第19/20章 TCP交互数据流、滑动窗口、拥塞窗口

1、TCP交互数据流交互数据总是以小于最大报文段长度的分组发送。对于这些小的报文段,接收方使用经受时延的确认方法来判断确认是否可被推迟发送,以便与回送数据一起发送。这样通常会减少报文段的数目,尤其是对于需要回显用户输入字符的Rlogin会话。在较慢的广域网环境中,通常使用Nagle算法来减少这些小报文段的数目。这个算法限制发送者任何时候只能有一个发送的小报文段未被确认。对于交互性要求比较高的应用,T

2016-05-13 11:22:12 542

原创 《TCP/IP详解》学习笔记-第17/18章 TCP:概述、连接建立与终止

1、概述TCP提供一种面向连接的、可靠的字节流服务。全双工通信。一个TCP连接由一个4元组唯一确定:本地 IP地址、本地端口号、远端 IP地址和远端端口号。TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; TCP 提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。 许多流行的应用程序如 Telnet, Rlogi

2016-05-12 23:15:20 9564

原创 《TCP/IP详解》学习笔记-第12~16章 广播/多播/IGMP/DNS/TFTP/BOOTP

1、广播三种 I P地址:单播地址、广播地址和多播地址。广播和多播仅应用于 U D P。每个以太网帧包含源主机和目的主机的以太网地址(4 8 b i t) 。(1)通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播。(2)一个主机要向网上的所有其他主机发送帧,这就是广播。(3)多播(multicast) 处于单播和广播之间:帧仅传送给属于多播组的多个主机。四种 I P广

2016-05-12 17:04:34 891

原创 《TCP/IP详解》学习笔记-第11章 UDP

1、运输层概述运输层的任务主要是负责主机中两个进程之间的通信。1、运输层的基本功能:(1)复用与分用分用(Demultiplexing):将运输层的报文段中的数据交付到正确的套接字的工作。复用(Multiplexing):在源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息(将在分用的时候使用),从而生成报文段/数据报,然后将报文段/数据报传递到网络层工作。为了进行分用和复用,需

2016-05-12 15:53:48 538

原创 《TCP/IP详解》学习笔记-第9/10章 IP选路&动态选路

1、IP选路IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。1、简单路由表对于一个给定的路由器,可以打印出五种不同的标志(flag):U 该路由可以使用。G 该路由是到一个网关(路由器),如果没有设置该标志,说明目的地直接相连。H 该路由是到一个主机,即目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个

2016-05-11 21:54:51 787

原创 《TCP/IP详解》学习笔记-第6/7/8章 ICMP/Ping/Traceroute

1、ICMP:Internet控制报文协议用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。1、ICMP报文是在IP数据报内部被传输的:2、ICMP报文的格式: ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。3、ICMP报文的类型:ICMP协议大致分为两类,一种是

2016-05-11 18:05:34 659

原创 《TCP/IP详解》学习笔记-第4/5章 ARP和RARP

1、ARP:地址解析协议ARP为IP地址到对应的硬件地址(MAC地址)之间提供动态映射。主要流程:当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己

2016-05-11 17:03:03 409

原创 《TCP/IP详解》学习笔记-第3章 IP:网际协议

1、概述IP是TCP/IP协议族中最为核心的协议。所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输。IP提供不可靠,无连接的数据报传送服务。 (1)不可靠:它不能保证IP数据报能成功的到达目的地。 (2)无连接:IP并不维护关于后续数据报的状态信息。每个数据报的处理都是相互独立的。2、IP首部普通的IP数据报首部为20个字节,除非含有选项字段。 如图,还记得那8位的TTL字段

2016-05-11 16:17:31 574

原创 《TCP/IP详解》学习笔记-第2章 链路层

数据链路层有三个目的:(1)为IP模块发送和 接收IP数据报。(2)为ARP模块发送ARP请求和接收ARP应答。(3)为RARP发送RARP请 求和接收RARP应答。ARP叫做地址解析协议,是用IP地址转MAC地址的一种协议。 RARP则叫做逆地址解析协议,是用MAC地址转IP地址的一种协议。数据链路层属于计算机网络的底层,使用的信道主要有点对点信道和广播信道两种类型。TCP/IP支持多种不同

2016-05-11 09:01:35 5055

原创 《TCP/IP详解》学习笔记-第1章 概述

TCP/IP通常被认为是一个四层协议系统:1)链路层(数据链路层或网络接口层),通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。 2)网络层(互联网层),处理分组在网络中的活动。 3)运输层,主要为两台主机上的应用程序提供端到端的通信。(TCP和UDP)。 4)应用层,主要负责处理特定的应用程序细节。大部分TCP/IP实现都会提供以下通用程序:Telnet远程登陆、FTP文件传输协

2016-05-10 23:22:07 4100

原创 《STL源码剖析》学习笔记-第6章(一) set相关算法

STL中定义的set要求元素不得重复且已经排序。而set算法要求的都是有序区间(输出也是有序的),但元素可以重复出现。STL提供了4个set相关的算法,分别是并集(union)、交集(intersection)、差集(difference)和对称差集(symmetric difference),这4个算法接受的set必须是有序区间,都至少接受4个参数,分别表示两个set区间。一般而言,set算法前4

2016-05-08 23:11:23 867

空空如也

空空如也

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

TA关注的人

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