- 博客(116)
- 资源 (9)
- 收藏
- 关注
原创 关于erlang中的timer:send_after
erlang中有两个延时发送消息的函数erlang:send_after/3, timer:send_after/3,有什么区别呢?看下timer:send_after/3的源码send_after(Time, Pid, Message) -> req(apply_after, {Time, {?MODULE, send, [Pid, Message]}})req(R
2015-06-02 15:19:48
5162
原创 erlang 进程消息及ets性能测试
进程消息发送与接收1> test:test_proc_msg(10000000, {"test"}).{3145000,ok}2> test:test_proc_msg(10000000, {"test","test"}).{3731000,ok}3> test:test_proc_msg(10000000, {"testtesttesttest"}).{4428000
2015-05-16 17:41:40
2948
原创 erlang中dict的实现
首先来看dict定义:-define(seg_size, 16).-define(max_seg, 32).-define(expand_load, 5).-define(contract_load, 3).-define(exp_size, (?seg_size * ?expand_load)).-define(con_size, (?seg_size * ?contract_lo
2015-04-27 19:35:33
2873
转载 erlang进程性能分析方法
转自:http://yigechengxuyuan201307073459.iteye.com/blog/1901496Erlang tools lib中包含三个用于性能分析的工具:cprof,eporf和fprof。 cprof 提供函数调用计数,其对系统的性能影响最小 eprof 提供函数运行时间的百分比 fprof 通过将trace存储到文件,提供函数调用计数及运行时间统计信
2013-08-22 23:26:29
2410
原创 Erlang类型及函数声明规格
Erlang为动态语言,变量在运行时动态绑定,这对于我们获取函数的参数及返回值的类型信息具有一定的难度。 为了弥补这个不足,在Erlang中我们可以通过type及spec定义数据类型及函数原型。通过这些信息,我们对函数及调用进行静态检测, 从而发现一些代码中问题。同时,这些信息也便于他人了解函数接口,也可以用来生成文档。 意义: 定义各种自定义数据类型 定义函数的
2013-08-20 22:59:08
2031
原创 mysql删除重复数据
今天写了一个sql语句,功能是删除一个表中指定字段有重复的数据:DELETE FROM test WHERE id IN (SELECT id FROM test GROUP BY id HAVING COUNT(id) > 1)提示错误:You can't specify target table 'test' for update in FROM clause
2013-08-19 23:01:45
1130
原创 sasl日志配置与读取
1.sasl日志配置解析 [{sasl, [ %% minimise shell error logging {sasl_error_logger, false}, %% only report errors {errlog_type, error}, %% define the pa
2013-08-17 23:07:51
3416
原创 erlang中sasl与错误日志
erlang应用都会启动一个sasl应用,sasl的一个重要功能便是可以记录系统进程相关日志,如进程启动、结束、崩溃错误等信息。sasl的日志功能是基于erlang自带的日志模块error_logger来实现的sasl中定义了下面3个错误处理 sasl_report_tty_h :主管报告、崩溃报告和进度报告格式和将 stdio .sasl_report_fi
2013-08-15 23:33:05
6748
转载 erlang的错误日志
错误日志OTP系统已经内置了一个可定制的错误日志模块。我们可以从三种不同的视角来看错误日志。程序员的视角关注代码中要记录一个错误日志的函数调用?配置的视角关注错误日志如何存储以及保存在哪里?报告的视角则关心错误发生之后,如何进行分析。我们将逐条讲述这些内容。记录一个错误日志在程序员的视角,错误日志的API很简单,下面是这些API的一部分:@spec error_logg
2013-08-13 23:03:04
7737
原创 关于erlang热更新
热更原理 内存中可以保留两个版本的代码,当前版本代码'current'和老版本代码'old',一旦模块被加载就变成'current',再有一个版本过来被加载,之前的版本就变成'old',新加载的变成'current'.这时候,两个版本还是同时存在,新的请求执行的时候会使用新的版本,而老版本的代码还会被使用因为还有其他模块的调用'old'版本中。如果再进行一次热更新,这时就有第三个
2013-08-13 00:06:49
3286
原创 erlang多节点name conflict
今天游戏更新出现了一个问题,环境是这样的:顺序启动S1、S2、S3三个游戏服务器节点,能够正常工作。接着启动一个中央后台节点A,S1、S2、S3每隔几十秒的时间就会与节点A通信一次(使用erlang的进程通信方式),结果很快S2、S3崩溃了,S1能够正常工作。查看到S2上的错误报如下:(s2@192.168.0.1)1>=CRASH REPORT==== 18-Jul-20
2013-07-18 22:51:34
1927
原创 windowsk中一个erlc编译错误
windows下erlc编译错误:E:\my_server>erlc -o ebin src/*.erle:/my_server/src/*.erl:none: I/O errorerlc -o ebin src/*.erl命令在linux上是能够正常工作的,但在windows上却出现问题。原因是linux下的shell能够自动解释*.erl,windows shell却没
2013-05-14 16:16:39
2345
原创 vimerl自动编译
vimerl配置好后,在文件每次保存时会自动进行语法检查。但是我发现,修改一个文件后,使用rebar进行编译,花费的时间比较长,主要是项目文件较多,编译遍历整个项目花了大量时间。我们可以做一些小的修改就可以在文件保存时自动生成 *.beam,由于只编译一个文件,所以速度很快. 首先查看erlang_check.erl文件, 原有代码在不能生成*.beam文件的原因在于编译时使用了
2013-01-24 15:16:40
2102
原创 vim erlang环境搭建
1.需要安装vim插件列表: 插件管理插件pathgoen, http://www.vim.org/scripts/script.php?script_id=2332项目管理插件Project http://www.vim.org/scripts/script.php?script_id=69taglist插件 http://www.vim.org/scripts/script.p
2013-01-22 00:06:37
5347
原创 erlang基础笔记
进程管理器可以使用pman:start()来启动进程管理器。类似于i()命令显示的。可以跟踪所有的发送和接收消息,以及内置函数和普通函数调用,以及并发相关的事件。进程管理器跟程序运行是很方便的。应用监控器通过appmon:start()调用启动应用监控器。调试器debugger:start(),启动图形化的调试器,可以进行断点跟踪。不过需要在编译模块时,加上调试标志
2012-08-08 14:36:26
1398
原创 快速排序
按照算法导论,写了一下快速排序void swap(int &a, int &b){ int temp = a; a = b; b = temp;}int partition(int array[], int low, int high){ int key = array[high];//选取参考点 int i = low -1; for(int j = low; j
2012-07-19 00:16:12
805
原创 关于mysql外键创建失败的问题
创建persons:CREATE TABLE `persons` ( `id_p` int(11) NOT NULL AUTO_INCREMENT, `lastname` varchar(10) DEFAULT NULL, `firstname` varchar(10) DEFAULT NULL, `address` varchar(50) DEFAULT NULL,
2012-07-12 16:34:38
1222
原创 浏览器中几个最常用的快捷键
打开/关闭全屏模式 F11 切换到下一个标签 CTRL+TAB 切换到前一个标签 CTRL+SHIFT+TAB放大 CTRL + +缩小 CTRL + - 恢复原始大小 CTRL+0选择地址栏 ALT+D 打开一个新窗口 CTRL+N 打开一个新标签 CTRL+T 关闭一个标签 CTRL+W
2012-07-08 23:39:07
2926
原创 linux上mysql的简单入门
最近想转去做linux后台服务器方面的工作,首先要恶补的是数据库。做c++的,如果不做后台,基本是没怎么用数据库的。简单的记录一下ubuntu下的简单使用。首先安装,很简单 sudo apt-get install mysql-server安装完成后,回弹出设置root密码的框。如果后面想修改这个密码,可以使用下面的命令$mysqladmin -u root -p pas
2012-07-08 17:57:29
2959
原创 趣味面试题集锦
1.16个硬币,A和B轮流拿走一些,每次拿走的个数只能是1,2,4中的一个数。谁最后拿硬币谁输。问:A或B有无策略保证自己赢? 很明显,当剩余个数为1时,下一个拿的必输,所以这是一步死棋,可以推测出对应用的三个杀棋2,3,5。如果对应的硬币数,取走1,2或者4后,剩下的硬币数均为杀棋,则这里的硬币数就是死棋。按这样的规则倒推。 集合状态:死棋(1),杀棋(2,3,5)。 当剩
2012-07-05 12:55:33
1607
1
转载 linux socket编程相关问题
1.connect函数响应中断返回后仍然回到函数的调用。实践证明,对于一个非阻塞的socket,如果在调用connect函数时,如果发生中断,这函数响应中断,但当中断返回时,继续connect函数的调用,直到connect超时失败或接收到错误ICMP包或连接成功2.accept()如果侦听进程是非阻塞模式工作,当调用accept()函数接收来自客户端的请求后,返回的socket套接字,
2012-06-28 20:20:35
1937
原创 ubuntu中打开echo等标准服务
tcp/ip多数提供了一些标准因特网服务,如echo(回显)、daytime(时间获取)、discard(丢弃)等,为了应付针对它们的拒绝服务攻击和其他资源使用攻击,在如今的系统中,这些简单的服务通常被禁用。服务名(echo,daytime等)由/etc/services文件映射到端口号,如echo使用端口7。下面记录了在ubuntu 11.10打开这些服务的方法。1.安装openbsd-
2012-05-31 18:05:48
7030
2
原创 linphone源码分析----初始化部分
这几天比较轻松,所以打算好好来看看linphone的代码,源码版本为3.5.2。从linphone初始化的过程开始,首先来看linphone_core_new函数。 LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable, const char *config_path, const char *factor
2012-05-14 11:44:44
12791
1
转载 谈 三层结构与MVC模式的区别
转自:http://www.cnblogs.com/wisdomqq/archive/2009/04/29/1446579.html在优快云和园子里有朋友谈到三层与MVC的区别,以前也有人抛出这个问题,本人对来公司面试的朋友也偶乐会提这方面的问题。 那么我也来讲讲我对这两者的理解吧。 首先对这个题目,本身是存在问题的,“XX结构”与“XX模式”的区别?请问中国社会
2012-05-10 08:58:22
982
转载 DLL导出类的问题
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。然而事实却没这么简单,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后果
2012-05-07 11:14:05
1329
原创 c++笔记 虚函数表内存布局
测试了一下vs2008中虚函数表的内存布局,测试代码如下:class A {public: virtual int getA() const { return a;}private: int a;};class B{public: virtual int getB(){return b;} private: int b;};cla
2012-05-06 14:30:21
1795
原创 c++笔记 关于标准库中容器内的元素
1.容器元素的条件 STL容器元素必须满足以下三个基本要求:1)必须可透过copy构造函数进行复制。 副本与原本必须相等,亦即所有相等测试的结果,原本与副本行为一致。所有容器都会在内部生成一个元素副本,并返回该暂时性副本,因此copy构造函数会被频繁地调用。所以copy构造函数应该尽可能的优化。2)必须可以透过assignment操作符完成赋值动作。
2012-04-18 23:53:31
989
原创 c++笔记 用组合代替继承
设计原则:多用组合,少用继承。考虑下面的情况:class Timer { virtual void onTick(); //定时器每滴答一次,此函数被调用一次。 }class Widget: public Timer {public: virtual void onTick();} 子类Widget需要重新实现onTick函数,怎么才能用组合实现呢?可以用下面的方法解决
2012-04-13 21:52:20
2446
原创 c++笔记 降低头文件间的编译依存关系
1.编译依存关系 某些时候只修改了某个类的private,结果却有一大堆文件需要编译。问题出在c++并没有把“将接口从实现中分离”这事做好。Class的定义式不只详细叙述了class接口,还包括十足的实现细目。例如:class Perpson {public: std::string name() const; std::string birthData() con
2012-04-12 22:04:13
1633
原创 c++笔记 遮掩继承
看一个例子:class Base {public: virtual void mf1() = 0; virtual void mf1(int){} virtual void mf2(){} void mf3(){} void mf3(double){}};class Derived: public Base {public: virtual void mf1(){}
2012-04-12 20:06:48
995
转载 Windows完成端口与Linux epoll技术简介
转自:http://www.cnblogs.com/liuweijian/archive/2009/12/27/1633657.htmlWINDOWS完成端口编程1、基本概念2、WINDOWS完成端口的特点3、完成端口(Completion Ports )相关数据结构和创建4、完成端口线程的工作原理5、Windows完成端口的实例代码Linux的EPoll模型
2012-04-10 11:44:57
1265
原创 c++笔记 构造/析构/赋值运算
1.copy构造函数与copy assignment操作符copy 构造函数被用来“以同型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象”。class Widget { Widget(); //default构造函数 Widget(const Widget& rhs); //copy构造函数 Widget&
2012-04-10 00:22:39
804
原创 c++笔记 const关键字的使用
1.关于const指针 如果关键字const出现在星号左边,表示被指物为常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两都都是常量。 注意被指物是常量时,以下两种写法意义相同: const int *p; int const *p;2.const成员函数 const成员函数不能修改类的数据成员,也就是
2012-04-08 22:33:13
915
转载 boost.bind用法
转自http://cunsh.ycool.com/post.1946109.html第9章 bind - boost头文件: boost/bind.hppbind 是一组重载的函数模板.用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象.它的源文件太长了. 看不下去. 这里只记下它的用法:9.1 对于普通函数假如有函数
2012-04-07 11:06:04
821
转载 C++11中值得关注的几大变化
赖勇浩(http://laiyonghao.com)声明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的《The Biggest Changes in C++11(and Why You Should Care)》一文,几乎所有内容都搬了过来,但不是全文照译,有困惑之处,请参详原文(http://www.softwarequalityconnection.com/2
2012-04-06 23:02:52
877
转载 使用Boost.Asio编写通信程序
使用Boost.Asio编写通信程序转自http://cpp.ezbty.org/content/science_doc/%E4%BD%BF%E7%94%A8boostasio%E7%BC%96%E5%86%99%E9%80%9A%E4%BF%A1%E7%A8%8B%E5%BA%8F摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作
2012-04-06 17:26:22
2929
原创 boost 1.49编译及使用
1.下载下载最新的boost版本,连接不上sf所以找了另外一个地址,http://miranda-dev.googlecode.com/files/boost_1_49_0.7zboostpro提供编译好的二进制版本,http://www.boostpro.com/download/,不过版本较旧2.关于编译大部分的boost库是无需编译的,仅仅只需要包含头文件即可需要
2012-04-06 14:43:38
4561
原创 c++笔记 显式类型转换static_cast、dynamic_cast、const_cast、reinterpret_cast
旧式强制类型转换,用圆括号将类型括起来实现:int *ip;char *pc = (char*) ip;效果与使用reinterpret_cast符号相同,但这种强制类型转换的可视性比较差,难以跟踪错误的转换。标准c++为了加强类型转换的可视,引入命名的强制转换操作符。1.dynamic_castdynamic_cast支持运行时识别指针或引用的指向的对象。可以将基
2012-04-05 18:13:54
1113
原创 关于运行jar包时的一个错误
花了几天时间学习java,今天制作了一个jar包,遇到一个奇怪的问题,打好的jar包使用命令java -jar test.jar可以正确运行,但是双击或是在cmd中运行,提示下面的错误:C:\Users\Administrator>D:\work\temp\classes\test.jarException in thread "main" java.lang.NoClassDef
2012-04-04 23:43:46
6130
原创 Red5-0.9.1安装中的一个问题
今天在xp上安装setup-Red5-0.9.1.exe,结果一直没有启动成功,以前在win7安装过这个版本似乎没有问题。提示错误如下C:\Documents and Settings\Administrator>"D:\Program Files\Red5\red5.bat"Starting Red5Exception in thread "main" java.lang.NoC
2012-03-28 15:21:51
4200
live555_ex
2012-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人