Windows MCP.Net:基于.NET的Windows桌面自動化MCP服務器深度解析

📋 目錄

  • 項目概述

  • 技術架構深度解析

  • 核心功能模塊詳解

  • 代碼實現分析

  • 使用場景與實戰案例

  • 性能優化與最佳實踐

  • 擴展開發指南

  • 總結與展望

項目概述

什么是Windows-MCP.Net?

Windows MCP.Net是一個基于.NET 10.0開發的Windows桌面自動化MCP(Model Context Protocol)服務器,專為AI助手提供與Windows桌面環境交互的強大能力。該項目通過標準化的MCP協議,讓AI助手能夠直接操控Windows系統,實現真正的桌面自動化。

項目亮點

  • 🚀 基于最新技術棧:采用.NET 10.0框架,性能卓越

  • 🔧 模塊化設計:清晰的分層架構,易于擴展和維護

  • 🎯 功能全面:涵蓋桌面操作、文件系統、OCR識別、系統控制等多個領域

  • 📊 標準化協議:遵循MCP協議規范,與各種AI客戶端無縫集成

  • 🛡? 安全可靠:完善的錯誤處理和日志記錄機制

技術架構深度解析

整體架構設計

Windows MCP.Net采用經典的分層架構模式,主要包含以下幾個層次:

┌─────────────────────────────────────┐
│???????????MCP?Protocol?Layer????????│??←?協議通信層
├─────────────────────────────────────┤
│??????????????Tools?Layer????????????│??←?工具實現層
├─────────────────────────────────────┤
│????????????Services?Layer???????????│??←?業務服務層
├─────────────────────────────────────┤
│???????????Interface?Layer???????????│??←?接口定義層
├─────────────────────────────────────┤
│?????????Windows?API?Layer???????????│??←?系統API層
└─────────────────────────────────────┘

核心組件分析

1. 接口定義層(Interface Layer)

項目定義了清晰的服務接口,實現了良好的解耦:

//?桌面服務接口
public?interface?IDesktopService
{Task<string>?GetDesktopStateAsync(bool?useVision?=?false);Task<(string?Response,?int?Status)>?ClickAsync(int?x,?int?y,?string?button?=?"left",?int?clickCount?=?1);Task<(string?Response,?int?Status)>?TypeAsync(int?x,?int?y,?string?text,?bool?clear?=?false,?bool?pressEnter?=?false);//?...?更多方法
}//?文件系統服務接口
public?interface?IFileSystemService
{Task<(string?Response,?int?Status)>?CreateFileAsync(string?path,?string?content);Task<(string?Content,?int?Status)>?ReadFileAsync(string?path);Task<(string?Response,?int?Status)>?WriteFileAsync(string?path,?string?content,?bool?append?=?false);//?...?更多方法
}//?系統控制服務接口
public?interface?ISystemControlService
{Task<string>?SetVolumeAsync(bool?increase);Task<string>?SetVolumePercentAsync(int?percent);Task<string>?SetBrightnessAsync(bool?increase);//?...?更多方法
}
2. 服務實現層(Services Layer)

服務層是項目的核心,實現了具體的業務邏輯:

public?class?DesktopService?:?IDesktopService
{private?readonly?ILogger<DesktopService>?_logger;//?Windows?API?聲明[DllImport("user32.dll")]private?static?extern?bool?SetCursorPos(int?x,?int?y);[DllImport("user32.dll")]private?static?extern?void?mouse_event(uint?dwFlags,?uint?dx,?uint?dy,?uint?dwData,?int?dwExtraInfo);//?實現具體的桌面操作邏輯public?async?Task<(string?Response,?int?Status)>?ClickAsync(int?x,?int?y,?string?button?=?"left",?int?clickCount?=?1){try{SetCursorPos(x,?y);await?Task.Delay(50);?//?短暫延遲確保光標移動完成uint?mouseDown,?mouseUp;switch?(button.ToLower()){case?"left":mouseDown?=?MOUSEEVENTF_LEFTDOWN;mouseUp?=?MOUSEEVENTF_LEFTUP;break;case?"right":mouseDown?=?MOUSEEVENTF_RIGHTDOWN;mouseUp?=?MOUSEEVENTF_RIGHTUP;break;default:return?("Invalid?button?type",?1);}for?(int?i?=?0;?i?<?clickCount;?i++){mouse_event(mouseDown,?0,?0,?0,?0);mouse_event(mouseUp,?0,?0,?0,?0);if?(i?<?clickCount?-?1)?await?Task.Delay(100);}return?($"Successfully?clicked?at?({x},?{y})?with?{button}?button?{clickCount}?time(s)",?0);}catch?(Exception?ex){_logger.LogError(ex,?"Error?clicking?at?({X},?{Y})",?x,?y);return?($"Error:?{ex.Message}",?1);}}
}
3. 工具實現層(Tools Layer)

