在你的职业生涯中你会犯很多错误 – 有的特别、有的普遍 – 通过这些错误你可以学习如何避免在将来再犯同样的错误。 但是如果你是一个初学者,你犯的错误可能会比其他人更频繁。...在开始之前,你可能想知道为什么我知道这些是错误,不是最佳的方法? 有一个简单的回答就是 – 在我的职业生涯中,所有这些情况我都遇到过。有些情况经常遇到,有些只遇到过几次。每次犯错之后,我都后悔莫及。...最坏的情况是我根本你不知道我在做错的东西。一旦我意识到我在做错事,我就开始避免这些失误。至少,我现在写的代码比以前写的要好多了。 现在你们也可以避免这些错误。首先要知道你现在在做的是错误的。...你可以使用这些时间让你的应用在其他方面更加优秀。 如果一个API、框架或者游戏引擎让你的任务更加轻松,你没有理由不适用它们。你的目标不是展示你有多么的优秀,也不是证明你可以独立完成任何任务。...这就是为什么我们的写的代码能正常的工作,但是却不是在所有情况下都能工作。 如果你在工作的时候把它忽略掉,你会在后面花更多的时间。 了解上面这些错误能有助于你避免它们。
当你运行 node index.js 并访问 http://localhost:3000 你会注意到打印的很多信息并不是我们需要的。...我们可以通过访问流程的各个部分并编写一堆 JavaScript 代码来获取上述的信息,但 npm 生态已经给我们提供了各种各样的库来使用,例如: pino winston roarr bunyan 我个人喜欢...$ DEBUG=express:* node index.js 如图: 如果你没有启动调试日志,则不会看到任何这样的日志输出。这是通过一个叫 debug 的包来完成的。...我的理念是将逻辑日志和你的 CLI 输出分开。对于任何逻辑日志来说,你应该使用类似 debug 这样的包。这样你或其他人就可以重写逻辑,而不受 CLI 的约束。...如果是这种情况,我们可以使用类似 boxen的东西来显示所有漂流的输出。但如果不是,则可能会将输出重定向到文件或输出到其他地方。
因为很多时候我们并不需要让程序停下来,而只想知道是否在这段代码运行过,或者说发生问题的位置根本不能停下来,否则就会让整个系统功能出现问题,比如中断处理函数的调试,程序一旦停下了也就失去了所有中断的后续响应...3、在代码中引入调试代码有风险,本来程序运行没有问题的,一旦引入调试代码之后可能就出现了问题,这种情况对于拥有丰富开发经验的人来说应该见怪不怪了。...比如这段代码: 还有后面的打印函数也使用 emOsprey 变量,所以也会导致程序运行停止。可能你会感到奇怪,为什么 emOsprey++这样的操作也会涉及到读取?...如果说你想让断点代码位置运行多次之后才输出一条信息也是可以的,只要设置 Count 即可。 这里可能你会问,这 printf 不就是我们写的打印函数吗?事实上,是,也不是。...发生这种情况是因为μVision 模拟器在应用程序驱动和模拟器内部访问之间没有区别。
错误不是随机的, 在任何给定的程序中,某些错误比其他错误更有容易发生。因此,如果你犯了一次错误,你或其他人将来可能会再犯。没有测试来阻止它们,bug就会再次出现。...即使测试用例很难写,但事实上在这种情况下通常更值得去做的。 为了测试这种情况,一种可能是编写一个仅在32位系统上运行的测试, 并对2 GB的unit8进行二分搜索。...Clean会删除^D及其后面的换行符。在这种情况下,“新”文件最终没有最后的换行符,diff会正确报告该换行符。 因此,尽管txtar非常简单,你也可以轻松地将自己的格式调整分层。...Issue 51989 永远不会再发生,至少不会在实时网站上发生。当然,其他的错误肯定还会出现,但这个错误已经一去不复返了,这就是进步。 这就是我能展示的所有示例,但最后还有一个想法。...如果你是代码的作者,你可能会觉得自己很幸运。如果是别人写的代码,你可能会对他们评价不高,然后也认为他们很幸运。但大多数时候,答案并不是运气。这段代码能够工作的原因几乎总是因为它有一个测试。
很明显可以看出,构建一个框架就需要许多的基础库,甚至一些Java的插件也需要很多大量的附加文件。有时候这些乱七八糟的东西会很让人心烦,但是至少它能运行。...在回顾一些源代码时,我总是尽力想弄明白我的逻辑是怎么回事。我经常会回头更新代码,让逻辑更清晰。 8、我花30分钟写个函数,运行它却要花2个小时 这不是十年前的一个有关编程的故事吗?...但是如果到最后还是浪费了一个小时,那该怎么办?我对这种情况并不陌生,它会让人特别沮丧。 20、哦买糕的,为什么我都没写注释呢 如果涉及到最基本的前端代码HTML/CSS/JS时,并不需要总是写注释。...21、这个20分钟之前还好好的呢 或许构建程序时最让人沮丧的是,明明刚才还好好的东西,没有改过任何代码,这会儿却运行不起来了。...我发誓这种情况绝对有发生,而且它没有任何意义——也许其它程序运行的是缓存版本呢,然后也有一些时候我们只更新了一丁点代码,结果整个程序都崩溃并且完全停止运行。那就回退到最新的备份版本,从那儿继续吧。
很明显可以看出,构建一个框架就需要许多的基础库,甚至一些Java的插件也需要很多大量的附加文件。有时候这些乱七八糟的东西会很让人心烦,但是至少它能运行。...在回顾一些源代码时,我总是尽力想弄明白我的逻辑是怎么回事。我经常会回头更新代码,让逻辑更清晰。 8、我花30分钟写个函数,运行它却要花2个小时 这不是十年前的一个有关编程的故事吗?...但是如果到最后还是浪费了一个小时,那该怎么办?我对这种情况并不陌生,它会让人特别沮丧。 20、哦买糕的,为什么我都没写注释呢 如果涉及到最基本的前端代码HTML/CSS/JS时,并不需要总是写注释。...21、这个20分钟之前还好好的呢 或许构建程序时最让人沮丧的是,明明刚才还好好的东西,没有改过任何代码,这会儿却运行不起来了。...我发誓这种情况绝对有发生,而且它没有任何意义—也许其它程序运行的是缓存版本呢然后也有一些时候我们只更新了一丁点代码,结果整个程序都崩溃并且完全停止运行。那就会回退到最新的备份版本,从那儿继续吧。
5有这个功能的插件吗 何必要多此一举插件是扩展任何程序或者网站用户接口的很好的资源。另外它们还为开发者提供了一些定制以及独特的选项。如果没有可用的插件,那你为什么不自己创建一个呢?...在回顾一些源代码时,我总是尽力想弄明白我的逻辑是怎么回事。我经常会回头更新代码,让逻辑更清晰。 8我花 30 分钟写个函数,运行它却要花 2 个小时 这不是十年前的一个有关编程的故事吗?...但是如果到最后还是浪费了一个小时,那该怎么办?我对这种情况并不陌生,它会让人特别沮丧。...21这个 20 分钟之前还好好的呢 或许构建程序时最让人沮丧的是,明明刚才还好好的东西,没有改过任何代码,这会儿却运行不起来了。...我发誓这种情况绝对有发生,而且它没有任何意义—也许其它程序运行的是缓存版本呢然后也有一些时候我们只更新了一丁点代码,结果整个程序都崩溃并且完全停止运行。那就会回退到最新的备份版本,从那儿继续吧。
它们发生的方式有很多种,因此这里我只想向你强调两种更常见的情况。...不幸的是,很容易得到不再使用的“僵尸”对象,但 GC 仍然认为它们是可访问的。 4 .等号的困惑 JavaScript 的一个便利之处在于,它将自动强制在布尔上下文中引用的任何值转化为布尔值。...没有使用 “严格模式” “严格模式”是一种在运行时自愿对 JavaScript 代码执行更严格的解析和错误处理的方法,也是一种使代码更安全的方法。...在没有严格模式的情况下,将值赋给未声明的变量会自动创建一个具有该名称的全局变量。这是最常见的 JavaScript错 误之一。在严格模式下,尝试这样做会抛出错误。...当严格模式检测到对象中的重复命名属性或函数的重复命名参数(例如,函数foo(val1, val2, val1){})时,会抛出错误,从而捕获代码中几乎可以肯定的错误,否则可能会浪费大量时间来跟踪。
我没有输入任何这些提示或问题。”有推特网友称。这意味着,完全陌生的人可以使用不同的帐户查看别人的历史记录,而无需执行任何不同的操作。...网友“YPPH”表示,“如果有人要求 ChatGPT 生成一些代码,然后不假思索地将其复制并粘贴到他们的项目中,我想知道 OpenAI 会如何看待这种说法:该错误是 ChatGPT 生成的错误代码造成的...“这让我想起了我遇到的第一个 Bug:通过 yahoo messenger 向自己发送一个 标签,你会随机得到一个从其他人和它的目标用户发回给你的消息对话。”...“我有那个错误的变体,它在 0x45 (iirc) 的协议处理程序中允许用户注入格式错误的字符,并且会从消息流中泄漏,发生一次就为其他用户发送一条消息。”...有网友表示,当其使用提示写出一些 React 代码时,已经发生了几次这样的错误。“它一直在提示超时,然后突然间我看到了其他人的提示。它们每次都不一样。”
意思就是:正如保罗·格雷厄姆(Paul Graham)所写的那样,“单次会议可以将整个下午分成两部分,每部分都太小而无法做任何事情。” 如何避免这种情况?这部分记录良好; 你没有任何借口。...开发人员想知道他们是否正在处理正确的任务的时间可以很容易地避免。如果有的话,他们会得到经理的评论,询问他们为什么要处理这个特定的任务(虽然优先事项没有定义)……好吧,你得到它 - 很多挫折…… 4....当管理者完全没有参与工作时,就会发生这种情况,但是……他们偶尔会突然畏缩不前。“这是错的,这个,这看起来很糟糕,”等等,然后又飞走了。...我不得不承认我喜欢这个形象,但不幸的是,这种情况比我们想要的更频繁。这种行为让开发人员感到非常沮丧; 他们将在接下来的几个小时内无法返回该区域,有时甚至连几天都没有。 5....我也不。问题是虽然有很多评论描述了代码正在做什么,但没有一个描述它为什么这样做。如果程序中存在错误并且您偶然发现了这段代码,那么您将不知道从哪里开始。 12.
CORS 是一个浏览器强制策略,其他应用程序不受此影响。 事例讲解 为了缩小代码量,这里演示部分代码,完全的代码在 Github 上可以得到。...,但可以允许其他人从 /public URL 中获取数据。...假设咱们的API位于good.com:300/public上,并且咱们的客户端托管在thirdparty.com上,该客户端可能会运行以下代码: fetch('http://good.com:3000/...同源策略可以防止这种情况的发生。...如果请求不是简单请求,浏览器会先发送一个预请求: 浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。
代码将所有内容抽象到开发者难以想象发生了什么的程度,只是为了向原本非常简单的函数中添加“单元测试”。DHH 称这种为测试引起的设计损坏。 测试只是确保用户的程序正常运行的工具之一。...重构提供了一个工具用另一个测试用例来验证正确性(简单性)。简单性很难保证正确性,但单元测试也不是。理想情况下,我们应该两点都做到。...它可以很好的解决一些问题; 对其他人而言并非如此。特别是,我认为“被迫在小单元编写代码” 在某些情况下会非常有害。有些代码只是一个串行脚本,上面写着“执行此操作,然后执行此操作,然后执行此操作”。...我认为这些 BDD(-ish)测试工具存在实际问题,因为它们混淆了你实际做的事情。无论如何,测试仍然是获取函数的输出并检查它是否符合你的预期。没有任何测试方法会改变这种基本原理。...所以这些都是错误的抽象:它们包装和混淆,而不是分离关注点并缩小范围。 关于开源项目 如果你有兴趣在开源项目中请求其他人来贡献,那么测试可以理解是一个非常重要的问题。
它似乎与赞助没有任何关系”时,他们回答说:“我想不是,但我通常会在其他应用程序中为一个组织收集这些数据,而赞助商就是组织。”...幸运的是,在这段时间内,情况没有太大的改变,但如果发生了改变,你可能只是把工作浪费在了不再合适的活动上。 但是,如果你从流程开始,你就可以让用户进行快速测试。...即使最初的步骤仍然是手动的,这个流程也可以自动化。任务得到分配和监控。通知会发出。步骤不再被遗忘,错误也会越来越少。...虽然你可能只是想浏览一条记录,但通常有一个原因。如果你说你只想知道某人的电话号码,我明白了。...在这种情况下,没有流程可以自动化。它太特殊,太特定于情况了,甚至看不到模式,更不用说尝试建模和重复它们了。
如果可能,应在代码中的较高级别上进行异常处理,在这种情况下,异常处理可能不会那么频繁发生,或者可以通过首先检查是否允许所需的操作来避免。...上面的这段代码语义上跟 trycatch 其实是相似的,但运行效率迅速下降至 0.04ms,所以 trycatch 应该通过检查属性或使用其他适当的单元测试来完全避免使用此构造,因为这些构造会极大地影响性能...事实上 plus1 和 plus2 函数的代码逻辑是一致的,只有代码语义是不相同,一个是返回 1,另一个是错误抛出 1,一个求和方法在 try 片段完成,另一个求和方法再 catch 完成,我们可以粘贴这段代码在浏览器分别去掉不同的注释观察结果...上面这类代码我个人更建议写成如下形式,如果你实际上抛出并捕获了一个异常,它可能会变慢,但是由于在大多数情况下上面的代码是没有异常的,因此整体结果会比异常更快。...因为 JavaScript 是事件驱动的,虽然一个错误不会停止整个脚本,但如果发生任何错误,它都会出错,捕获和处理该错误几乎没有任何好处,代码主要部分中的 trycatch 代码块是无法捕获事件回调中发生的错误
有人可能在没经过仔细考虑的情况下,给出以下的答案 ? 很遗憾,这是错误的。重要的事注释三遍!!! 那么为什么错误,原因是什么?...看我上面的那个例子的swap1,是不是顿时觉得与上面的面试题的错误做法非常相似了,是的,错误的原因是一模一样的,就是稍微有一点区别,就是Integer不是new出来的,而是自动装箱的一个对象,那么什么是自动装箱呢...没错,也是new出来一个对象,如果想知道上面的代码做了什么处理,可以参考 Long==Long有趣的现象 这篇文章,里面有介绍类似的 好了,有人可能会问,为什么会知道自动装箱调用的是valueOf方法...这是Integer的构造函数,可以看到Integer对象实际值是用value属性来存储的,但是这个value是被final修饰的,没办法继续找,value没有提供任何的set方法。...,所以,为了避免这种情况,就只能不需要调用缓存值,直接new Integer就可以跳过缓存,所以代码改成如下即可 ?
下面是我对编码的看法: 如果代码量很小,例如是程序的一部分,可能是一个 RESTFul API,或者一种小算法,这时候可能要考虑使用的数据结构是什么,这种情况下应该是直接上手就写了,没有什么提前的推演和规划...要尽可能多地考虑边缘情况,并针对它们一一处理和测试,确保处理所有可能发生的错误和已经发现的边缘情况。...比单元测试更好的方法是,对于任何代码更改,通过分析当前函数的所有消费代码,分析它们触发的所有副作用,以及所有可能影响到的边缘情况,然后测试所有代码。...另一个项目运行了大约 5 年,没有出现一个问题,直到服务器退役后我得到了一个 ping,发现它仍然被大约数百名未迁移到新系统的用户使用。...我大约每 5-10 行代码就会产生 1 个错误,这很正常,有错误绝不是不足。我喜欢通过处理边缘情况来规避大部分错误,但我不知道我没有捕捉到全部。庆幸你发现的每个错误吧,这些错误可以避免成为生产问题。
如果可能,应在代码中的较高级别上进行异常处理,在这种情况下,异常处理可能不会那么频繁发生,或者可以通过首先检查是否允许所需的操作来避免。...由于上面的代码是从项目中改造出来演示的,可能并不够直观,所以我重新写了另外一个相似的例子,代码如下,这里面的逻辑和上面的 getRowDataItemNumberFormat 函数讲道理是一致的,但是我让其发生错误的时候进入...事实上 plus1 和 plus2 函数的代码逻辑是一致的,只有代码语义是不相同,一个是返回 1,另一个是错误抛出1,一个求和方法在 try 片段完成,另一个求和方法再 catch 完成,我们可以粘贴这段代码在浏览器分别去掉不同的注释观察结果...error) { // todo } 上面这类代码我个人更建议写成如下形式,如果你实际上抛出并捕获了一个异常,它可能会变慢,但是由于在大多数情况下上面的代码是没有异常的,因此整体结果会比异常更快...因为 JavaScript 是事件驱动的,虽然一个错误不会停止整个脚本,但如果发生任何错误,它都会出错,捕获和处理该错误几乎没有任何好处,代码主要部分中的 try catch 代码块是无法捕获事件回调中发生的错误
在此文件夹中创建index.js并将代码粘贴到其中。 错误来源 Express应用程序中可能会发生两种基本错误。 一种错误是对没有定义路由处理程序的路径发出请求。...… 错误的另一个来源是当路由处理程序或代码中的其他任何地方出现问题时。...Express创建了一个可以称为路由表的地方,它将路由按照代码中定义的顺序放置。当请求进入Web服务器时,URI通过路由表运行,并且使用表中的第一个匹配项-即使存在多个匹配项。...定义错误处理中间件 错误处理中间件函数的声明方式与其他中间件函数相同,只是它们具有四个参数而不是三个参数。...500表示如果错误对象没有status属性,我们将500用作状态代码。
没有共享代码中引用的数据 数据科学需要代码和数据。所以为了让其他人能够复现自己做出来的结果,你需要提供代码中涉及的数据。这看起来很简单,但许多人会忘记共享代码中需要的数据。...将数据和代码混在一起 既然数据科学代码需要数据,为什么不将代码和数据存储在同一个目录中呢?但你运行代码时,这个目录中还会存储图像、报告以及其他垃圾文件。乱成一团!...可以用 d6tflow 或者 airflow。 写 for 循环 和函数一样,for 循环也是你在学代码时最先学的。这种语句易于理解,但运行很慢且过于冗长,这种情况通常表示你不知道用什么替代向量化。...没有注释代码 我明白你急着做分析。于是你把代码拼凑起来得到结果,把结果交给你的客户或者老板。一周之后他们找到你,问你「你能改掉 xyz 吗?」或「你能更新一下结果吗?」。...然后你和自己的代码大眼瞪小眼,既不记得你为什么要这么做,也不记得你做过什么。现在想象一下其他人运行这段代码时的心情。
领取专属 10元无门槛券
手把手带您无忧上云