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

RESTful如何传递参数

文章目录

  • 前言
  • 一、REST 遵循核心原则
  • 二、REST 的优点和缺点
    • 1.优点
    • 2.缺点
  • 三、常见参数传递方式
    • 1)路径参数(Path Parameters)
    • 2)查询参数(Query Parameters)
    • 3)请求体参数(Request Body)
    • 4)表单参数(Form Data)
    • 5)请求头参数(Headers)
    • 6)混合参数传递
    • 7)动态参数(Dynamic Object)
  • 四、关键技术与调试技巧
    • 模型绑定控制
    • 复杂模型验证
    • 处理数组和集合
    • 全局异常处理
  • 五、性能与安全最佳实践
    • 1)防过度提交攻击(Overposting)
    • 2)启用请求验证
    • 3)文件上传安全
    • 4)API 版本控制
  • 六、调试工具
    • 1)Swagger/OpenAPI
    • 2)Postman
    • 3)ASP.NET Core 日志
  • 总结


前言

REST(Representational State Transfer) 是一种基于 HTTP 协议的软件架构风格,用于设计网络应用的接口(API)。它的核心思想是通过资源(Resource)的表(Representation)来实现客户端与服务器之间的状态交互。

一、REST 遵循核心原则

  1. 资源导向:所有事物抽象为资源(如用户、订单),通过唯一标识符(URI/URL)定位。
  2. 统一接口:使用标准的 HTTP 方法(GET、POST、PUT、DELETE 等)操作资源。
  3. 无状态(Stateless):服务器不保存客户端状态,每次请求必须包含所有必要信息。
  4. 可缓存:响应需明确标注是否可缓存,以提高性能。
  5. 分层系统:客户端无需关心服务器架构(如负载均衡、代理)。
  6. 按需代码(可选):服务器可返回可执行代码(如 JavaScript)扩展客户端功能。

二、REST 的优点和缺点

1.优点

  1. 简单易用
    基于 HTTP 标准方法,学习成本低。
    使用 URL 和 JSON/XML 等通用格式,开发调试方便。
  2. 可扩展性强
    无状态设计允许服务器轻松横向扩展。
    客户端与服务器解耦,支持独立迭代。
  3. 高性能与缓存
    利用 HTTP 缓存机制(如 Cache-Control),减少重复请求。
  4. 跨平台兼容
    支持多种数据格式(JSON、XML、HTML等),适配不同客户端(Web、移动端、IoT设备)。
  5. 松耦合
    客户端只需关注资源 URI 和接口规范,无需了解服务端实现细节。

2.缺点

  1. 过度请求(Over-fetching/Under-fetching)
    返回固定数据结构,可能导致客户端获取冗余数据或需要多次请求(如嵌套资源)。
  2. 无状态的双刃剑
    每次请求需携带完整信息(如身份验证 Token),增加网络开销。
    不适合需保持会话状态的应用(如实时游戏)。
  3. 缺乏严格规范
    REST 是架构风格而非标准,不同开发者对“RESTful”的理解可能不同(如 URI 设计、HTTP 方法使用)。
  4. 复杂操作支持有限
    对非 CRUD(增删改查)操作(如批量更新、事务处理)需设计绕行方案(如自定义端点)。
  5. 版本管理问题
    API 升级时需谨慎处理版本兼容性(如通过 URL 路径 v1/resource 或请求头)。

三、常见参数传递方式

1)路径参数(Path Parameters)

  1. 通过 URL 路径中的占位符传递参数,常用于标识唯一资源

    [HttpGet("users/{id}")]
    public IActionResult GetUserById(int id) 
    {// 直接通过方法参数接收路径参数var user = _userService.GetUser(id);return Ok(user);
    }
    

    路由模板[HttpGet(“users/{id}”)] 定义占位符 {id},参数名需与方法参数名一致,支持类型自动转换(如 int、Guid)。

  2. 高级场景(自定义路由约束(如正则表达式))

    [HttpGet("users/{id:guid}")]
    public IActionResult GetUserById(Guid id) { ... }[HttpGet("posts/{slug:regex(^[a-z0-9-]+$)}")]
    public IActionResult GetPostBySlug(string slug) { ... }
    

