我对ACID的看法是什么?

在阅读了farwayer撰写的这篇文章之后,起初我只想发表评论,但是在思考了几十分钟之后,我认为该主题很深,对于整篇文章我都有话要说。 总体而言,一方面,我是那些在面试中不看代码的人,另一方面由于对关系型DBMS中索引搜索的复杂性缺乏了解而感到失望;另一方面,我相信我可以理解相当多的面试官的想法,他们为什么(乍看之下)不合逻辑且具有破坏性,以及他们自己想解决什么问题。 希望了解世界对“敌人”的描述本身会回答许多问题。

首先,我将向您介绍一下自己。 希望这可以帮助您更好地理解以下内容。 在软件开发领域有9年的时间,他有一段时间自己为自己工作(创建了交换机器人并用自己的钱进行交易),大部分时间他都是受雇的开发人员(包括首席开发人员)。 最近我去过杂货店。 收集了2个高级团队。 他在中高级,高级领导的职位上进行了数十次(尽管少于100次)技术采访。 我一整天没有花18天时间从事外包工作 。 因此,我可以说所有经验都与产品(所有者或雇主)有关,并且所有访谈的动机都是“寻找将为产品带来最大利益的人”。 我承认原始文章的作者的经验比我的要大,但目的不是告诉您如何正确做事,或就如何采取行动提供建议,而是告诉您如何从另一个替代方案中看待相同的事物,而不是事实是正确的的观点。

让我们继续讲下去(名字取自原始帖子)。

没有人关心您的代码


首先,问题是,什么是好的代码,以及有经验的程序员对代码的期望是什么? 对我来说,好的代码取决于任务,设置任务的条件,团队(公司)采用的准则,技术经理(架构师),产品经理,质量保证负责人的期望。 例如,考虑几个任务:

  1. 要开发API以便随后向公司的所有500个B2B客户发行,以将该产品集成到他们的解决方案中- 期望一种经过深思熟虑和有据可查的解决方案具有最易懂的结构,符合市场公认的标准,最严格的数据验证,全面的测试覆盖范围,可扩展性,深思熟虑的记录,符合所有安全要求,性能可扩展性,至少可以抵抗原始的DoS和DDoS示例
  2. 为了使产品符合监管机构的要求,该要求在一个月内生效,并且可能导致整个业务的关闭- 预计将有一个可靠的解决方案,重点是测试
  3. 修复与缓存有关的产品上的一个错误,该错误在黑色星期五之前一个小时就众所周知了, 预计该解决方案将在30分钟内写入并部署到产品上,并且不会破坏任何内容。 其他要求顺其自然 ;
  4. 测试该假设,即必须对竞争者的网站进行一次250页的一次陪练,然后根据这些假设为业务分析人员为Google电子表格创建一个文档, 预计程序员不会做太多工作并且只写很多代码而不花很多时间时间 ;
  5. 要在公司传统上使用PostgreSQL的任务上检查Aerospike的性能,并且存在性能问题, 可以考虑将算法的细微差别和负载配置文件考虑在内,但是无论实验结果如何,所有代码都将被丢弃

同意评估以相同模式关闭所有这些任务的代码是错误的。 但是毕竟,人们通常期望产品开发中的优秀程序员能够有效解决上述所有问题。 实践表明,通过案例问题和经验讨论,程序员的效率比通过检查用面试官未知的变量编写的代码容易确定。 另外,受访者想要显示的代码=解决业务问题时他编写的代码。

毫无价值的知识的胜利


对与之相关的愤慨有很好的理解
在PostgreSQL中搜索B树索引具有对数复杂性的事实吗? 我昨天发现了,现在你
但是另一方面呢? 与算法复杂性相关的错误对于企业来说是最不愉快的。 它们不在单元测试中(在测试运行期间为O(N ^ 2),其中N = 10,这确实非常快),出于相同的原因,它们不在自动,集成,回归和手动测试中。 它们不会在dbe,uat和坐姿上弹出(毕竟,对于N = 1000来说仍然很快)。 他们可以等上几年的时间,而不会提醒自己,直到一个买家将250种产品添加到他们的购物篮中,或者直到经纪公司的一位客户出现并决定在他的膝盖上组装HFT机器人为止。 但是,当它们出现时,整个业务可能会陷入困境。

关于性能测试的抒情离题
期待对性能测试的需求发表意见时,我将立即回答,要把臭名昭著的N精确地提升到天堂到底是什么还很遥远。 而且,考虑到组织应用级DoS的恶意尝试,几乎不可能预见所有选项。 因此,是的,我也参加性能测试,但这并不能抵消开发人员的期望,即开发人员应该直观地了解复杂性评估在哪些方面对业务至关重要和危险。

这也包括有关ACID的问题。 与DBMS中的阻塞,竞争状况,DBMS中的事务相关的错误-这也是业务的基础。 就像与算法复杂性相关的错误一样,它们可以静静地坐很多年,并且非常痛苦。 当公司的主要运营DBMS部署在具有最大冗余度的可怕服务器上时,在最大的客户端活动时,CPU和IO负载为零时就停止了运行,相信我,这是非常不愉快的,是的,这可能会花费一组程序员的年薪。 因此,您不必全心全意地了解每个ACID字母(至少我从来不要求了解缩写的知识,而且我本人也不会全心全意地记住它们),但是对每个字母的本质的无知是将此类错误引入代码中的一种严肃的应用。 如果团队中有两个程序员如此无知,那么代码审查也将无法解决。

