当前位置: 首页 > news >正文

盘点编程方法论中的一些思想

背景

        在日常编程开发中,虽然不同公司,业务不同,语言不同,但是工作久了,我们会发现一些编程思想几乎是不变的。这些编程思想,往往来自于大量实际问题场景的方法总结,可以很好的应对某一类问题。如果可以很好的掌握和理解他们,将为我们处理开发中的问题,提供极大的帮助,做的有的放矢。

思想方法

        接下来就结合在实际工作中的总结和思考,盘点一下一些良好的编程思想(后续将持续补充):

  • 拆分
  • 隔离
  • 补偿
  • 限流
  • 负载均衡
  • 时空置换
  • 开关
  • 防御
  • 中介

思想展开

拆分

        拆分是编程乃至生活中最常见的一种思想。比如单体拆分为微服务、分库分表、读写分离、动静分离等,都是拆分的思想。拆分是解耦合的一种具体手段

        通常,当一个组织变得越来越庞大,组织内部往往相互影响越来越严重(内耗、冲突)。这时,就可以采用拆分的方法,将单体的组织,根据业务、共性或一些其他方面的特点,拆分为多个不同的部分,来达到解耦合的目的。以此减小相互影响和代码冲突等。

        举个实际场景的案例:在曾经的一个项目中,有同事为省事,在使用消息队列时,没有很好的根据业务拆分话题和队列,大杂烩式的使用统一的话题与队列。在一次某业务,因并发突然变大导致消息积压时,由于没有拆分,导致使用该队列的整个业务都严重受影响,体验极其差。经此一役,根据业务对消息队列做了拆分,较少了不同业务之间的影响。

隔离

        隔离,顾名思义就是将不同的部分隔离开来。和拆分关联比较密切,算是拆分的一种效果或前置思想。在编程中也是很常用的,比如动静分离(将变经常动态变化的,和静态资源做隔离)、主次隔离(将核心业务、和普通业务做隔离,避免普通业务影响核心业务的流程)等。

        隔离在编程领域的主要目的是限制或控制不同部分之间的相互影响,以期达成更高的系统弹性、可靠性和可扩展性。

补偿

        我们常说的亡羊补牢就是一种补偿思想。在编程中补偿也随处可见,比如失败重试、超时后取消、定时处理不合理数据等,都是一种补偿的思想。

        在分布式事务处理中,特别是采用TCC(Try-Confirm-Cancel)或Saga等分布式事务模式时,如果某个操作未能按预期完成,系统会触发补偿动作来撤销之前已完成的操作,以恢复系统到事务开始前的状态。

        在微服务架构中,一个服务调用另一个服务后,如果被调用的服务出现故障或返回的结果不符合预期,调用方可以根据预先设定的补偿逻辑回滚或修复因调用产生的副作用。

        补偿作为一种编程思想,主要用于应对可能出现的错误、失败或不一致状态,以确保系统具备一定的容错能力和一致性保证

限流

        限流也是常见的一种控制流程的方式,生活中比如景区限流、地铁限流等。在编程领域,限流也是经常使用,以至于作为面试八股文中的常客。

        比如,对高频访问的API接口设置每秒请求数(QPS)上限,防止因短时间内大量请求而导致服务器资源耗尽,保障核心服务的稳定性和响应速度。

        限流作为一种编程思想,在软件领域主要用于控制和管理系统的资源使用、请求处理速率和系统负载等方面,以确保系统在高并发场景下依然能够稳定运行,防止过载崩溃

        

相关文章:

盘点编程方法论中的一些思想

背景 在日常编程开发中,虽然不同公司,业务不同,语言不同,但是工作久了,我们会发现一些编程思想几乎是不变的。这些编程思想,往往来自于大量实际问题场景的方法总结,可以很好的应对某一类问题。如…...

通过电机转速计算主轴旋转单圈所需时间(CODESYS ST代码)

1、伺服丝杠系统常用算法功能块 伺服丝杠系统常用算法功能块-CSDN博客文章浏览阅读353次。这篇博客主要介绍伺服、丝杠系统常用的运算功能块,其它相关运算可以查看下面文章链接:信捷PLC脉冲频率、位移、转速相关计算(C语言编程应用)_RXXW_Dor的博客-CSDN博客。https://rxxw-…...

