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

朋友的惨痛亲历:一行代码,百万人民币打水漂

01 一次寻常的发布 如往常一样,又来到了一个发布窗口,这次发生变更的迭代很简单,是支持全链路测的一个功能上线。...我们团队负责的是一个底层核心系统,链路上会有上百个应用依赖,为了应对大促这种超高流量的场景,大促前有一轮又一轮的测。在首轮测时,便发现我们的系统上有个数据库表不支持测,导致测计划无法进行。...因此团队有位同事 A 就起了紧急迭代,针对业务依赖的这个数据库表测改造,代码变更也就几行。 与此同时,同事 B 在这个系统上也想改下代码,就搭了测改造的车,两块变更一起发布。...这行代码被同事 B 改成了 「return null」,老逻辑是有具体数据的时候会返回实体信息,没有才返回 null。...「敬畏代码」不再是耳边的教导,而是要落实到工程实践中。对待代码的盲目自信,也渐渐转变成只相信测试结果。代码是人敲出来的,人会犯错,但机器不会。

33730

Python计算IV值的示例讲解

无序集合并且具有 key-value 对:dict 迭代一个动词,指的是一种操作,在Python中,就是 for 循环。...可见,索引迭代不是真的按索引访问,而是由 enumerate() 函数自动每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。...如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。...迭代dict的key和value 我们了解了如何迭代 dict 的key和value,那么,在一个 for 循环中,能否同时迭代 key和value?答案是肯定的。...写列表生成式时,要生成的元素 x * x 放到前面,后面跟 for 循环,就可以list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

2.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

超全 | 只有高手才知道的C语言高效编程与代码优化方法(二)

