Web应用开发 --- Tips

  • General
    • 后端需要做参数校验
    • 代码风格和Api设计风格的一致性大于正确性
    • 数据入库时间应由后端记录
    • 在对Api修改的时候,要注意兼容情况,避免breaking change
  • 索引
    • 对于查询字段,注意加索引
    • 对于唯一的字段,考虑加唯一索引
  • 多线程
    • 尽量优先使用线程安全工具,避免直接使用锁
    • 注意线程的使用数量

General

后端需要做参数校验

  • 后端Api需要根据情况,进行参数校验

代码风格和Api设计风格的一致性大于正确性

  • 一致的代码风格使团队所有成员都能快速理解代码
    新成员加入时学习曲线更低
    减少"这是谁写的代码?"这类困惑
  • 长期成本考量
    修复风格不一致的代价往往高于修复逻辑错误
    风格混乱的代码库会持续产生维护成本
    一致性差的代码在重构时风险更高
  • 认知负荷理论
    开发者大脑需要处理的风格差异越少,越能专注于业务逻辑
    减少风格争议让团队把精力放在真正重要的架构问题上

数据入库时间应由后端记录

  • 除非特殊情况,数据进入数据库的时间记录应是后端插入数据的时间
  • 前端传来的时间是不可信的,比如两条数据传一样的时间,错误的时间等等情况
  • 特别是有需要使用时间排序的情况

在对Api修改的时候,要注意兼容情况,避免breaking change

  • 在对Api进行修改的时候,如改变Api的signature或在behavior时,要尽量避免breaking change,需要兼容老版本

索引

对于查询字段,注意加索引

  • 对于查询的字段,需要考虑加索引提高查询速度

对于唯一的字段,考虑加唯一索引

  • 对于不可重复的字段,需要加唯一索引

多线程

尽量优先使用线程安全工具,避免直接使用锁

  • 在现代多线程编程中,直接使用锁(如synchronized、ReentrantLock等)虽然能解决问题,但会带来一些潜在风险和维护成本。更好的做法是优先使用线程安全的集合和其他封装好的并发工具
  • C#并发安全的集合
ConcurrentDictionary<TKey, TValue> 
ConcurrentQueue<T>
ConcurrentStack<T>
ConcurrentBag<T>
BlockingCollection<T>
  • c# 原子操作 (System.Threading.Interlocked)
Interlocked.Increment(ref counter); // 原子递增
Interlocked.Decrement(ref counter); // 原子递减
Interlocked.Exchange(ref value, newValue); // 原子交换
Interlocked.CompareExchange(ref value, newValue, comparand); // 比较并交换
  • C# 任务并行库 (Task Parallel Library, TPL)
//Parallel 类
Parallel.For(0, 100, i => {// 并行执行的代码
});
Parallel.ForEach(collection, item => {// 并行处理的代码
});
 //PLINQ (Parallel LINQ)
var results = data.AsParallel().Where(x => x > 0).Select(x => Process(x)).ToList();
//Task 类
Task.Run(() => {// 后台执行的代码
});var task1 = Task.Run(() => DoWork1());
var task2 = Task.Run(() => DoWork2());
Task.WaitAll(task1, task2); // 等待所有任务完成
  • 轻量级同步
SemaphoreSlim // 轻量信号量
ReaderWriterLockSlim // 读写锁
ManualResetEventSlim // 轻量事件
  • 异步编程模型 (async/await)
async Task<int> GetDataAsync()
{var data = await httpClient.GetStringAsync(url);return ProcessData(data);
}

