[转]如何编写优美的测试
精心设计的测试是必不可少的,这也是一个工程师经验丰富的标志之一。编撰良好的测试可以充分地记录代码,使读者更容易地投入并熟悉代码。本文中,作者以其参与 Crate.io 项目的亲身经历为例,为读者介绍了为什么要进行彻底的测试,并介绍了测试中常用的测试方法以及由内而外的策略。此外,还详细阐述了具有交互能力的代码的重要性。
Just One Pure ITer
精心设计的测试是必不可少的,这也是一个工程师经验丰富的标志之一。编撰良好的测试可以充分地记录代码,使读者更容易地投入并熟悉代码。本文中,作者以其参与 Crate.io 项目的亲身经历为例,为读者介绍了为什么要进行彻底的测试,并介绍了测试中常用的测试方法以及由内而外的策略。此外,还详细阐述了具有交互能力的代码的重要性。
许多人认为,如果代码写得足够扎实,注释就没什么用了。在他们看来,当一切都设计妥当时,代码本身会记录其作用,因此代码注释是多余的。我对此持不同意见,主要出于两个原因: 1. 许多注释并未起到解释代码的作用。 2. 注释使读者不必凭空想象太多细枝末节,帮助读者降低认知负担。 注释的分类 我的工作始于随机地阅读Redis源代码,以检查注释是否以及为什么在不同的上下文中起作用。我很快发现,注释的作用来源于多方面:它们在功能,编程风格,长度和更新频率方面往往非常不同。我最终转向了注释分类。
1. 写在之前 我们都知道,对于同一个问题来说,可以有多种解决问题的算法。尽管算法不是唯一的,但是对于问题本身来说相对好的算法还是存在的,这里可能有人会问区分好坏的标准是什么?这个要从「时效」和「存储」两方面来看。 人总是贪婪的,在做一件事的时候,我们总是期望着可以付出最少的时间、精力或者金钱来获得最大的回报,这个类比到算法上也同样适用,那就是花最少的时间和最少的存储做成最棒的解决办法,所以好的算法应该具备时效高和存储低的特点。 这里的「时效」是指时间效率,也就是算法的执行时间,对于同一个问题的多种不同解决算法,执行时间越短的算法效率越高,越长的效率越低;「存储」是指算法在执行的时候需要的存储空间,主要是指算法程序运行的时候所占用的内存空间。
最烦面试官问,“为什么XX算法的时间复杂度是OO”,今后,不再惧怕这类问题。
一篇文章快速理解区块链技术原理 区块链面试招聘中可能会被问到的40个问题 TPS百万级的超级区块链架构解析 | 迅雷链来鑫 深入Blockchain:区块链安全应用落地实践 如何解决区块链的硬伤:对时间的感知 如何十分钟搭建你的区块链概念验证环境? 一个程序员眼中的区块链技术
跟许多开源开发者一样,我也一直在围观Redis通用条款授权的评论(https://news.ycombinator.com/item?id=17814386)。其主旨是,由RedisLabs开发的特定企业级模块上的工作成果将采用Apache 2.0和通用条款授权(Common Clause license,简单来说就是个新的授权方式),这种授权方式将禁止主机提供商、云服务提供商以及其他直接从中获益的软件开发商免费使用redis。Redis以后还是主要在RedisLabs的赞助下进行开发,并采用更自由的BSD-3-Clause授权。 最初似乎产生了“Redis要采用新授权”的误解,不过后来Salvatore(antirez)辟谣了。
DAG (Directed Acyclic Graph) 是一个非常有用、也有很有意思的数据结构。如果说数组、链表、二叉树这类数据结构是学习中的基础,那么 DAG 绝对算得上工作中常常会听到、用到的实践知识。工作中两个 SDE 讨论技术问题,DAG 和 Array/Linkedlist/Tree 算的上是同一级的词汇、知识,默认彼此都懂。 下面我们详细讲讲原因:有向无环图 (DAG),结合拓扑排序(topolocial sort)的确是解决存在依赖关系的一类问题的利器。
很多计算机科学专业毕业生和程序员都会去 Uber、今日头条这样的独角兽公司,或者亚马逊、微软和谷歌这样的科技巨头申请编程和软件开发职位。你在申请这些工作时,肯定很想知道面试官会问到哪些问题。 在本文中,作者会分享一些常见的编程面试问题,这些问题来自于针对不同经验层次的程序员的面试——从应届毕业生到具有一两年经验的程序员。 英文版: https://www.java67.com/2018/05/top-75-programming-interview-questions-answers.html
前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。 通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。 通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。
前言: 准备写这篇文章的时候 , 我自认为对MVC已经有深刻理解了,可是画图的时候发现,理解还是有漏洞,于是又阅读,思考,整理,加深了理解, 写了这篇文章, 估计还有漏洞,欢迎讨论。 这再一次说明了写作的好处: 很多时候自以为理解了,实际上脑海中有很多想当然的假设,写作会把这些假设给暴露出来。
Follow:
Cookie | Duration | Description |
---|---|---|
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |