置顶随笔
摘要: virtual function是很多公司面试题的重点考察内容,虽然对于C++而言这是一个老生常谈的话题了,但是工作中我发现还是有很多人理解的不透彻。
先看下面的一个例子
阅读全文
摘要: 上午一个师弟在QQ上问我一道笔试题,是他前两天去KONAMI面试时做的,这道题大致是这样的:
解释以下语句的含义:
1、new A;
2、new A();
也许很多人包括我自己,都可以马上给出第一种情况的答案:在堆上为A类分配内存,然后调用A的构造函数。这种说法被大家所熟知,因为包括《STL源码剖析》等大作在内也都是这么写的(但是你认为这种说法完全正确吗?其实不尽然,答案后面揭晓)
第二种情况,对象构造的时候初始化列表为空会和第一种有什么不同呢?对于这种在实际工程中很少使用的情况,我一时还真给不出确切的答案。
阅读全文
摘要: 昨天在一个论坛里看到一个帖子,是关于无限循环的选择问题,之前也看到过很多次说空for比while(1)效率高的论述,只是之前一直没有功夫去考证。
话不多说,直入正题。
阅读全文
摘要: 前段时间在写《段错误造成的常见诡异宕机情况总结(中)》时,分析到 程序中数据写超时有可能写到this指针所在的地址里面,导致最终诡异的宕机。其实网络攻防里常用的缓冲区溢出攻击也是这个道理,除了使用户程序甚至计算机挂掉外,还有可能执行攻击者想执行的任何程序,这篇文章主要详细剖析一下第二种攻击的方法以及现在Linux(包括各种修改版本,例如Android)、Windows下常使用的防范措施。
阅读全文
摘要: 国庆长假终于结束了,从拥堵的噩梦中醒来,该收收心重新回到工作中来了(顺便吐槽一下闹心的长假,平时工作没时间出去,放了长假了 又不敢出去,路上耗费大量的时间和金钱也算了,弄的整个人也身心疲惫的……)
言归正传,接着上回宕机情况说。之前比较难找的宕机错误已经在前两篇随笔里说过了,这次要说的是前不久一个同事遇到的。他要做一个录像功能,每次把客户端的消息转储成文件时挂掉。大致代码如下:
阅读全文
摘要: 最近在做一个军团系统的资料片开发,因为策划提出了很多遍历某一军团当前所有在线玩家的操作(例如发公告、拉人、给奖励),所以就想到了用回调。
脱离实际项目代码,先看一下示例实现:
阅读全文
摘要: 前几天回答一个问题,是关于我们项目中使用的epoll模式的,因为记不大清了,感觉应该使用的就是epoll的高速模式,也就是ET(edge-trigger)模式。这两天闲暇的时候,打开代码又看了一下,在epoll事件注册时并未标记ET模式,看来实际使用的是epoll默认的LT(level-trigger )模式,为什么呢?使用LT意味着 只要 fd 处于 readable/writable 状态,每次 epoll_wait 时都会返回该 fd,系统开销不说,自己处理时每次都要把这些fd轮询一遍,如果fd很多的话,不管这些fd有没有事件发生,epoll_wait 都会触发这些fd的轮询判断。
阅读全文
摘要: 工作两年中,关于查找敏感型的代码不少用到了hash_map,关于它的实现细节和需要注意的地方这里梳理一下。因为工作在linux环境下,所以这里hash_map的评述都是根据SGI的源码。
hash_map说简单一点就是一个hashtable桶和对于这个桶基本操作的再次封装。即包含(图片太麻烦,文字代替吧):1、_Hashtable* _M_ht;2、erase()、find()等函数。对应的iterator包含:1、_hashtable* _M_ht(这个就是hash_map中的hashtable指针);2、_Node* _M_cur(指向当前hashtable桶的某个节点)。_Node的结构为:
阅读全文
2015年2月10日
摘要: bash shell有很多命令是和locale相关,本篇文章就来研究一下这种相关性的具体表现。
阅读全文
2015年1月14日
摘要: 项目中和自己代码中大量使用了STL的容器,平时也没怎么关注alloc的具体实现细节,主观认识上还停留在侯捷大师的《STL源码剖析》中的讲解。
但是目前编译器的实现,早已经不是书中所言……
阅读全文
2014年3月26日
摘要: 对于服务器程序而言,尤其是云计算时代的服务器程序,三高标准(高可用、高性能、高扩展)往往是衡量一个优秀的服务器程序的重要指标。本篇文章主要聊聊服务宕机恢复(高可用的重要内容)、负载均衡(高扩展、高可用的主要内容)。以下内容均属个人工作中的见解,如有不妥之处,欢迎指正。 ----peakflys
阅读全文
2013年12月1日
摘要: virtual function是很多公司面试题的重点考察内容,虽然对于C++而言这是一个老生常谈的话题了,但是工作中我发现还是有很多人理解的不透彻。
先看下面的一个例子
阅读全文
2013年5月27日
摘要: 项目终于上线了,伴随着人数的逐步上升,最近查看日志,发现了大量连接超时的日志。项目中使用的是TCP长连接,为了保证网络资源及时有效的释放,程序中是1分钟一次心跳,3分钟无心跳即认为超时。此为本文的背景
相对于TCP连接建立时的三次握手,我想很多人对断开连接的四次招呼就不是那么熟了,这里先谈一下TCP的断开,下面给出TCP断开连接的过程图:
阅读全文
2013年4月8日
摘要: 上午一个师弟在QQ上问我一道笔试题,是他前两天去KONAMI面试时做的,这道题大致是这样的:
解释以下语句的含义:
1、new A;
2、new A();
也许很多人包括我自己,都可以马上给出第一种情况的答案:在堆上为A类分配内存,然后调用A的构造函数。这种说法被大家所熟知,因为包括《STL源码剖析》等大作在内也都是这么写的(但是你认为这种说法完全正确吗?其实不尽然,答案后面揭晓)
第二种情况,对象构造的时候初始化列表为空会和第一种有什么不同呢?对于这种在实际工程中很少使用的情况,我一时还真给不出确切的答案。
阅读全文
2013年2月4日
摘要: 前两篇blog介绍了P2P的原理和libjingle库的基本情况,如果直接看代码,很多细节可能不会注意到,这种时候最有效的方法当然是看它的开发文档,因为库是由Google开发和维护,所以这方面我们不用担心,文档首页见这里。但是如果要深入了解库代码为什么这么写,为什么这么约定时,还需要了解相应的协议。
便于大家了解,特整理如下。(转载请注明作者和出处 by peakflys)
阅读全文
2013年1月30日
摘要: 国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY、AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响。而基于P2P方式实现的语聊服务器,就可以极大的避免这种情况的发生,而且用户的语音体验也会非常好。
阅读全文
2013年1月25日
摘要: 为了项目的后期IM应用,最近在研究libjingle,中间看了也收集了很多资料,感慨网上很多资料要么太过于纠结协议(如STUN、ICE等)实现细节,要么中间有很多纰漏。最后去伪存真,归纳总结了一下,希望对以后的同行有些许帮助。
如果有什么需要讨论或者指正的,欢迎留言或者邮件peakflys@gmail.com
阅读全文
2013年1月5日
摘要: 昨天在一个论坛里看到一个帖子,是关于无限循环的选择问题,之前也看到过很多次说空for比while(1)效率高的论述,只是之前一直没有功夫去考证。
话不多说,直入正题。
阅读全文