技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> changming的blog
    本文主要讨论如何设计一个可靠的RPC协议。TCP是可靠的传输协议,不会丢包,不会乱序,这是课本上讲述了无数遍的道理。基于TCP的传输理论上来说都是可靠的,但是实际这也得看场景。当我做网络游戏的时候也是一直把它当一个可靠的传输协议来用,从没考虑过TCP丢包的问题。直到当我面临像网络存储、机器学习这样领域时,我发现TCP变得“不可靠”了。
    最近悟出来一个道理:先不要急着找工作,等领导们安顿好了,我再开始找。 举个例子,假如我现在想去腾讯,那么我投简历,约面试,搞不好还得现场写写算法题。我都工作8年了,很多公司居然还派刚毕业2、3年的人来面我系统架构,真是聊不来。与其这样,不如等着。万一哪个领导去腾讯了,我就给他打个电话,问问他愿不愿意带我一程。只是拿腾讯举个例子,我对它没特别的兴趣。
    Paxos是一个分布式选举协议,被广泛用在很多分布式系统中,比如Google的Chubby,MegaStore,Linux的Ceph。它的目的是为了让一群机器通过选举的方式达成一个一致性的决议。比如现在有5台MySQL服务器,它们要选举一个Master出来(无人工干预),所有的数据修改请求都发给这个Master,其它的做为Slave,以备在Master死掉后自动顶上去。
    我们服务器上的glibc是自定制的,找不到调试符号。所以我就只好黑灯瞎火的搞。崩溃发生在main函数返回之后。exit()函数执行全局变量的析构,然后就崩溃了。看上去应该跟内存的释放有关,但是我即便用valgrind也得不到任何有用的信息。只能知道是同一块内存被释放了两次,而且这是一个std::string,而且是个全局变量。但是我们的代码有几十万行,从何查起啊…… 于是首要任务是,先找到这个std::string的指针以及它所存的字符串的内容。
    理论上来说,多线程程序在链接时应该加上-lpthread或者-pthread。实际上很多时候忘记加这个也能链接过去,最近我线上的一个重要服务经常卡死,CPU使用率很高。用pstack看,经常是停留在这样的地方......
    libevent内置的异步DNS解析器采用了一种叫做DNS-0x20 encoding的hacking手段来防止DNS投毒攻击。但是这种做法是有问题的,在某些环境下会导致DNS解析全部失败。
    限制性股票(RSU)和期权是公司激励员工的常用方式。我作为非专业的人士讲下我的看法。很多人以为限制性股票和期权是公司白送给你的,其实不是。对员工来说,谈offer的时候完全可以要求多要点现金,少要点股票和期权,或者多要点现金,少要点股票和期权。对公司来讲,发放这些也都是有成本的。所以股票也好,期权也好,都是你拿工资买的!
    这是一个挺常见的面试题,解法也五花八门。下面的代码用牛顿迭代法解决这个问题。因为输入和输出都是整数,所以只要前后两项相差小于1,就可以终止了。。。。
    我认为无论是哪个公司的社会面试,看重的主要是以下几点:编码能力、算法、概念知识、项目经验、教育背景。 编码能力:我自己对编码能力比较看重,为什么别人花一个小时就做完的东西,你要花一天才能写完还全是BUG?但是我此番面的公司基本都不太考察这个。。。。
    你工作是为了什么?这个问题看起来很哲学,但其实每个人心中都有答案。
    2014年1月21日下午,全国的互联网都瘫了。百度、新浪等等,什么网站都打不开。这么大范围的严重的事故真的让人瞠目结舌,我以为被是美国黑客入侵了。事实嘛……你听我慢慢说来。
    今天我调查了一下chrome浏览器对proxy的支持情况。 目前总体来说它支持两大类协议:socks和http。 其中socks下面又分为socks4、socks4a、socks5。 而http下面又分为http、https、spdy。我想将来应该还会有quic和http/2.0。
    Apache/Nginx 通常被放在tomcat前作为http代理:browser -> apache -> tomcat。但是缺点是丢失了很多原有的网络信息:ip、hostname、protocol(用的是http还是 https),比如,当java程序想生成http重定向请求的时候会遇到麻烦。因为HTTP头部的Location字段的值必须是绝对URL。重定向的问题勉强可以交给前面的proxy来解决(让apache重写header),但是藏在http body中的各种链接问题就棘手多了。比如当从一个html页面载入一个外部资源时,资源的链接到底是写http的还是https的呢?
    国内用户无法访问youtube的主要原因是当浏览器进行DNS查询时GFW 会拦截此请求并返回错误的结果。那么一个解决办法就是采用更安全的传输方式。DNS请求默认是采用UDP协议,它是无连接的,所以UDP协议头部的IP地址非常容易被伪造,拦截的成本很低。但是DNS也支持tcp协议,经众多网友测试,GFW 不会处理TCP形式的DNS请求。
    我常常在想,当初我若不离开完美,现在肯定也是总监级的title了,收入比现在高一倍不止。但是另一方面,在编码能力上我甚至不如某些刚毕业的本科生。比如,快速排序的算法我很熟悉,就一句话:“随机选一个元素,用它把输入集分成两半,对这两半继续递归,然后将递归得到(已排好序)的结果合并”。
    sendmail是一个漏洞奇多、配置超级麻烦的东西,所以很多系统管理员都把它禁用了。但是如此一来,如果crontab脚本执行出错,就只有天知地知了。 sendmail有很多轻量级的替代,我之前一直在用ssmtp,但是这东西已经停止维护了,我在google 搜它的源代码都搜不到。于是我就只好找其它的替代,于是就找到了msmtp。
    背景: 我现在在一个网站工作,每天都有很多网络爬虫和恶意攻击。我想根据http访问日志统计一下每个IP每天的访问次数,然后大于1万的都认为是机器人。现在寻求一个高效且实时的算法解决这个问题。 最简单的做法,就是用一个map来记录所有IP的访问次数。那么这可能会需要几百兆的内存。有一个更好的办法,可以在O(1)的空间复杂度中解决这个问题。
    Windows下用stat函数得到的文件size可能不准,获取文件大小之前最好先读一下这个文件。
    我之前一直是使用ssh –D的方式翻墙,但是这么做有个缺点,需要在用户的机器上安装一个软件,并且ssh会经常断(即使加了keep alive)。后来我一直在想,为什么不直接走http或者socks协议呢?我觉得主要原因是:通信没有加密。 Chrome开了一个名为Secure Web Proxy的项目,旨在让浏览器支持HTTPS协议的proxy server。目前不光chrome,firefox也支持了。此外,Chrome还引入了一个名为SPDY的协议,通过对HTTPS做略微的修改,使得在单个SSL连接上可以同时传输多个HTTP请求。因为减少了HTTPS握手次数,可以大大提高proxy的相应次数。 综上所述,用SPDY协议来翻墙,比ssh -D好多了! 最近我从网上找了一段代码,发现可以很快速的利用node.js搭建一个SPDY协议的proxy server,下面分享给大家。
    有这么一种观点:程序员要想提高技术水平,多读开源代码、多参与社区讨论与开发就好了。我以前很赞同,现在发现不是这样。 panpan和xuhui对我的批评是,多看看技术以外的东西。我的理解是这样,很多东西它之所以这么做,不是因为技术上是最优的,而是因为工期、领导的旨意、需求变更留下的历史问题等等。这些原因是无法通过阅读代码而得知的,我只能看到实现细节,却不能知道作者的设计意图。像Qt、leveldb这样的项目,名为开源,但是它并没有采用开放式的开发。只是这个公司将其技术成果共享出来了而已,中间的过程完全不可得知。举个例子,Nokia和Intel说要合伙做一个叫Meego的操作系统。Intel说好啊,我对Linux熟,我来优化底层系统,Nokia你来搞QT及上层软件。结果Intel很郁闷的发现,Nokia的Meego项目组有两套BUG管理系统,一套是对内的,只有Nokia自己的员工可以访问.....
[ 共26篇文章 ][ 第1页/共2页 ][ 1 ][ 2 ]
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1