首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序你好

    程序的腐化原因及建议

    为什么有的代码跑上几十年任然好用,而现在互联网公司的很多代码,每年都要做好几次重构?一个成立2年的互联网公司,做一个支付系统,可以做了4-5代,每次重构,这样的代价有多大? 太复杂的抽象不能做方便的变更:一开始设计的Job系统,上面是2-3张图片,下面是动态生成的问题。代码层面对于此设计做了很细致的抽象。 我总结了一些代码腐化的原因: 没有统一标准,或者没有严格执行 统一标准之代码规范 每个程序员都是有自己的审美的,例如即使是缩进长度这种代码里不影响任何功能的东西,有的喜欢空4格,有的喜欢2格。 像Baidu,Google这样的公司还有构建时的自开发的检查工具,所以常常一个资深程序员第一次开发的代码要花上1-2天才能提交通过。代码规范的混乱,直接导致代码可读性的降低。 例如搭一个jenkins,然后部署服务A用的Maven,服务B用的gradle,就导致编译代码2套,如果写一套基本一样的,当然会快一些。

    1.9K30发布于 2018-07-20
  • 来自专栏服务端技术杂谈

    DDD应对运营活动系统腐化实践

    前言 任何人类的设计都会腐化,软件系统也不例外 腐化之谜 随着系统的规模增长和复杂度膨胀,系统会慢慢腐化。 ? 于是改一个很简单的下单地址,就会牵动整个交易系统十几处的改动。 如何解决这种腐化之谜呢? 参考计算机系统架构: 一个复杂的计算机系统架构包括:软件系统元素,元素之间的联系,元素本身有自己特有属性。 于是我们可以在架构角度参考计算机系统架构的实现。 架构建模 ? 业务是否重要且有很高的预期 是否可以让运营和PM介入 遵循迭代式的开放方法 领域模型好坏的标准: 模型反映了对于问题的抽象,抽象没有统一的标准 模型是迭代演进的,需要持续集成,改进 通用语言,领域模型和代码目标意图一致

    2K50发布于 2019-07-31
  • 来自专栏MySQL修行 | 老叶茶馆

    MySQL 8.0.29 instant DDL 数据腐化问题分析

    为分析这个问题, 我们会从 instant add/drop column 在 Innodb 的实现原理与细节方面来阐述这个数据腐化bug的具体原因。 数据腐化问题 由 instant add/drop column 引入了多个数据腐化问题,其中一个问题可以从: [PS-8292] MySQL 8.0.29 fails to perform crash 从代码上看,这个bug可能会造成数据的静默错误(数据完全错乱而且不报任何错误),而不仅仅是崩溃这一种现象。 为支持 instant add/drop column,redo log 记录的格式发生了变化,因为代码bug,导致在解析 redo log 做恢复的时候,得到的字段信息错误,导致数据腐化。 select * from tb2; CHECK TABLE tb2; 需要把这个测例放到innodb test case suite中。

    47630编辑于 2023-09-01
  • 来自专栏GreatSQL出品技术文章

    MySQL 8.0.29 instant DDL 数据腐化问题分析

    为分析这个问题, 我们会从 instant add/drop column 在 Innodb 的实现原理与细节方面来阐述这个数据腐化bug的具体原因。 数据腐化问题 由 instant add/drop column 引入了多个数据腐化问题,其中一个问题可以从: [PS-8292] MySQL 8.0.29 fails to perform crash 从代码上看,这个bug可能会造成数据的静默错误(数据完全错乱而且不报任何错误),而不仅仅是崩溃这一种现象。 为支持 instant add/drop column,redo log 记录的格式发生了变化,因为代码bug,导致在解析 redo log 做恢复的时候,得到的字段信息错误,导致数据腐化。 select * from tb2; CHECK TABLE tb2; 需要把这个测例放到innodb test case suite中。

    62150编辑于 2023-08-11
  • 来自专栏斑斓

    Twitter的问题说明再好的软件也会腐化

    ,一旦出现故障,需要及时告警并及时处理等 虽然每一位架构师可能都清楚架构边界的重要性,事实却是一个边界清晰的软件架构,往往会随着时间的推移,慢慢变得混乱,最后变成让人迷路的依赖网: 如此,也就产生了代码腐化 02 代码评审 频繁开展代码评审是避免代码腐化的最有效武器。然而,总是有许多团队和个人推说没有时间,而不开展代码评审。 这里所说的代码评审,可以有三种形式: 融入到CI/CD流水线的代码静态扫描 团队定期召开的内部代码评审(可以是每天或每周) 以提交流程方式运作的代码评审 如下图所示,是我为某客户制订的代码评审流程: 因此,我们需要将测试代码与产品代码等同视之,也需要纳入到代码评审的范围,并做到及时重构,持续不断的提升其代码质量。 结论 回归到Twitter的问题。 次之,如果在提交代码(包括测试和运维代码)时,能启动代码评审的流程,通过引入更多评审者,也许就能通过更多双慧眼及时发现问题。

    53620编辑于 2023-03-23
  • 来自专栏Java架构

    架构的演进, 阿里资深Java工程师表述架构的腐化之谜

    采用Ruby on Rails的某高效团队在10人团队工作半年之后,构建时间从当初的2分钟变成2小时;我们之前采用Microsoft .NET 3.5 (C# 3.0)的一个项目,在产生2万行代码的时候 一旦团队开始这样去思考,每隔一段时间重新审视代码库,你会发现核心代码库不可能失控,同时也获得了一组设计良好、工作稳定的组件。 2. 将独立的模块放入独立的进程 上面的解决方案核心原则只有一条:始终将核心代码库控制在团队可以理解的范围内。如果运转良好,能够很大程度上解决架构因为代码规模变大而腐化的问题。 如果不这么做,动辄上百万千万行的代码堆在一个系统中,随着时间的推移,开发者逐渐对代码失控,架构的腐化是迟早的事情。 针对每个应用,开发者能够在更小的代码内采用自己熟悉的技术方案,从而减少架构腐化的可能。 结语 没有糟糕的架构,变化使之 我访问过很多团队。

    99450发布于 2018-06-14
  • 来自专栏Java架构

    架构的演进,阿里资深Java工程师表述架构的腐化之谜

    采用Ruby on Rails的某高效团队在10人团队工作半年之后,构建时间从当初的2分钟变成2小时;我们之前采用Microsoft .NET 3.5 (C# 3.0)的一个项目,在产生2万行代码的时候 一旦团队开始这样去思考,每隔一段时间重新审视代码库,你会发现核心代码库不可能失控,同时也获得了一组设计良好、工作稳定的组件。 2. 将独立的模块放入独立的进程 上面的解决方案核心原则只有一条:始终将核心代码库控制在团队可以理解的范围内。如果运转良好,能够很大程度上解决架构因为代码规模变大而腐化的问题。 如果不这么做,动辄上百万千万行的代码堆在一个系统中,随着时间的推移,开发者逐渐对代码失控,架构的腐化是迟早的事情。 针对每个应用,开发者能够在更小的代码内采用自己熟悉的技术方案,从而减少架构腐化的可能。 结语 没有糟糕的架构,变化使之 我访问过很多团队。

    1.3K100发布于 2018-05-05
  • 来自专栏项勇

    策略代码拆解2

    代码片段3 // Support and Resistance // inputs left = input.int(6, title='  Left', group='Support and Resistance low[1],low[2]。 ta.crossover `source1`-系列被定义为穿越`source2`-系列,如果在当前K线上,`source1` 的值大于`source2` 的值,并且在前一根K线上,`source2` 的值 ta.crossunder `source1`-系列被定义为在 `source2`-系列下方交叉,如果在当前K线上,`source1` 的值小于 `source2` 的值,并且在前一根K线上,`source2 ---- 对照解读 // Support and Resistance 此段代码的备注为Support and Resistance,意思为支持与不支持 inputs为默认的参数 left = input.int

    89910编辑于 2023-03-24
  • 来自专栏JAVA技术zhai

    架构的演进,阿里资深Java工程师表述架构的腐化之谜

    采用Ruby on Rails的某高效团队在10人团队工作半年之后,构建时间从当初的2分钟变成2小时;我们之前采用Microsoft .NET 3.5 (C# 3.0)的一个项目,在产生2万行代码的时候 一旦团队开始这样去思考,每隔一段时间重新审视代码库,你会发现核心代码库不可能失控,同时也获得了一组设计良好、工作稳定的组件。 2. 将独立的模块放入独立的进程 上面的解决方案核心原则只有一条:始终将核心代码库控制在团队可以理解的范围内。如果运转良好,能够很大程度上解决架构因为代码规模变大而腐化的问题。 如果不这么做,动辄上百万千万行的代码堆在一个系统中,随着时间的推移,开发者逐渐对代码失控,架构的腐化是迟早的事情。 针对每个应用,开发者能够在更小的代码内采用自己熟悉的技术方案,从而减少架构腐化的可能。 结语 没有糟糕的架构,变化使之 我访问过很多团队。

    1.6K120发布于 2018-05-07
  • 来自专栏LCHub低代码社区

    《低代码指南》:2什么是低代码

    对于程序员而言,低代码开发平台的性质与IDEA、VS等代码IDE(集成开发环境)几乎一样,都是服务于开发者的生产力工具。 与传统代码IDE不同的是,低代码开发平台提供的是更高维和易用的可视化IDE。 这个定义更偏向于阐明低代码所带来的核心价值: 低代码开发平台能够实现业务应用的快速交付。 而且我们有理由相信,随着低代码技术、产品和行业的不断成熟,这个提升倍数还能继续上涨。 低代码开发平台能够降低业务应用的开发成本。 一方面,低代码开发在软件全生命周期流程上的投入都要更低(代码编写更少、环境设置和部署成本也更简单);另一方面,低代码开发还显著降低了开发人员的使用门槛,非专业开发者经过简单的IT基础培训就能快速上岗,既能充分调动和利用企业现有的各方面人力资源 ——LCHub低代码社区

    78540编辑于 2023-03-02
  • 来自专栏高渡号外

    Python代码找bug(2

    Python代码找bug(2) 上期的代码设计需求: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? ? 请大家仔细阅读代码,找出其中的bug! (1)三个for循环迭代的range的参数应该是(1,5),这样才能循环1-4次嘛; (2)if( i != k && i != j && j ! 本期代码设计需求: 企业发放的奖金根据利润提成。 发放标准是利润: (1)低于或等于10万元时,奖金可提10%; (2)10万-20万时,高于10万元的部分,可提成7.5%; (3)20万-40万时,高于20万元的部分,可提成5%; (4)40万-60 代码如下: ? 实际上,这个案例,我们在《Python入门》中讲过,因为是入门课程,我们在解决方案上使用的是更加直观易懂的方法,其代码可能更容易理解。

    91941发布于 2020-09-22
  • 来自专栏奝-大周

    代码审计day2

    代码调试 echo ​ 最简单的输出数据调试方法,一般用来输出变量值或者不确定执行到哪个分支 print_r、var_dump、debug_zval_dump ​ 输出变量的数据值,特别是数组和对象数据 var_dump类似,位移增加的值是refcount,记录一个变量被引用了多少次 debug_print_backtrace ​ 可以查看输出的调用栈信息 exit() ​ 停止程序,无法运行后面代码

    38410发布于 2020-08-19
  • 来自专栏IT码农

    写Laravel测试代码(2)

    在写Laravel测试代码(一) 中聊了关于如何提高 laravel 数据库测试性能,其实简单一句就是:每一个test case, 只重新 seed 被污染的表。 PHPUnit processes * * 1) Generate a random testing database with automatic destroy upon finish * 2) $pdo->errorInfo()[2]); } /* // Check if tables are inserted. testing'@'localhost'; 这样就临时测试数据库就准备完毕了,然后就是seed 测试数据,执行unit/feature tests, 执行assert等等,可以参考写Laravel测试代码

    1.3K31发布于 2019-09-02
  • 来自专栏生信技能树学习打卡

    Day 2 R语言代码

    ###常规技巧#可以直接运行(x <- c(1:21))#同一行两个代码——";"(a <- c(1:21));b <- "ds"###对单个向量进行操作#长度: 两种类似的函数month.namenchar duplicated(x)paste(x,y)paste(x,y,sep = "")paste0(x,y)#向量的长度不一样时,发生循环补齐c <- c(1,2,3,45,43)d <- c(1,32) c==d#循环补齐可以简化代码paste0(rep("x",times=5),seq(from=2,to=32,by=3))paste0("x",seq(2,32,3))#交集、并集intersect( ###向量筛选等#取子集中的反选“-”x <- 1:21x[c(-4:-20)]#修改向量x[4] <- 333x#省略参数的前提——写的参数中间没有未写出来的参数#比如下面忽略了each参数,就把“2” 给了未写出来的length out参数了rep(c("x","y"),times=4,each=2)rep(c("x","y"),4,2)小洁老师

    34010编辑于 2024-03-06
  • 来自专栏九彩拼盘的叨叨叨

    代码质量第 2 层 - 可重用的代码

    可重用的代码指:在相似业务场景下,用的是同一份代码。 可重用的代码可以减少重复劳动。一个软件中,会有很多类似的业务场景。将这些场景抽象成可重用的代码。开发新功能时,重用代码可减少重复劳动。 如何写出可重用的代码 代码块的职责越多,越难被复用。写出可重用的代码就是:识别,分离出可复用的部分。 考虑这样的场景:代码块A 的功能是获取接口数据,并渲染 UI。 代码块B 的 UI 和 A 一样,但获取的接口数据不一样。代码块C 获取的数据和 A 一样,但 UI 和 A 不一样。A,B,C 之间的代码都不能被复用。 [grhqxhup1n.jpg? q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1639471665;1639478865&q-key-time q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1639471684;1639478884&q-key-time

    1.4K20编辑于 2021-12-14
  • 来自专栏《云荐大咖》

    代码质量第 2 层 - 可重用的代码

    3金伟强---(+云荐大咖).jpg可重用的代码指:在相似业务场景下,用的是同一份代码。 可重用的代码可以减少重复劳动。一个软件中,会有很多类似的业务场景。将这些场景抽象成可重用的代码。 开发新功能时,重用代码可减少重复劳动。 可重用的代码可以减少因需求变动,导致多次改动和漏改的情况。 如何写出可重用的代码代码块的职责越多,越难被复用。写出可重用的代码就是:识别,分离出可复用的部分。 考虑这样的场景:代码块A 的功能是获取接口数据,并渲染 UI。 代码块B 的 UI 和 A 一样,但获取的接口数据不一样。代码块C 获取的数据和 A 一样,但 UI 和 A 不一样。A,B,C 之间的代码都不能被复用。 3金伟强-(+云荐大咖).jpg 金伟强老师往期精彩文章推荐: 聊聊代码质量 - 《学得会,抄得走的提升前端代码质量方法》前言 代码质量第五层 - 只是实现了功能 代码质量第四层 - 健壮的代码 代码质量第三层

    4.1K102编辑于 2022-01-17
  • 来自专栏Python七号

    2代码实现修改代码后自动重载

    有时候,我感到疲倦,因为,我每修改一处代码,想要看到改动是否生效的时候,我要先 Ctrl C 或 Kill 进程,然后重新运行,才能看到结果,改的次数多了,不仅浪费时间,降低效率,还浪费体力。 直到我用了 Django,Django 的 autoreload 机制,完美的解决了上面 3 个问题,改动代码保存后可以立即看到程序的及时反馈,大大提升了 Debug 的效率,堪称神器。 2、autoreload 为我所用 好在 django.utils.autoreload 和 django 其他模块是松耦合的,不需要修改代码即可可以直接移植到其他项目使用。 两行代码就可以实现,我这里做了个 demo: demo 目录树如下: (py37env) ➜ test tree . ├── autoreload.py ├── test.py └── test2.py test2.main44 视频展示:https://b23.tv/MAqqLK(点击阅读原文观看) 源代码我放在了公众号后台,如果不想动手找 Django 源码 autoreload ,可以直接回复关键词

    2.3K30发布于 2020-11-25
  • 来自专栏【腾讯云开发者】

    代码质量第2层-可重用的代码

    可重用的代码指:在相似业务场景下,用的是同一份代码。 可重用的代码可以减少重复劳动。一个软件中,会有很多类似的业务场景。将这些场景抽象成可重用的代码。开发新功能时,重用代码可减少重复劳动。 一、如何写出可重用的代码 代码块的职责越多,越难被复用。写出可重用的代码就是:识别,分离出可复用的部分。 考虑这样的场景:代码块A的功能是获取接口数据,并渲染UI。 代码块B的UI和A一样,但获取的接口数据不一样。代码块C获取的数据和A一样,但UI和A不一样。A,B,C之间的代码都不能被复用。 推荐阅读 代码质量第3层-可读的代码代码质量第4层——健壮的代码代码质量第5层-只是实现了功能 聊聊代码质量-《学得会,抄得走的提升前端代码质量方法》前言 戳「阅读原文」一键订阅《云荐大咖》专栏,看云端技术起落,听大咖指点迷津!

    1.2K20编辑于 2022-01-20
  • 来自专栏TakinTalks稳定性社区

    去哪儿如何实现故障率降低65%?技术+管理的数字化度量体系实践

    2.1 防腐化治理的背景 2022年去哪儿落地了一个公司级的代码瘦身项目,我们做到了代码精简50%,应用精简50%。 然而,如果后期不继续进行干预,随着功能的迭代和人员的更替,应用数量和代码量还会增加,系统会逐渐腐化。如果我们不能保持代码瘦身成果,那么我们之前花费的精力就会完全白费。 比如无用代码变多,无效配置多,代码覆盖率低,发布依赖太多,内外部调用不合理……这些都是系统腐化的表现。但看起来,这些更像是一个系统复杂度的度量。 静态属性度量应用,包括代码量、代码圈复杂度和有效代码量。调用属性度量应用接口,包括外部依赖、内部链路复杂度和外部链路复杂度。 在具体的详情中,还能看到它的代码行数等具体数据,这些数据为我们提供了一个参考。 3)应用腐化治理面板 在应用腐化治理面板中,我们主要针对的是应用的治理。这个过程主要针对的是静态复杂度的部分。

    66510编辑于 2023-12-12
  • 来自专栏JAVA

    Spring 代码优化技巧(大全2)

    Spring 代码优化技巧 十. 如果不能获取到数据,则直接方法体中的代码获取到数据,然后放到caffine缓存中。 十二. @ConditionalOnBean 问题2可以通过@ConditionalOnBean注解解决,代码如下: @Configuration public class TestConfiguration 2.各依赖包之间可能会存在版本兼容性问题,项目引入这些jar包后,可能没法正常启动。 3.如果有些参数没有配好,启动服务也会报错,没有默认配置。 文章来源:1,2,3,4,5,6 记录自己学习的每一天;

    25610编辑于 2024-11-20
领券