如果别人之后需要查看这些代码,将无法理解为什么要按照当时的方式来完成这个变更。有些缺陷非常微妙,而且很容易重复出现。只看简短的、非描述性的提交消息,不一定有人能知道在什么条件下会出现错误。...而再看看这段信息,阅读它我能知道为什么删除这些警告很安全(说明了当前情况很安全的原因),以及如果我在未来更改这段代码时应该要做些什么。我相信,很多组织也会有人这么做。...如果我们讨论的是一个 bug,我就会知道它出现在哪些系统,发生在什么条件下,为什么没有影响到其他的系统,以及我应该做些什么来避免再次犯同样的错误。...我希望 Linux 社区和朋友们能够理解:显然,这么做并不是不行。但如果这都不算是进入的门槛,我就不知道什么才是了。大家不得不花费时间、精力、脑力和计算机来重组、重写、返工,没有人想做这些事情。...我们是否可以有一个系统,在这个系统中,我们可以在更高的层次上描述我对代码所做的那些更改,并明确这些变更能够应用到其他什么地方?
我同意这一点。在性能瓶颈明显之前,通常不值得花费大量时间对代码进行细枝末节的优化。但是,在设计软件时,应该从一开始就考虑性能问题。...从本质上讲,在确定是否应该优化某些内容时,应该考虑以下几个因素,应该问自己的几个重要问题: 1、为什么要优化?...你认为在这个阶段,这种优化是必要的,这意味着它将对你的工作产生显著的、积极的影响,还是你现在仅仅关注它,因为你试图避免处理其他事情? 2、优化的好处是什么?从优化中你能得到什么?...在关于该主题的原始引用中,说这个概念适用于大约3%的情况,但是有效优化的临界值可能高于或低于这个值。...为了避免过早地优化事情,在开始之前,你应该确保问问自己为什么要优化,这样做的成本和好处是什么,这种优化可能带来的负面后果是什么,等待的优点和缺点是什么,以及你还可以做些什么。
为什么注释代码如此重要 注释是任何程序的一个组成部分,它们可以以注释块的形式或者在代码行中出现,来帮助阐明解释一个复杂的函数。 在深入研究不同类型的注释之前,让我们仔细看看为什么代码注释如此重要。...您当时非常匆忙,没有正确命名变量,甚至没有在适当的控制流中设置函数。最糟糕的是,脚本中没有任何注释来告诉您什么是什么!...那么,我们能做些什么来加快速度呢?这里有一些技巧可以帮助你更快地添加注释。 第一就是使用多个游标,就是通过在屏幕上放置多个光标来完成任务。...左键单击时,只需按住ctrl或cmd键,就会看到屏幕上闪烁的线条: ? 当需要在多个地方对相同的事情进行注释时,这是最有效的。 如果我们有很长一段文字需要注释呢?...用简单的注释解释正在发生的事情,能真正帮助开发人员了解在这个位置上做些什么。 请善待你的同事,用注释来帮助他们浏览你的代码。
在此过程中,我试图说明为什么编写注释对于生成良好的代码是至关重要,从长远来看,这些代码是可维护的,并且在修改和调试期间可由其他人和作者自己理解。...我不同意这个观点有两个主要原因: 1. 许多注释并不是解释代码的作用,而是解释*为什么*代码执行这个操作,或者为什么它正在做一些清晰的事情,但却不是感觉更自然的事情?注释是解释一些你无法理解的东西。...但为什么要强迫阅读者做这样的想象努力呢?因为在编写代码时,原始作者就是这么想象的:在每次调用后想象一下当前堆栈里的情况。...注释分类 我随机阅读Redis源代码时开始分类工作的,这样检查注释在不同的上下文中是否有用,以及为什么在这个上下文中有用。...注释能提供代码片段的作用、确保它是什么,有什么副作用等要点。这通常是一个寻找错误的机会。
而且不管是JAVA SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。让我们来深入看一下Spring到底能帮我们做些什么?...二、当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,而且比如权限控制、性能统计大部分是重复的,这样代码中就存在大量重复代码,即使有人说我把通用部分提取出来...Spring能帮我们做这么多事情,提供这么多功能和与那么多主流技术整合,而且是帮我们做了开发中比较头疼和困难的事情,那可能有人会问,难道只有Spring这一个框架,没有其他选择?...为什么需要Spring及Spring的优点 ●非常轻量级的容器:以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序。...如何学好Spring 要学好Spring,首先要明确Spring是个什么东西,能帮我们做些什么事情,知道了这些然后做个简单的例子,这样就基本知道怎么使用Spring了。
态度1 - 错误是我编写好代码的能力的问题 修复错误是软件开发人员活动的重要组成部分。一个bug显然是开发人员最大的敌人。但有多少开发人员在修复缺陷时会考虑以下几行 我可以做些什么来避免这个错误?...我是怎么让这个虫子逃脱我的眼睛的? 好的,这次发生了一些错误。我下次如何避免同样的错误?我需要采取哪些步骤? 真相很少有开发人员在这些方面思考。...一个优秀的开发人员 或愿意成为优秀开发人员的人 应该总是邀请/挑战测试人员来查找他/她的代码中的错误。他应该对自己的代码充满信心,以至于他可以用这样的方式挑战。...我可以在我的项目中引用一个实例来解释这一点。我带领一个开发团队,我们正在努力在星期五晚上的最后几个小时修理一些东西。我们不得不在周一进行构建。我们所有人都在调查这个问题。...我很好奇,因为我看到了问题,并开始在代码中弄脏手。时间流逝,只有最后5分钟留给每个人的出租车。这是一个成败。如果今天没有解决,我们必须在第二天来。我当时做了一些事情,这绝对激怒了我的所有团队成员。
遇到这个问题,首先要问一句——这个是执行力问题吗?比如你做其他事情的时候,是不是也这样?...早上起床的时候,你把闹钟订到了六点半,然后对自己说“我胖我要多跑步,我丑我要多读书”十遍,然后准备迎接光明的沐浴在晨光中,先运动后读书的早上。...我问他:“你的情绪是什么?” “有点无聊,没有动力。但是必须要做完,又非常焦虑。” “为什么一个东东没有动力,但是又必须要做呢?” 慢慢聊开去,他告诉我们这个项目是他合伙人要求的。...无论怎么样,我都会有成长的。 假如有人会说。我不知道自己到底什么重要? 你可以问自己:下一步我能为让自己知道什么重要做点什么呢? 如此类推。 “下一步,我能为这件事情做些什么?”...“下一步,我能为这件事情做些什么?” “下一步,我能为这件事情做些什么?” 重要的事情重复三遍,这句话一个字都不准变。 下一步——是要看向未来! 我——从自己做起不要考虑别人!
这意味着我会给你一个工具的描述来实现,通常基于一个现有的 Unix 工具,然后扔你实现它,但没有任何参照的代码。你可能需要先研究一小段样本代码,但通常在这些挑战中没有 Python 代码。...每个练习都代表它自己,个人发展部分几乎适用于你所做的任何事情。做你能做的事情,当你需要处理你的工作方式的时候再回来。 如果我发现自己很糟糕,会怎么样?...这是一个非常实际的可能性,但是我的方法可以帮助你了解为什么你是糟糕的,为了解决这个问题需要做些什么。然后这只是一个需要处理的事情,直到你开始变得更好。将你的日记看管好,没有人会知道你是多么糟糕。...然后,当你完成时,你就知道,你到底在什么位置,以及你需要做些什么。不要再怀疑你是一个骗子,或者你不能胜任这个任务。你会客观地认识你的优点和缺点,所以你可以不必担心你在这个世界上的位置。...如果你发现自己对某个特定练习的表现感到沮丧,那么你需要将其拆解,找出可以改进的东西。你还需要站在其他人的角度上看待这个练习,并客观评估你的改进。
早上7点45分来到公司,我坐在办公桌旁边开始考虑今天的工作事项。想到客户一直抱怨的电子表单系统在产品环境上8000多个无法重现的错误日志就亚历山大,“替换成微软类库也并不一定解决问题,客户又在捣乱。...这时我开始乱入,怀着试试看的态度对夏夏说。心想,怎么有些像回到了5年前工作在这个系统上的状态。夏夏改了代码并编译运行,奇怪的事情发生了:Form提交成功,并且错误被修复了!!...问题转移了:“为什么会出现重复提交呢?” 时间一分一分的过去。已经晚上8点多了,我的肚子很饿,胃有些隐隐作疼。办公室里也只有少数一部分人了,沙沙帮我们找来了救命的小浣熊。...我和夏夏在整个的过程中,就像警察找到了失踪的物品和一只替罪羊一样,真正的罪犯并没有被抓到。整个事情并不正常,甚至e.preventDefault的行为都很诡异。...我们还能做些什么来帮助他们解决这些问题?如果让我只选择一个品质来提升我们的专业服务精神,那就是“死磕到底”。 死磕到底 ? 死磕是什么?普通话就是“较劲儿”、“不达目的不罢休”的意思。
另外“求求你提问之前三思,不要浪费我们的时间,不要问那些你自己就能搞清楚的问题”这句话不是我说的,是 Lombok 的作者说的: 他为什么会说出这样的略带一丝丝气愤的话呢? 我带你看看。...这个我用一张图片来解释吧: 可以看到,在项目中我引用了 Lombok,但是它并没有传递依赖进来任何其他的包。不像是 spring-boot-starter 后面跟着一大坨东西。...所以,经过前面的一番解读,现在你再看这个标题: 为什么作者要强调“itself”,因为 Lombok 确实是提供了日志的功能,但是至于引用什么包,哪个版本的包,和 Lombok 都没有任何关系。...这个漏洞只存在于 2.16.0 版本以下的 Log4j code 包中,而不存在于任何其他日志框架中。 Lombok 没有传递依赖任何 Log4j 包,也没有声明对任何东西的依赖。...来,我问你:为什么它能引入 slf4j 相关的包? 因为我依赖了呀: 好,如果这个时候我把 logback 的核心依赖给拿掉,会出现什么事情,你觉得会不会编译不过呢?
毕竟阅读别人的代码并不是一件快乐的事情,我们很难去完成理解代码作者当时的思路和想法,这个过程是很痛苦的。但如果你有目标、有意图地去阅读,就能在一定程度上减少这痛苦。...2.浏览官方文档,对开源项目的功能、架构有大概的印象 好了,有了驱动力,先别急,看看官方文档,看看这个项目能完成什么事情和不能完成什么事情,还有官方对这个项目的定位。...另外,官方文档往往不会对实现细节讲得很细,这时,看前人的分析就很有必要了。这样可以让你对项目的实现有一定地了解,当你自己看时,你能很快懂得作者这样做的意图。...对一个开源项目的疑问一般可以从以下方向提出: 这块功能为什么这么做?有什么好处? 有没有另外一种实现方式? 我缺少哪些知识会阻碍我看源码(需要去补)?...我还得自己去球场一招一式的练习,反复练习,或者我根据我的身体条件,做些简单的变种,直到这招转化为我的肌肉记忆,我才能在比赛中自然而然地使用出来。 所以我提倡再创造。
就现在看,这些也是非常先进的,这样设计出来的数据库,兼容及扩展无疑都是非常容易的事情,所以这也是为什么现在去 Oracle 方案中,达梦可以做到让业务不需要改代码就可以直接迁移到达梦上的缘故。...这里我想引用一下贝壳找房一直说的一句话:做难而正确的事情。 1.什么是难的事情?...那我们到底应该做些什么事情呢?我可以举一些例子: 1....MySQL全日志分析 之前我们也发过文章讲这个事情,我们是通过抓包实现了这样的全日志功能,抓包率可以达到 95% 以上,但我们的目标是要不断达到 100%,为什么呢?...某个 SQL 语句什么时候访问了数据库,每一时刻的访问频率是什么,可以用来定位问题及查故障原因。 可以与慢查询日志做联动,能得到慢查询日志中不存在的信息。 用来做安全审计。
每次代码审查时我都问自己:「他们为什么这样做?「。每当我找不到合适的答案时,我就会去和他们谈谈。 在第一个月后,我开始在同事的代码中找到错误(就像他们对我代码做的一样)。...我开始设计本地开发,学习 DPKG(打包和部署)和试图解决部署机密信息的问题。 谁会想到对产品中的机密信息进行部署会变得如此棘手呢? 你不能将这些信息存到代码中,因为这样任何人都能看得到。...设计时考虑维护需求 设计系统是件令人兴奋的事。维护系统呢?就没那么有趣了。 我在维护过程中遇到了这个问题:系统为什么会降级,以及如何降级?...一段时间后,你会发现你没有足够信息来解决的 bug。这是增强日志记录的好时机——你的代码少了些什么?...这里暗示了另一个需要养成的习惯。当你修复 bug 时,你不仅仅关注如何修复 bug,而是你为什么不早点发现它呢?是否有布置警报?如何能够更好地监控来避免类似的问题? 我还不知道如何监控 UI。
但是这个过程并不简单。 为什么会这么说呢?因为我们要分析的这些数据是历史上前所未有的大数据。大家可能觉得,有大数据可以更好地进行微观的、细节的、更加独立的思考。...为什么会出现这种现象呢?在互联网之前我们都有自己所谓的品位,比如说有自己的专业领域,我们靠自己的专业知识进行判断。而互联网让我们突破自己的专长,接触更多的领域。...大数据并没有让事情变得更加容易操作,或者缩小我们思考的范围。事实上可能是相反的,大数据在这样的背景下,针对这个特定的问题,可能让我们想得有点太大了。它可以让我们更容易跳到错误的判断与结论去。...为什么人类,还有科学会从这样的一个更优的方法当中偏离出去呢?...我们可以看看谷歌的搜索,比如点击“好运气”按钮,或者在百度上也可以搜索,我知道我想要做些什么,然后预测能搜索到什么结果。我们也可以不这么搜索,可以找到更优质的数据模式来改变我们的世界。
我是一个倾向于生活在规则下的人。 现在,这些规则大部分是我本人为自己设立的-但它们依然是规则。 我发现为自己创建规则可以让我过得更好,因为这样做可以提前决定一些事情,而不是要在匆忙中做出所有的决定。...例如,注释能够告诉你在代码中某些奇怪的操作顺序并不是错误的,它是由于底层系统的某一bug而有意为之的。 但通常,注释不仅没有必要,有时它们还会"撒谎"....练习测试驱动开发(Test Driven Development,TDD)在这里会有所帮助,因为你在写出代码前,必须逐字的了解它们会做些什么,但是这依然无法阻止你去做错的事情。...我是说,为了良好的待遇找工作没有任何错误,但是医生或律师可能会是更好的选择。 你之所以成为了一名软件开发人员,是因为你爱写代码。因此,不要忘记你在做你所热爱的事情。...你遵守什么规则? 上面是我遵守的规则,那你呢? 你个人遵守什么规则? 你认为什么是应该天天都记住的?
在流量低的时候没有问题,加大测试流量就会出现内存泄漏。 第三个问题,因为我们对nginx和openssl的关键代码都做了一些改造,希望提升它的性能。那么如何找到性能热点和瓶颈并持续优化呢?...这样的防守式编程并不提倡,指针NULL引用如果不core dump,而是直接返回,那么这个错误很有可能会影响用户的访问,同时这样的BUG还不知道什么时候能暴露。...于是我又继续加个判断并避免NULL指针的引用。悲剧的是,过了几个小时,又CORE在了其他地方,就这样过了几天,我一直在想为什么会出现一些指针为NULL的情况?为什么会CORE在不同地方?...为什么我用浏览器和curl这样的命令工具访问却没有任何问题? 熟悉nginx代码的同学应该很清楚,nginx极少在函数入口及其他地方判断指针是否为NULL值。...总体思路依然是在不明显降低性能的前提下打印尽量详细的调试日志,遗憾的是,上述办法还是不能帮助问题定位,当然了,在不断的日志调试中,对代码和逻辑越来越熟悉。 bug如何重现?
我是一个习惯于多任务处理的人,因为我觉得这样子可以加快步伐,避免单一带来的枯燥。但这本书提到: 多任务处理对生产力会造成重大损失。...一项研究 发现,一般情况下,多任务处理将耗费你百分之二十至四十的生产力。这样,会将你的8小时工作日削减到5个小时。其他的研究表明,这一数字能高达百分之五十,并伴随错误的大量增加。...有了wiki,当你有一个随意的想法后,可以把它写下来放在你的主页上,因为这时你不知道还能对它做些什么。一段时间以后,你有了第二个相关的想法,而现在你可以将这两个想法放在一起,存储在新的一页中。...我们要看看为什么你需要不惜一切代价避免这种切换,以及如何避免分心并较好地管理中断。 情境切换 多任务处理对生产力会造成重大损失。...二十分钟,考虑一下你在一天中可能会遇到多少次打断,如果每次打断都需要二十分钟时间恢复,你一天中的相当一部分时间就都白白浪费了。这就是为什么程序员一般讨厌被中断,特别是被非程序员打断。
旁注:你可能想知道为什么我提到了类方法,但没有提到原型方法。那是因为 JavaScript 没有方法的概念。函数在 JavaScript 中是一流的,它们可以具有属性或是其他对象的属性。...JavaScript 小测验 #3:如何在类中实现私有? 上面的原型和类属性并没有被“封装”为外部不可访问的私有成员。应该怎样解决这个问题呢? 这里没有代码示例。答案是,你做不到。...因此它更安全,通常情况下也更快,并且编写这样的代码更容易。为什么我们又需要类了呢?哦,当然是可重用性。如果我们想要一个unhappy 且 enthusiastic 的 greeting会怎样?...找到好的部分 JavaScript 开发人员经常强调语言的优点。我们选择试图通过坚持编写干净、可读、最小化、可重用的代码来避免其可疑的语言设计和陷阱。...关于 JavaScript 的哪些部分是合理的,我希望已经说服了你,class 不是其中之一。如果做不到这一点,希望你能理解 JavaScript 中的继承可能是混乱且令人困惑的。
这也是为什么有的用户讲我不用你新版本的new feature,为啥也要跟着升级版本的原因之一。 很多人会抱着侥幸心理觉得无所谓,自己不会那么倒霉,但一旦真的不幸遇到就会痛苦不堪。...,可此时不幸的发现追日志的效率异常缓慢,基本相当于延迟多久就追了多久,虽然MOS能查到这个问题,也是一个已知的bug,但更不幸的是,目前在MOS上针对这个bug只有Linux平台的现成补丁,而客户的系统是...为什么呢? 因为这是一个老的数据库版本,已经不在支持周期内,研发不会为此提供新的补丁。...其实这样的策略才是真正的对客户负责,也是很合理的,首先Oracle一直都建议用户要使用当前有效期内的LTS长期支持的版本,这样才能集中更多人来更好的保证你的稳定性,Oracle的LTS其实已经是支持周期非常久的了...如果是用户角度,首先要了解如何正确的使用自己选择的这款产品,最起码要能避免一些低级错误引发的故障;要知道即便是Oracle的用户群中也存在这样一波人,就是喜欢不读文档不看MOS,凭着自己的感觉不按官方建议的各种瞎搞
为什么会被拖垮?没设置超时!我们采用的是同步调用方式,使用了一个线程池,该线程池里最大线程数设置了50,如果所有线程都在忙,多余的请求就放置在队列里中。...从代码角度上讲,一个类只干一件事情,如果你的类干了多个事情,就要考虑将他分开。这样做的好处是非常清晰,以后修改起来非常方便,对其它代码的影响就很小。...b)锁 对于很多服务而言,没有那么多耗费计算资源的算法,但cpu使用率也很高,这个时候需要看看锁的使用情况,我的建议是如无必要,尽量不用显式使用锁。...有些时候直接使用probuf来序列化之后保存,这样也能节省内存空间。...对于很多无状态的服务,通过nginx、zookeeper能轻松实现水平扩展; 对一些job类型的服务,怎么避免单点呢,毕竟只能在一个节点上运行,可以参考《Quartz应用与集群原理分析》一文; 对数据服务来说
领取专属 10元无门槛券
手把手带您无忧上云