多线程的入门(二)线程实现与初步使用

1.实现Runable接口 实现Runable接口,实现run方法; 这种方式创建的线程实现类执行时需要创建Thread实例去运行该任务 示例如下: package com.example.springbootdamo.Thread;import org.apache.logging.log4j.LogManager; import org.apach…...

数据结构(初阶)第二节:顺序表

数据结构(初阶)第一节:数据结构概论-CSDN博客 从本文正式进入对数据结构的讲解,开始前友友们要有C语言的基础,熟练掌握动态内存管理、结构体、指针等章节,方便后续的学习。 目录 顺序表(Sequen…...

鸿蒙OS元服务开发:【(Stage模型)设置应用主窗口】

一、设置应用主窗口说明 在Stage模型下,应用主窗口由UIAbility创建并维护生命周期。在UIAbility的onWindowStageCreate回调中,通过WindowStage获取应用主窗口,即可对其进行属性设置等操作。还可以在应用配置文件中设置应用主窗口的属性&…...

lua学习笔记6(经典问题输出99乘法表)

print("************for循环的99乘法表*************") for i 1, 9 dolocal line "" -- 创建一个局部变量来累积每行的输出--local 是一个关键字,用于声明一个局部变量。for j 1, i doline line .. j .. "*" .. i .. ""…...

物联网行业中,我们如何选择数据库?

在当今数字化潮流中,我们面对的不仅是海量数据,更是时间的涟漪。从生产线的传感器到金融市场的交易记录,时间序列数据成为了理解事物演变和趋势的关键。在面对这样庞大而动态的数据流时,我们需要深入了解一种强大的工具——时序数…...

openstack云计算(一)————openstack安装教程,创建空白虚拟机,虚拟机的环境准备

1、创建空白虚拟机 需要注意的步骤会截图一下,其它的基本都是下一步,默认的即可 ----------------------------------------------------------- 2、在所建的空白虚拟机上安装CentOS 7操作系统 (1)、在安装CentOS 7的启动界面中…...

Linux存储的基本管理

实验环境: 系统里添加两块硬盘 ##1.设备识别## 设备接入系统后都是以文件的形式存在 设备文件名称: SATA/SAS/USB /dev/sda,/dev/sdb ##s SATA, dDISK a第几块 IDE /dev/hd0,/dev/hd1 ##h hard VIRTIO-BLOCK /de…...

Python yield解析:深入理解生成器的魔力

Python中的yield关键字是生成器函数中非常重要的一部分,它可以使函数暂停执行并保存当前状态,同时允许生成器函数返回一个值。本文将详细介绍yield关键字的用法、特性、基本功能、高级功能、实际应用场景以及总结,帮助深入了解yield关键字的作…...

【Linux】GCCGDB

五、GCC & GDB 5.1 gcc 阶段变化命令预处理hello.c->hello.igcc -E 编译hello.i->hello.sgcc -S 汇编hello.s->hello.ogcc -c 链接hello.o->a.outgcc gcc -E hello.c -o 1.i # -o指定输出文件 gcc -E hello.c -g # -g包含提示信息 gcc -D gcc -DDebug <…...

InternLM2-Chat-1.8B 模型测试

在interStudio进行InternLM2-Chat-1.8B模型访问&#xff0c;进入开发机后 配置基础环境 新建conda环境并且进入 conda create -n demo python3.10 -y conda activate demo 下载pytorch等相关包 conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.…...

Flutter 关键字

import ‘package:xxxx.dart’; //源于pub.dev (完美的相对引入) import ‘xxxx.dart’; //自定义文件(库)(参考的相对引入(填写import命令码所在文件的上级文件夹下的文件(库)相对路径))(受到import命令码所在文件的参考路径的影响) import&#xff1a;import不具有传递性(类似…...

Java常用API之Collections类解读

写在开头&#xff1a;本文用于作者学习Java常用API 我将官方文档中Collections类中所有API全测了一遍并打印了结果&#xff0c;日拱一卒&#xff0c;常看常新 addAll() 将所有指定元素添加到指定 collection 中 可以添加一个或多个元素 Testpublic void test_addAl…...

KV260 BOOT.BIN更新 ubuntu22.04 netplan修改IP

KV260 2022.2设置 BOOT.BIN升级 KV260开发板需要先更新BOOT.BIN到2022.2版本&#xff0c;命令如下&#xff1a; sudo xmutil bootfw_update -i “BOOT-k26-starter-kit-202305_2022.2.bin” 注意BOOT.BIN应包含全目录。下面是更新到2022.1 FW的示例&#xff0c;非更新到2022.…...

Android 代码自定义drawble文件实现View圆角背景

简介 相信大多数Android开发都会遇到一个场景&#xff0c;给TextView或Button添加背景颜色&#xff0c;修改圆角&#xff0c;描边等需求。一看到这样的实现效果&#xff0c;自然就是创建drawble文件&#xff0c;设置相关属性shap&#xff0c;color&#xff0c;radius等。然后将…...

C#实现Word文档转Markdown格式(Doc、Docx、RTF、XML、WPS等)

文档格式的多样性丰富了我们的信息交流手段&#xff0c;其中Word文档因其强大的功能性而广受欢迎。然而&#xff0c;在网络分享、版本控制、代码阅读及编写等方面&#xff0c;Markdown因其简洁、易于阅读和编辑的特性而展现出独特的优势。将Word文档转换为Markdown格式&#xf…...

信息系统架构设计-以服务为中心的企业整合实践

生命周期 业务分析服务建模架构设计系统开发 案例背景 某航空公司的信息系统已有好几十年的历史。该航空公司的主要业务系统构建于20世纪七八十年代&#xff0c;以IBM的主机系统为主。 近年来&#xff0c;该公司已经在几个主要的核心系统之间构建了用于信息集成的信息Hub(I…...

mysql知识点梳理

mysql知识点梳理 一、InnoDB引擎中的索引策略&#xff0c;了解过吗&#xff1f;二、一条 sql 执行过长的时间&#xff0c;你如何优化&#xff0c;从哪些方面入手&#xff1f;三、索引有哪几种类型&#xff1f;四、SQL 约束有哪几种呢&#xff1f;五、drop、delete、truncate的区…...

版本排序,(如果 版本 是 1,1a,1.1a, 2, 2c , 1c , 1.2a, 3 , 5b , 5)进行排序

如果 版本 是 1&#xff0c;1a&#xff0c;1.1a&#xff0c; 2&#xff0c; 2c &#xff0c; 1c &#xff0c; 1.2a&#xff0c; 3 &#xff0c; 5b &#xff0c; 5 对上面的进行排序 利用 VersionComparator 导入依赖 <dependency><groupId>cn.hutool</groupId…...

Google视觉机器人超级汇总:从RT、RT-2到AutoRT、SARA-RT、RT-Trajectory

前言 随着对视觉语言机器人研究的深入&#xff0c;发现Google的工作很值得深挖&#xff0c;比如RT-2 ​想到很多工作都是站在Google的肩上做产品和应用&#xff0c;​Google真是科技进步的核心推动力&#xff0c;做了大量大模型的基础设施&#xff0c;服 故有了本文&#xf…...

python笔记(9)Dictionary(字典)

目录 创建字典 取值 修改字典 删除 内置函数和方法 创建字典 字典键值和value用&#xff1a;隔开&#xff0c;键值是不可变的&#xff0c;而且必须是唯一的&#xff0c;值可以变&#xff0c;可以是任意类型 dict {key1 : value1, key2 : value2 } 1&#xff09;不允许同…...

蓝桥杯嵌入式总结

用到外部时钟&#xff1a;UART,ADC,RTC 用到中断&#xff1a;UART,TIM LED_KEY: 将高低电平写入对应引脚 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); 读取对应引脚的电平状态 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) UART: 发送&#xff1a; int fputc(int …...

渗透测试:数据库UDF提权(linux)

目录 开头: 1.UDF提权简介&#xff1a; 1.1共享库文件(UDF文件)指定目录&#xff1a; 版本特征&#xff1a; 操作系统版本&#xff1a; 2.靶场UDF提权复现 提权前提 1.要有一个高权限的MySQL的账号 ​编辑 2.MySQL的权限配置secure_file_priv为空 3.必须有存放UDF文件的…...

java算法day45 | 动态规划part07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述&#xff1a;输入…...

HuggingFace踩坑记录-连不上,根本连不上

学习 transformers 的第一步&#xff0c;往往是几句简单的代码 from transformers import pipelineclassifier pipeline("sentiment-analysis") classifier("We are very happy to show you the &#x1f917; Transformers library.") ""&quo…...

面试题:Spring Boot Starter的功能与使用场景

Spring Boot Starter 是 Spring Boot 框架为了简化项目的初始化和配置工作而设计的一种模块化依赖管理方式。它主要具有以下几个关键功能和使用场景&#xff1a; 功能&#xff1a; 1. 依赖管理每个 Starter 都是一组相关的依赖项集合&#xff0c;这些依赖项都是为了实现特定功能…...

上位机图像处理和嵌入式模块部署(qmacvisual之n点标定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业场景中&#xff0c;很多时候图像是用来做测量的。虽然我们很希望载台是平的&#xff0c;摄像头是正对着拍摄物体的&#xff0c;但是运行时间长…...

Francek Chen 的128天创作纪念日

目录 Francek Chen 的128天创作纪念日机缘收获日常成就憧憬 Francek Chen 的128天创作纪念日 Francek Chen 的个人主页 机缘 不知不觉的加入CSDN已有两年时间了&#xff0c;最初我第一次接触CSDN技术社区是在2022年4月的时候&#xff0c;通过学长给我们推荐了几个IT社区平台&a…...

PyTorch之Torch Script的简单使用

一、参考资料 TorchScript 简介 Torch Script Loading a TorchScript Model in C TorchScript 解读&#xff08;一&#xff09;&#xff1a;初识 TorchScript libtorch教程&#xff08;一&#xff09;开发环境搭建&#xff1a;VSlibtorch和Qtlibtorch 二、Torch Script模型格…...

公司网站维护由那个部门做/长沙正规seo优化公司

文章目录1. 什么是搜索建议2. Elasticsearch Suggester API3. Term Suggester3.1 missing Mode3.2 popular mode3.3 always mode4. Phrase Suggester1. 什么是搜索建议 现代的搜索引擎&#xff0c;一般都会提供 Suggest as you type 的功能帮助用户在输入搜索的过程中&#xf…...

新建网站做优化/游戏推广员是做什么的

夜晚的故事(android夜间模式实现) 字数2003 阅读1393 评论11 喜欢18夜幕降临&#xff0c;他走在马路上&#xff0c;回想着今天发生的一切&#xff0c;他不敢相信事情就这样发生了。他最终还是决定拨打那个电话&#xff0c;掏出手机&#xff0c;解锁屏幕&#xff0c;突然一道强光…...

手机和pc合一的网站/新浪微博指数查询

先上一段特别简单的代码&#xff1a; print max(filter(lambda x: 555555 % x 0, range(100, 999))) 代码的意思是输出 555555 最大的三位数的约数是多少。 首先&#xff0c;这段代码的第一个知识点是python的内置函数 filter filter()函数&#xff0c;是用来过滤列表的。最简…...

做聊天网站的视频教程/seo搜索优化是什么呢

8月27日消息&#xff0c;二手时尚电商平台Plum近日完成数千万美元B 轮融资&#xff0c;本轮融资由经纬中国领投&#xff0c;启明创投以及IDG资本、九合创投、险峰长青等原老股东跟投。去年9 月团队就获得了IDG 资本、经纬中国和险峰长青的A 轮融资。 Plum于2017 年2 月上线&am…...

网站存在的问题及改进措施/搜索热度查询

这是一个实战中非常重要但是容易被忽视的概念&#xff0c;说它重要&#xff0c;是因为它比数据库重要&#xff1b;说它容易被忽视也是同样的原因&#xff0c;它经常被数据库概念替代。 如果你经验和经历中没有状态这个概念&#xff0c;极端地说&#xff1a;可能你的Java系统经验…...

网站建设内容和功能的介绍/网站开发从入门到实战

为深入贯彻落实《合肥工业大学“第二课堂成绩单”分模块实施细则》建设目标&#xff0c;11月15日&#xff0c;计算机与信息学院在翡翠科教楼举办学院第二课堂成绩单(体育健身模块)项目启动仪式&#xff0c;学院相关辅导员老师、团学干部、2019级各班班委骨干出席本次仪式。启动…...