自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (5)
  • 收藏
  • 关注

原创 2019/4/13

先看书。

2019-04-13 10:42:17 308

原创 2019/4/12

做一下自己一直想做的事。

2019-04-12 23:01:21 256

原创 STL源码分析:Iterators

《设计模式》中Iterator模式定义为:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。智能指针迭代器是一种行为类似指针人对象。而指针的各种行为中最常见也最重要的便是内容提领(*)和成员访问(->),迭代器最重要的编程工作就是对这两个操作进行重载工作。Traits编程技法(STL源代码门钥)Traits就像一台“特性萃取机...

2018-08-17 17:28:41 391

原创 STL源码分析:Containers

STL容器分两种:序列式容器,关联式容器。上图以内缩方式来表达基层与衍生层的关系。heap内含一个vector,priority-queue内含一个heap、stack和queue都含一个deque,set/map/multiset/multimap都内含一个RB-tree,hash_x都内含一个hastable。 序列式容器所谓序列式容器,其中的元素都可序(ordered...

2018-08-17 17:27:57 237

原创 skynet源码分析:模块

skynet各层表现skynet重要模块和服务gate.so:为整个skynet提供socket功能snlua.so:启动多个lua服务skynet自带的模块中有一个重要的模块是snlua.so模块,通过snlua.so和指定lua脚本文件可以启动多个lua编写的服务,不用每个服务都是用c来编写,而且大部分逻辑都是在 lua 脚本下开发,只有需要考虑性能的模块才用 C 语言开发成库,直接提供给 l...

2018-07-03 10:31:03 422

原创 homebrew简单介绍

用过linux都会记得apt-get,yum这些工具。而在mac上,homebrew相当于这些工具。Homebrew的安装ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"Homebrew使用搜索软件:brew search 软件名,如brew

2016-09-17 11:06:30 671

原创 排序:一些排序的总结

稳定性所谓稳定排序,就是相等的两个数,排序前是什么顺序,排序后也是什么顺序。比如a=1,b=3,c=1,a,b,c这3个数进行排序,a本来在c前面,如果能保证排序后,a还是在c前面,就是稳定排序,否则就是不稳定排序。内外排序我们一般提到排序都是指内排序,比如快速排序,堆排序,归并排序等,所谓内排序就是可以在内存中完成的排序。RAM的访问速度大约是磁盘的25万倍,我们当然希望如果

2016-07-01 09:43:51 722

原创 STL源码分析:泛型编程与STL

定义抽象的concepts,并根据抽象的concepts来撰写算法与数据结构,是泛型编程的本质。运用STL时的几个最重要的观念:1.所谓使用STL,就是去扩充它。2.STL的算法和容器是独立分离的。3.无须继承。4.抽象化并不意味效率低。STL所实现的,是依据泛型思维架设起来的一个概念结构。这个以抽象概念为主体而非以实际类为主体的结构,形成了一个严谨的接口标准。在此接口下,任何组件都有最大的独立性...

2016-06-30 10:26:42 1680

原创 树:红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是

2016-06-23 17:24:10 540

原创 树:B树、B+树、B*树

B树B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。B树是主磁盘或其他直接存储辅助存储设备而设计的一种平衡查找树,B树与红黑树类似。但在降低磁盘I/O操作次

2016-06-23 17:01:35 978

原创 树:Trie树

Trie树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。补充下,trie也可以用于做基于词典的敏感词检测。还有就是适合路由时ip地址的最长前缀匹配。

2016-06-23 14:34:13 486

原创 树:伸展树

我们知道AVL树为了保持严格的平衡,所以在数据插入上会呈现过多的旋转,影响了插入和删除的性能,此时AVL的一个变种,伸展树(Splay)就应运而生了,我们知道万事万物都遵循一个“八二原则“,也就是说80%的人只会用到20%的数据,比如说我们的“xx输入法”,平常打的字也就那么多,或许还没有20%呢。在伸展树上的一般操作都基于伸展操作:假设想要对一个二叉查找树执行一系列的查找操作,为了使

2016-06-23 11:08:42 609

原创 树:Treap树

我们知道,二叉查找树相对来说比较容易形成最坏的链表情况,所以前辈们想尽了各种优化策略,包括AVL,红黑,以及今天要讲的Treap树。Treap树是什么?treap是heap和tree结合,中文名叫树堆。首先它每个节点有2个值value和weight,其中只看weight的话,满足heap二叉堆的特性(父亲比儿子都小/大),只看value的话,满足排序二叉树特性(以左儿子为根的子树元

2016-06-23 10:42:50 712

原创 树:AVL树

AVL树得名于它的发明者。AVL树是带有平衡条件的二叉查找树。这个平衡条件必须要容易保持,而且它须保证树的深度是O(logN)。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树本质上还是一棵二叉搜索树(因此读者可以看到我后面的代码是继承自二叉搜索树的),它的特点是:1. 本身首先是一棵二叉搜索树。 2.

2016-06-22 18:30:24 767

原创 c++对象模型研究7:站在对象模型的顶端

template在C++发明阶段,C++之父Stroustrup和贝尔实验室的C++小组对原先的宏方法进行了修订,对其进行了简化并将它从预处理范围移入了编译器。这种新的代码替换装置被称为模板,而且它变现了完全不同的代码重用方法:模板对源代码重用,而不是通过继承和组合重用对象代码。当用户使用模板时,参数由编译器来替换,这非常像原来的宏方法,却更清晰,更容易使用。未使用的tem

2016-06-21 14:44:44 616

原创 c++对象模型研究6:执行期

C++的一件困难事情:不太容易从程序代码看出表达式的复杂度。执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。对象的构造和析构一般而言,我们会把对象尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和摧毁操作(主要是析构)。不建议把所有的对象放在函数或某个区段的起始处。

2016-06-20 20:23:33 1518 1

原创 c++对象模型研究3:数据

开始前先看看class X {};class Y:public virtual X {};class Z:public virtual X {};class A:public Y,public Z {};上述X,Y,Z,A中没有任何一个class内含明显的数据,其间只表示了继承关系。按照书上的例子sizeof X = 1sizeof Y = 8sizeof Z = 8s

2016-06-16 12:01:35 970

原创 c++对象模型研究2:构造函数

关键词explicit之所以被导入这个语言,就是为了提供给程序员一种方法,使他们能够制止“单一参数的构造函数”被当做一个转换运算符。默认构造函数的构建操作以下四种情况类会被生成“有用的”默认构造函数a.一个带有默认构造函数的成员对象类 合成的默认构造函数是以inline的方式完成的,如果函数太复杂则会做成非inline的static实体b.带有默认构造函数的基类

2016-06-15 11:39:09 707

原创 c++对象模型研究1:关于对象

关于对象C++在布局以及存取时间上主要的额外负担是由virtual引起,包括1.虚函数机制(执行时绑定)2.虚基类。还有一些多重继承下的额外负担。C++对象模式在C++中,有两种类成员数据:static和非static,以及三种类成员函数:static、非static和virtual。在C++对象模型中,非static成员数据被配置于每一个类对象之内,static成

2016-06-14 14:55:55 611

原创 有效使用STL的经验

摘自《effective stl》关于STL的使用原则,以后还会再补充。容器条款1:仔细选择你的容器条款2:小心对“容器无关代码”的幻想条款3:使容器里对象的拷贝操作轻量而正确条款4:用empty来代替检查size()是否为0条款5:尽量使用区间成员函数代替它们的单元素兄弟条款6:警惕C++最令

2016-06-12 14:51:40 1241

原创 一些算法总结

排序内部排序和外部排序根据排序过程中涉及的存储器不同,可以讲排序方法分为两大类:一类是内部排序,指的是待排序的几率存放在内存中进行的排序过程;另一类的外部排序,指的是排序中要对外存储器进行访问的排序过程。插入排序适用于少量数据的排序,时间复杂度为O(n^2)。堆排序时间复杂度为O(N*logN)。堆排序是就地排序,辅助空间为O(1)。

2016-06-10 17:28:55 659

翻译 在C++中使用Protocol Buffer

之前我翻译过一篇关于protocol buffers的文章:《在Python中使用protocol buffers参考指南》后来想想,现在自己是用在C++中的,不如再翻译一下,顺便看看自己的E文有没有提高。当然,查字典是少不了的。

2016-05-30 20:16:39 12187 1

翻译 protocol buffers简单介绍

翻译自:https://developers.google.com/protocol-buffers/docs/overviewProtocol buffers是什么?Protocol buffers是一款灵活、高效、自动化的数据描述语言。类似于XML能够将结构化数据序列化,但比XML更小,更快,更简单。通过它,你可以定义你的数据的结构,并生成基于各种语言的代码。这些你定义

2016-05-27 17:55:57 1398

原创 游戏异常处理之google-breakpad

之前我也有写过关于windows下,c与c++ crash的调试文章: window调试学习1,2,3,4结合以前在linux下用过的ulimit  命令。我发觉,还是有发要找找跨平台的crash处理的工具。因为游戏生产环境的特殊性,所以我看好异常处理google-breakpad工具,这个工具可以快速处理用户崩溃信息,减少程序crash的概率。由于他本身跨平台,所以很大的减少我们

2016-05-27 14:27:20 1752

原创 个人建站

搭建个人站点,大致需要做这么几件事情:1.一台具备公网IP的服务器2.安装操作系统,搭建环境3.购买域名,域名绑定IP4.部署应用程序服务器首先要搞清楚自己要做的是什么?个人Blog,论坛,web应用,还是别的什么?有怎样的服务就需要怎样的主机,不同的服务需要不同的负载,搞清楚负载才知道该需要什么样的主机。需求:是建立一个静态页面还是动态

2015-06-23 09:14:26 1664

原创 高性能服务器笔记

协议:应用服务器Nginx:大数据时代,网站要求的并发需求急速上升,nginx应运而生。相对于apache,nginx更适合作代理服务器和负载均衡服务器。Skynet:开源的相对完整的游戏服务器不多,skynet算是一个比较好的游戏服务器,至少对于手游来说。内存TCMalloc:web加速(缓存服务器)varnish:

2015-06-23 09:12:47 776

原创 VIM工程与我的风格

假设我们有一个工程,放在test目录下,里面有main.c, a.c, b.c ...1. 创建"工程文件"的过程(1)进入test目录,启动vi(2)用:e命令分别打开所有需要加入功能的文件(3)用:mksession! test.vim创建"工程文件"(4)退出vim.2. 打开工程文件的过程用vim -S test.vim启动vim即可3. 编

2015-03-10 11:10:21 1884

原创 kbengine:简单介绍

之前想分析一个开源服务器很久了,思前想后,还是选择了kbengine。KBEngine的服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新)。现在服务器大多数是用C++做的,python作脚本也比较多,另外一个就是lua。kbengine底层架构被设计为多进程分布式动态负载均衡方案, 理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。这里对多进程分布式不是很理解,以后再解答。

2015-02-26 15:16:33 12151

原创 makefile笔记

符号:= 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值Phony TargetsPHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。

2015-02-26 14:22:47 579

原创 ssh禁止root登入

ssh禁止root登入linux系统中root用户无所不能,为了系统安全ssh禁止root用户远程登录,必要的话使用sudo机制也是不错的选择编辑 /etc/ssh/sshd_config修改 PermitRootLogin将yes改为no重启ssh服务service ssh restart 或/etc/init.d/ssh restartvpnvpn在公用

2015-01-07 14:20:46 1345

原创 服务器架设学习

之前无聊,买了个linode,打算先看看外面的世界,但更多的还是为了个人发展。毕竟作为一个服务器程序员,有个vps,测试一些小程序还是挺好的。这篇主要是记录学习服务器架设的笔记。网络服务器成功联机的分析先来理解一下,到底我们联机到服务器想要得到什么?举例来说,你联机到Youtube 想要看影片,所以对方就提供影片串流数据给你; 你连到 Yahoo 想要看新闻,所以对方就提供新闻的文本文

2014-12-30 17:10:23 1180

原创 Web数据库架构

Web服务器的基本操作:

2014-11-05 09:45:39 952

原创 PHP笔记

这些符号()叫做PHP标记,可以告诉web

2014-11-04 16:48:45 754

原创 window调试学习2——事后调试

转储文件是进程状态的一个静态快照。

2014-10-21 15:14:38 1087

原创 window调试学习3——内存调试

“VM Size”表示进程在整体上的内存使用量(包括位于物理内存内部和外部的内存),dm

2014-10-21 15:14:04 886

原创 window调试学习4——汇编语言基础知识

这里说的是x86汇编指令集。格式如下:

2014-10-10 15:49:23 824

原创 window调试学习1——windbg调试环境配置

关于项目上内存的bug,已经ls

2014-09-20 13:05:38 2636

原创 u3d学习:c#

U3D支持C#,JavaScript,BOO三种语言格式的代码编写。在windows上使用,我选择c#。

2014-07-31 08:41:36 5204

原创 u3d学习:helloworld

有一段时间没更新博客了。当然,lz还在开发游戏。之前研究了一些关于cocos2d-x的东西。结果没用上。而cocos3d也要出来了。感觉折腾开源的东西真心累啊。当然,lz也研究过一阵direactx的东西。感觉自己做引擎还是不行。走了这么多弯路,最后还是决定学习u3d了,因为现在工作上,客户端也用到了u3d,而且lz很懒,不想再折腾了,最后浪费的,还是自己的时间。有时间还是选择和妹纸出

2014-07-01 08:32:21 2216 1

原创 c++对象模型研究5:构造、解构、拷贝

纯虚函数虚函数是为了重载和多态的需要,子类中可以重写或不重写该函数;纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像Java中的interface。无继承情况下的对象构造参考:《深度探索C++对象模型》http://blog.csdn.net/ChinaJane163/article/details/50119625员数据参考:《深度探索C++对象模型》http://blog.csdn.net/ChinaJane163/article/details/501

2014-03-05 17:06:22 1617

VIM使用技巧

这是我自己总结的VIM使用技巧,方便自己,方便别人。

2013-02-25

VS2005快捷技巧

我自己总结的VS2005快捷技巧,方便自己方便别人。

2013-02-25

QtCreator快捷键

我自己总结的QtCreator快捷键,方便自己方便别人。

2013-02-25

保护眼睛的vs2005设置

保护眼睛的vs2005设置,好好保护眼睛,写好每一段代码。

2013-02-14

用Qt制作的记事本,windows环境下,可移植到Linux上

windows环境下用Qt制作的记事本,实现新建文件,保存文件,和文件另存为三个功能。

2011-06-29

空空如也

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

TA关注的人

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