• 2017-06-02

    关于TCP粘包和拆包的终极解答

    Views: 26097 | 1 Comment

    程序员行业有一些奇怪的错误的观点(误解),这些误解非常之流行,而且持有这些错误观点的人经常言之凿凿,打死也不相信自己有错,实在让人啼笑皆非。究其原因,还是因为这些错误观点所对应的正确观点不符合人的正常思维习惯,是扭曲人的直观感受的。

    有两个错误观点非常之经典,一而再,再而三的出现,就跟韭菜一样,割不完,还越长越多。一是经典的"服务器最多65536个连接"误解,打开链接看介绍。另一个就是这里要讲的TCP"粘包"和"拆包"问题。

    基于前面的思路,我们先介绍人的正常思维习惯,然后再介绍扭曲的正确观点,这样你就会印象深刻了。

    Continue reading »

    Posted by ideawu at 2017-06-02 15:02:56
  • 2017-02-16

    新浪微博劫持iTunes链接加入陌生推广码

    Views: 16719 | 2 Comments

    有微博用户抱怨他在微博上面发布的带有自己推广码(可带来佣金收益), 都被微博替换成了某个陌生的推广码, 他自己的推广码被覆盖了!

    @im61: 马勒戈壁的微博,我每天用 @PriceTag应用限免 这个账号发限免应用,链接里带了我的 iTunes 联盟令牌: 1001lsTF 和活动代码 wb_alet,结果发现几乎没有流量过来,刚刚 @图拉鼎 让我分析一下分享链接,大吃一惊啊,微博自动转换短链接,里面悄悄带上了自己的广告代码,我每天分享的收入都跑他口袋去了,无耻

    我验证了下, 确实如此. 验证过程:

    1. 使用新浪微博的官方网页发布一条带 itunes 链接的微博, 该链接并没有at(推广码)参数.
    2. 微博发出后, 新浪微博使用其控制的短链接服务t.cn(whois注册人是 domainname@staff.sina.com.cn )为用户的原始链接生成了短链接.
    3. 该短链接经过展开, 发现原始链接被非法加入了at参数. 该参数是iTunes推广码at=1001lbb6, 可为码的拥有者带来佣金收益.

    Continue reading »

    Posted by ideawu at 2017-02-16 16:23:17
  • 2016-12-08

    正确的将浮点数转成整数的方法 – 避免强制类型转换

    Views: 18326 | 4 Comments

    基于思维惯性, 一般我们会直接利用语言的强制类型转换, 将浮点数转成整数. 事实上, 强制转换在计算机内部的实现相当于直接抹零, 而浮点数经过运算后, 往往不能准确地表示整数, 这会导致严重的问题, 特别是涉及到钱的时候.

    例如,

    double f = 9.99999;
    int a = (int)f;
    printf("%f, %d\n", f, a);
    

    输出:

    9.999990, 9
    

    Continue reading »

    Posted by ideawu at 2016-12-08 21:15:32
  • 2016-07-06

    代码 Review 要点

    Views: 10567 | 1 Comment

    1. 做代码 Review 的人的责任

    给别人的代码做 Review 的人(Reviewer), 他的责任不仅在于保证代码质量, 更重要地是承担拼盘者角色. 当编写代码的人未来因忙于别的项目, 休假或者别的原因无法在岗时, Reviewer 将负责接手项目, 修复 bug, 增加新功能等. 所以, Reviewer 必须为自己着想, 认真负责地进行代码 Review, 以免日后自己接手一个逻辑不通, 代码混乱的项目(程序员俗话说的"一坨屎").

    2. 做代码 Review 的原则性要求

    首先, 做代码 Review 前, 要了解产品需求, 并从产品需求出发, 整理自己的技术思路, 然后讨论被 Review 者的逻辑, 看看是否有逻辑漏洞. 如果有逻辑漏洞, 那么必须全部打回, 因为逻辑一旦不准确不严谨, 后面的代码就是在建造 bug 而不是开发功能.

    Continue reading »

    Posted by ideawu at 2016-07-06 12:42:51
  • 2016-07-01

    程序员, 不要过度封装!

    Views: 11950 | 4 Comments

    c

    过度封装是程序员最容易犯的错, 因为是否过度并没有固定的数值标准, 只能是有经验的程序员基于科学的判断. 过度封装的危害十分严重, 所以必须重视, 并且极力避免.

    首先, 什么是"过度封装"? 我们知道, 计算机科学领域最称为经典也是最强大的思想便是递归, 分而治之. 但是, 递归本身最重要的因素是: 结束条件. 一生二, 二生三, 三生万物, 总要有终止的条件吧? 不然一辆车不停地急驰, 你怎样上车?

    新手程序员, 特别是非科班出身的文科程序员, 最容易犯了过度封装的错误的原因就是不知道何时适可而止, 脑筋往往不断地分解分解再分解问题, 最后, 你看到的就是这个调用那个, 那个引用这个, 乱七八糟毫无头绪, 三两行代码的函数比比皆是, 自以为封装抽象, 其实是拿捏不好这个度.

    Continue reading »

    Posted by ideawu at 2016-07-01 17:10:26
  • 2016-06-18

    程序员眼中的无所不能与一无是处

    Views: 6849 | 3 Comments

    程序员常见的思维是提供"可扩展性", 这个可扩展性是程序员根据其职业生涯遇到的泪与汗得出的原则, 是一种保护罩. 可是, 这种思维导致其在做产品时, 会有一些不好的经典效果.

    例如, 程序员做的系统, 一般出发点就是做关系数据库表的增删改查. 不管做什么产品, 就是那几样 - 显示列表, 条件查询, 新增, 删除, 更改. 就这几招, 无所不能, 简直没有程序员做不了的系统. 如果你是程序员, 相信你有体会, 这种"无所不能"不会给你带来任何好处.

    我经常见到一些婴儿型程序员, 婴儿型程序员是我发明的一种人类标签, 主要是指那些像婴儿喜欢糖果一样喜欢某项技术的低级程序员, 这种喜爱完全是基于生物本能, 是生物的应激反应, 所以是低级的. 例如, 某些婴儿型程序员因为某语言用缩进方式来表示代码块, 突然就要认干爹了, 这种喜好让人反感.

    Continue reading »

    Posted by ideawu at 2016-06-18 13:47:44
|<<<123456789>>>| 2/13 Pages, 76 Results.