二分中断 使用二分方式中断代码不是让代码堆成一列,不要像下面这样: if(a==1) { } else if(a==2) { } else if(a==3) { } else if(a==4) {...合并循环 如果一个循环能解决问题坚决不用二个。但如果你需要在循环中很多工作,那么你并不适合处理器的指令缓存。 这种情况下,两个分开的循环可能会比单个循环执行的更快。...如果循环迭代次数只有几次,那么可以完全展开循环,以便消除坏带来的负担,这会带来很大的不同。 循环展开可以带非常可观的节省性能,原因是代码不用每次循环需要检查和增加i的值。...在这个例子中,循环条件每8次迭代才会被检查,不是每次都进行检查。由于不知道迭代的次数,一般不会被展开。 因此,尽可能的展开循环可以让我们获得更好的执行速度。...如果你能缓存经常用的数据不是重新计算,这便能更快的访问。 比如sine和cosine查找表,或者伪随机数。 尽量不在循环中使用++和–。

3.6K20

你不知道的 Event Loop

本文由图雀社区认证作者 Horace 写作而成 笔者最近忙着项目之类的,文章输出遗落下了一段时间,这次我们就来聊一个面试中一个比较重要的知识点 —— Event Loop 可能有人会奇怪一个 EventLoop...作为一个程序员,了解程序的运行机制是很重要的,这样可以帮助你去输出更优质的代码。 前端是一个范围很广的领域,技术一直在更新迭代,掌握了底层的原理可以应对新的技术。...任务队列中的都是已经完成的异步操作,不是说注册一个异步任务就会被放在这个任务队列中。 说到这里,Event Loop 也可以理解为:不断地从任务队列中取出任务执行的一个过程。...可是再多运行几次,你就会看到如下的结果: ?...setImmediate') }) 让 setImmediate 先执行 setImmediate 是在 check 阶段执行,相对于 setTimeout 来说是在 timers 阶段之后,只需要想办法程序的运行环境控制在

82911

算法之递归

递推时将函数入栈中,而回溯是将栈里的元素弹出。一个函数在执行时,会把这个函数送进执行栈中,当函数执行完毕后,会把该函数从栈内移出。 ?...案例 递归在算法中应用十分广泛,相较于循环迭代,递归显得更加优雅直观,代码易读性好一些。但是使用递归并不一定比迭代运行速度快,递归需要先递推后回溯,迭代没有那么多的过程。...另一种办法是使用爬楼梯当中使用数组方式来解决问题。...,用来缓存结果,然后内部重新写一个递归函数,调用时首先判断缓存数组中有没有数据,有的话就直接返回,没有就存值,最后返回结果。...可以发现,尾递归会先执行运算,然后执行调用,第二个参数 r 相当于缓存,计算,一个参数 n,更像是循环中的循环次数,每次减一。

71210

异步,同步,阻塞,非阻塞程序的实现

如果是同步,线程会等待接受函数的返回值(或者轮函数结果,直到查出的返回状态和返回值)。如果是异步,线程不需要做任何处理,在函数执行完毕后会推送通知或者调用回调函数。...此时,函数一般会立即返回状态,不是等待求值。以免阻塞住线程。 他们没有关系 异步同步和阻塞非阻塞没有什么本质关联。一个讲的是消息方式,一个讲的是线程状态。...线程在同步调用下,也能非阻塞(同步轮非阻塞函数的状态),在异步下,也能阻塞(调用一个阻塞函数,然后在函数中调用回调,虽然没有什么意义)。 下面,我会慢慢实现一个异步非阻塞的sleep。...当前任务移除任务队列。 上面的代码中,在一个while循环中timer的状态。由于timer存在于wait中。所以需要把timer“提取”出来。...timer 从生存器gen yield返回出来 2. 轮timer的状态(实质是切换进出timer,看它有没有引发StopIteration异常) 3.

7.5K10

C语言代码优化的一些经验及小技巧(三)

如果循环迭代次数只有几次,那么可以完全展开循环,以便消除坏带来的负担。...这样的好处就是当你漏敲了一个=号时,编译器会指出你的这个错误。 尽早退出循环 通常,循环并不需要全部都执行。例如,如果我们在从数组中查找一个特殊的值,一经找到,我们应该尽可能早的断开循环。...存在两种增加一个变量值的方法有何意义呢?K&R C设计者认为复合赋值符可以让程序员代码写得更清楚些。另外,编译器可以产生更为紧凑的代码。...在第一种形式种,由于编译器无从知道f函数是否具有副作用,所以必须两次计算数组a的下标表达式的值。而在第二种形式中,下标表达式只需计算一次,所以第二种形式效率更高。...并且,从书写的角度看,第一种形式的下标表达式需要书写两次,第二种形式只需书写一次。 尽量使循环体内的工作量达到最小化 循环中,随着循环次数的增加,会加大对系统资源的消耗。

2.2K21

一日一技:炸掉你的内存—— itertools.tee 的缺陷

但这样,就背离了使用生成器节省内存的目的。所有的数据,全都在列表里面,如果数据量非常非常多,那么内存可能就会爆炸。 所以我们需要一边迭代生成器,一边消费数据。...现在, split是一个会返回两个生成器的函数。首先创建两个列表value_list_1和value_list_2,然后定义一个闭包生成器函数wrap。接收一个参数queue。这个参数是一个列表。...但大家有没有发现,此时,另外一个列表的数据,是留在列表里面的,没有被消费。...但是在实际项目中,很难这样写,所以你可能会想,是不是可以分裂后的多个生成器,放进多个线程里面同步运行。这样虽然列表里面的数据会超过1条,但也不会堆积太多。...并且源代码中队列是使用dequeue不是列表。因为dequeue是基于双向链表实现的,在两头增加删除数据,时间复杂度都是 O(1),但是从列表的头部删除数据,时间复杂度为 O(n)。

1.8K20

python-切片&迭代

python-切片&迭代一个list的部分元素是非常常见的操作。比如,一个list如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素,应该怎么?...使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。...可见,索引迭代不是真的按索引访问,而是由 enumerate() 函数自动每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。...迭代dict的value dict对象本身就是可迭代对象,用 for 循环直接迭代 dict,可以每次拿到dict的一个key。 如果我们希望迭代 dict 对象的value,应该怎么?...,dict等,任何可迭代对象都可以作用于for循环,内部如何迭代我们通常并不用关心。

75340

高级性能测试工程师面试必问十大问题

昨天一个前同事找我,问有没有性能测试岗位的面试题,正好之前帮业务团队加面过几次性能测试岗位的候选人,我将面试时候会问的一些问题以及要考察的点列了出来,供大家参考。...针对这个项目我梳理了核心应用和接口有XXX个,对应的场景有XXX,我的测策略是XXX。...考察点: 对业务迭代是否足够了解; 对项目质量控和评估分析的能力; 参考答案: 这个问题要根据项目类型和具体情况来分析,以我公司为例,日常的迭代频次是XXX,一般我在XXX阶段介入性能测试,原因为XXX...,这样的好处是XXX; 如果是独立项目或者倒排期项目,那我认为应该在XXX阶段介入,这样的原因为XXX,好处为XXX; 还有针对性能测试体系建设不太好的团队,我建议先从XXX做起,然后XXX,尽可能保证质量和投入成本平衡...XXX类型的问题分析和排查; 6、了解过全链路测吗?

32530

数据结构(9)-- 哈希表 unordered_map

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)直接进行访问的数据结构。也就是说,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。...那还有没有更好一点的办法呢?...那么,有没有办法在得到O(1)的查找效率的同时、又不付出太大的空间代价呢? 有,就是本篇讲的哈希表了。 很简单,我们你的车牌号看作一个8位36进制的数字;为了方便,我们可以转换成十进制。...那么,你的车牌号就是一个不大于2821109907456的数字。现在,我们你的车牌号除以一万,只取余数——你看,你的车牌号是不是就和0~10000之间的数字对应起来了?...没错,hash可能会把不同的数据映射到同一个点上,术语称其为“碰撞”。 1、实在没办法,就在你的车上方再搭建一个车位,然后你朋友的车放上去吧。 这就是开链法。