2)查询参数(Query Parameters)

  1. 通过 URL 末尾的 ?key=value 形式传递,适用于过滤、分页、排序等场景。

    [HttpGet("users")]
    public IActionResult SearchUsers([FromQuery] string name, [FromQuery] int? age)
    {// 使用 [FromQuery] 显式绑定查询参数var users = _userService.Search(name, age);return Ok(users);
    }
    
    [HttpGet("users")]
    public IActionResult SearchUsers([FromQuery] string name, [FromQuery] int page = 1, [FromQuery] int pageSize = 10)
    {var users = _userService.Search(name, page, pageSize);return Ok(users);
    }
    
  2. 调用示例

    GET /api/users?name=John&age=30
    GET /api/users?name=Alice&page=2&pageSize=20
    
  3. 对象绑定(将多个查询参数封装到对象)

    public class UserSearchParams
    {public string Name { get; set; }public int Page { get; set; } = 1;public int PageSize { get; set; } = 10;
    }[HttpGet("users/search")]
    public IActionResult SearchUsers([FromQuery] UserSearchParams parameters)
    {// 直接使用 parameters.Name, parameters.Page 等return Ok(_userService.Search(parameters));
    }
    

3)请求体参数(Request Body)

  1. 通过 HTTP 请求体传递复杂数据(如 JSON/XML),适用于 POST/PUT/PATCH 请求。
    JSON 绑定示例

    [HttpPost("users")]
    public IActionResult CreateUser([FromBody] UserCreateDto dto)
    {if (!ModelState.IsValid)return BadRequest(ModelState);var user = _mapper.Map<User>(dto);_db.Users.Add(user);_db.SaveChanges();return CreatedAtAction(nameof(GetProduct), new { id = user.Id }, user);
    }
    

    DTO 类

    public class UserCreateDto
    {[Required][StringLength(100)]public string Name { get; set; }public int Age { get; set; }
    }
    

    配置 JSON 序列化(Program.cs)

    builder.Services.AddControllers().AddJsonOptions(options =>{options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;options.JsonSerializerOptions.WriteIndented = true;});
    

    注意确保请求头包含 Content-Type: application/json。

4)表单参数(Form Data)

  1. 处理 HTML 表单提交或文件上传,支持 multipart/form-datax-www-form-urlencoded

  2. 文件上传示例

    [HttpPost("upload")]
    public async Task<IActionResult> UploadFile([FromForm] IFormFile file,[FromForm] string description)
    {if (file == null || file.Length == 0)return BadRequest("No file uploaded.");var uploadsPath = Path.Combine(_env.WebRootPath, "uploads");Directory.CreateDirectory(uploadsPath);var filePath = Path.Combine(uploadsPath, file.FileName);using (var stream = new FileStream(filePath, FileMode.Create)){await file.CopyToAsync(stream);}return Ok(new { FileName = file.FileName, Size = file.Length, Description = description });
    }
    

    配置上传限制(Program.cs)

    // 修改默认 28.6MB 限制
    builder.Services.Configure<FormOptions>(options =>
    {options.MultipartBodyLengthLimit = 1024 * 1024 * 100; // 100MB
    });
    

    调用方式
    使用 Postman 或前端表单提交,选择 form-data 类型。

5)请求头参数(Headers)

  1. HTTP 请求头(Headers )中获取参数,常用于身份验证(如 JWT Token)。

    [HttpGet("profile")]
    public IActionResult GetUserProfile([FromHeader(Name = "Authorization")] string authHeader)
    {if (string.IsNullOrEmpty(authHeader) || !authHeader.StartsWith("Bearer "))return Unauthorized();var token = authHeader["Bearer ".Length..];var principal = _tokenService.ValidateToken(token);// 获取用户信息...return Ok(principal.Claims.ToDictionary(c => c.Type, c => c.Value));
    }
    

    调用示例
    请求头添加:Authorization: Bearer your_token_here

