自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 谷歌技术"三宝"之谷歌文件系统

GFS的特点是使用一堆廉价的商用计算机支撑大规模数据处理。虽然"The Google File System " 是03年发表的老文章了,但现在仍被广泛讨论,其对后来的分布式文件系统设计具有指导意义。然而,作者在设计GFS时,是基于过去很多实验观察的,并提出了很多假设作为前提,这等于给出了一个GFS的应用场景。所以我们自己在设计分布式系统时,一定要注意自己的应用场景是否和GFS相似

2015-08-31 21:58:36 613

转载 谷歌技术"三宝"之MapReduce

江湖传说永流传:谷歌技术有"三宝",GFS、MapReduce和大表(BigTable)!谷歌在03到06年间连续发表了三篇很有影响力的文章,分别是03年SOSP的GFS,04年OSDI的MapReduce,和06年OSDI的BigTable。SOSP和OSDI都是操作系统领域的顶级会议,在计算机学会推荐会议里属于A类。SOSP在单数年举办,而OSDI在双数年举办。那么这篇博客就来

2015-08-31 21:57:26 392

转载 谷歌技术"三宝"之BigTable

2006年的OSDI有两篇google的论文,分别是BigTable和Chubby。Chubby是一个分布式锁服务,基于Paxos算法;BigTable是一个用于管理结构化数据的分布式存储系统,构建在GFS、Chubby、SSTable等google技术之上。相当多的google应用使用了BigTable,比如Google Earth和Google Analytics,因此它和GFS、MapR

2015-08-31 21:56:26 498

转载 ptmalloc,tcmalloc和jemalloc内存分配策略研究

最近看了glibc的ptmaoolc,Goolge的tcmalloc和jemalloc,顺便做了一点记录。可能有些地方理解地不太对,如有发现还请大神指出。 操作系统内存布局    各种malloc的内存分配管理方式离不开操作系统的内存布局策略。32位经典内存布局    32位系统下经典内存布局如上,程序起始的1GB地址为内核空间,接下来是向下增长的栈空间和由0×400000

2015-08-29 22:41:45 630

转载 结构型模式总结

结构型设计模式是从程序的结构上解决模块之间的耦合问题(好像是句废话),GoF23种设计模式中结构型设计模式有7种,分别是:Adapter适配器模式、Bridge桥接模式、Composite组合模式、Decorator装饰模式、Facade外观模式、Flyweight享元模式和Proxy代理模式。下面分别总结一下这几种模式:设计模式GoF的描述我的理解

2015-08-29 21:17:33 361

转载 服务器编程入门(7)I/O复用

问题聚焦:    前篇提到了I/O处理单元的四种I/O模型。    本篇详细介绍实现这些I/O模型所用到的相关技术。    核心思想:I/O复用使用情景:客户端程序要同时处理多个socket客户端程序要同时处理用户输入和网络连接TCP服务器要同时处理监听socket和连接socket,这是使用最多的场合服务器要同时可处理TCP请求和UDP请求服务器要同时

2015-08-29 20:56:06 328

转载 C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)

详解link 有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后, 或许会有一些答案。     首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visu

2015-08-29 16:15:23 522

转载 C/C++ 中的0长数组(柔性数组)

在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:StructPacket{Int state;Int len;Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持}; 首先对0长数组做一个解释:

2015-08-29 16:11:55 336

转载 找工作C++面试资料之问答题整理(1)

1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern "C"是连接申明(linkage declaration),被

2015-08-29 15:50:35 394

转载 排序算法一览

基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列。作为排序依据的数据项称为“排序码”,也即数据元素的关键码。为了便于查找,通常希望计算机中的数据表是按关键码有序的。如有序表的折半查找,查找效率较高。还有,二叉排序树、B-树和B+树的构造过程就是一个排序过程。若关键码是主关键码,则对于任意待排序序列,经排

2015-08-29 15:48:45 406

转载 程序员笔试知识点整理]

程序员笔试知识点整理0、常考基础必知必会A. 排序:排序有几种,各种排序的比较,哪些排序是稳定的,快排的算法;B. 查找:哈希查找、二叉树查找、折半查找的对比,哈希映射和哈希表的区别?C. 链表和数组的区别,在什么情况下用链表什么情况下用数组?D. 栈和队列的区别?E. 多态,举例说明;overload和override的区别?F. 字符串有关的函数,比如让你写一个拷贝

2015-08-29 15:47:35 1658

转载 MySQL索引背后的数据结构及算法原理

本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分主

