摘要:
C++标准(版本5.3.5/5)允许使用delete删除incomplete class types指针,但如果class的析构函数有特定数据操作,或者具有自定义的operator delete成员函数,那么删除指针的操作将导致不确定后果。这个问题同样存在于smart pointer的析构函数中,比如:boost::scoped_ptr<T>::~scoped_ptr,如果T是一个incomplete type,那么可能会造成极隐秘的诡异错误。boost提供了2个函数模版与2个类模板工具来解决这个问题,在<boost/checked_delete.hpp>中定义了che 阅读全文
摘要:
标准输入输出格式符scanf输入%hd short%lf doubleprintf输出%td ptrdiff_t%zd ssize_t%zu size_tstd::getline() 该函数是个 non-member function,定义在 <string> 里边:template<classStream,classcharT,classtraits,classAllocator>basic_istream<charT,traits>getline(basic_istream<charT,traits>is,<charT,traitsal 阅读全文
摘要:
陈硕同学的"当析构函数遇到多线程 ── C++ 中线程安全的对象回调"是一篇非常优秀的文章,下面列举文章中的一些知识点和经验总结以便能细细品味、消化。 对象构造要做到线程安全,惟一的要求是在构造期间不要泄露 this 指针,即 不要在构造函数中注册任何回调 也不要在构造函数中把 this 传给跨线程的对象 即便在构造函数的最后一行也不行 之所以这样规定,是因为在构造函数执行期间对象还没有完成初始化,如果 this 被泄露 (escape) 给了其他对象(其自身创建的子对象除外),那么别的线程有可能访问这个半成品对象,这会造成难以预料的后果。 引入另外一层间接性,another layer o 阅读全文
摘要:
不良的使用模式会降低您的速度,并且通常会导致意外错误。养成这些好习惯是加强您的 UNIX 命令行技能的积极步骤。 Unix 下要采用的20个好习惯为: 1. 在单个命令中创建目录树 2. 更改路径不要移动存档 3. 将命令与控制操作符组合使用 4. 谨慎引用变量 5. 使用转义序列来管理较长的输入 6. 在列表中对命令分组 7. 在 find 之外使用 xargs 8. 了解何时 grep 应该执行计数,何时应该绕过 9. 匹配输出中的某些字段,而不只是对行进行匹配 10. 停止对 cat 使用管道 11. 使用文件名自动完成功能 (file name completion) 12. 使用历史 阅读全文
摘要:
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错。如设置 replicate_do_db=testuse mysql;update test.table1 set ......第二句将不会被执行如设置 replicate_ignore_db=mysqluse mysql;update test.table1 set ......第二句会被忽略执行原因是设置replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是当前默认数据库,所以跨库更新语句被忽略。可以使用 replicate_wild_d 阅读全文
摘要:
今天是“黑色星期日”,公司一台进入“更年期”的服务器在消停两周后再次“发飙”:内网网卡再次罢工,重启网卡多次都无效。。。由于这台服务器上有多个mysql服务和NFS服务,并且都是通过内网提供服务,知道我有多杯具了吧。。。没有“plan B”,只能把所有通过内网访问服务的程序都切到外网上,mysql服务的恢复还比较顺利,只要给client外网ip授权就行了;数据库的调整还包括主库之间的连接访问,之前从库都是连接主库的内网ip,这里有个小技巧可以不用停mysql程序,只要执行下面的命令即可:mysql> CHANGE MASTER TO MASTER_HOST='123.0.0.1& 阅读全文
摘要:
一个nginx模块,能实现http push server官网:http://pushmodule.slact.net/介绍:http://www.igvita.com/2009/10/21/nginx-comet-low-latency-server-push/ 阅读全文
摘要:
先看一下arena_match_index的表结构,大家注意表的索引结构CREATE TABLE `arena_match_index` ( `tid` int(10) unsigned NOT NULL DEFAULT '0', `mid` int(10) unsigned NOT NULL DEFAULT '0', `group` int(10) unsigned NOT NULL DEFAULT '0', `round` tinyint(3) unsigned NOT NULL DEFAULT '0', `day` date NOT NULL DEFAULT '0000-00-00', 阅读全文
摘要:
假设Linux/Unix系统中有一个名 叫“-target”,如果我们想对它进行操作,例如要它按照一般的方法在命令行中输入rm -target命令,界面会提示我们是“无效选项”(invalid option),原来由于文件名的第一个字符为“-”,Linux/Unix把文件名当作选项了。我们可以使用“--”符号来解决这个问题,通过man rm可以知道,输入“rm -- -target”命令便可顺利删除名为“-target”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“\”符号,或者用双引号把整个文件名括起来。 阅读全文
摘要:
在多线程交互的中,经常有一个线程需要得到另个一线程的计算结果,我们常用的是Future异步模式来加以解决。 Future顾名思意,有点像期货市场的“期权”,是“对未来的一种凭证”,例如当我们买了某个房地产开发商的期房,交钱之后,开发商会给我们一个凭证(期权),这个凭证告诉我们等明年某个时候拿这个凭证就可以拿到我们所需要的房子,但是现在房子还没建好。市场上之所以有“期货”,也正由于有这种需求,才有这种供给。这种应用在GUI上用的比较多,在设计模式中一般称为“虚拟代理模式”。例如:现在有个这样的需求,Client向Server提交一个Request(int count,char c),希望获取一个 阅读全文