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

为什么程序员的代码不能终生责任制?

前言 知乎上有一个提问:为什么程序员的代码不能终生责任制? ↓↓↓ 今天,我们就这个话题,一起来做个讨论。...小伙伴们不妨先想一想,然后把你们的答案,写在评论区。 我的回答 现在,据我多年观察的现象来看,只要我们不从事非法的软件研发工作,比如赌博、早期的P2P金融类软件等等。...(什么人为删库、rm-rf XX之类的故意破坏行为,不在这个范围之内) 如果你在职,当然是有责任对你所负责的功能模块质量负责。期间发生bug,按故障等级,该背还是得背。...至于,为什么程序员不需要像建筑工程师那样,对工程质量付终身责任制这个问题,大家不妨发表一下你的灼见,在评论区,与我们小伙伴一起讨论。...接下来,分享三则我们可爱的知乎网友对于这个问题的答复,一个比一个精彩,一定要看到最后哦! 知友作答 回答一 回答二 回答三

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

    为什么有些领导要用代码的行数来衡量员工的工作量?

    计科专业在软件行业做过项目玩过产品,个人觉得如果一个领导能通过代码的行数来衡量一个程序员的工作量还算不错的,如果遇到一个不懂技术在意识里觉得技术都是一锤子买卖,遇到这种老板那才是有理说不清那,所以程序员在工作过程中遇到什么样子的老板决定了编程环境能不能长久呆下去...衡量一个程序员的工作能力代码仅仅占据很小的一部分,有过项目经验应该都有一种体会真正耗费时间的地方在框架搭建功能需求分解过程,以及后续功能测试和真正代码的时间最多占据百分三十,估计用不了,对于代码的沉重意识可能对于初学者来讲比较沉重...,老手更喜欢把时间都花在准备工作上,准备的越是充分工作就会显得越轻松,很多编程新手觉得很奇怪,这些老家伙平常不怎么写代码。...编程的本质是解决实际问题,不是一个炫耀技能的工作,也不是什么排斥需求的过程,本质编程就是提升效率,做出产品让大家生活的更加舒服,如果从这个格局出发,不在于有多少代码量关键还是要能解决实际的问题,编程的最终目的是解决疑难杂症问题...任何时候都不要忘记自身技术的积累过程,作为一个程序员技术才是立足之本。 作为一个程序员要懂得寻找一个尊重技术的公司,在这个公司找到合适的位置,并且无时无刻都不要忘记对技术知识的积累过程。

    1.7K30

    美团一面:能不能通俗的解释下为什么要有意向锁这个东西?

    导 读 面试真题,用通俗的例子解释清楚 MySQL 为什么有了表锁和行锁之后,还要引入意向锁 众所周知,InnoDB 中既有读锁也有写锁,也称为共享锁和排他锁,这两种锁既可以加在整张表上,也可以加在行上...看下面这个例子: 事务 A 加了行级读锁,锁住了表中的一行,让这一行只能读,不能写。 之后,事务 B 尝试申请整个表的写锁。...那数据库要怎么判断这个冲突呢?...(行级写锁)时,InnoDB 存储引擎会自动地先获取该表的意向写锁(表级锁) 注意这里的自动:申请意向锁的动作是数据库完成的,就是说,事务 A 申请一行的行锁的时候,数据库会自动先开始申请表的意向锁,不需要我们程序员使用代码来申请...也就是说原先步骤 2 的遍历表中每一行的操作,简化成了判断下整张表上有无表级意向锁就行了,效率大幅提升。 这就是为什么要有意向锁了。 End.

    74220

    为什么我建议线上高并发量的日志输出的时候不能带有代码位置

    如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么我建议”系列第二篇,本系列中会针对一些在高并发场景下,我对于组内后台开发的一些开发建议以及开发规范的要求进行说明和分析解读...往期回顾: 为什么我建议在复杂但是性能关键的表上所有查询都加上 force index 在业务一开始上线的时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...模拟两种方式获取调用打印日志方法的代码位置,与不获取代码位置会有多大性能差异 以下代码我参考的 Log4j2 官方代码的单元测试,首先是模拟某一调用深度的堆栈代码: 然后,编写测试代码,对比纯执行这个代码...执行:查看结果: 从结果可以看出,获取代码执行位置,也就是获取堆栈,会造成比较大的性能损失。同时,这个性能损失,和堆栈填充相关。填充的堆栈越多,损失越大。...由此,我建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果会输出大量的日志的话,这个日志是不能带有代码位置的,否则会造成严重的性能衰减。

    1.4K20

    《叶问》32期,一样的Python代码,为什么可以删表,却不能更新数据

    问题 运行下面的这段Python代码,却总是无法更新数据: import pymysql conn=pymysql.connect( host = '127.0.0.1', user = 'yewen'...set c3 = rand()*10240 where c1 = rand()*1024" cur.execute(sql) cur.close() conn.close() 而运行下面的这段看起来一样的代码...关闭autocommit的缺点在于,当忘记主动提交事务时,可能会造成相应的行锁一直持有不释放,其他事务会被长时间阻塞,如果是线上生产环境,则可能造成严重后果(业务长时间不可用)。...因此,需要根据实际情况动态调整autocommit的模式,并没有通用的设置。...不少开发框架都会默认设置 set autocommit=0,更有甚者,每次执行一个SQL前,都要发送一次set请求,增加了无谓的开销,如果有这种情况,可以自行调整开发框架的代码。

    48730

    dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承

    本文将从源代码的角度告诉大家 WPF 框架是如何阻止跨程序集继承 先来写一些演示使用的代码,新建一个 WpfLibrary1 项目用来存放自定义的用户控件。...pull origin 9bcae76c2910b4dfb4b1e0ba02d59876c614fbb1 以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源 git...文件夹 通过断点调试,可以看到这个异常是从 InitializeComponent 方法里面抛出的。...但实际的调用类型,却发现是继承的类型,放在另一个程序集,不符合框架设计的预期,抛出异常 这就是为什么自定义的 UserControl 用户控件不能跨程序集继承的原因 在 WPF 的 LoadComponent...方法是比较复杂的,本文只是将里面相关代码写出来,具体是如何调用的,我是通过调试的方法了解的 调试的方式我录了视频放在哔哩哔哩,请看 为什么自定义的 UserControl 用户控件不能跨程序集继承_哔哩哔哩

    98310

    【Linux内核】【锁机制】RCU机制入门

    RCU的名字取自Read-Copy-Update(读-复制-更新)三个单词的首字母,至于为什么叫这个名字,主要还是和它的工作方式有关,它本质上是一种同步机制,为了便于建立概念,你可以暂时简单地将RCU和互斥锁...RCU为什么可以读写并发? 在解释这个问题之前,请允许我先反问一个问题——为什么读写不能并发?原因当前显而易见了,因为读写并发会导致数据不一致,有人读到的是新数据,有人读到的是旧数据。...到这里你应该已经明白RCU是怎么运作的了,如果你还想继续搞清楚RCU是如何实现的,可以继续往下看,下文我们会结合代码来介绍RCU的工作原理。...不过临界区内的代码需要遵守一项约定——临界区内的代码不可以进行进程切换(睡眠、主动让出CPU等操作),为什么需要这个约定将在后文中介绍。...为什么没有写临界区的概念? 这个问题应该改为:对单一写者来说为什么没有写临界区?这还是和RCU的机制有关,RCU能够容忍数据的短时间不同步,并且写者能保证原子地更新数据。

    10510

    Java中的集合Set - 入门篇

    ] 正文 Set从外面看像List(都是存储单一数据的集合),只不过存储的数据不会有重复; 但是里面却是Map映射(因为它内存存储是基于Map结构实现),这也是为什么把Set放到Map后面来说的原因。...,实则暗藏玄机 如果你运行这段代码,会报出下面的错误提示:类B不能转换为Comparable。...TreeSet内部排序的工作原理 所以上面这段代码需要让B实现Comparable接口,改后如下所示 public class SetDemo { public static void main...1 : -1; } } 此时运行就没问题了 那为什么TreeMap没有这个问题呢?...LinkedHashSet拥有HashSet的大部分优点,且保证了插入的顺序,使得在查询的时候,可以按照插入的顺序依次读取(原理是链表) 这里要注意一点:在Java程序语言设计中,所有的链表都是双向链表

    58041

    LeetCode 01两数之和&02两数相加

    但是,数组中同一个元素不能使用两遍。...return a; } } } return a; } 法二:借助哈希(一次) 对于上述问题,你可能会疑问:能不能快速得直接知道这个数据是否存在呢...如果遇到两个同元素就错误了,能不能又正确再简单一点? 答案是可以的,其实我们不需要用hash存储所有,边走边存即可。为什么我们可以这么考虑?...在具体实现(链表)的时候: 创建新的链表,每次将计算的数值插入到链表尾部即可。...通过代码第一次比较啰嗦的写法: 当然,如果你遍历链表把各个数字取出来,使用字符串、数字转换然后相加得到一个数字,最后在转成字符串、链表的理论可以,可以自行实现。

    40720

    hashmap的底层实现原理_hashtable底层数据结构

    2、链表结构:存储区间离散、占用内存宽松、空间复杂度小 优点:插入删除速度快,内存利用率高,没有固定大小,扩展灵活 缺点:不能随机查找,每次都是从第一个开始遍历(查询效率低) 3、哈希表结构:结合数组结构和链表结构的优点...如果说下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。...为什么放在hashMap集合key部分的元素需要重写equals方法?...因为equals方法默认比较的是两个对象的内存地址 二:HashMap红黑树原理分析 相比 jdk1.7 的 HashMap 而言,jdk1.8最重要的就是引入了红黑树的设计,当hash表的单一链表长度超过...为什么要这样设计呢?好处就是避免在最极端的情况下链表变得很长很长,在查询的时候,效率会非常慢。

    46320

    RCU 机制_NRPS作用机制

    这个问题可以归结到 “确切地说,什么是RCU?” 这个问题,或许还是 “RCU 可能是如何工作的?” (再或者,不太可能的情况下,问题会变为什么情况下 RCU 不太可能工作)。...然而,这些同步不能组织同时发生的RCU读者。...下图中 5,6,7 元素的边框仍然是红色的,这意味着仍然有读者可能会引用它。 这里注意,在退出读方临界区之后,读者们就不能再持有 5,6,7 这个元素的引用了。...我们的链表也回到了一个单一的版本了。 这之后,5,6,7 这个元素就可以被安全的释放了: 这里,我们完成了删除 5,6,7 这个元素的操作,下一小节将介绍替换操作。...对于读者来说,目前又只有一个单一的链表版本了,只是新的元素已经替代了旧元素的位置。

    77920

    程序员工作久了基础更重要

    工作一段时间会遇到一个瓶颈期,会考虑未来1到2年的发展和方向问题,之前的方式是通过不停的学习新的框架或者解决方案来调整。...比如写服务端代码期间会去学习TDD,DDD,CQRS代码逻辑层的东西,学前端框架等度过第一个阶段。...反过来说也不用羡慕别人会用一些框架,如果只是在用上,他学了一个月会用,我为什么不能一个月学会呢?...数据库索引是树形的,很大一部分由历史原因决定,比如nosql就为了避免这个问题。 哈希+链表的方式从hashmap这种基础的数据单元,到nosql的内存db都可以使用。...线性记录,这种kafka用的比较多。 通过这个数据结构可以引申出其他的问题,比如有人说我们最近用的elasticsearch,然后问他,为什么用es,为什么mysql不可以?

    681100

    React进阶

    为什么要用 JSX?不用会有什么后果? JSX 背后的功能模块是什么,这个功能模块都做了哪些事情? JSX 是 JS 的一种语法扩展,他和模板语言很接近,但充分具备 JS 的能力。...阻碍了 Fiber 架构 # Fiber 架构 为什么要更换为 Fiber 架构:我认为主要是因为原本的同步渲染过程可能会有大计算量的工作导致渲染阻塞,从而造成不好的用户体验 为什么异步能提高用户体验...在使用层面有着严格的规则约束(不能嵌套在条件判断、循环中等) # 为什么不能将 Hooks 嵌套在条件判断等逻辑中?...(rootNode).render (),这种模式开启了所有的新功能,最终的稳定模式 其实不同的渲染模式在挂载阶段的差异,本质上来说是 mode 属性的差异,mode 属性决定这个工作流是同步的还是异步的...它可以接受一个函数作为入参,这个函数可以处理自己的逻辑并返回一个新的组件,相对于 HOC 而言会更加灵活 # 单一职责、有状态组件、无状态组件 单一职责指的是:一个类或者模块有且只有一个改变的原因 当一个组件内部不维护

    1.5K40

    Q&A:Java

    静态方法为什么不能调用非静态成员 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象去访问。...语法形式 :从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及...String 为什么是不可变的? String 类被 final 修饰导致其不能被继承,进而避免了子类破坏 String 不可变。...建议 Object 所有的子类都重写这个方法。 */ public String toString() /** * native 方法,并且不能重写。...单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。

    63120

    设计模式之道:解析结构型设计模式的核心原理

    尤其是对于初学者或刚刚参加工作的朋友们,对这个扩展代码一定要非常的清楚,就是如果在这个设计模式的基础上要修改哪些代码,这个是必须要掌握的。...可能主程序就很抱怨,为什么总是有请假的事情来干扰他写代码,那么前面能不能增加一个前台,前台来负责处理一下半天以内的(比如请假一个小时也来打扰一下,那么主程序就不用干活了),让主程序来休息一下,不需要关注这么多小事情...假设要增加一个前台,只需要去扩展这个IHandler ,然后自己实现能不能处理、处理的条件是什么、怎么处理;接下来只需要在handler_leavereq这个地方去构建这个链表关系来处理它就行了。...本文介绍了责任链模式的代码结构,并讨论了如何设计符合开闭原则和单一职责原则的责任链。通过分析 nginx 阶段处理的案例,展示了责任链模式在实际中的应用。...本文介绍了组合模式的代码结构,并讨论了如何设计符合开闭原则和单一职责原则的组合模式。通过使用组合模式,可以简化处理复杂结构的代码。

    10400

    【数据结构】-----双链表(小白必看!!!)

    今天我们更新了双链表内容, 欢迎大家关注点赞收藏⭐️留言 什么是双链表? 双链表的定义  为什么引入双链表?  ...这里记住我们创建出来的第一个节点,不能直接去使用,而是要指向本身才可以。否则会将自身变为NULL。 1.2打印链表: 这里也是非常简单,就是我们遍历链表即可。...newhead->next = Tail; Tail->prev = phead; phead->next = newhead; newhead->prev = phead; } 这个是前插的代码...=head,然后找到的话就返回这个节点,找不到就返回空指针。 1.10链表的销毁 最后我们来说一下链表的销毁,这里我们要对每一个节点都要销毁。...phead) { LTNode* next = pcur->next; free(pcur); pcur = next; } free(phead); phead = NULL; } 这个就要相对简单一些了

    9610

    多核心Linux内核路径优化的不二法门之-slab与伙伴系统

    作为这个系列的第一篇,我先来描述一下slab系统。因为近些天有和同事,朋友讨论过这个主题,而且觉得这个主题还算比较典型,所以就作为第一篇了。...另外又由于本文主要描述内核优化方面的内容,并不是基本原理介绍,因此想了解slab细节以及代码实现的请自行百度或者看源码。...,但是对于slab,完全取决于使用者自身,只要对象仍然在使用,就不能剥夺使用者继续使用的权利,除非使用者自己释放。...谁也不能保证分配slab对象的CPU和释放slab对象的CPU是同一个CPU,谁也不能保证一个CPU在一个slab对象的生命周期内没有分配新的page(s),这期间的复杂操作谁也没有规定。...,合并操作会涉及大量的链表操作,这个锁开销是巨大的,因此需要优化!

    1.2K30
    领券