自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 SGI STL sort()源码分析

首先将stl sort完整源码列如下所示: template inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) { __STL_REQUIRES(_RandomAccessIter, _Mutable...

2017-07-09 22:45:27 480 0

原创 Elo评分算法原理与实现

《社交网络》里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大,直接把学校网络搞瘫痪了。Facemask大受欢迎的关键就在于Zackburg基友Eduardo写在窗户上的排...

2017-04-19 15:38:55 15573 3

原创 使用KNN算法识别数字

KNN算法作为一种重要的分类算法,这里一步步地构造使用k近邻分类器的手写识别系统。为了简单起见,这里构造的系统只能识别数字0到9,参见下图。需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小 :宽高是32像素x32像素的黑白图像。尽管采用文本格式存储图像不能有效地利用内存空间,但是为了...

2017-04-18 22:42:57 932 0

转载 Javascript闭包——懂不懂由你,反正我是懂了

摘要:“如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本就没弄懂。”好吧,我试着向一个27岁的朋友就是JS闭包(JavaScript closure)却彻底失败了。   越来越觉得国内没有教书育人的氛围,为了弄懂JS的闭包,我使出了我英语四级吃奶的劲去google上搜寻着有...

2017-01-04 22:15:47 449 0

原创 Ruby on Rails安装

环境:ubuntu首先安装rubysudo apt install ruby查看ruby版本ruby -v安装rails配置gem源由于默认的gem源使用的是国外的源,在国内速度慢而且时常无法访问,所以先配置gem源,之前淘宝负责的源已经有ruby中国负责gem sources #显示现在的ge...

2016-12-29 14:43:29 1727 1

原创 使用automake工具自动构建工程

需要使用到的命令 autoscan命令 aclocal命令 autoconf命令 automake -a命令 安装autoconf、automake使用yum安装 安装成功之后进入工程目录,执行autoscan,出现两个文件autoscan.log和configure.scan 手动修...

2016-12-06 10:54:43 495 0

原创 搜索引擎核心技术笔记

搜索引擎发展史 1 分类目录:hao123 人工整理 2 文本检索:使用布尔模型、向量空间模型或者概率模型计算查询词和网页文本内容的相关程度 未考虑网页之间的链接关系 3 链接分析:google pagerank技术 未考虑用户的个性化需求 4 用户中心的一代:利用用户查询的时间、地点,...

2016-11-02 22:20:08 2269 0

原创 今天是最幸福的一天

同时受到百度和腾讯的offer,开心 只要努力就会有收获,加油

2016-09-27 22:35:19 480 0

原创 map中的元素按照key,value值排序

C++ STL中Map的按Key排序 其实,为了实现快速查找,map内部本身就是按序存储的(比如红黑树)。在我们插入键值对时,就会按照key的大小顺序进行存储。这也是作为key的类型必须能够进行 #include #include #include using namespace s...

2016-09-17 17:10:47 767 0

原创 分布式系统基本概念(一致性、数据分布、复制策略、分布式协议)

分布式系统基本概念 异常类型 1 服务器down机(随时发生、内存数据丢失(因此需要考虑数据持久化)、down机重启之后要恢复内存信息) 2 网络异常(消息丢失、消息乱序(UDP)或者网络包数据错误、区域内可通信区域间不可通信) 3 磁盘故障(磁盘损坏(备份)、磁盘数据错误(校验和解决))...

2016-09-03 22:00:25 5217 0

原创 Linux 互斥锁、原子操作实现原理

在Linux下,信号量和线程互斥锁的实现都是通过futex系统调用。 futex(快速用户区互斥的简称)是一个在Linux上实现锁定和构建高级抽象锁如信号量和POSIX互斥的基本工具。它们第一次出现在内核开发的2.5.7版;其语义在2.5.40固定下来,然后在2.6.x系列稳定版内核中出现。...

2016-08-24 22:13:37 7209 0

原创 fork与vfork的区别

1.fork函数介绍 #include sys/types.h> #include unistd.h> pid_t fork (void ); 正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数) 错误返回:-1; 子进程是父进程的一个拷贝。具体说,子...

2016-08-24 21:37:32 402 0

原创 TIME_WAIT状态与解决方法

执行主动关闭的那端经历了这个状态,并停留MSL(最长分节生命期)的2倍,即2MSL。 TIME_WAIT存在的两个理由: 1 可靠的实现TCP全双工连接的终止 2 允许老的重复的分节在网络上的消逝 第一个:如果客户端不维持TIME_WAIT状态,那么将响应给服务端一个RST,该分节被服务器...

2016-08-21 16:24:25 8987 0

原创 C/C++语言字符串操作总结大全(超详细)

字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符...

2016-08-13 11:32:24 503 0

原创 vector<bool>效率问题的原因和替代方法

今天在刷一道题目的时候遇到这样一个效率问题,c数组效率 > vector效率 > vector效率,查找资料发现: vector不是容器,至少,不是标准意义上的容器。 vector的名称有点让人误解,因为其内部元素实际上并不是标准的bool值,标准的bool值至少与char拥有...

2016-08-10 15:52:45 841 0

原创 MPI非阻塞通信使用、性能分析与实现原理

非阻塞通信: 异步通信通常是使MPI应用程序实现高性能计算的关键,使用异步通信具有如下优势: 1)函数是非阻塞的,这使得进程在与另一个进程通信的同时继续参与计算; 2)如果应用适当,可以绕过MPI的内部buffers,极大地提高程序的通信带宽; 最常见的基本的非阻塞调用就是MPI_Isend和MP...