6)混合参数传递

  1. 结合路径、查询参数和请求体,适用于复杂场景

    [HttpPut("orders/{orderId}/items/{itemId}")]
    public IActionResult UpdateOrderItem(int orderId,               // 路径参数Guid itemId,               // 路径参数[FromQuery] bool trackChanges,  // 查询参数[FromBody] OrderItemUpdateDto dto)  // 请求体
    {var item = _orderService.UpdateItem(orderId, itemId, dto, trackChanges);return Ok(item);
    }
    

    调用示例

    PUT /api/orders/123/items/abcde?trackChanges=true
    Content-Type: application/json{"quantity": 5,"notes": "Urgent delivery"
    }
    

7)动态参数(Dynamic Object)

  1. 使用 dynamic字典接收未定义参数

    [HttpPost("dynamic")]
    public IActionResult DynamicParams([FromBody] dynamic data)
    {JObject json = JObject.FromObject(data);string name = json["name"]?.ToString();int? age = json["age"]?.ToObject<int?>();return Ok(new { name, age });
    }
    

    注意:动态类型需谨慎处理,避免安全漏洞


四、关键技术与调试技巧

模型绑定控制

  1. 显式绑定来源
    使用 [FromRoute]、[FromQuery]、[FromBody] 等特性明确参数来源。
  2. 禁用自动绑定
    Program.cs 中关闭全局模型绑定:
    builder.Services.Configure<ApiBehaviorOptions>(options =>
    {options.SuppressInferBindingSourcesForParameters = true;
    });
    

复杂模型验证

  1. 示例

    public class ProductCreateDto
    {[Required(ErrorMessage = "产品名称必填")][StringLength(100, ErrorMessage = "名称不能超过100字符")]public string Name { get; set; }[Range(0.01, double.MaxValue, ErrorMessage = "价格必须大于0")]public decimal Price { get; set; }[Url(ErrorMessage = "图片链接格式不正确")]public string ImageUrl { get; set; }
    }[HttpPost]
    public IActionResult CreateProduct([FromBody] ProductCreateDto dto)
    {if (!ModelState.IsValid){// 返回详细错误信息return ValidationProblem(ModelState);}// 处理逻辑...
    }
    

处理数组和集合

  1. 查询参数中的数组

    // GET /api/products?ids=1&ids=2&ids=3
    [HttpGet("products")]
    public IActionResult GetProductsByIds([FromQuery] List<int> ids)
    {var products = _db.Products.Where(p => ids.Contains(p.Id)).ToList();return Ok(products);
    }
    
  2. JSON 请求体中的数组

    [HttpPost("bulk")]
    public IActionResult BulkCreate([FromBody] List<ProductCreateDto> dtos)
    {// 批量处理逻辑...
    }
    

全局异常处理

  1. Program.cs 中配置统一错误响应

    builder.Services.AddProblemDetails();app.UseExceptionHandler(exceptionHandlerApp =>
    {exceptionHandlerApp.Run(async context =>{var exception = context.Features.Get<IExceptionHandlerFeature>()?.Error;var problemDetails = new ProblemDetails{Title = "服务器错误",Status = StatusCodes.Status500InternalServerError,Detail = exception?.Message};await context.Response.WriteAsJsonAsync(problemDetails);});
    });
    

五、性能与安全最佳实践

1)防过度提交攻击(Overposting)

  1. 使用 [BindNever]DTO 模式过滤不需要的字段

    public class UserUpdateDto
    {public string Name { get; set; }public string Email { get; set; }[BindNever] // 阻止绑定 IsAdmin 字段public bool IsAdmin { get; set; }
    }
    

2)启用请求验证

  1. Program.cs 中强制验证所有请求

    builder.Services.Configure<ApiBehaviorOptions>(options =>
    {options.InvalidModelStateResponseFactory = context =>{var problemDetails = new ValidationProblemDetails(context.ModelState){Title = "参数验证失败",Status = StatusCodes.Status400BadRequest};return new BadRequestObjectResult(problemDetails);};
    });
    