96211

时间管理,这篇文章就够了!

第二个误区是程序员可能由于很多人有代码洁癖的原因,一直追求完美,实际上面对问题,我们只需要追求迭代升级,不要追求一次完美。追求完美在时间上很容易造成拖延,你需要的是迅速开始取得正反馈,不是完美。...“半小时”等价于“一枚金币”,于是全天我们拥有34枚金币。 钱花出去了我们会记账,时间通过这种量化的方式记录我们的消耗,为什么是半小时呢? 因为半小时是人集中精力一件事进入沉浸感的时间。...有没有给家里打电话,有对象的有没有让女票感受到你自己的爱意,有没有照顾到对方的情绪等等. 所以,每周从这四个方面来个自己一个简单的总结,不需要很细致,但是至少是对自己的一个回顾。...时间记录在一天的最后进行 时间管理,不是为了时间管理时间管理。而是我们让时间变得可控,你不能做完一件事情就开始记录你干了啥,那事情都不用做了。...不足半小时怎么办 这个表格的精髓在于只是粗糙跟随你的时间,使得你能够复盘总结。不是为了记录记录,所以不需要很精确,大约就可以。不用你每天上了几次厕所、喝了几次几次这种都几进去。

1.7K10

马哥Python爱好者的学习笔记——基础语法习题总结

逻辑思想: 程序员脑子里想的东西永远不是一种定势的东西: 1.锻炼思维过程:最有价值的是我们的思想; 2.很多方法我们都没见过;我们要看的多,转换为你的东西,固化到我们的脑子里; 方法: 1.range...()函数对称性;不在于效率有多高,而在于思维过程(锻炼思维过程); 2.折半思想:(if)用在一个大范围搜索的空间里速度会更快 3....#重复的东西=迭代for循环 循环建议:知道坏多少次用 for;不知道循环多少次用 while; # 1....#重复=迭代for循环 #循环建议:知道坏多少次用 for;不知道循环多少次用 while; #新解法:对称结构; #2.求100以内所有奇数的和(2500); n=0 for i in range...#用不太划算; # 折半思想:用在一个大范围搜索的空间里速度会更快 ``` ```