工具層將服務功能封裝為MCP工具,提供標準化的接口:

[McpServerToolType]
public?class?ClickTool
{private?readonly?IDesktopService?_desktopService;private?readonly?ILogger<ClickTool>?_logger;public?ClickTool(IDesktopService?desktopService,?ILogger<ClickTool>?logger){_desktopService?=?desktopService;_logger?=?logger;}[McpServerTool,?Description("Click?at?specific?coordinates?on?the?screen")]public?async?Task<string>?ClickAsync([Description("X?coordinate")]?int?x,[Description("Y?coordinate")]?int?y,[Description("Mouse?button:?left,?right,?or?middle")]?string?button?=?"left",[Description("Number?of?clicks:?1=single,?2=double,?3=triple")]?int?clickCount?=?1){_logger.LogInformation("Clicking?at?({X},?{Y})?with?{Button}?button,?{ClickCount}?times",?x,?y,?button,?clickCount);var?(response,?status)?=?await?_desktopService.ClickAsync(x,?y,?button,?clickCount);var?result?=?new{success?=?status?==?0,message?=?response,coordinates?=?new?{?x,?y?},button,clickCount};return?JsonSerializer.Serialize(result,?new?JsonSerializerOptions?{?WriteIndented?=?true?});}
}

核心功能模塊詳解

1. 桌面操作模塊(Desktop Tools)

桌面操作模塊是項目的核心,提供了豐富的Windows桌面交互功能:

鼠標操作
  • ClickTool:支持左鍵、右鍵、中鍵的單擊、雙擊、三擊操作

  • DragTool:實現拖拽操作,支持文件拖拽、窗口移動等

  • MoveTool:精確控制鼠標光標位置

  • ScrollTool:支持垂直和水平滾動操作

鍵盤操作
  • TypeTool:智能文本輸入,支持清除現有內容和自動回車

  • KeyTool:單個按鍵操作,支持所有鍵盤按鍵

  • ShortcutTool:快捷鍵組合操作,如Ctrl+C、Alt+Tab等

應用程序管理
  • LaunchTool:從開始菜單啟動應用程序,支持多語言環境

  • SwitchTool:智能窗口切換,支持窗口標題模糊匹配

  • ResizeTool:窗口大小和位置調整

2. 文件系統模塊(FileSystem Tools)

文件系統模塊提供了完整的文件和目錄操作功能:

//?文件操作示例
[McpServerTool,?Description("Write?content?to?a?file")]
public?async?Task<string>?WriteFileAsync([Description("The?file?path?to?write?to")]?string?path,[Description("The?content?to?write?to?the?file")]?string?content,[Description("Whether?to?append?to?existing?content?(true)?or?overwrite?(false)")]?bool?append?=?false)
{try{_logger.LogInformation("Writing?to?file:?{Path},?Append:?{Append}",?path,?append);var?(response,?status)?=?await?_fileSystemService.WriteFileAsync(path,?content,?append);var?result?=?new{success?=?status?==?0,message?=?response,path,contentLength?=?content?.Length????0,append};return?JsonSerializer.Serialize(result,?new?JsonSerializerOptions?{?WriteIndented?=?true?});}catch?(Exception?ex){_logger.LogError(ex,?"Error?in?WriteFileAsync");var?errorResult?=?new{success?=?false,message?=?$"Error?writing?to?file:?{ex.Message}",path,append};return?JsonSerializer.Serialize(errorResult,?new?JsonSerializerOptions?{?WriteIndented?=?true?});}
}