注意线程的使用数量

  • 在使用多线程的时候,需要预估和注意线程的数量. 过多的线程数量会导致资源紧张问题
  • 比如一个发送消息的代码, 当taskNum过于大的时候,会导致大量的线程被创建,消耗资源
    解决方案
  • 思考是否真的需要多线程,可否不用
  • 使用信号量控制线程数量
  • 使用线程池控制线程数量
    public void Run(int taskNum){var producerTasks = new Task[taskNum];for (int i = 0; i < producerTasks.Length; i++){int producerId = i + 1;producerTasks[i] = Task.Run(() => ProducerThread(producerId));}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87210.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87210.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87210.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 安装使用教程

一、CSS 简介 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是用于为 HTML 页面添加样式的语言。通过 CSS 可以控制网页元素的颜色、布局、字体、动画等&#xff0c;是前端开发的三大核心技术之一&#xff08;HTML、CSS、JavaScript&#xff09;。…

机器学习中为什么要用混合精度训练

目录 FP16与显存占用关系机器学习中一般使用混合精度训练&#xff1a;FP16计算 FP32存储关键变量。 FP16与显存占用关系 显存&#xff08;Video RAM&#xff0c;简称 VRAM&#xff09;是显卡&#xff08;GPU&#xff09;专用的内存。 FP32&#xff08;单精度浮点&#xff09;&…

[附源码+数据库+毕业论文+答辩PPT]基于Spring+MyBatis+MySQL+Maven+vue实现的中小型企业财务管理系统,推荐!

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本中小型企业财务管理就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信…

华为云Flexus+DeepSeek征文 | 对接华为云ModelArts Studio大模型:AI赋能投资理财分析与决策

引言&#xff1a;AI金融&#xff0c;开启智能投资新时代​​ 随着人工智能技术的飞速发展&#xff0c;金融投资行业正迎来前所未有的变革。​​华为云ModelArts Studio​​结合​​Flexus高性能计算​​与​​DeepSeek大模型​​&#xff0c;为投资者提供更精准、更高效的投资…

从模型部署到AI平台:云原生环境下的大模型平台化演进路径

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;部署只是起点&#xff0c;平台才是终局 在过去一年&#xff0c;大语言模型的飞速发展推动了AI生产力浪潮。越来越多…

UI前端大数据可视化创新:利用AR/VR技术提升用户沉浸感

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据与沉浸式技术高速发展的今天&#xff0c;传统二维数据可视化已难以满足复杂数据场景的…

MacOS 安装brew 国内源【超简洁步骤】

​/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"请输入序号&#xff1a;1

GENESIS64:全球知名的工业设备监控与可视化平台

一、概述 GENESIS64是一款由ICONICS开发的先进工业自动化软件平台&#xff0c;专为实现实时数据可视化、智能化监控及管理而设计。该平台采用模块化架构&#xff0c;具有高效的数据处理能力和灵活的扩展性&#xff0c;适用于各类工业环境&#xff0c;帮助企业实现自动化运营&a…

RNN(Recurrent Neural Network,循环神经网络)家族详解(RNN,LSTM,GRU)

文章目录 一、RNN基础&#xff1a;序列建模的核心思想1.1 RNN的本质与核心机制1.2 应用场景与结构分类 二、传统RNN&#xff1a;序列模型的起点2.1 内部结构与数学表达2.2 计算示例2.3 RNN在Pytorch中的API2.4 代码示例2.5 优缺点与梯度问题 三、LSTM&#xff1a;门控机制破解长…

多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务

某保险公司因阿里云KMS密钥与华为云密钥割裂管理&#xff0c;导致勒索事件中解密失败&#xff01;据统计&#xff0c;73%企业因多云密钥分散管理引发数据恢复延迟&#xff08;IDC 2024&#xff09;。本文将详解安当CKMS统一纳管方案&#xff0c;实现跨云密钥全生命周期管控&…

光伏接入承载力计算仿真:基于图计算技术的自动建模技术研究

光伏接入承载力计算仿真:基于图计算技术的自动建模技术研究 一、 引言:挑战与机遇 光伏发电的大规模接入对中低压配电网的安全稳定运行带来了巨大挑战。精确评估电网对光伏的承载力(Hosting Capacity, HC)是保障消纳与安全的关键。传统承载力评估严重依赖电网仿真,而仿真…

如何在Excel中每隔几行取一行

如何在Excel中每隔几行取一行 摘要&#xff1a; Excel中快速实现每隔n行取一行的技巧&#xff1a;使用OFFSET函数配合ROW函数即可实现。公式为OFFSET(起始单元格,(ROW(A1)-1)*n,)&#xff0c;其中n为间隔行数。例如从A2开始每2行取一行&#xff0c;公式为OFFSET(A2,(ROW(A1)-1)…

【MariaDB】MariaDB Server 11.3.0 Alpha下载、安装、配置

MariaDB是一个开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由MySQL的原始开发者Michael Widenius主导开发。作为MySQL的分支&#xff0c;MariaDB旨在保持与MySQL的高度兼容性&#xff0c;同时提供性能优化、新功能和更好的开源承诺。 目录 MariaDB下载 …

如何保证缓存和数据库的双写一致性

程序员面试资料大全&#xff5c;各种技术书籍等资料-1000G IDEA开发工具- FREE 一、双写一致性问题本质 在分布式系统中&#xff0c;缓存与数据库双写一致性指当数据被修改时&#xff0c;如何确保缓存&#xff08;如Redis&#xff09;和数据库&#xff08;如MySQL&#xff09…

Qt 5.9 XML文件写入指南

Qt 5.9 XML文件写入指南 在Qt 5.9中&#xff0c;有多种方法可以编写XML文件。下面我将介绍三种主要方法&#xff0c;并提供完整的代码示例和最佳实践。 三种XML写入方法对比 方法优点缺点适用场景QXmlStreamWriter高效、内存占用低无树形结构大型XML文件QDomDocument树形结构…

一些ubuntu命令记录(持续补充)

一、查看代码运行占用的内存 1、使用 top 命令 top 命令是一个实时的系统监控工具&#xff0c;可以显示当前系统中所有进程的资源使用情况。运行以下命令&#xff1a; top 在 top 界面中&#xff0c;可以看到每个进程的内存使用情况&#xff08;%MEM 列&#xff09;。 如何…

今日学习:音视频领域入门文章参考(待完善)

音视频领域概览 入门文章参考 CSDN 雷神 博客园 2022-5-22

.npmrc和.yarnrc配置文件介绍:分别用于 Node.js 中的 npm(Node Package Manager)和 Yarn 包管理工具

.npmrc 和 .yarnrc 是两个配置文件&#xff0c;分别用于 Node.js 中的 npm&#xff08;Node Package Manager&#xff09;和 Yarn 包管理工具。它们存储了与包管理相关的配置选项&#xff0c;允许用户自定义和控制包的安装、版本、缓存等行为。下面是它们的详细说明&#xff1a…

数字人分身 + 矩阵系统聚合:源码搭建,支持OEM

在 AIGC 技术爆发的当下&#xff0c;数字人分身已从概念走向实用&#xff0c;而矩阵系统的聚合能力则让单个数字人分身突破场景限制&#xff0c;实现 “一人多岗” 的规模化应用。无论是企业客服、直播带货&#xff0c;还是教育培训、虚拟社交&#xff0c;数字人分身 矩阵系统…

学习昇腾开发的第12天--安装第三方依赖

第三方依赖安装指导&#xff08;C样例&#xff09; 前置条件 1. 按照官方指导文档完成CANN包安装。 2. CANN版本需要>5.0.4.alpha001&#xff0c;低于此版本请参见昇腾CANN样例仓介绍中的版本说明切换tag并使用发行版。 安装须知 samples仓中的部分c样例使用到opencv&am…