首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何处理偶现的 Bug

尽管在8个小时后你会开始怀疑,偶现的 bug 必须像其他事情一样遵循相同的逻辑规律。但困难的是它只发生在一些未知的情形。尝试着去记录这个 bug 出现时的情景,这样你可以去推测到底是什么样的可变性。...系统可能运行了很长一段时间,经常结束在我开始任何一个任务的时候,在任何能被注意到的事情出错之前。我很遗憾地承认在我理解我的错误之前,我甚至开始怀疑硬件了。...每一次跳转会产生明显的卡顿然后停止做任何有用的事情,直到几个小时后,我们的日志才让我们了解到底发生了什么。因为我们有四个线程,在一个线程内部发生这种情况并不是什么大问题,除非所有的四个线程都阻塞了。...尽管我们有源代码,我们没有仔细研究它,直到查看我们服务器的日志的时候,我们最终意识到是“法国脱衣舞者”使邮件线程阻塞了。 这个工具在大多数时候工作得很好,除了处理一些长而不常见的文本时。...如果他们从来都不会出现,我们永远都不会发现这个问题。当它发生时,我们花了几个星期去最终理解并且解决了这个问题。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP中的防御性编程

    突然我们有了泄露错误或者有时候是静默的错误状态,因为我 们没有使用catch。使用else代码块。在使用switch时要使用default。...你觉得与你的音乐(或没有)独立于自己的小世界中,并且你就在编码,突然两小时过了,你意识到你已经写了无数行没有注释的代码。...在PHP中,有标准规范你的代码格式以便别人查看,或者你以 后使用。但常常没人让你的代码标准化。但是无论你是否按照标准编码,你至少要保持一致性 – 这能让你少犯错误。...尽量使用正确的用户错误信息,警告,日志或者任何其它你假设不会用到的代码。你的假设通常是正确的 – 但我们不在乎。我们在乎 的是它们出错的时候。...一定要计划得好,准备着你可能需要在几小时,几周,几个月甚至几年后回顾你的代码,或者其他人需要 – 相应的就要好好写文档。别假 设它永远不需要升级,扩展或者维护。那是无知的,在更多的情况下是疏忽。

    75360

    应用上云2小时烧掉近50万,创始人:差点破产,简直噩梦

    在几个小时内使用Firebase探索和内部测试Cloud Run时,我们烧掉了$ 72,000。...5分钟后,账单显示15,000美元,在20分钟内显示为25,000美元。我不确定它会在哪里停止。也许它不会停止? 两个小时后,它的价格略低于$ 72,000。...我们确实犯了错误,但是Google之前甚至没有付款就让我们花了7.2万美元就没有意义了。 ?...Google小组将在2天后恢复工作。 编辑:一些读者建议我在Google使用我的内部联系人。事实是,我没有与任何人保持联系,并且我使用了任何普通开发人员/公司都会采用的方法。...发生此事件后,我们花了几个月的时间来了解云和我们的架构。几周后,我的理解有了很大的提高,以至于我估计了使用带有改进算法的Cloud Run刮取“整个Web”的成本。

    42.8K10

    记录一次个人站点被DDoS攻击的经历

    更新记录:更新第四次袭击,也是规模最大的一次,总计5000万访问量 大致情况 今天早上八点,我的服务器遭受了高频率DDoS,服务器被迫进入黑洞状态,不对任何请求做出回应,包括我,九点半解封后,五分钟之内...执行这些攻击的罪犯会用错误的流量攻占网站,导致网站功能不佳或完全离线。这些类型的攻击数量在不断增加。 DDoS 攻击范围广泛,攻击目标涵盖全球各种行业和各种规模的公司。...再次高频率攻击 等到了一个小时之后,我欢天喜地的打开博客,准备哭诉一下今天的内容,但是我还没有打开,收到了第二条黑洞信息和清洗信息,连带着的,还有CDN流量用尽的信息: 在我的无畏云账户中有着90GB的流量...并且前面几个IP的访问量可以赶得上后面的所有加起来了: 其中有中国的IP,证明可能有像我这样的个人站长的服务器已经沦陷为肉鸡了,我为他们感到悲哀。...最后祝大家永远安好,永远不会受到无端的攻击。 — 柳影曳曳,清酒孤灯,扬笔撒墨,心境如霜

    29910

    十年程序员的告诫:千万不要重写代码!

    经过几十个小时的不眠不休后,第一个版本的软件说明书终于发布到了网站上,这标志着我们的新旅程的开始。 我在一家为企业和终端用户提供安全软件的小型网络安全公司工作。...一年没有任何更新… 真的,这不是玩笑。真的一年没有更新了! “为什么没有更新?“ “自上次更新到现在已经有好几个月过去了。” 每天,我们都得面对这些来自用户的负面评论。...尽管我们的产品依然足够优秀,但是没有更新用户肯定会抱怨。当程序员重写代码时,永远不要停止维护当前正在使用的系统。在重写过程中,旧的代码仍然需要维护,小的更新和错误修复需要及时提供给用户。...即使是很小的变化也需要几个星期,有时甚至几个月。我想表达的关键点是保持一直更新,永远不要停止。 版本迁移/更换要循序渐进。 当您确认新版本已经准备好,开始用新版本替换旧版本时。要一步一步,循序渐进。...有足够的资源可以同时维护现有系统和设计新系统: 重写代码的时候,永远不要停止维护当前正在使用的系统。只要系统在使用中,必须始终对其提供维护。

    69620

    AI正在培养一代文盲程序员

    面对那些刺眼的红色错误提示,我讨厌这种感觉。AWS的错误信息赫然在目——没有AI的帮助,我甚至不想尝试自己解决这个问题。在编程12年后,我竟然对自己的专业能力感到陌生。...最初,我停止阅读文档——既然AI能瞬间解释一切。接着,我的调试能力也下降了。现在的堆栈跟踪信息对我来说如同天书,遇到错误信息时,我不再尝试理解,而是直接复制粘贴。...过去每个错误信息都曾教会我东西,而现在解决方案像魔术般出现,而我却一无所获。即时答案带来的多巴胺快感取代了对真正理解的满足感。 深度理解的消亡 还记得那些花费数小时理解解决方案原理的日子吗?...令人不安的真相 我们并没有借助AI成为10倍高效的开发者,而是变成了10倍依赖AI的程序员。每次让AI替我们解决本可以自行思考的问题,都是在用短期生产力换取长期能力的丧失。...他们将永远不会知道独立解决问题的成就感,永远不会经历与bug搏斗数小时的顿悟时刻。我们正在培养这样一代开发者:他们能向AI提出正确问题,却无法真正理解答案。当AI宕机时,他们的无助将被暴露无遗。

    8910

    探索JAVA并发 - 如何优雅地取消线程任务

    缺点:调用取消的方法后线程并不能保证很快就退出,这取决于一个循环的执行速度,更可怕的是,如果里面有个阻塞操作,它可能永远无法退出。 解决:对于阻塞操作设置超时等待,防止永远阻塞。...中断 线程中断是一种协作机制,通过这个机制通知某个线程,让它可以在合适的或可能的情况下停止任务。那么什么是合适/可能的情况呢?...,只是传递一个“可以停止”的信息给它。...InterruptedException; } 因此我们可以在程序中适当使用“取消点”方法,并对中断异常进行处理,回到上面的代码,线程每次输出一句话后都会sleep一秒,针对sleep方法抛出的异常,线程补捕获到后并没有做任何处理...搬砖五分钟,划水两小时 搬砖五分钟,划水两小时 老板让我提前下班咯 溜了溜了 */ 使用了中断,我们的程序似乎提升了些许逼格,但阻塞操作带来的问题依然没有解决。

    3.2K30

    AB测试执行时间多长效果最好

    即使在执行了这一测试的人群中,74%的人所花的时间还不到一个小时。 ? 他们错误地认为改变只会提供微不足道的结果,只因为他们没有衡量正确开始所需要的事项。...需要再次强调:即使达到你认为具有足够统计意义的水平,也不能放弃;在达到95%之前永远不要停止,最终目标是99%统计显著性。 其他任何东西都只是不靠谱的猜测。...又或者,如果我抽出三个都是山豆果味的,没有一个是甘草,就可能错误地认为永远不会从袋子中取出甘草味的。 这是两个不同的假设,都是错误的,因为测试的样本量太小,无法得出合理的结论。...乍一看,似乎没有任何不妥。 但没有得到想要的反馈,而且转化率低于为12%。 现在将其与修改后的设计进行比较: ? 通过采用新的页面布局,他们的转化率达到了79.3%。 惊讶吧,这是如何做到的?...公司通常只会在经过一些看似浪费时间的错误测试后决定走这条路。 不要让你也成为这样的。不要因为组织中的一些反对者,错失可靠的A / B测试带来的转化率提升和有效数据。

    1.5K30

    学习一项技能要花多少时间?

    如果平均每天有效利用时间是3小时,至今已经接近了5000小时的量,按照10000小时到专家的理论,我还有另一个4年半要学习,我感觉这个估算还是比较准确的。...我当然不是只学习一个工具,同时也学习前端、UI 设计、运维……但不会前3年学开发,后3年学设计分得这么清楚。有时我又会看看跟已有知识完全重合的工具,比如 Python 和 Nodejs,以免错过什么。...我经常犯低级错误,例如花一个下午发现一个拼写错误引起的 bug,或者花一两天时间搞明白一个问题,兴奋过后又沮丧,为什么花了这么多时间在这些浅显的问题上。...随着知识面的增大,接触到的新知识也会随之增多,你会感觉自己永远学不完。 但随着知识积累的增多,吸收知识的速度也会加快,你会逐渐成为“花一个下午看文档了解基本用法”俱乐部的一员。...没有人告诉你要走什么路线,什么时候前进,什么时候停止,一切都取决于你自己,志向决定高度。但也正是这么多的未知和可能性,产生了这么多的乐趣。

    19710

    【年度系列】经过多年交易之后你应该学到的东西(深度分享)

    我犯了任何可能的错误,但不知怎的,我活了下来并且学到了很多东西。 在软件工程行业工作了4年后,我意识到我的职业道路很顺畅。 我很擅长处理与数据科学相关的项目。...市场 Roller Coaster 6个月的盈利固然不错,但你可能比前几个月损失更多。有时候市场就像鳄鱼一样残酷而快速。我犯的最大的错误之一就是过度下注。...永远不要光看你的亏损头寸,市场总是可以反弹的,即使它离到期还有一天。 掌握艺术 交易绝对是艺术而非科学。你可能马上就开始学习一种新乐器,大概过了几个星期,可以演奏一些简单的乐谱。...我读了几十本书,读了数百篇文章,看了数百小时的视频相关内容。学习永远不会停止。你的交易策略必须不断地改进,否则你的优势就会消失。最好的内容可以在线获取,而且主要是免费的。...永远不要重复你的错误 每次交易前记得检查自己。我曾多次犯过交易错误,并一次又一次地犯同样的错误。 记住,交易需要数年时间才能掌握,这是一个艰难的过程。学习永远不会停止。市场是动态的。

    65841

    通过案例带你轻松玩转JMeter连载(11)

    图61 线程组 取样器错误后要执行的动作。 Ø 继续:忽略错误,继续执行。 Ø 启动下一进程循环:忽略错误,线程当前循环终止,执行下一个循环。...Ø 停止线程:当前线程停止执行,但是不影响其他线程正常执行。 Ø 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止。...每个线程将在前一个线程启动后5/10=0.5秒后启动。 循环次数:该项设置线程组在结束前每个线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次。...性能测试线程数按照需求进行设置,循环次数设置为“永远”。 Same User on each iteration。每次迭代都有相同的用户。 延迟创建时间知道需要。...比如负载测试控制在10分钟,强度测试控制在30分钟,而疲劳性测试控制在48小时。当线程运行了规定的时长,将自动停止测试,然后生成测试报告。 Ø 持续时间(秒):控制测试执行的持续时间,以秒为单位。

    66730

    Java 异常处理的 20 个最佳实践,你知道几个?

    异常处理最佳实践 不要忽略捕捉的异常 catch (NoSuchMethodException e) { return null; } 虽然捕捉了异常但是却没有做任何处理,除非你确信这个异常可以忽略...如果你的代码只是捕获异常(或 Throwable),永远不会知道这个变化,以及你的代码现在是错误的,并且可能会在运行时的任何时候中断。...还抛出异常,那么exceptionOne将永远丢失 } 只要 cleanUp() 永远不会抛出任何异常,上面的代码没有问题,但是如果 someMethod() 抛出一个异常,并且在 finally 块中...不要使用 printStackTrace() 语句或类似的方法 完成代码后,切勿忽略 printStackTrace(),最终别人可能会得到这些堆栈,并且对于如何处理它完全没有任何方法,因为它不会附加任何上下文信息...而且你会让异常堆栈跟踪上升好几个级别,直到达到足够的抽象级别才能处理问题。 在异常处理后清理资源 如果你正在使用数据库连接或网络连接等资源,请确保清除它们。

    82620

    深度学习崛起那年,百度差点签下Hinton

    拍卖规则很简单:在每轮出价之后,四家公司都有一个小时的时间将出价提高至少 100 万美元。一小时后,如果没有人给出更好的价格,竞拍就结束了。 第一个出局的是 DeepMind。...半小时后,微软再次退出,只剩下百度和谷歌两家公司。 在新一轮的出价中,DNNresearch 身价涨到了 2400 万美元。百度总部的高管开始亲自参与竞标。...大约一个小时后,他又发了一封宣告拍卖结束的邮件。Hinton 决定把他的公司卖给谷歌,而不是继续抬高价格。在给百度的电子邮件中,他说公司发送的任何其他信息都会转发给他的新雇主,但他没有说雇主是谁。...竞拍结束后,余凯登上了回北京的航班,同在这一航班上的还有华人学者邓力。邓力也参加了 Hinton 的拍卖,代表的是微软。两人花了几个小时的时间讨论深度学习的崛起。...「我签了合同,永远不会透露我们和谁谈过。我和微软签了一个,和百度签了一个,和谷歌签了一个。」他没有提及 DeepMind,这意味着一些拍卖参与者直到现在才拿到当年竞争对手的完整名单。

    50320

    阻止 API 被他人采用的4个技巧

    这样的循环已经持续几个月,这就像一场梦,日复一日,迟迟没有苏醒的一刻。我要处理的任务很简单:获取数据,保存数据,完事。但面对这个 API,我被一堆脆弱的代码团团围住,追逐着那些我永远都抓不到的错误。...你请求服务器提供一些数据,然后在从现在到宇宙终结之前(或永远不会)的某个时间点上,我们会做出回应。响应一般需要几毫秒,但有时需要几分钟,在极少数情况下需要几个小时。...不过当然 JSON 没有按照你预期的方式格式化,所以请重来一遍吧。 2禁止重复数据 这招可是很不错的。不管你请求任何数据,你都只能请求恰好一次。...不是一分钟一次,也不是一小时或一天一次——是这辈子都只能请求那么一次。这实际上意味着任何单元测试都是不可重复的,想要重来一次?请手动注册新帐户并在里面人工填好数据。...当然没有缓解措施,你什么都做不了。这些数据是不可恢复的——永远别指望它能恢复了。 我可以用一整天谈论这个技巧的强大力量。

    42630

    深度学习500问——Chapter13:优化算法(3)

    (2)提前停止训练:提前停止是指模型在验证集上取得不错的性能时停止训练。这种方式本质和正则化是一个道理,能减少方差的同时增加偏差。目的为了平衡训练集和未知数据之间在模型的表现差异。...这在数据量较小时,很容易造成过拟合而导致出现我们对数据产生一些误导性的判断,此外也增加了额外训练构建时间。所以使用更小更简单的模型以及损失函数来试探数据是相比更明智的选择。 4、总比瞎猜强。...一旦确定了一个初始模型时,无论你对该模型多熟悉,当其面对一批新数据时,你永远需要重新去认识这个模型,因为你永远不确定模型内部到底发生了什么。...无论使用任何一种模型,我们都不会把它当作黑盒去看待。 13.19 如何通过模型重新观察数据 对于这个问题,与其说如何做,倒不如说这个问题是用来强调这样做的重要性。...13.20.2 举例常见几个数据不匹配的场景 例如设计款识别物体的app时,实际场景的图片均来自于手机拍摄,而训练集确是来自于网上各类抓取下来的图 片。

    11210

    安全资讯|证书颁发机构Let’s Encrypt将要撤销超过300万个TLS证书

    Let's Encrypt的证书颁发机构(CA)软件中的一个错误,称为Boulder,导致对某些证书的正确验证。 该Bug影响了Boulder实施CAA(证书颁发机构授权)规范的方式。...在为某个域颁发证书之前,每个证书颁发机构最多必须在8小时内检查证书颁发机构的记录,但是该错误导致多域证书上的域被检查多次,而不是证书上的所有域被同时检查。...这种行为导致颁发证书时没有为某些域提供适当的CAA列表。 Let’s Encrypt发现一个漏洞在我们的CAA代码。我们的CA软件Boulder在验证用户对域名的控制的同时,检查CAA记录。...具体来说,我们必须在发布前8小时内检查CAA(根据BRs 3.2.2.8),因此任何在8小时前验证过的域名都需要重新检查。请阅读Let s Encrypt发布的公告。...该组织在2020-02-29 03:08 UTC确认了这个bug,两分钟后停止了发布。在几个小时内(世界标准时间5点22分),它修复了问题并重新启用了发行。

    41310

    程序员那些悲催的事儿——从错误中学习进步

    ,希望大家在笑过之后能从中学到什么——所有的经验都是从错误中来的。...有一次,我需要向新系统中导入一堆数据,因为数据量太大,需要5个小时,只能在夜里来干,在系统需要正式使用前2个小时,数据导完了,此时是凌晨4点。...对于一些关键东西,永远不要做假设。小心你言语中的——“可能、应该、觉得、不应该”等词语,程序可不认这些东西。 我远程登录到服务器上加几个防火墙规则。...第一件我想干的事是在不允许任何人的任何连接,第二件是,为某个端口打开访问权限。...但我想告诉你,一个程序在生产环境里运行好几个年能没有问题是一件很不容易的事,那怕其中的代码再烂,你再看不过去,你都要有一个清醒的头脑明白这几点。

    783100
    领券