3. 系統控制模塊(SystemControl Tools)

系統控制模塊提供了Windows系統級別的控制功能:

音量控制
[McpServerTool,?Description("Set?system?volume?to?a?specific?percentage")]
public?async?Task<string>?SetVolumePercentAsync([Description("Volume?percentage?(0-100)")]?int?percent)
{_logger.LogInformation("Setting?volume?to?{Percent}%",?percent);return?await?_systemControlService.SetVolumePercentAsync(percent);
}
亮度控制
[McpServerTool,?Description("Set?screen?brightness?to?a?specific?percentage")]
public?async?Task<string>?SetBrightnessPercentAsync([Description("Brightness?percentage?(0-100)")]?int?percent)
{_logger.LogInformation("Setting?brightness?to?{Percent}%",?percent);return?await?_systemControlService.SetBrightnessPercentAsync(percent);
}
分辨率控制
[McpServerTool,?Description("Set?screen?resolution")]
public?async?Task<string>?SetResolutionAsync([Description("Resolution?type:?\"high\",?\"medium\",?or?\"low\"")]?string?type)
{_logger.LogInformation("Setting?resolution?to:?{Type}",?type);return?await?_systemControlService.SetResolutionAsync(type);
}

4. OCR識別模塊(OCR Tools)

OCR模塊提供了強大的文字識別功能,支持屏幕文字提取和定位:

  • ExtractTextFromScreenTool:全屏文字提取

  • ExtractTextFromRegionTool:指定區域文字提取

  • FindTextOnScreenTool:屏幕文字查找

  • GetTextCoordinatesTool:獲取文字坐標位置

代碼實現分析

依賴注入與服務注冊

項目使用了.NET的依賴注入容器,實現了良好的解耦:

//?Program.cs?中的服務注冊
var?builder?=?Host.CreateApplicationBuilder(args);//?配置日志輸出到stderr(stdout用于MCP協議消息)
builder.Logging.AddConsole(o?=>?o.LogToStandardErrorThreshold?=?LogLevel.Trace);//?注冊MCP服務和工具
builder.Services.AddSingleton<IDesktopService,?DesktopService>().AddSingleton<IFileSystemService,?FileSystemService>().AddSingleton<IOcrService,?OcrService>().AddSingleton<ISystemControlService,?SystemControlService>().AddMcpServer().WithStdioServerTransport().WithToolsFromAssembly(Assembly.GetExecutingAssembly());

錯誤處理與日志記錄

項目采用了統一的錯誤處理模式:

try
{//?業務邏輯var?result?=?await?SomeOperation();return?("Success?message",?0);
}
catch?(Exception?ex)
{_logger.LogError(ex,?"Error?in?operation?with?parameters?{Param1},?{Param2}",?param1,?param2);return?($"Error:?{ex.Message}",?1);
}

Windows API集成

項目大量使用了Windows API來實現底層功能:

//?Windows?API?聲明
[DllImport("user32.dll")]
private?static?extern?bool?SetCursorPos(int?x,?int?y);[DllImport("user32.dll")]
private?static?extern?void?mouse_event(uint?dwFlags,?uint?dx,?uint?dy,?uint?dwData,?int?dwExtraInfo);[DllImport("user32.dll")]
private?static?extern?IntPtr?GetForegroundWindow();[DllImport("user32.dll")]
private?static?extern?int?GetWindowText(IntPtr?hWnd,?StringBuilder?text,?int?count);//?常量定義
private?const?uint?MOUSEEVENTF_LEFTDOWN?=?0x02;
private?const?uint?MOUSEEVENTF_LEFTUP?=?0x04;
private?const?uint?MOUSEEVENTF_RIGHTDOWN?=?0x08;
private?const?uint?MOUSEEVENTF_RIGHTUP?=?0x10;

使用場景與實戰案例

場景1:自動化辦公任務

{"tool":?"launch_app","params":?{"name":?"notepad"}
}{"tool":?"type","params":?{"x":?400,"y":?300,"text":?"這是一個自動化生成的報告\n\n日期:2024年1月15日\n內容:系統運行正常","clear":?true}
}{"tool":?"key","params":?{"key":?"ctrl+s"}
}