3)文件上传安全

  1. 验证文件扩展名和签名
  2. 限制文件大小
  3. 存储到非 Web 根目录
    private static readonly Dictionary<string, List<byte[]>> _fileSignatures = new()
    {{ ".png", new List<byte[]> { new byte[] { 0x89, 0x50, 0x4E, 0x47 } } },{ ".jpg", new List<byte[]> { new byte[] { 0xFF, 0xD8, 0xFF } } 
    };[HttpPost("safe-upload")]
    public async Task<IActionResult> SafeUpload([FromForm] IFormFile file)
    {using var memoryStream = new MemoryStream();await file.CopyToAsync(memoryStream);var fileData = memoryStream.ToArray();var ext = Path.GetExtension(file.FileName).ToLowerInvariant();if (!_fileSignatures.ContainsKey(ext))return BadRequest("不支持的文件类型");bool valid = _fileSignatures[ext].Any(signature => fileData.Take(signature.Length).SequenceEqual(signature));if (!valid) return BadRequest("文件内容与扩展名不匹配");// 保存文件...
    }
    

4)API 版本控制

  1. 使用 Microsoft.AspNetCore.Mvc.Versioning

    builder.Services.AddApiVersioning(options =>
    {options.DefaultApiVersion = new ApiVersion(1, 0);options.AssumeDefaultVersionWhenUnspecified = true;options.ReportApiVersions = true;
    });// 控制器中指定版本
    [ApiVersion("1.0")]
    [ApiVersion("2.0")]
    [Route("api/v{version:apiVersion}/products")]
    public class ProductsController : ControllerBase
    {[HttpGet][MapToApiVersion("1.0")]public IActionResult GetV1() { ... }[HttpGet][MapToApiVersion("2.0")]public IActionResult GetV2() { ... }
    }
    

六、调试工具

1)Swagger/OpenAPI

  1. 集成 Swagger 文档生成:

    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen(c =>
    {c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    });app.UseSwagger();
    app.UseSwaggerUI();
    

2)Postman

使用 Postman 测试不同参数组合:

  1. 路径参数
  2. 查询字符串
  3. 多部分表单
  4. 请求头

3)ASP.NET Core 日志

  1. 启用详细模型绑定日志

    // appsettings.Development.json
    {"Logging": {"LogLevel": {"Microsoft.AspNetCore.Mvc.ModelBinding": "Debug"}}
    }
    

总结

通过合理选择参数传递方式并遵循上述实践,可以构建出高效、安全且符合 RESTful 规范的 ASP.NET Core API

相关文章:

RESTful如何传递参数

文章目录 前言一、REST 遵循核心原则二、REST 的优点和缺点1.优点2.缺点 三、常见参数传递方式1&#xff09;路径参数&#xff08;Path Parameters&#xff09;2&#xff09;查询参数&#xff08;Query Parameters&#xff09;3&#xff09;请求体参数&#xff08;Request Body…...

Java 大视界 -- 基于 Java 的大数据机器学习模型在图像识别中的迁移学习与模型优化(173)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Pascal语言的贪心算法

贪心算法与Pascal语言 引言 在算法设计与分析中&#xff0c;贪心算法是一类重要的算法策略。它以一种直接而高效的方式解决问题&#xff0c;尤其适合那些可以通过局部最优解推导出全局最优解的问题。在本文中&#xff0c;我们将探讨贪心算法的基本概念、工作原理及其在Pascal…...

软件设计师之设计模式

设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。…...

洛谷题单3-P1720 月落乌啼算钱(斐波那契数列)-python-流程图重构

题目描述 给定一个整数 N N N&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后得到的新数的最高位数字不应为零&#xff08;参见样例 2&#xff09;。 输入格式 一个整数 N N N。 …...

WinForm真入门(5)——控件的基类Control