2015-08-29 15:35:15 280

转载 关于排序的稳定性与不稳定性

这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。      首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相

2015-08-29 15:26:17 483

转载 linux system函数使用详解

相关的函数fork,execve,waitpid,popen表头文件#i nclude定义函数int system(const char * string);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHL

2015-08-28 18:41:20 2940

转载 TCP的流量控制与拥塞控制小结

为了提高信道的利用率TCP协议不使用停止等待协议,而是使用连续ARQ协议,意思就是可以连续发出若干个分组然后等待确认,而不是发送一个分组就停止并等待该分组的确认。其中TCP的流量控制与拥塞控制是TCP在数据传输过程俩个重点机制,为TCP有效数据传输立下汗马功劳,这部分也是面试网络协议重点所在,下面从以下俩大方面总结一下【1】流量控制【2】拥塞控制1、流量控制

2015-08-28 10:02:41 1484

转载 TCP模型及其重点协议总结

TCP/IP协议族,作为最早的协议模型(后来OSI七层也是在该基础上细分而来),每层都有一些重点的协议,面试时也会被询问,快要找工作,得做一些总结了【1】TCP4层协议模型概述【2】各层重点协议介绍1、TCP4层协议模型概述TCP与OSI对比图其中Tcp各层重点协议如下图所示网络层协议包括:【1】IP(Intern

2015-08-28 10:01:21 342

转载 TCP三次握手及其背后的缺陷

概述总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍【1】TCP三次握手【2】SYN Flood1、TCP连接建立——三次握手几个概念:【1】seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,在一个1个TCP连接中传送字节流中国的每一个字节都按照顺序编号,此外序号是循环使用

2015-08-28 09:59:49 399

转载 pthread_join和pthread_detach详解

转载自:http://www.hack6.com/html/bc/C/20141106/52232.html在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系

2015-08-28 00:09:53 22360 1

转载 select,poll,epoll区别

select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1

2015-08-27 23:51:41 287

转载 read 系统调用剖析

https://www.ibm.com/developerworks/cn/linux/l-cn-read/简介: 大部分程序员可能会有这样的疑问:当在程序中调用库函数 read 时,这个请求是经过哪些处理最终到达磁盘的呢,数据又是怎么被拷贝到用户缓存区的呢?本文介绍了从 read 系统调用发出到结束处理的全过程。该过程包括两个部分:用户空间的处理、核心空间的处理。用户

2015-08-27 23:50:15 295

转载 strstr函数的自己实现

请用标准C语言实现下列标准库函数,设计中不得使用其他库函数。char *strstr(char *str1,char *str2);在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。[cpp] view plaincopy#include   #include   using namespace s

2015-08-27 23:26:44 321

转载 pthread_create函数的详细讲解(包括向线程函数传递参数详解)

pthread_create是UNIX环境创建线程函数头文件  #include函数声明  int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);返回值  若成功则返

2015-08-27 23:21:42 708

转载 学习STL map, STL set之数据结构基础

STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构。C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map

2015-08-27 22:29:52 288

转载 从12306谈起验证码的架构

最近和众屌丝一样,在12306上面刷着春节回家的票。与她大战无数个回合之后,终于抢到了一张回家的高铁票,不断感慨最近人品还不错。当前,在使用12306的过程中,充满很多的心酸,念叨了铁道部的亲人很多次(罪过),其中最让人纠结的一项即是:验证码。     12306采用验证码, 无疑是一种很不错的措施,可以在一定程度上阻止了黄牛们的疯狂行为,不过也给正常使用验证码的童鞋带了个很头痛的问题,在

2015-08-27 22:20:57 485

转载 内存映射文件原理探索

一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。 原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间 中一块大小相同的区域

2015-08-27 22:20:04 275

转载 setsockopt()用法(参数详细说明)

int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: IPv4套接口IPPROTO_IPV6: IPv6套接口

2015-08-27 22:16:06 473

转载 GDT、GDTR、LDT、LDTR的理解 [zz]

GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符、各任务的TSS描述符和LDT描述符。(TSS是任务状态段,存放各个任务私有运行状态信息描述符)LDT是局部描述符表,主要存放各个任务的私有描述符,如本任务的代码段描述符和数据段描述符等。GDTR是一个长度为48bit的寄存器,内容为一个32位的基地址和一个16位的段限。其中32位的基址是指GDT在内存中

2015-08-27 19:26:14 821

转载 进程退出

很多进程终止了他们本该执行的代码,从这种意义上说,他们已经“死”了。当这种情况发生时,必须通过内核以便内核释放进程所拥有的资源。进程终止的一般方式是调用exit()库函数,该函数释放C函数库所分配的资源,执行编程者所注册的每个函数,并结束从系统回收进程所执行的那个系统调用。内核可以有选择地强迫整个线程组死掉。这发生在以下两种典型情况下:当进程接收到一个不能处理或忽视的信号时,或

2015-08-26 23:31:02 430

转载 Linux的线程——轻进程

进程类似于人生:它们被产生,有或多或少有效的生命,可以产生一个或多个子进程,最终都要死亡。一个微小的差异是进程之间没有性别差异——每个进程都只有一个父亲。那么,操作系统有一个重要的概念——线程,在Linux上是怎么实现的呢?可以明确的告诉你,Linux并没有线程这个概念。呵呵,是不是Linux很落后呢,不是,恰恰相反,Linux提供了另一个概念——轻进程,其更具有扩展性,更伟大。Linux

2015-08-26 23:24:22 1709

转载 fork与vfock系统调用的区别

fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别:1. fork():子进程拷贝父进程的数据段,代码段   vfork():子进程与父进程共享数据段2. fork():父子进程的执行次序不确定   vfork保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。3. vfor

2015-08-26 22:23:10 465

原创 关于const的底层实现

1. 对于直接已知值的int,long,short,char 类型以及其unsigned版本,即 const int a=2; 这种,编译器编译程序之后,程序中所有a出现的地方,全部自动替换成2. 所以,就出现了对于 *b=3 ,在 const int a=2 ;中不会修改a,而在 const int a=c; 中则会修改 a的情况.int main(){const int a = 1

2015-08-26 19:20:20 1703 1

转载 Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树

说明:本文没有源码分析的内容,然而我认为能理解本质比能看懂源码更有用,因为理解了本质之后,你也许就不用再看源码了,你甚至都可以写源码了。这就是Linux内核和Cisco的网站中包含大量文档的原因。引:路由是互联网的一个核心概念,广义的讲,它使分组交换网的每个节点彼此独立,通过路由耦合在一起,甚至在电路交换网中,虚电路的建立也依赖路由,路由就是网络中数据通路的指向标。狭义的讲,路由专指IP路

2015-08-26 11:21:26 999

转载 TCP协议疑难杂症全景解析

TCP协议疑难杂症全景解析1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程

2015-08-26 11:19:06 436

转载 核心态与用户态

究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子C代码1.     voidtestfork(){2.     if(0==fork()){3.     printf(“createnewprocesssuccess!\n”);

2015-08-26 10:10:02 2037

转载 Linux高性能服务器编程——进程池和线程池

池的概念由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正是运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。很显然,直接从池中取得所需资源比动态分配资

2015-08-26 09:12:44 520

转载 多线程还是多进程的选择及区别

鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有

2015-08-25 21:16:30 438

转载 验证码的作用与原理

验证码这个词最早是在2002年由卡内基·梅隆大学的Luis von Ahn、Manuel Blum、Nicholas J.Hopper以及IBM的John Langford提出来的。验证码是Completely Automated Public Turing test to tell Computers and Humans Apart的缩写,中文意思是"全自动区分计算机和人类的图灵测试"。实际上

2015-08-25 10:56:43 964

转载 组播,单播,广播,多播,泛洪的基本概念

一、什么是组播:1、组播的特点1)什么是组播?      组播是一种数据包传输方式,当有多台主机同时成为一个数据包的接受者时,出于对带宽和CPU负担的考虑,组播成为了一种最佳选择。2)组播如何进行工作?      组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址,有一台源主机发出目的地址是以上范围组播地址的报文,在网络中,如果有其他主机对于这个

2015-08-25 10:32:02 1362

原创 关于模版的实参推演

templatevoid fun1(T a){T x,y;coutcout}templatevoid fun2(T *a){//T x,y;//T x=0,y=0;coutcout}templatevoid fun3(const T *a){ T x,y;coutcout}void main()

2015-08-21 17:10:53 816

原创 关于new和malloc以及delete和free是否可以混用

/**1》当申请的空间是内置类型时,delete和free可以混用*2》当申请的空间是自定义类型时,*       1>若没有析构函数,delete和malloc可以混用,有[]和没有[]都相同*                    2>若申请的空间有析构函数时,malloc申请的空间可以用delete和free释放,但是用delete释放时不能加[]*          

2015-08-21 16:08:40 5521 1

空空如也

空空如也

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

TA关注的人

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