程序员的Job Security - 我的OJ(Online Judge)比较

本文对比分析了多个在线编程挑战平台,包括LeetCode、LintCode、HackerRank、CodeChef、CodeForce、UVa、SPOJ、POJ、ZOJ等,从题目量、难度、刷题体验、分类、编码环境和讨论氛围等方面进行评估。适合程序员为面试准备或提升技能使用。

为了保证Job Security,刷题必须是常态。那到底去哪里刷合适呢?通过去年和今年两次换team,我整理了一下我用过的和尝试过的刷题网站(免费部分)。主要比较以下几个方面:题目量、题目难度、刷题难度、是否有分类、默认编码环境以及讨论氛围。由于大部分人用OJ主要是刷题准备眼下或者今后的面试,所以在此我直接忽略了这个网站能够举办编程竞赛的能力。

  • LeetCode 
    • 题目量在不断增长,目前总题量在300左右。有些题目是收费的。
    • 难度有一定的梯度,基本上easy + median就能保证公司内部绝大多数换team的面试。做题时基本上完成一个function或者一个class就可以交差了。
    • 刷题难度不大,因为所有的Wrong Answer都会告诉你哪个输入数据导致的。
    • 分类靠tag来实现
    • 默认编码环境足以直接在里面写代码,能够处理对齐之类的基本要求,不用手动输入大量空格。编程语言支持量不大,目前是9个,但应该都是比较常用的。
    • 讨论氛围很好,本身网站上有论坛,网上有blog讲解,GitHub和GitBook上有书。
    • 缺点是这个站已经太出名了,上面的题目现在只能用在technical screen和phone interview上了。
  • LintCode 
    • 题目量和难度类似LeetCode
    • 刷题难度同LeetCode,都是能告诉你错在什么地方或者什么样的输入能造成超时。
    • 分类做的比LeetCode好,有“Ladder”可以爬,容易得到成就感,其实然并卵 :-)
    • 默认编码环境比LeetCode舒服,一个重要的原因是Editor的范围大一些,这对我来说是个很大的亮点,因为我喜欢直接在网站上写而不是本地写好了再贴过去。和LeetCode同样的问题,支持的编程语言少,只有3种。
    • 支持一种叫做“Lint”的代码检查功能,帮助你提高编码习惯。这个是他家独有的功能。
    • 讨论较弱,没有论坛,网上讨论也较少。不过因为题目大多跟LeetCode一样或类似,所以可以直接借鉴。
  • HackerRank 
    • 这是一个有些公司拿来直接做面试的网站,所以分类和知识面覆盖是目前我见过的最全面的了。
    • 由于分类做的太好太全面了,所以没有一个列出所有题目的地方,没找到有多少题,目测应该有几百道。
    • 题目类似ACM,需要自己处理输入输出,而不是像LeetCode或者LintCode一样写个函数就可以交差了。
    • 刷题难度中等。做错的题目是可以得到导致出错的输入和应有的输出的,只是需要额外的操作,故意人为制造了一点点麻烦。
    • 开发环境很不错,全屏后空间比较大。因为程序要自己处理输入输出,所以开发环境里支持语言很多,几十种吧。
    • 网上对这里的题目讨论不多,网站上没找到论坛。但是他们提供IRC服务。这个很有趣,只是,有多少人还知道啥是IRC呢?
  • CodeChef 
    • 网上口径一致认为适合初学者的ACMer刷题网站,题目量据说在1000-2000。
    • 在这个网站刷题按照难度分类走,是网上好多人的推荐
    • 在线开发环境类似LeetCode,目前能支持10种语言。如果你上传写好的code,支持的语言远超10种。
    • 错了不能看到导致错误的输入,但这个站你能看到别人成功的提交。
    • 有论坛,还挺热闹的,每个题目下面也有能够写评论的地方。
  • CodeForce 
    • 目测题目应该在2000道以上,ACM风格。
    • 开网站的俄罗斯大哥们不知道什么叫难度,所以没有难度分级。不过有tag做分类。
    • 题目需要程序自己处理输入输出,写多了就还好了。
    • 开发环境跟题目不在一起,提交时把题号写上就可以了。比较像真的ACM的感觉,不过对刷题准备面试来说这个就比较二了。
    • 提交后如果出错,你是能知道哪里错了的,还比较友好。
    • 支持在线写完code以后自定义input然后看output,但网站不会告诉你这个input应该有的output是什么。
    • 俄罗斯大神们不需要论坛,不过网上倒是有不少讨论这个站的题目的
  • UVa 
    • 题目量应该在4000+
    • 在线IDE比较差,基本上没办法直接写。支持5种语言(如果C++和C++11算两种语言的话)
    • 题目没啥分类,只有个分组,还是按照题号分的。
    • 出错了不能看到导致错误的输入,典型ACM刷题。
    • 网上对这个刷题老站的讨论还是蛮多的,做不出的时候上网搜搜总会有惊喜。
    • 这个站有个UDebug的分站,用来调试的。能够告诉你对于一个输入来说,正确的输出是什么。但同样不会告诉你提交以后的那个测试都有哪些输入数据。
  • SPOJ 
    • 题目量应该也是4000+
    • 网站相比较UVA来说稳定很多,各种浏览器也都能看。
    • 没啥分类,但有第三方网站给他做分类。
    • 在线IDE支持多种语言(>20),带括号补全啥、自动缩进等基本功能。可以考虑直接在线上写code。还能支持在ideone里面编辑code.
    • 出错了不能看到导致错误的输入,典型ACM刷题。
    • 网上的讨论很多,可以参考。
  • POJ && ZOJ

    • 国内高校两大在线刷题网站,每个都应该有10年左右的历史了,题量大体相当,3000道左右,有人说ZOJ多一些。无所谓啦。。。
    • 典型ACM题目,所以错了也不知道错在哪里。
    • 题目也没啥分类。学生们都有时间整个刷完的,不需要分类。。。
    • ZOJ上没找到怎么看自己以前的提交,囧
    • 在线提交的IDE支持的语言都偏少,而且不具有自动缩进啥的功能,所以基本上不要想直接写了。。。
    • 论坛和讨论比较热烈,网上的博客也不少
  • BNUOJ && HUSTOJ && Virutal OJ

    • 这是一类有趣的站点
    • 他们有的有自己本地的OJ题库,本地就可以做judge (比如BNUOJ)
    • 但更多的是他们提供以上网站的题目在他们那里做了,从他们那里提交到以上网站,然后返回结果给你。
    • 所以这类站点如果在线编辑不好,估计不会有人愿意用的。。。

以上就是我用过和尝试过的OJ网站了。基本上如果你打算短期内刷题找/换工作,LeetCode或者HackerRank应该适合你,尤其是有针对性的提高某一个方面的能力。如果你打算长期保持做题状态,SPOJ等一批ACMer刷题的地方应该更好些。

最后放一个上述网站的题解网站作为结束吧。这类题解网站其实还有好多,懒得找了,用的到再说吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值