控件的基类–Control 用于 Windows 窗体应用程序的控件都派生自 Control类并继承了许多通用成员,这些成员都是平时使用控件的过程最常用到的。无论要学习哪个控件的使用&#xff0c;都离不开这些基本成员&#xff0c;尤其是一些公共属性。由于 Conlrol 类规范了控件的基本特征…...

第一讲—函数的极限与连续(一)

思维导图 笔记 双曲正弦函数及其反函数...

开发一个项目的顺序

目录 1.设计表 2.写好pom.xml和application.yml文件 &#xff08;设置端口号&#xff0c;配置数据源&#xff09; 3.引入一个插件&#xff0c;帮助自动生成dao层&#xff0c;model层和mapper目录的代码 4.接着配置mybatis的扫描路径&#xff0c;产生这些文件后&#xff0c;…...

第P10周:Pytorch实现车牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 一.导入数据 from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datase…...

如何在 Windows 上安装 Python

Python是一种高级编程语言&#xff0c;由于其简单性、多功能性和广泛的应用范围而变得越来越流行。如何在 Windows 操作系统中安装 Python 的过程相对简单&#xff0c;只需几个简单的步骤。 本文旨在指导您完成在 Windows 计算机上下载和安装 Python 的过程。 如何在 Windows…...

探秘区块链开发:智能合约在 DApp 中的地位及与传统开发差异

从:引言:当我们谈论区块链开发时,实际在讨论什么?,我们已经能够知道,当我们在讨论区块链开发的时候,大多数时间里说的就是DApp开发。 那么DApp是由什么组成的呢?从上篇文章的特征中我们得出一个技术名词”智能合约“。这是DApp的一个重要特征,也是DApp的一个重要组成…...

react redux的学习,多个reducer

redux系列文章目录 第一章 简单学习redux,单个reducer 前言 前面我们学习到的是单reducer的使用&#xff1b;要知道redux是个很强大的状态存储库&#xff0c;可以支持多个reducer的使用。 combineReducers ‌combineReducers‌是Redux中的一个辅助函数&#xff0c;主要用于…...

SadTalker 数字人web网页版-不需要GPU也可以跑

数字人启动 Active code page: 65001 开始运行 Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] Commit hash: <none> Installing requirements for SadTalker WebUI (may take longer time in first time) Launching SadT…...

最少刷题数--二分+排序

1.考虑重复&#xff0c;题意是多的不超过少的&#xff0c;等于不算 2.所以中间的要二分判断 3.同时排序后要刷的题数也可能是pos-i&#xff0c;也可能是pos-i1&#xff0c;也要判断一下 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long lo…...

花卉识别分类系统,Python/resnet18/pytorch

花卉识别分类系统,Python/resnet18/pytorch 基于pytorch训练, resnet18网络&#xff0c;可用于训练其他分类问题&#xff0c;也可自己重新训练 共五种花卉&#xff1a;雏菊&#xff0c;蒲公英&#xff0c;玫瑰&#xff0c;向日葵&#xff0c;郁金香 标价包含GUI源码、数据集…...

基于 .NET 8 + Lucene.Net + 结巴分词实现全文检索与匹配度打分实战指南

文章目录 前言一、技术选型与优势1.1 技术栈介绍1.2 方案优势 二、环境搭建与配置2.1 安装 NuGet 包2.2 初始化核心组件 三、索引创建与文档管理3.1 构建索引3.2 动态更新策略 四、搜索与匹配度排序4.1 执行搜索4.2 自定义评分算法&#xff08;扩展&#xff09; 五、高级优化技…...

【图像处理基石】什么是neural style transfer?

1. 什么是neural style transfer? 神经风格迁移&#xff08;Neural Style Transfer&#xff09;是一种利用深度学习技术将一幅图像的风格&#xff08;如笔触、色彩、纹理等&#xff09;与另一幅图像的内容&#xff08;如物体、场景结构&#xff09;结合的方法。其核心思想是通…...

ubuntu20.04升级成ubuntu22.04

命令行 sudo do-release-upgrade 我是按提示输入y确认操作&#xff0c;也可以遇到配置文件冲突时建议选择N保留当前配置...