关于遗留和NoSQL的抒情离题
也许这个例子牵强附会(尽管根据我的经验是真实的),并且它仅与老式系统和双链接系统有关,但是带有微服务的现代NoSQL体系结构却有自己的笑话,它们的数据不同步,并且在不同版本上的数据方案在不同节点上不匹配数据。 我认为现在没有理由去研究它。

击倒你


在这里。 这些家伙似乎足够了。 无花果明白。 然后您会发现空缺已经开放了半年。 好吧好吧
公司网站(或职位汇总器)上有职位空缺的事实并不意味着公司正在一个团队中寻找一个人。 食品公司在增长过程中的现实是永恒的绝食。 或者您扩大规模,占领市场,挤压竞争对手或死去。 产品经理永远头疼-“扔什么”。 不是“为什么要想出这么酷的一个,以便一个月可以下载100个程序员,这样您才不会感到无聊”,而是您应该从计划中排除那些酷,必要,计划和预期(并承诺)的客户,以免将下一个版本推迟一年。 因此,没有多余的人手了,空缺已经悬吊了六个月这一事实并不能抵消10个人已经找到并雇用它的事实,他们将乐意接受。 再说一次,不是到处也并非总是如此,但是我描述的情况是正常的,对于产品开发是可以接受的。

扩展思想
实践表明,程序员资源的广泛扩展很少有效,而且往往具有破坏性。 但是尽管如此,当前的市场条件还是需要食品行业的。 的确,尽管企业增长率的价值超过营业利润(我没有理由在这里讨论这是否正确),但创始人接受了这一挑战,并(有时)获胜。 “让我们有机增长而不损失效率”选项也正在起作用,但是,通常,每种增长策略的有效性取决于市场情况,对此的讨论会将思想和事实吸引到一个庞大的职位上。

我不在乎过去的项目


我总是问。 所以,在这里我完全同意作者的看法。 但是我也很清楚一些不问的人的观点。 这些人通常不了解如何将不同候选人的不同经历进行比较。 封闭问题的答案更易于比较。

在比较候选人之间
不幸的是,人力资源和智能书的作者坐在无休止的资深设计师和建筑师的队伍中,他们渴望不惜一切代价进入梦想中的公司,他们希望建立各种比较系统,使您可以对数十万名候选人进行排名并选择最佳候选人。 然后,将这些方法强加给技术面试官,结果,出现了标准化的问卷,这些问卷在出院时的面试中表现出了上帝的模范。 但是真正的问题还不是这样,而是为了进行比较,面试官拖延了流程,等到收集比较基数之后,同时在雇用企业主的速度上造成了麻烦,并使申请人处于不愉快的位置,迫使他们等待数周的答案。 他们还迫使招聘人员不断撒谎,因为“你似乎还不错,但我们还有五个可以比较的答案”的答案并没有浮出水面,而且你必须拿出“我们的曾祖母死于我们的技术死因,所以他将在一周内回来,那事情会决定的。” 我自己决定比较是邪恶的。 很合适-提供一个报价(尽管对我来说报价的百分比远低于对等同事的报价)。

经验丰富的开发人员


有一点很重要。 没错,一个经验丰富,机灵的开发人员会迅速研究它。 但是,如果某人声称他在多个项目上使用条件OAuth做了很多工作(很重要,就是那样,并且不“在原型中使用过一次”),而访问者也使用OAuth,那为什么不问一下呢? 答案的深度将显示一个人是否会深入研究途中遇到的新技术,无论他是否了解发动机室原理,还是采用SO进行复制,无论他是否试图预测耙。

还有一些想法


但是,您可以在这里离开,进行一两个小时的小测试(只是没有到位:对于许多人而言,面试仍然很紧张)。
关于这个主题可能会有不同的想法,但是就我个人而言,即使对于中级水平,我也感到测试任务令人反感。 一样,测试任务在公司和申请人花费的时间中占很大比例。 申请人有条件地花费3个小时编写代码,再花5个小时在Google上搜索和搜索最佳做法,公司代表则在1分钟内做出了裁决。 为此,申请人需要动力。 因此,这是一种良好的做法,但不能用于评估有经验且广受欢迎的程序员,这些程序员准备不经测试就可以接受。

关于loppi有趣评论想法
并且,如果有一个我不立即知道解决方案的问题,您可以随时研究该问题并找到解决方案。
对于面试官而言,重要的不仅是申请人将研究问题并找到解决方案。 他将如何执行此操作很重要-无论他是考虑所有选项,还是找到出现的第一个选项,对于所选解决方案无效的事实,他将如何应对碰撞,我们需要寻找一个新的选项,依此类推。 对于不同的情况可能会有不同的期望。
只有一次采访完全从人群中脱颖而出,与技术总监进行了面对面的交谈,他询问了我使用的技术,然后我们讨论了他们的项目以及我以前的项目中的各种问题,以及如何解决或解决这些问题。决定。
是的,这是一种很好的采访方式(我自己思考和使用),可以很好地补充其他问题。 而且,很奇怪的是,有大量的高级开发人员非常了解该理论并且具有多年的实际经验,但是同时,他们在尝试解决具有大量自由度的问题时表现得很差。 在这种面试方法的缺点中,它需要冗长的准备工作(您需要从实际案例中提取要点,省略不必要的细节并进行总结),并且如果申请人和面试官的关键挑战都是具体的,则可能无效。

Source: https://habr.com/ru/post/zh-CN485160/


All Articles