- 博客(56)
- 资源 (3)
- 收藏
- 关注
原创 智能指针shared_ptr
今天复习了一下智能指针,然后动了动脑子,恍然觉得以前并没有真正的理解智能指针。首先是shared_ptr,shared_ptr的作用就不做介绍了。那么shared_ptr是如何实现的呢? 我分析了一下,智能指针的要点就是“计数”和“指针”。所以智能指针的成员变量中就必须有计数值和对象指针。指针计数为零的时候自动销毁,所以析构函数中需要实现计数和对象销毁的功能。然后还要注意的就是复制构造函数
2015-09-19 12:45:56
588
转载 都是头文件的循环包含惹的祸
首先我们先建立一个项目,项目文件有:A.hB.hC.hA.cppB.cppC.cpp 文件内容如下:A.h#ifndef EVENTHANDLER_CEVENTHANDLER_H_HEADER_INCLUDED_BA392BB6#define EVENTHANDLER_CEVENTHANDLER_H_HEADE
2015-09-11 16:23:40
2594
原创 谈谈闭包
我第一次听说“闭包”这个概念是在学习Lua的时候。由于此前并没有接触到函数式编程的语言,所以满脑子C/C++的思维方式的我被“闭包”困惑了很久。我找到了一个比较通俗的闭包定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。Lua的学习资料上一般都会有一个这样关于闭包的例子:function new_counter()
2015-09-09 14:48:43
635
原创 node.js和websocket实现echo
最近在学习node.js,其中一章讲了WebSocket相关的内容。我看的书是《了不起的node.js》。这本书中实现了一个echo例子,但是我照书上做的程序却出现了错误。书中使用了express和websocket.io实现的这个例子。然而例子的express版本还是古老的2.5.1,最新的已经是4..了,所以出了问题也不奇怪。 书中的服务器代码片段大概是这样的:var express
2015-08-28 17:08:04
1906
原创 多核程序设计——缓存一致性协议MESI
MESI协议 在MP系统中,每个CPU都有自己独立的cache,缓存之间的一致性很很容易受到破坏的,所以缓存一致性协议就应运而生了。MESI是一种使用非常广泛的缓存一致性协议。 MESI存在”modified”,”exclusive”,”shared”和”invalid”四种状态,协议可以在一个指定的缓存中应用这四种状态。因此,协议在每一个缓存行中维护一个两位的状态”tag”,这个”ta
2015-07-16 12:30:29
1927
原创 多核程序设计——存储模型
最近在看《现代体系结构上的UNIX系统——内核程序员的SMP和Caching技术》,这里抄点东西作为笔记吧! 顺序存储模型强制存储器操作(load和store)都按照程序次序来执行,即这些指令是按照在随程序执行的指令流中出现的顺序次序来执行的。它也指定了,由不同处理器完成的load和store操作也要以某种顺序、但又是非确定性的方式排序。这种存储模型应该是大家最容易理解的,甚至都认为实际M
2015-07-14 10:35:45
1059
1
原创 (转)VC运行库MD /MDd /MT /MTd /ML /MLd
VC编译选项 - 多线程(/MT) - 多线程调试 (/MTd) - 多线程DLL (/MD) - 多线程调试DLL (/MDd)C 运行时库 库文件 - Single thread(static link) ML libc.lib - Deb
2015-04-29 22:12:33
908
原创 杂感
在赛场上,如果第一球就进了,这当然是很好的。如果不进,我还有接近全场的时间的拼搏。不想失败,就不要害怕失败。明确自己的目标,放弃次要的东西,虚荣,享受。。沉醉于过去或者寄希望于非利益相关方都是危险的。
2015-04-29 10:45:56
373
原创 关于熵的一些理解
对于理工科学生来说,“熵”并不是一个陌生的名词。在诸如“大学物理”“热力学”和“信息论”等课程中都会有所介绍。但同时“熵”又是一个显得有点神秘的概念,看不见也摸不着。我最早是在高中物理课中听说的,大概是在介绍“热力学第二定律”时提到的。热力学第二定律的内容是:热力学过程是不可逆的——孤立系统自发地朝着热力学平衡方向──最大熵状态──演化。 然后真正的对这个名词有所理解是在学习《工程热力学》
2015-04-27 21:52:59
3441
原创 编程之美15-彩色的树
看第一眼以为这个题不好做,把过多的时间浪费在第二题上了。《彩色的树》这题是一个顶点染色的问题,用点dfs去不断染色,然后记录子树的个数就好,题目的内容如下: 给定一棵n个节点的树,节点编号为1, 2, …, n。树中有n - 1条边,任意两个节点间恰好有一条路径。这是一棵彩色的树,每个节点恰好可以染一种颜色。初始时,所有节点的颜色都为0。现在需要实现两种操作:改变节点x的颜色为y;
2015-04-25 16:54:10
1165
2
原创 记面试first blood
严格说来,今天是我的第一次职业方面的面试。第一次总是令人影响深刻,从结果上来说的确如此。 首先是由于自己的误操作,把面试预约取消了,然后就再也没法预约了。这直接导致我的面试顺序调到了所有人之后。这意味着我从上午十点等到了晚上七点,才最终等到了面试。 面试的前十分钟是闲聊,然后面试官看了一眼我的简历,说了句“一页呀!”。然后直接给了说让我写段程序,实现的功能是:求出一个
2015-04-20 23:01:27
736
原创 Full Binary Tree(GCJ2014 round1A PB)
去年google code jam第一轮的B题,我没有想明白,也没有找到题解。没有办法,就去下载了大神的代码来看看。感觉差距好大,别人用十分钟不到就做出来了。题目的描述如下,我就不写翻译了,题意挺明了的。由于墙的原因,我还是把题目贴下面吧!题目内容 A tree is a connected graph with no cycles.A rooted tree is a tree in which
2015-04-10 14:13:31
872
原创 我的心太乱
以前一直没有在博客上写过非技术的东西,但是我却是一个脑袋闲不住的人。最近,我的神经是比较紧张的,原因是很多方面的。时间是一个最重要的因素,转眼间研二都快过完了,自己却仍然碌碌无为。 前面去找兼职,竟然被几个非常平庸的人鄙视了。当然也不能怪他们,我确实和他们的路子对不上。说实话,小公司不一定比大公司容易进。他们需要的是熟练工,他们不会管你的理论基础,知识素养。现在在实验室,我非常的闲,这也是我“努
2015-04-08 10:20:13
596
原创 字符串存储位置的疑问
字符串的存储位置到底在哪儿?按照我以前编汇编代码的经验,字符串肯定是放在数据段。但是在C/C++中,这个却不一定成立吧!昨天晚上跟群里的同学讨论,我们观点不太一样,他认为应该直接存在函数的栈空间。我可以肯定字符串常量会放在数据段,但是对字符数组我确实不太确定了。所以就分别在VC和GCC下试了试,看了个简单程序的反汇编代码。首先看看VC的吧:#include "string.h"#include "
2015-03-16 14:04:09
1218
原创 MySQL服务器连接过程分析
mysqld是MySQL服务器端主进程,可以说mysqld是MySQL的真正核心,一切工作都是围绕mysqld进程进行的。所以要解剖mysql这个庞然大物,mysqld的代码是最好的突破口。 一切都是从熟悉的main()函数开始的,其实是从mysqld_main()函数开始的。这些代码都在mysqld.cc。mysqld_main()随后调用了win_main)()。win_main
2015-03-15 16:09:35
1215
原创 MySQL中innodb引擎分析(初始化)
MySQL的存储引擎是以插件形式工作的,这应该是MySQL的一大特色了吧!根据《深入理解MySQL》的内容,5.1版本时存储引擎的插件化都还不是彻底,确切的说是刚添加的特性。为MySQL添加一个存储引擎时,需要更改一些上层代码,零散的更改本来就有点麻烦,同时工程也要重新编译一次。我听别人说,已经可以不改C/C++代码就直接添加引擎了。这样的话,折腾存储引擎的话就更方便了!这段代码来自ha_inno
2015-03-15 10:34:14
1540
原创 C++RTTI小总结
RTTI算是C++的一大特性之一了,但也是一个不太好懂的特性。以前一直没有理解清楚RTTI。通过最近的学习,似乎掌握了一点皮毛,这里做一个小总结。首先是《C++编程思想》上的一个例子,由于缺头文件,我把容器改成了vector。#include #include #include #include #include //for srand() and rand()using nam
2015-03-03 22:26:36
807
原创 C语言错误处理
学习C++的时候就没有怎么重视异常这部分知识,后来知道也基本没有看到C++项目里面用try/catch的。google编程规范中甚至直接说明不使用C++这个特性,所以我一直都没搞明白这个“简单的”try/catch。 查阅《C++编程思想》,我记录以下一些内容。首先是C语言的一些错误处理方法。 1) 出错信息可通过函数的返回值获得。如果函数返回值不能用,则可设置
2015-03-02 17:00:44
909
转载 C++异常机制的实现方式和开销分析
C++异常机制的实现方式和开销分析白杨http://baiy.cn 在我几年前开始写《C++编码规范与指导》一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了。没想到时隔几年以后才有机会把这个尾巴补完 :-)。还是那句开场白:“在恰当的场合使用恰当的特性” 对每个称职的 C++ 程序员来说都是一个基本标准。想要做到这点,就必须要了解语言中每个特性的实现
2015-03-02 16:39:49
2251
1
原创 Java解释器
解释器是Java虚拟机非常重要的一部分,它的工作就是把字节码转化为机器码并运行。Hotspot中实现了两种具体的解释器,分别是模板解释器而C++解释器。同时在Hotspot的源码树中还保留着一种“字节码解释器”的古老解释器。这种解释器没有编译优化,效率比较低,本质上就是一个比较长的switch语句,针对不同的字节码执行不同的操作。这些操作直接以C/C++语言的形式表现出来,随着项目的编译一起形成了
2015-03-02 15:37:58
5326
1
原创 动态链接库的小总结
"动态链接库"这个名字非常的熟悉,却又常常让我非常的疑惑,比如今天。查了些资料也动了下手,把一些过程和结论记下来。问题一、库文件的后缀 一个比较常识的知识是,Linux下的静态库以.a结尾,而windows下的静态库以.lib结尾。Linux下的动态库以.so结尾,windows下的动态库以.dll。有一点值得注意的是,windows下VC使用的动态库一般还需要一个导
2015-01-30 10:35:54
1038
2
原创 C++静态成员变量
今天在弄一段代码的时候遇到了静态成员变量的问题。卡了一段时间后,果断翻出《深入探索C++对象模型》,大概明白了问题所在。这事给我的一点启示就是“纸上得来终觉浅,绝知此事要躬行”。首先看看问题吧!其实就是一个类型的定义。代码如下:
2015-01-14 12:05:53
1064
原创 Lua调用C函数的实现
看Lua有一段时间了,说实话进展挺慢的。归根到底是因为“动机不纯”,我确实不是抱着学Lua的心态去看资料的。本来看Lua就是听说Lua的实现比较简单,可以借Lua理解解释性语言的一些细节实现。当然Lua也确实不简单的,闭包什么的概念以前都没听说过。没用过Lua却去硬啃Lua语言实现,我也是蛮拼的! 我主要的参考资料是云风大神的《Lua源码赏析》和高手翻译的《LUA中文教程》。这里
2015-01-08 10:50:27
912
转载 Lua5.2源代码解析
源代码版本:lua-5.2.0 一、概览 1、lua脚本中暴露的库相关 lbaselib.c - 基础函数库(方便使用lua内部的功能) lbitlib.c - 位运算库 lcorolib.c - 协程库 lstrlib.c - 字符串库,提供通用字符串处理功能 lstring.c - 字符串表(保存所有由Lua操作的字符串集合) lmathlib.c - 数学
2015-01-04 11:12:50
965
原创 《改变未来的九大算法》读书笔记
《比较未来的九大算法》是一本轻松的书,基本上是在手机上看完的。这本书算是一本科普书,我也确实从这里边知道了不少东西,不过还只是一些粗浅的认识,所以写个笔记。 Papage Rank和搜索引擎: 这两个技术其实是相关性很大的,Page Rank相当于一个相关度排序的算法。搜索引擎其实就是根据索引来寻找资源。想要深度的了解这些东西,可以去学习Lucene,这是一个开源的项目。
2014-12-30 13:05:18
4421
转载 gdb和gdbserver源码架构分析
出处:http://linucos.cnblogs.com大致浏览了下GDB源码,分析记录如下: 1. GDB与GCC等其他GNU工具以前,构成了程序开发调试不可缺少的一环.2. GDBSERVER源码架构如下:a) Gdbserver代码简单,本身支持serial或tcp连接b) 源码位于 gdb/g
2014-12-24 17:12:46
864
原创 《深入C++面向对象模型》之拷贝构造函数
花了几天时间,把《深入C++面向对象模型》看了一半的样子。确实如BBS上的同学说的那样,“帅呆了!”,绝对让你停不下来的节奏。这本书是C++经典书单里面的常客,《Effective C++》也是很多人推荐。说实话吧!我手头有一本《Effective C++》,却一直没有看完,准确地说是我没有在阅读的过程中得到很多乐趣。不是黑《Effective C++》,只是这本书的写作模式是条款式的。它的关注点
2014-12-24 11:47:42
727
原创 《flex&bison》之sql解析
大概上半年接了一本《深入理解MySQL》,看了个一知半解吧!这里不得不说这本书有点贪大求全了。什么存储引擎、sql解析、查询优化等等的内容都涉及。如果领悟能力高的话,可能对数据库有一种全局的把握。不然的话还是需要看看其他资料了。当时不懂sql编译原理(其实现在也不懂,这货太愁银了),以为sql解析应该是一个简单的事情。毕竟不需要生成最终机器代码嘛,其实不然呀!举个例子吧,使用flex和bison为
2014-12-21 14:45:09
3468
原创 调试器原理之ptrace调用学习
其实很早以前就对调试器技术感兴趣了。以前玩板子的时候用了JTAG,当时我觉得这东西好神奇。前面我下载了一份GDB源码,可惜弄了几天都没有看出门道。昨天瞄了一眼《开源应用程序架构》,不出意外的看到了GDB。里面说在Linux下面调试器的功能主要都是靠ptrace调用实现的。我突然觉得有戏,感觉找到了点希望(不得不说,网上真心没找到GDB实现方面的资料,顶多是使用教程)。然后我就和ptrace干上了。
2014-11-26 16:24:05
2448
原创 putchar的线程安全
前面调用的stdio函数一般都是printf和fgets。这些函数都是一次读入或输出一串数据。他们的操作是满足原子性的。ANSI C中同时还有putchar和getchar这样的函数。在新版本的putchar和getchar都是有加锁操作的,用来保护缓冲区不被破坏。我开始觉得这有点不好理解,以为单个字符原子性是可以保证的,其实不然。假设putchar用如下的伪代码实现:
2014-11-25 11:01:18
683
原创 多线程程序中的stdio同步
在多线程程序中,stdio文件描述符是被各个线程共享的。如果多个线程需要进行stdio操作,那么stdio同步就是一个值得关注的问题了。为了实现stdio线程安全,flockfile和funlockfile调用就显得非常重要了。在很多的情况下,一些stdio操作以不被中断的顺序是非常重要的。
2014-11-25 10:42:25
672
原创 多线程程序中的fork调用
多线程程序执行fork调用是一个比较复杂的问题。首先fork调用的行为大概是复制一个和父进程一样的子进程,然后两个进程以不同的值返回。理论上,父子进程应该是非常相似的。fork调用在单线程上是非常容易理解的,在多线程上就不太好理解了。在多线程程序里存在着多个执行流,换句话说,就是fork()调用点只是一个程序的一个并行执行分支而已。说了这么多,其实真相非常简单。下面是《POSIX多线程程序设计》中
2014-11-24 12:57:43
1881
原创 tinyhttpd在Linux编译
前面在博客园里看到了的《程序员最值得关注的10个C开源项目》。其中有一个tinyhttpd的项目,是一个小型的http服务器实现。以前也粗略的看过tomcat的实现,不过没有深入很多,比较代码量在那里。而这个tinyhttpd项目,服务器代码只有区区500行,确实适合初学者练手。不过这个项目并不能直接在Linux上编译运行。它本来是在solaris上实现的,貌似在socket和pthread的实现
2014-11-12 01:03:53
7961
5
原创 PHPredis初探
以前一直不明白不同语言之间相互调用的原理。直到后来看HotSpot的时候,看到了Java虚拟机调用C语言函数的方式,才明白一个道理,函数调用最基本的问题就是参数传递和值返回。参数传递和值返回的细节,其实已经是汇编层面的问题了。简单来说,就是把参数压入堆栈,然后把返回值(可能是指针)存放到约定的寄存器。不过实际上并不一定需要汇编层面的东西来支持。比如HotSpot主要是用C/C++写的,
2014-10-31 14:23:33
861
转载 Redis以及Redis的php扩展安装无错版
安装Redis下载最新的官网:http://redis.io/ 或者 http://code.google.com/p/redis/downloads/list第一步:下载安装编译#wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz#tar zxvf redis-2.4.4.tar.gz
2014-10-28 11:27:02
498
原创 tomcat源码分析之filter和servlet
学习JavaEE的时候,看的是尚学堂的视频。记得老师在介绍各种web服务器的时候,说tomcat其实应该叫做servlet容器。这一句话不说不要紧,一说就让我纠结了好几个月。当时老师讲JavaEE的时候并没有深入的讲tomcat。偶然间提到一次servlet的调用机制就觉得高贵冷艳。没有办法,当时知识有限,我只好以“tomcat本来就是servlet容器”自我安慰。不过这种“美好生活”没有持续
2014-09-26 17:02:29
2944
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人