場景2:批量文件處理

{"tool":?"list_directory","params":?{"path":?"C:\\Documents","includeFiles":?true,"recursive":?false}
}{"tool":?"search_files_by_extension","params":?{"directory":?"C:\\Documents","extension":?".txt","recursive":?true}
}{"tool":?"copy_file","params":?{"source":?"C:\\Documents\\report.txt","destination":?"C:\\Backup\\report_backup.txt","overwrite":?true}
}

場景3:系統監控與控制

{"tool":?"get_desktop_state","params":?{"useVision":?false}
}{"tool":?"set_volume_percent","params":?{"percent":?50}
}{"tool":?"set_brightness_percent","params":?{"percent":?80}
}

性能優化與最佳實踐

1. 異步編程模式

項目全面采用異步編程模式,提高了并發性能:

public?async?Task<string>?ProcessLargeFileAsync(string?filePath)
{//?使用異步I/O操作var?content?=?await?File.ReadAllTextAsync(filePath);//?異步處理var?processedContent?=?await?ProcessContentAsync(content);//?異步寫入await?File.WriteAllTextAsync(filePath?+?".processed",?processedContent);return?"Processing?completed";
}

2. 資源管理

public?class?DesktopService?:?IDesktopService,?IDisposable
{private?bool?_disposed?=?false;public?void?Dispose(){Dispose(true);GC.SuppressFinalize(this);}protected?virtual?void?Dispose(bool?disposing){if?(!_disposed){if?(disposing){//?釋放托管資源}//?釋放非托管資源_disposed?=?true;}}
}

3. 緩存策略

private?readonly?ConcurrentDictionary<string,?WindowInfo>?_windowCache?=?new();public?async?Task<WindowInfo>?GetWindowInfoAsync(string?windowTitle)
{return?_windowCache.GetOrAdd(windowTitle,?title?=>?{//?獲取窗口信息的昂貴操作return?GetWindowInfoFromSystem(title);});
}

擴展開發指南

1. 添加新的工具

要添加新的MCP工具,需要遵循以下步驟:

//?1.?在相應的服務接口中添加方法
public?interface?IDesktopService
{Task<(string?Response,?int?Status)>?NewOperationAsync(string?parameter);
}//?2.?在服務實現中添加具體邏輯
public?class?DesktopService?:?IDesktopService
{public?async?Task<(string?Response,?int?Status)>?NewOperationAsync(string?parameter){try{//?實現具體邏輯return?("Operation?completed",?0);}catch?(Exception?ex){_logger.LogError(ex,?"Error?in?NewOperation");return?($"Error:?{ex.Message}",?1);}}
}//?3.?創建MCP工具類
[McpServerToolType]
public?class?NewOperationTool
{private?readonly?IDesktopService?_desktopService;private?readonly?ILogger<NewOperationTool>?_logger;public?NewOperationTool(IDesktopService?desktopService,?ILogger<NewOperationTool>?logger){_desktopService?=?desktopService;_logger?=?logger;}[McpServerTool,?Description("Description?of?the?new?operation")]public?async?Task<string>?ExecuteAsync([Description("Parameter?description")]?string?parameter){_logger.LogInformation("Executing?new?operation?with?parameter:?{Parameter}",?parameter);var?(response,?status)?=?await?_desktopService.NewOperationAsync(parameter);var?result?=?new{success?=?status?==?0,message?=?response,parameter};return?JsonSerializer.Serialize(result,?new?JsonSerializerOptions?{?WriteIndented?=?true?});}
}

2. 單元測試編寫

public?class?NewOperationToolTest
{private?readonly?IDesktopService?_desktopService;private?readonly?ILogger<NewOperationTool>?_logger;private?readonly?NewOperationTool?_tool;public?NewOperationToolTest(){var?services?=?new?ServiceCollection();services.AddLogging(builder?=>?builder.AddConsole());services.AddSingleton<IDesktopService,?DesktopService>();var?serviceProvider?=?services.BuildServiceProvider();_desktopService?=?serviceProvider.GetRequiredService<IDesktopService>();_logger?=?serviceProvider.GetRequiredService<ILogger<NewOperationTool>>();_tool?=?new?NewOperationTool(_desktopService,?_logger);}[Fact]public?async?Task?ExecuteAsync_ValidParameter_ReturnsSuccess(){//?Arrangevar?parameter?=?"test";//?Actvar?result?=?await?_tool.ExecuteAsync(parameter);//?AssertAssert.NotNull(result);var?jsonResult?=?JsonSerializer.Deserialize<JsonElement>(result);Assert.True(jsonResult.GetProperty("success").GetBoolean());}
}

3. 配置管理

//?appsettings.json
{"Logging":?{"LogLevel":?{"Default":?"Information","Microsoft":?"Warning","Microsoft.Hosting.Lifetime":?"Information"}},"WindowsMcp":?{"DefaultTimeout":?5000,"MaxRetries":?3,"EnableCaching":?true}
}//?配置類
public?class?WindowsMcpOptions
{public?int?DefaultTimeout?{?get;?set;?}?=?5000;public?int?MaxRetries?{?get;?set;?}?=?3;public?bool?EnableCaching?{?get;?set;?}?=?true;
}//?在Program.cs中注冊配置
builder.Services.Configure<WindowsMcpOptions>(builder.Configuration.GetSection("WindowsMcp"));

總結與展望

項目優勢

  1. 技術先進性:基于.NET 10.0,采用最新的C#語言特性

  2. 架構合理性:清晰的分層架構,良好的可擴展性

  3. 功能完整性:涵蓋桌面自動化的各個方面

  4. 標準化程度:遵循MCP協議,具有良好的互操作性

  5. 代碼質量:完善的錯誤處理、日志記錄和單元測試

技術創新點

  1. MCP協議集成:率先將MCP協議應用于Windows桌面自動化

  2. 多模塊設計:模塊化的工具設計,便于按需使用

  3. 異步優化:全面的異步編程,提升性能表現

  4. 智能識別:結合OCR技術,實現智能UI元素識別

未來發展方向

  1. AI集成增強

    • 集成更多AI模型,提升自動化的智能程度

    • 支持自然語言指令轉換為操作序列

    • 增加機器學習能力,自動優化操作路徑

  2. 跨平臺支持

    • 擴展到Linux和macOS平臺

    • 統一的跨平臺API接口

    • 平臺特定功能的適配層

  3. 云端集成

    • 支持云端部署和遠程控制

    • 分布式任務執行能力

    • 云端AI服務集成

  4. 安全性增強

    • 操作權限細粒度控制

    • 操作審計和合規性檢查

    • 數據加密和安全傳輸

  5. 性能優化

    • GPU加速的圖像處理

    • 更高效的內存管理

    • 并行處理能力提升

對開發者的價值

Windows MCP.Net不僅是一個功能強大的桌面自動化工具,更是一個優秀的.NET項目實踐案例。通過學習這個項目,開發者可以:

  • 掌握現代.NET應用程序的架構設計模式

  • 學習Windows API的集成和使用技巧

  • 了解MCP協議的實現和應用

  • 獲得桌面自動化開發的實戰經驗

社區貢獻

項目采用開源模式,歡迎社區貢獻:

  • 功能擴展:添加新的工具和功能模塊

  • 性能優化:提升現有功能的性能表現

  • 文檔完善:改進項目文檔和使用指南

  • 測試覆蓋:增加單元測試和集成測試

  • Bug修復:發現和修復項目中的問題


如果這篇文章對您有幫助,請點贊👍、收藏?、分享📤!您的支持是我們持續改進的動力!

項目地址Windows-MCP.Net GitHub倉庫https://github.com/AIDotNet/Windows-MCP.Net

相關鏈接

  • Model Context Protocol官方文檔

  • .NET 10.0官方文檔

  • Windows API參考文檔


本文基于Windows MCP.Net項目源碼分析編寫,旨在為.NET開發者提供桌面自動化開發的技術參考。如有問題或建議,歡迎在評論區交流討論!

更多AIGC文章

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95733.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Boost.Asio學習(7):Boost.Beast實現簡易http服務器

namespace beast boost::beast;beast::flat_buffer是一個用于 Boost.Asio 和 Boost.Beast 網絡讀寫的緩沖區實現。專為 一次性順序讀取 / 消費 場景設計&#xff0c;比 std::string 或 std::vector 高效&#xff0c;因為它是扁平內存結構&#xff08;contiguous memory&#x…

深入解析JVM內存區域劃分:從理論到實踐

Java虛擬機&#xff08;JVM&#xff09;是Java程序運行的核心環境&#xff0c;它負責管理內存分配、垃圾回收、字節碼執行等關鍵任務。理解JVM的內存區域劃分&#xff0c;對于優化Java應用性能、排查內存問題&#xff08;如OutOfMemoryError、StackOverflowError&#xff09;至…

滑窗|貪心|?滾動數組

lc17.08pair按身高升序、相同時體重降序排序結果是找體重序列的最長遞增子序列長度核心&#xff1a;轉化為二維最長遞增子序列問題求解vector<int> dp;for (auto& p : hw) {int w p.second;auto it lower_bound(dp.begin(), dp.end(), w);if (it dp.end()) {dp.pu…

深入理解數據庫架構:從原理到實踐的完整指南

一、數據庫存儲架構的多維度分類體系 1.1 基于數據組織方式的存儲架構分類 數據庫的存儲架構從根本上決定了其性能特征、適用場景和擴展能力。理解不同的數據組織方式是選擇合適數據庫技術的基礎&#xff0c;這種分類不僅反映了技術實現的差異&#xff0c;更體現了對不同業務需…

體彩排列三第2025218期號碼分析

大家好&#xff0c;本人蔡楚門來此平臺分享一下本期得經驗和思路&#xff0c;希望能夠給大家帶來好的運氣和靈感&#xff01;體彩排列三第2025218期號碼分析&#xff0c;大小號碼數字分析&#xff0c;上期開出全小號碼最多&#xff0c;最近兩期的開獎號碼全部都是全小號碼最多&…

java設計模式之迪米特法則介紹與說明

一、核心概念與目標 基本定義 迪米特法則的核心思想是&#xff1a;一個對象應該對其他對象盡可能少地了解&#xff0c;僅與直接關聯的對象&#xff08;即“朋友”&#xff09;通信&#xff0c;避免與“陌生人”產生直接交互。 直接朋友&#xff1a;包括當前對象的成員變量、方法…

2024-2025華為ICT大賽中國區 實踐賽昇騰AI賽道(高職組)全國總決賽 理論部分真題+解析

Part 1 昇騰AI全棧系統模塊(共6題)&#xff1a;1、許多計算芯片可以設計作為人工智能的計算芯片&#xff0c;但不同的芯片計算性能不同&#xff0c;昇騰計算芯片是一種()芯片。(單選題)A.CPU B.GPU C. NPU D.TPU正確答案&#xff1a;C解析&#xff1a;A項CPU中央處理器的架…

網絡安全和基礎設施安全局 (CISA) 表示微分段不再是可選的

網絡安全和基礎設施安全局 (CISA) 最近發布了一系列指導文件中的第一份&#xff0c;旨在幫助聯邦機構實施微分段&#xff0c;作為其零信任架構 (ZTA) 戰略的一部分&#xff0c;以遵守2022 年白宮的授權。 該文件《零信任中的微分段&#xff0c;第一部分&#xff1a;介紹和規劃…

Spring Boot SseEmitter 重復請求問題深度分析與解決方案

1. 前言 在使用 Spring Boot 開發流式接口(Server-Sent Events)時,我們遇到了一個令人困惑的問題:每次 SseEmitter 完成后,都會觸發第二次請求,導致重復請求檢測機制誤報。本文將詳細記錄問題的發現、分析過程以及最終的解決方案。 2. 系統架構背景 2.1 請求處理架構 …

心路歷程-三個了解敲開linux的大門

學習前都愛嘮叨一番&#xff1a; 了解一下&#xff1a;互聯網的發展是離不開服務器的&#xff0c;而服務器的系統主流的還是Linux&#xff1b;這個是有數據進行支撐的&#xff1b;這個只是作為了解而已&#xff0c;我們并不買課&#xff0c;也不做什么買賣的行為&#xff0c;僅…

關于“雙指針法“的總結

筆者這些天終于達成了只狼的全成就&#xff0c;甚是歡喜。然而樂極生悲&#xff0c;最近做了些算法題&#xff0c;竟沒有一道靠自己做出來。感覺算法題常常用到“雙指針法”呢……為什么到現在我還是做不出來這些算法題……今天就來試著總結一下它的使用場景吧。快慢指針法又名…

基于51單片機的智能吊燈

基于 51 單片機的智能吊燈設計與實現論文簡綱一、引言1.1 研究背景與意義闡述傳統照明設備在節能性、智能化方面的不足&#xff0c;結合智能家居產業發展趨勢&#xff0c;說明設計基于 51 單片機的智能吊燈對提升生活便利性、降低能耗的現實意義。1.2 國內外研究現狀簡要介紹當…

CF每日三題(1500-1700)

1792C 逆向思維1036D 前綴和尺取1598D 組合數學取三元組 將二元組放在坐標系中更好找到規律 1792C 思維 1500 參考題解 正難則反 注意是對一個排列進行操作&#xff0c;最后還原成1,2,…,n 每次選兩個數字很難想&#xff0c;反著想就是把1-n的排列變成所給數組的逆操作&#x…

Boost搜索引擎項目(詳細思路版)

目錄 項目相關背景 搜索引擎原理技術棧和項目環境 導入數據到自己的本地 數據去標簽與數據清洗模塊 Enumfile(src_path, &file_list)遞歸式寫入 Parsehtml(file_list, &results)去標簽 bool Parsetitle(const string& file, string* title)拆分標題 bool Pa…

AI產品經理面試寶典第69天:大模型穩定性評估與AI倫理挑戰面試題全解析

1. AI倫理與技術挑戰 1.1 問:你認為AI的最大挑戰是什么? 答:AI面臨的最大挑戰是算法偏見與模型黑箱問題。具體表現為: 數據偏見放大:訓練數據中隱含的性別、種族等偏見會被模型繼承,如招聘算法中的性別歧視案例 決策透明性缺失:深度學習模型的可解釋性不足,醫療診斷場…

【build】RDK構建系統v0.1 (持續更新。。。。)

一、 項目概述RDK構建系統是一個用于構建和定制嵌入式系統的自動化工具&#xff0c;通過簡單的命令行操作&#xff0c;您可以完成從下載依賴包、定制根文件系統、構建內核到打包鏡像的完整流程。該系統采用模塊化設計&#xff0c;提供了豐富的配置選項&#xff0c;適用于不同的…

關于RSA和AES加密

RSA非對稱加密 非對稱加密不能傳輸大數據量&#xff0c;但比對稱加密要安全&#xff0c;所以傳輸密碼一般就是用的非對稱加密 接口拿到RSA公鑰然后再加密之后傳給后端就好了 let crypt new JSEncrypt(); crypt.setPublicKey(res.message); // console.log(加密前:, data); let…

云蝠智能VoiceAgent:AI賦能售后服務場景的創新實踐

引言&#xff1a;售后服務數字化轉型的必然趨勢在數字經濟時代&#xff0c;售后服務已成為企業核心競爭力的重要組成部分。據統計&#xff0c;優質的售后服務能夠提升客戶留存率高達67%&#xff0c;同時降低客戶獲取成本約30%。然而&#xff0c;傳統售后服務模式面臨著人力成本…

C#控制臺輸入(Read()、ReadKey()和ReadLine())

下面我們來詳細講解 C# 中三種控制臺輸入方法&#xff1a;Console.Read()、Console.ReadKey() 和 Console.ReadLine() 的區別、原理、使用場景&#xff0c;并配上清晰的代碼例子和運行結果說明。? 一、三者的根本區別&#xff08;一句話總結&#xff09;方法返回值讀取方式是否…

Windows的Roaming文件夾的作用和Local/LocalLow的區別

&#x1f4c1; Roaming 文件夾的核心意義? 什么是“漫游”&#xff08;Roaming&#xff09;&#xff1f;跨設備同步&#xff1a;當用戶登錄到同一域內的不同 Windows 設備&#xff08;如公司或學校的辦公電腦&#xff09;時&#xff0c;Roaming 文件夾中的數據會自動通過網絡同…