【C++奇遇记】C++中的进阶知识(继承(一))

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…...

SpringBoot异步任务实践指南:提升系统性能的利器

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在现代Web应用中&#xff0c;高并发场景下的响应速度和资源利用率是系统设计的重要考量。SpringBoot通过简洁的异步任务机制&#xff0c;帮助开发者轻松…...

Gson修仙指南:谷歌大法的佛系JSON渡劫手册

各位在代码世界打坐修行的道友们&#xff01;今天我们要参悟Google出品的JSON心法——Gson&#xff01;这货就像代码界的扫地僧&#xff0c;表面朴实无华&#xff0c;实则内力深厚&#xff0c;专治各种JSON不服&#xff01;准备好迎接"万物皆可JSON"的顿悟时刻了吗&a…...

MINIQMT学习课程Day8

获取qmt账号的资金账号后&#xff0c;我们进入下一步&#xff0c;如何获得当前账号的持仓情况 还是之前的步骤&#xff0c;打开qmt&#xff0c;选择独立交易&#xff0c; 之后使用pycharm&#xff0c;编写py文件。 from xtquant import xtdata from xtquant.xttrader import…...

spring-ai-alibaba第八章使用searxng构建大模型联网搜索应用

1、searxng安装配置 详见 anythingLLM结合searXNG实现联网搜索_anythingllm 配置 searxng-CSDN博客 2、本文介绍如何使用 Spring AI Alibaba 构建大模型联网搜索应用结合模块化 RAG&#xff08;Module RAG&#xff09;和信息检索服务&#xff08;SearXNG&#xff09;赋能大模…...

C#:is关键字

目录 is 关键字的核心是什么&#xff1f; 1. 什么是 is 关键字&#xff0c;为什么要用它&#xff1f; 2. 如何使用 is 关键字&#xff1f; 3. is 的作用和场景 4. is 与 as 的区别 5. 模式匹配的扩展&#xff08;C# 8.0&#xff09; 6. 常见陷阱和注意事项 总结&#x…...

SpringCloud第二篇:注册中心Eureka

注册中心的意义 注册中心 管理各种服务功能包括服务的注册、发现、熔断、负载、降级等&#xff0c;比如dubbo admin后台的各种功能。 有了注册中心&#xff0c;调用关系的变化&#xff0c;画几个简图来看一下。(了解源码可求求: 1791743380) 服务A调用服务B 有了注册中心之后&a…...

CSS语言的硬件驱动

CSS语言的硬件驱动探讨 引言 随着信息技术的迅猛发展&#xff0c;硬件和软件之间的交互愈发复杂&#xff0c;特别是在嵌入式系统、物联网设备等领域&#xff0c;硬件驱动程序的开发变得至关重要。而在众多编程语言中&#xff0c;CSS&#xff08;层叠样式表&#xff09;作为一…...

浅入浅出:从传统开发者角度去了解区块链和智能合约之间的关系

前言 在传统开发者视角:智能合约与区块链数据库探秘文中我为大家简单的讲解了DApp开发中智能合约开发和传统开发中数据存储层面的不同。而智能合约则是DApp中重要的组成部分,如同传统开发中的后端。 但是我们不要忘记的是:智能合约是应区块链而生的。 那么对于区块链来说…...

使用人工智能大模型DeepSeek,如何免费辅助教学?

今天我们学习DeepSeek工具如何辅助教学?DeepSeek功能很强大&#xff0c;带动人工智能快速发展&#xff0c;这里给DeepSeek点个赞。免费手把手学习视频地址&#xff1a;https://edu.csdn.net/learn/40402/666415 第一步&#xff0c;进入DeepSeek官网。打开google浏览器&#x…...

leetcode-代码随想录-链表-链表理论基础

链表&#xff1a; 通过指针串联在一起的线性结构&#xff1b;每个节点包含两部分&#xff1a;数据域、指针域&#xff08;存放下一个节点的指针&#xff09;入口节点&#xff1a;称为 头节点 head最后一个节点的指针指向 NULL&#xff08;空指针&#xff09; 链表的类型 1. 单…...

