Filed under: Uncategorized
Filed under: 电影电视
这才是一部纯粹的成龙作品,成龙风格的回归,绝对值得一看。
Filed under: 电影电视
Filed under: 工作心情
刚才还搜了以下“陈良宇+模特”,虽然也得到一些小道消息,但是绝大多数也是没相关的网页,排的比相关网页还靠前,但内容其实就是一个介绍陈*良*宇的新闻,加上边上一大堆新闻链接里面有一条什么“XX模特XXXXX”。
Filed under: 工作心情
看最近又有从事某个职业的大人物被拉下马了,暗自庆幸自己从事了一个工作性质要求诚实的行当(当然不是说任何别的行当就不诚实了,也不是说这个行当里的人都诚实),不贪不躁,做好我的螺丝钉,拿上工资,交上税款,然后回家陪家人,生活就这么简单,感觉很好。
Filed under: 八卦杂谈
最近某基金会推出了孔子标准像,说是为了有利于孔子文化的传播,中国人不是什么问题,主要是怕外国人看有很多不同形象的孔子会糊涂。
据我所知,外国人也说过“一千个人看哈姆莱特就有一千个哈姆莱特”,耶稣和圣母玛丽亚也没有标准像,伊斯兰教的安拉别说标准像,连像都没有,照样不影响信徒朝拜。一个慈眉善目长袍飘飘的古代老头形象,加上一点注释,谁要是还不能认出这是孔子,还能指望这种人能够理解孔子思想吗?
Filed under: 工作心情
把1000坛酒从0-999编上号,然后把编号转换成二进制,从0000000000至1111100111,十位二进制足矣。
把十个犯人从1-10编好号,n号犯人去尝一滴编号第n位是1的坛子里面的酒,过十天,根据哪些犯人死了可以精确判断哪一坛子有毒,比如第1号和第3号犯人死了,说明是第0000000101号坛子有毒。
其实就是一个用二进制表示的问题。可以看到,很多犯人很有可能不会死,这种方法既高效又人道,这就是数学得力量啊!:)
Quote
由实际问题联想到面试题
上周五在加班干活的时候,拿一大串URL同时去测试我们的程序,结果发现没运行一次在系统event log中都会留下一个出错提示,很可惜这个出错提示没有包含导致出错的URL,所以没法知道testcase中哪一个URL导致了这个错误。这时候已经晚上九点半了,我要想早点回家过周末就得用尽量快的办法找到这个导致出错的URL。最后我实际使用的方法用了一点经验性的知识对可能的URL进行评估,但是多想一步,假如很不幸有上千个毫无明显特征的URL,只有一个有问题,该怎么找到这个URL?这让我想到一道面试题:
从前有一个国王,他好不容易准备了一千坛好酒庆祝他的六十大寿,但是就在大寿两周前,一个刺客来谋杀他,这个刺客计划往他的寿酒里面投毒,但是很不幸,他才来得及往一个坛子里面下了毒,就被卫兵发现了,混斗中,酒坛子混在一起,被擒的刺客也不知道哪坛子有毒了,只是招供这种毒有三个特点,一是无色无味,二是无论如何稀释,毒性都一样,三是,如果中毒,和常人无异,但是过十天之后就会突然经脉爆裂而死。国王很怒,但是寿宴总是要摆,问题就是把唯一一坛毒酒找出来,于是找死囚来试尝毒酒,但是发现死牢里只有9个死囚,加上刺客只有10个,而且有个问题是这毒要10天才发作,而寿宴两周之后就要举行了,这个国王该怎么找到那坛毒酒呢?比较一下我说的实际问题和这个面试题,就知道有的面试题虽然古怪,但是还是很有实际意义的。
Filed under: 八卦杂谈
吴宗宪说得最多的是“掌声鼓励一下”
超女中听到最多的是“谢谢,谢谢,谢谢”
我还是比较喜欢世界杯期间《豪门盛宴》中胖胖的张斌说的话:“大家帮帮忙,看会广告”
Quote
这是我看我型我秀2006总决赛听到的最多的一句话。
Filed under: 技术体会
学究一点的回答是: 应该避免直接对private function做UT,如果真的需要,就得考虑把这个function改成public,而且如果代码一开始就应改用TDD的方式开发,应该使得自己的代码容易被UT……
Ok, Ok,我也知道一开始就用TDD最好,但是理论和实际总是有差距的,作为职业程序员,在别人遗留的代码上继续工作的机会比重头开始要大得多,总是会有这样那样不能和书本上描述的一样完美的情况,包括一堆需要测试验证的private function,但是原则上又尽量不要去修改他们的modifier。
还好Java和C#这样的语言提供了reflection机制,即使是private的成员,一样可以可以调用它,所以没有借口不去测试private function。方法其实很简单,可以抽出来,需要UT私有方法的时候重用。
class Util { public static object RunStaticMethod(System.Type type, string methodName, object [] paramList) { BindingFlags bindFlags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; return RunMethod(type, methodName, null, paramList, bindFlags); } public static object RunInstanceMethod(System.Type type, string methodName, object objInst, object[] paramList) { BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; return RunMethod(type, methodName, objInst, paramList, bindFlags); } private static object RunMethod(System.Type type, string methodName, object objInst, object[] paramList, BindingFlags bindFlags) { MethodInfo methodInfo; try { methodInfo = type.GetMethod(methodName, bindFlags); if (methodInfo == null) { throw new ArgumentException("No method '" + methodName + "' for type '" + type.ToString()); } object objRet = methodInfo.Invoke(objInst, paramList); return objRet; } catch { throw; } } }