69050

写给程序员的时间管理

第二个误区是程序员可能由于很多人有代码洁癖的原因,一直追求完美,实际上面对问题,我们只需要追求迭代升级,不要追求一次完美。追求完美在时间上很容易造成拖延,你需要的是迅速开始取得正反馈,不是完美。...“半小时”等价于“一枚金币”,于是全天我们拥有34枚金币。 钱花出去了我们会记账,时间通过这种量化的方式记录我们的消耗,为什么是半小时呢? 因为半小时是人集中精力一件事进入沉浸感的时间。...有没有给家里打电话,有对象的有没有让女票感受到你自己的爱意,有没有照顾到对方的情绪等等. 所以,每周从这四个方面来个自己一个简单的总结,不需要很细致,但是至少是对自己的一个回顾。...时间记录在一天的最后进行 时间管理,不是为了时间管理时间管理。而是我们让时间变得可控,你不能做完一件事情就开始记录你干了啥,那事情都不用做了。...不足半小时怎么办 这个表格的精髓在于只是粗糙跟随你的时间,使得你能够复盘总结。不是为了记录记录,所以不需要很精确,大约就可以。不用你每天上了几次厕所、喝了几次几次这种都几进去。

33700

高级性能测试岗面试题!

昨天一个前同事找我,问有没有性能测试岗位的面试题,正好之前帮业务团队加面过几次性能测试岗位的候选人,我将面试时候会问的一些问题以及要考察的点列了出来,供大家参考 一、介绍下最近做过的项目,背景、预期指标...针对这个项目我梳理了核心应用和接口有XXX个,对应的场景有XXX,我的测策略是XXX。...考察点: 对业务迭代是否足够了解 对项目质量控和评估分析的能力 参考答案: 这个问题要根据项目类型和具体情况来分析,以我公司为例,日常的迭代频次是XXX,一般我在XXX阶段介入性能测试,原因为XXX,...这样的好处是XXX; 如果是独立项目或者倒排期项目,那我认为应该在XXX阶段介入,这样的原因为XXX,好处为XXX 还有针对性能测试体系建设不太好的团队,我建议先从XXX做起,然后XXX,尽可能保证质量和投入成本平衡...XXX类型的问题分析和排查 六、了解过全链路测吗?

33810

如何用agile原则驱动客户体验

它们可以积极塑造一个品牌,也可以客户赶走。组织需要在一个持续的改进周期中来改进这些产品。 只有在整个组织中应用agile和DevOps原则,才能在cx驱动的世界中成功地竞争。 DevOps是什么?...产品是不断开发、发布、测试和更新的,不是一年一两次。 为了实现这一点,跨功能团队在敏捷环境中工作,不是在线性开发周期中工作。工程师不是在竖井中工作,而是跨应用程序生命周期工作。...DevOps循环有各种各样的迭代,但是通常都归结为无限循环中的一些公共元素,从计划开始,然后循环回到开始。...对于agile开发团队中的每个人,提供了更紧密的集成,并使每个人都专注于更大的目标,允许开发人员朝着客户和业务结果不是交付特性集工作。 客户反馈是CX改进的重要阶段之一。...功能产品可能只经过几次迭代就可以投入市场,这可以创造先动优势。在快速变化的市场中,这消除了长时间的交付周期。快速发布可以刺激客户的反馈,这些反馈可以转化为额外的功能,领先于竞争对手。

55461

使用ffmpeg压缩视频之烦和fun