dify中配置使用Ktransformer模型

一共是两个框架一个是Ktransformer,一个是dify。 Ktransformer用来部署LLM,比如Deepseek,而LLm的应用框架平台Dify主要用来快速搭建基于LLM应用。 这篇教程主要是用来介绍两个框架的交互与对接的,不是部署Ktransformer也部署部署Dify,要部署Dify、Ktransformer可以直接参考…...

解释区块链技术的应用场景和优势

区块链技术是一种基于分布式账本的技术&#xff0c;被广泛应用于多个领域。以下是区块链技术的主要应用场景和优势&#xff1a; 应用场景&#xff1a; 金融领域&#xff1a;区块链可以用于支付结算、跨境汇款、智能合约等金融服务&#xff0c;提高交易效率和降低成本。物联网…...

明清两朝全方位对比

明清两朝是中国历史上最后两个封建王朝&#xff0c;在政治、经济、文化等方面存在显著差异&#xff0c;以下为主要区别&#xff1a; 一、政治制度 皇权集中程度 明朝&#xff1a;废除丞相制度&#xff0c;设内阁辅助皇帝&#xff0c;但中后期宦官专权&#xff08;如刘瑾、魏…...

Mysql的事务

事务的概念 简单的说事务就是一个连贯性任务,只有一起成功或者一起失败的说法。在mysql的事务中要么事务里的sql语句成功执行,其中有出错就回滚到事务开始时候的状态。对于已经提交的事务来说,该事务对数据库所做的修改将永久生效事务的四大特性ACID 原子性(Atomicity):一件…...

chromium魔改——绕过无限debugger反调试

在进行以下操作之前&#xff0c;请确保已完成之前文章中提到的 源码拉取及编译 部分。 如果已顺利完成相关配置&#xff0c;即可继续执行后续操作。 在浏览器中实现“无限 debugger”的反调试技术是一种常见的手段&#xff0c;用于防止他人通过开发者工具对网页进行调试或逆向…...

【力扣hot100题】(051)腐烂的橘子

我讨厌图论。 这道题写了特别久&#xff0c;不过好歹也是写出来了…… 方法是先将橘子全部遍历一遍&#xff0c;做两件事&#xff1a;①找出所有连通的橘子②找出所有腐烂的橘子&#xff0c;设置一个vector<queue<int>>&#xff0c;每个vector元素代表一片连通的…...

PyTorch实现线性回归的基础写法与封装API写法

目录 1. 基础写法 1.1导包 2.2加载读取数据 2.3原始数据可视化(画图显示) 2.4线性回归的(基础)分解写法 2.5定义训练过程 2.PyTorch实现 线性回归的封装写法(实际项目中的常用写法) 2.1创建线性回归模型 2.2定义损失函数 2.3定义优化器 2.4定义训练过程 1…...

【蓝桥杯】算法笔记3

1. 最长上升子序列(LIS) 1.1. 题目 想象你有一排数字,比如:3, 1, 2, 1, 8, 5, 6 你要从中挑出一些数字,这些数字要满足两个条件: 你挑的数字的顺序要和原来序列中的顺序一致(不能打乱顺序) 你挑的数字要一个比一个大(严格递增) 问:最多能挑出多少个这样的数字? …...

【Linux】条件变量封装类及环形队列的实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

wsl2 配置ubuntu 固定ip

提示&#xff1a;环境搭建 文章目录 前言一、安装sshd 服务1. ubuntu 子系统安装 openssh-server2.配置sshd 开启密码链接3.配置sshd 服务开机启动 二、配置固定IP1 查看i2 查看路由3 查看wsl虚拟网卡4 配置wsl 子系统网卡4 设置生效 三、问题1. ssh 无法远程 前言 提示&#…...

电机控制学习路线

