Web應用開發 --- Tips

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…