2016-08-03 16:40:16 5096 0

原创 mmap与直接IO(read、write)的效率比较

不能简单的说哪个效率高,要看具体实现与具体应用。 无论是通过mmap方式或read/write方式访问文件在内核中都必须经过两个缓存:一个是用address_space来组织的以页为基础的缓存;一个是以buffer来组织的缓存,但实际上这两个缓存只是同一个缓冲池里内容的不同组织方式。当需要从文件读...

2016-08-03 16:03:51 6861 0

转载 vim命令大全

进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与patt...

2016-08-01 14:52:53 264 0

原创 linux brk、sbrk、mmap和munmap系统调用

sbrk/brk重新指定数据段的结束位置。sbrk(增量),增量可正可负,也可以是0,,都返回原来的数据段结束地址,失败返回-1,。brk(地址),返回0或者-1。头文件。sbrk(0)可以取得当前结束地址。没有使用的虚拟内存地址,操作系统就没有映射到物理内存,如果试图访问会差生段错误。指定新的结...

2016-08-01 10:46:52 2041 0

原创 linux系统端口占用和close-on-exec机制

一直以来,在处理linux服务器的过程中,经常会遇到一个问题,有时候kill掉进程之后,端口被占用,新的进程一直起不来,等待很久也不能启动新进程,总是提示端口被占用,只有重启机器才能恢复正常,这个简直是个灾难, 查了一些资料,了解了如何查看端口占用情况和处理方法。 1、使用netsta...

2016-07-30 12:00:04 1079 0

原创 C/C++中数组名退化为指针的情况

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/...

2016-07-22 15:49:10 1293 3

转载 HTTPS和HTTP的区别

什么是 HTTPS? HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。 你也可以说:HTTPS = HTTP + SSL HTTPS 在 HTTP 应用层的基础上使用安全套接字层作为子层。 ...

2016-07-22 11:28:00 253 0

原创 C++volatile详解

1. 为什么用volatile?     C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修...

2016-07-08 10:44:46 709 0

转载 C++traits技术的理解

traits是c++中的自动类型推断,可以用来获得一个类型的相关信息。比如我们有一个泛型的迭代器类,其中T为所指向的类型。 template class myIterator { ... };当我们使用myIterator时,怎样才能获知它所指向的元素的类型呢?我们可以为这个类加入一个内嵌类型...

2016-07-07 22:17:27 2927 1

原创 C++内存模型

关于乱序 说到内存模型,首先需要明确一个普遍存在,但却未必人人都注意到的事实:程序通常并不是总按着照源码中的顺序一一执行,此谓之乱序,乱序产生的原因可能有好几种: 编译器出于优化的目的,在编译阶段将源码的顺序进行交换。程序执行期间,指令流水被 cpu 乱序执行。inherent cac...

2016-07-07 11:11:35 956 0

原创 并行程序设计模型

并行程序设计模型 并行程序设计模型(Parallel Program Model)是一种程序抽象的集合,是建立在硬件和内存体系结构层次之上的概念[26]。比较常用的模型有:数据并行模型、消息传递模型和共享存储模型。 数据并行模型 数据并行(Data-Parallel)模型主要任务是局部计算和...

2016-07-04 21:28:50 2558 0

转载 学习Javascript闭包(Closure)

作者: 阮一峰 日期: 2009年8月30日 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript...

2016-06-28 17:12:05 279 0

原创 IO模型(同步,异步,阻塞,非阻塞)