LD使用手机录了一个直播健身操课程的视频,想要放到她十多年前的一个上网本上播放,方便她不在老家的时候丈母娘可以照着跳操锻炼身体,原本一个很简单的诉求,没想到过程还挺曲折的, 所以,有必要记录并分享出来,...所以,当我7.9G的4K原视频拷贝到上网本之后, 卡卡卡到爆啊… 这个时候,就只能祭出神器ffmpeg啦, 我: ffmpeg -i OGLF3661.MP4 -vcodec h264 -acodec...aac output.mp4 只从7.9G压缩到1.9G, 拷贝过去,还是卡卡卡… 我再压: ffmpeg -i OGLF3661Compressed.mp4 -b:v 800k output.mp4...crf压缩了,直接对标上网本的分辨率,因为我发现原始视频的分辨率远比上网本的(1024*800)高得多的多: $ ffmpeg -i 视频文件.mp4 // 查看视频文件相关信息,这里是已经压缩过几次的文件...2 遇到的问题 2.1 设备接口不兼容的问题 我年前回到山东没有带转接头,所以,苹果电脑只有他娘的Type C接口, 给上网本重装了windows xp之后, 发现网卡驱动可能有问题, 连接不上wifi

1.6K50

【Python】循环遍历傻傻分不清

例如↓ print("*") print("*") 此时的运行结果是这样的↓ * * 不是这样:** 从这里就明确的说明了print() 会给我们自动换行。那假设我不想让换行呢。...有没有什么办法,那么肯定是有办法的。 如果不想给 print() 换行,我们只需要在print加上 end="" 即可。...语法如下 示例语法如下 for 迭代变量 in 对象: 循环体 迭代变量在我们每一次循环中保存根据变量得到的值,对象既是有序的序列,可以是字符串、元组、列表,也可以是无序的序列,例如字典...迭代iterate遍历 遍历就是从头到尾依次从列表当中获取数据。 在循环内部针对每一个元素,执行相同的操作。 迭代iterate是数学的专用术语,所谓的迭代就是重复遍历的意思。...(从列表当中拿出一个一个的元素) 我们想要进行迭代遍历的话是使用for,不是使用while语句注意。

9610

java分布式系统开关功能设计(服务升降级)

这个是不是有点复杂,有没有更加简单的办法?...“配置信息的伪推送服务”,例如我变更了一个开关的属性,不再需要做清理缓存的事情,diamond帮你做掉了(原理很简单,例如系统A订阅了在diamond中的开关信息,这时候A会启动一个线程,每隔一段时间来轮...diamond的服务端,看看开关属性的数据有没有变更,如果有变更,在diamond服务端来加载最新的数据)。...,同时设置阀值(例如RT超过5秒就降级,1秒就升级)以及阀值触发改动的开关; 第三部:异步启动一个线程,扫描队列,达到我们的条件,就触发变更(有个问题,...这时候业务降级,并不是完全100%的停掉,可以预留一部分流量继续调用A,A调用的信息放入队列中,根据这些信息,就能实现升级了); 总结

1.8K30

经验贴 | 如何从业务实际需求出发,参与 5.9K star 的 Node.js 开源项目

这对于前端工程师来说意味着它不是黑盒,我们可以去深入、了解,从而改变。...\n\n## 发现问题\n\n用内部基于autocannon封装的工具进行几次测之后,我发现了第一个问题:autocannon默认情况下由于压力过大返回的兜底页面也当做正确返回来统计了,因为此时的状态码依然是...\n\n于是我在文档中仔细查看,找到了一个对返回内容校验的参数expectBody,通过参数解释我们可以看到这个参数可以对返回内容一次equal判断,不匹配则统计到错误数据中。这正是我们需要的!...也就是说每次测请求的返回体都不是完全一致的,都会有一些差别,但它们都是正确的。\n\n从上面这个问题来看,在我们的业务场景下,这个参数是不能用的,文档中并没有提供其他类似的参数。...如果是,请到方案一;如果不是,请看 2\n2. 既然是普遍需求,那么之前有没有人提过?项目官方是否已经在安排解决?

44840
领券