一、基础理论准备阶段 电路与电子技术 电路分析基础&#xff08;基尔霍夫定律、动态电路分析&#xff09; 模拟电子技术&#xff08;放大器、滤波电路、功率器件&#xff09; 数字电子技术&#xff08;逻辑电路、微控制器基础&#xff09; 数学工具 线性代数&#xff08;矩…...

Sensodrive力控关节模组SensoJoint:TÜV安全认证助力机器人开发

在机器人技术领域&#xff0c;安全性和开发效率是行业关注的重点。SensoDrive的SensoJoint 机器人力控关节模组&#xff0c;凭借其可靠的安全性能和高效的开发优势&#xff0c;正在为机器人开发提供有力支持。 2025年3月31日&#xff0c;SensoDrive的 SensoJoint 力控关节模组获…...

【橘子大模型】Runnable和Chain以及串行和并行

一、Runnable 前面我们实现了一些关于如何和大模型进行交互的操作。那么我们此时来回顾一下我们当前进行的结构。 我们已经很清楚这些操作的具体含义了&#xff0c;所以我这里就不在多介绍了。我们来看其中的几个点 1、用户那边就是客户&#xff0c;没啥说的。 2、langchain&…...

数据结构 -- 图的存储

图的存储 邻接矩阵法 邻接矩阵存储不带权图 0 - 表示两个顶点不邻接 1 - 表示两个顶点邻接 在无向图中&#xff0c;每条边在矩阵中对应两个1 在有向图中&#xff0c;每条边在矩阵中对应一个1 //不带权图的邻接矩阵存储 #define MaxVertexNum 100 //顶点数目的最大值 typed…...

基于大模型预测不稳定性心绞痛的多维度研究与应用

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、不稳定性心绞痛概述 2.1 定义与分类 2.2 发病机制 2.3 临床表现 三、大模型技术原理与应用基础 3.1 大模型介绍 3.2 在医疗领域的应用现状 3.3 用于不稳定性心绞痛预测的可行性 四、术前预…...

【Java集合】LinkedList源码深度分析

参考笔记&#xff1a;java LinkedList 源码分析&#xff08;通俗易懂)_linkedlist源码分析-CSDN博客 目录 1.前言 2.LinkedList简介 3.LinkedList的底层实现 4.LinkedList 与 ArrayList 的对比 4.1 如何选择 4.2 对比图 5.LinkedList 源码Debug 5.1 add(E e) &#xff…...

Java 大视界 -- Java 大数据在智能供应链库存优化与成本控制中的应用策略(172)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

高并发系统架构设计核心要点的结构化提炼【大模型总结】

以下是对高并发系统架构设计核心要点的结构化提炼&#xff0c;结合技术深度与实践视角&#xff0c;以清晰的层次呈现关键策略与实现路径&#xff1a; 一、核心理念重塑 1. 容错优先思维 设计哲学&#xff1a;从"零故障"转向"可恢复性"设计&#xff0c;接…...

【C#深度学习之路】如何使用C#实现Stable Diffusion的文生图功能

【C#深度学习之路】如何使用C#实现Stable Diffusion的文生图功能 项目背景项目实现写在最后项目下载链接 本文为原创文章&#xff0c;若需要转载&#xff0c;请注明出处。 原文地址&#xff1a;https://blog.csdn.net/qq_30270773/article/details/147002073 项目对应的Github地…...

k8s的pod的概述和配置

概念 Pod 容器组 是一个k8s中一个抽象的概念&#xff0c;用于存放一组 container&#xff08;可包含一个或多个 container 容器&#xff0c;即图上正方体)&#xff0c;以及这些 container &#xff08;容器&#xff09;的一些共享资源。这些资源包括&#xff1a; 共享存储&…...

RTOS任务句柄的作用

任务句柄(Task Handle)在 FreeRTOS 中的作用详解 任务句柄(TaskHandle_t)是 FreeRTOS 中用于 唯一标识和管理任务 的核心机制,本质是一个指向任务控制块(TCB)的指针。说明即便创建的任务名相同,但对应的任务句柄一定是不同。 它在任务管理、通信、调试中起到关键作用,…...