在文章中一共比较了五种IO Model: blocking IO 阻塞IO nonblocking IO 非阻塞IO IO multiplexing IO复用 signal driven IO 信号驱动式...

2016-06-20 21:11:32 386 0

原创 gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX

在使用gdb的时候出现如下提示: Missing separate debuginfos, use: debuginfo-install libgcc-4.9.2-6.fc21.x86_64 libstdc++-4.9.2-6.fc21.x86_64 但是在使用如上提示的命令的时候出现问题: C...

2016-06-20 09:40:57 2927 0

原创 几种并行计算模型的区别(BSP LogP PRAM)

并行计算模型通常指从并行算法的设计和分析出发,将各种并行计算机(至少某一类并行计算机)的基本特征抽象出来,形成一个抽象的计算模型。       PRAM模型 PRAM(Parallel Random Access Machine,随机存取并行机器)模型,也称为共享存储的SIMD模型,是一种抽象...

2016-06-13 15:15:51 16114 0

原创 分布式系统基本概念-----副本一致性和分布式系统衡量指标

副本( replica/copy)指在分布式系统中为数据或服务提供的冗余。分为数据副本和服务副本,对于数据副本指在不同的节点上持久化同一份数据,当出现某一个节点的存储的数据丢失时,可以从副本上读到数据。数据副本是分布式系统解决数据丢失异常的唯一手段。另一类副本是服务副本,指数个节点提供某种相同的服...

2016-06-12 17:01:55 1436 0

原创 条件变量的虚假唤醒

这个问题主要来源与我们在使用pthread条件变量wait函数的时候总是使用while去做判断而不是使用if,因为等待在条件变量上的线程被唤醒有可能不是因为条件满足而是由于虚假唤醒(Spurious wakeups) That's called spurious wakeup and ...

2016-06-10 17:38:05 1769 0

原创 正确使用POSIX条件变量

最近在写线程池的时候看到了对于pthread_cond_t条件变量这样的解释: pthread_cond_wait() blocks the calling thread until the specified condition is signalled. This routine shou...

2016-06-10 16:43:53 817 0

原创 使用RAII来管理对象资源

RAII(资源获取即初始化)基本技术原理很简单,如果希望保持对某个重要资源的跟踪,那么创建一个对象,并将资源的生命期和对象的生命期相关联。这样的话,就可以利用c++复杂老练的对象管理机制来管理资源。最简单的形式是,当你构造一个对象的时候,其构造对象会获得一份资源,而析构函数则释放这份资源。采用对象...

2016-06-09 22:41:23 937 0

原创 配置linux DNS

ping 的时候出现如上问题,初步诊断是DNS的问题, 通过 cat  /etc/resolv.conf查看DNS发现没有配置, 添加DNS后显示正确,但是重启network服务发现DNS又消失了,如下: 网上有人说这个/etc/resolv.conf文件其实只是一个...

2016-06-03 22:56:16 461 0

原创 如何解决ssh总是掉线的问题

配置服务端: ClientAliveInterval   设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,sshd 将通过安全通道向客户端发送一个”alive”消息,并等候应答。默认值 0 表示不发送”alive”消息。这个选项仅对SSH-2有效。ClientAliveInte...

2016-05-24 20:33:01 5218 0

原创 buffer overflow detected错误

最近在写并行程序的时候遇到这个问题,在上网查询之后发现好多是由于sprintf的缓冲区不够造成的,对比自己程序发现一个很低级的错误 char *sc = new char(100); sprintf(sc, "%d", rank); string temp = sc; str...

2016-05-24 13:22:45 4987 0

转载 notify()和notifyAll()的区别

当你Google”notify()和notifyAll()的区别”时,会有大片的结果弹出来,(这里先把jdk的javadoc文档那一段撇开不说),所有这些搜索结果归结为等待的线程被唤醒的数量:notify()是唤醒一个, 而notifyall()是唤醒全部.那他们的真正区别是什么呢? 让我们...

2016-05-14 11:09:09 764 0

原创 Tomasulo算法

Tomasulo算法:为IBM 360/91设计的,它采用的是寄存器重命名的方法来消除寄存器数据流之间的假相关,即用虚拟寄存器集代替真实的FPR,虚拟寄存器集在tomasulo算法中由每一功能单元所带的保留站(reservation station)、取数缓冲区(load buffers)和存...

2016-05-11 22:37:50 9491 1

原创 C++中的placement new

什么是placement new? 所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。 placement new的好处: 1)在已分配好的内存上进行对象的构建,构建速度快。 2)已分配好的内存可...

2016-05-06 22:05:16 664 0

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