android上的poll

最近我们同事在移植android时,发现了一个奇怪的问题: 步骤一. 首先连接服务器A 步骤二.成功之后断开链接去连接服务器B。 问题出在步骤二上,连接上服务器B后,再也收不到任何消息。模拟器上某些情况下是可以收到消息的,某些情况下就一定是收不到消息的(这些情况也很有规律);而真机上是一定不会收到消息的。各种工具都表明客户端确实已经连接上了服务器B,服务器B也确实向客户端成功发送了数据。 后来把poll函数的超时时间设成零(之前是-1),发现就OK了。 至今仍然对应不上为什么。Mark一下。

我眼中的产品思维

简洁   why?   如何做?苹果与《疯狂的简洁》 人性   人是懒惰的,跟风的,缺乏耐心的,人贪嗔痴(by 张小龙)…   人性需求; 游戏中的人性(荣誉,目标,互动,惊喜 by 史玉柱) 产品向Apple及微信学

异或运算XOR的一些相关技巧

异或运算(XOR)特点: X xor X = 0 X xor 0 = X X xor Y = Y xor X (X xor Y) xor Z = X xor (Y xor Z) 利用异或可以巧妙地实现一些玩意,例如: 不用中间临时变量交换两个整数; XOR linked list:只用一个指针实现双向链表  

type 与 RTTI

时常,我们在程序中经常出现这样的switch或者if-else分支: if (pobj->IsKindOf(Circle)) else if (pobj->IsKindOf(Rectangle)) 等。其中上面的IsKindOf也可能是我们自定义的GetType(),或者是C++标准中的dynamic_cast。 不管怎么样,这是十分不好的设计/风格。 原因很简单,要添加一个新的类型,所有这些条件判断的地方都需要做更改;反之,使用多态只需要添加一个SubClass(当然,也可以在类层次上作一些调整)。 因此,MFC的CObject::IsKindOf() 明确的指出Do not use this function extensively because it defeats the C++ polymorphism feature. Use virtual functions instead. 如何应对这个问题呢, MartinFlower在《重构》中明确的指出了几条细则,包括: Replace Type Code with Class; Replace Type Code with State/Strategy; Replace Type Code with Subclasses; Replace Conditional with Polymorphism 既然如此,为什么还需要IsKindOf,dynamic_cast这些玩意呢。 在BS的《C++语言的设计与演化》中的《强制》一章“为什么提供一种危险‘特征’”一节中,我们可以找到讲RTTI作为标准的一些理由。这里就不一一罗列。 (“危险”两个词用的好,o(∩_∩)o) 每一个有用的特征都可以被误用。。。