ASP.NET MVC 入门指南三
16. 安全性
16.1 身份验证和授权
- 身份验证:确认用户的身份。ASP.NET MVC 支持多种身份验证方式,如表单身份验证、Windows 身份验证和 OAuth 等。
- 表单身份验证:用户通过输入用户名和密码登录,服务器验证后颁发一个身份验证票证(通常是一个 cookie),后续请求中携带该票证以证明身份。可以在
Web.config
中配置表单身份验证:
- 表单身份验证:用户通过输入用户名和密码登录,服务器验证后颁发一个身份验证票证(通常是一个 cookie),后续请求中携带该票证以证明身份。可以在
xml
<system.web><authentication mode="Forms"><forms loginUrl="~/Account/Login" timeout="2880" /></authentication>
</system.web>
- OAuth 身份验证:允许用户使用第三方账户(如 Google、Facebook)登录。可以使用
Microsoft.AspNetCore.Authentication.OAuth
包来实现。 - 授权:确定用户是否有权限访问特定的资源或执行特定的操作。可以使用
[Authorize]
特性来限制对控制器或动作方法的访问:
[Authorize]
public class AdminController : Controller
{// 只有经过身份验证的用户才能访问这些动作方法public ActionResult Index(){return View();}
}
还可以通过角色来进行更细粒度的授权:
[Authorize(Roles = "Admin")]
public ActionResult ManageUsers()
{return View();
}
16.2 防止跨站脚本攻击(XSS)
XSS 攻击是指攻击者通过在网页中注入恶意脚本,获取用户的敏感信息。在 ASP.NET MVC 中,可以使用 @Html.Encode
或 @Html.Raw
来处理用户输入和输出。
@Html.Encode
:对用户输入进行编码,将特殊字符转换为 HTML 实体,防止脚本注入。例如:
html
<p>@Html.Encode(Model.Description)</p>
@Html.Raw
:如果需要输出 HTML 内容,可以使用@Html.Raw
,但要确保内容是安全的。例如:
html
<div>@Html.Raw(Model.HtmlContent)</div>
16.3 防止跨站请求伪造(CSRF)
CSRF 攻击是指攻击者通过诱导用户在已登录的网站上执行恶意操作。在 ASP.NET MVC 中,可以使用 [ValidateAntiForgeryToken]
特性和 @Html.AntiForgeryToken()
方法来防止 CSRF 攻击。
- 在表单中添加防伪标记:
html
@using (Html.BeginForm())
{@Html.AntiForgeryToken()<!-- 表单内容 --><input type="submit" value="提交" />
}
- 在处理表单提交的动作方法上添加
[ValidateAntiForgeryToken]
特性:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SubmitForm(MyModel model)
{// 处理表单提交return RedirectToAction("Index");
}
17. 性能优化
17.1 缓存
- 输出缓存:可以使用
[OutputCache]
特性来缓存动作方法的输出结果,减少服务器的处理负担。例如:
[OutputCache(Duration = 60)] // 缓存 60 秒
public ActionResult Index()
{return View();
}
- 数据缓存:可以使用
MemoryCache
或DistributedCache
来缓存数据。例如:
private readonly IMemoryCache _cache;public ProductController(IMemoryCache cache)
{_cache = cache;
}public ActionResult Index()
{List<Product> products;if (!_cache.TryGetValue("ProductList", out products)){products = db.Products.ToList();_cache.Set("ProductList", products, TimeSpan.FromMinutes(5));}return View(products);
}
17.2 压缩和合并资源
- 压缩:可以使用 Gzip 或 Deflate 压缩 HTTP 响应,减少数据传输量。在
Web.config
中配置压缩:
xml
<system.webServer><httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"><scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /><dynamicTypes><add mimeType="text/*" enabled="true" /><add mimeType="message/*" enabled="true" /><add mimeType="application/javascript" enabled="true" /><add mimeType="*/*" enabled="false" /></dynamicTypes><staticTypes><add mimeType="text/*" enabled="true" /><add mimeType="message/*" enabled="true" /><add mimeType="application/javascript" enabled="true" /><add mimeType="*/*" enabled="false" /></staticTypes></httpCompression><urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
- 合并资源:将多个 CSS 和 JavaScript 文件合并为一个文件,减少 HTTP 请求次数。可以使用第三方工具或自定义脚本来实现。
17.3 异步编程
在控制器中使用异步编程可以提高应用程序的性能和响应能力。例如:
public async Task<ActionResult> Index()
{var products = await db.Products.ToListAsync();return View(products);
}
18. 国际化和本地化
18.1 资源文件
可以使用资源文件(.resx
)来实现多语言支持。在项目中创建不同语言的资源文件,如 Resources.resx
(默认语言)、Resources.en-US.resx
(英语)、Resources.zh-CN.resx
(中文)等。
18.2 配置本地化
在 Web.config
中配置支持的语言:
xml
<system.web><globalization uiCulture="auto" culture="auto" />
</system.web>
在视图中使用资源文件中的字符串:
html
<h2>@Resources.WelcomeMessage</h2>
18.3 切换语言
可以通过 URL 参数或表单提交来切换语言。例如,在控制器中添加一个切换语言的动作方法:
public ActionResult SetCulture(string culture)
{culture = CultureHelper.GetImplementedCulture(culture);Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;var returnUrl = Request.UrlReferrer != null ? Request.UrlReferrer.ToString() : "/";return Redirect(returnUrl);
}
19. 与第三方服务集成
19.1 与数据库服务集成
除了使用 Entity Framework 与关系型数据库集成,还可以与 NoSQL 数据库(如 MongoDB、Redis)集成。例如,使用 MongoDB.Driver
包与 MongoDB 集成:
using MongoDB.Driver;
using YourNamespace.Models;public class MongoService
{private readonly IMongoCollection<Product> _productsCollection;public MongoService(){var client = new MongoClient("mongodb://localhost:27017");var database = client.GetDatabase("YourDatabaseName");_productsCollection = database.GetCollection<Product>("Products");}public async Task<List<Product>> GetAllProducts(){return await _productsCollection.Find(_ => true).ToListAsync();}
}
19.2 与社交媒体服务集成
可以使用社交媒体 API(如 Twitter API、Facebook API)来实现与社交媒体的集成。例如,使用 TwitterAPI
包来获取用户的推文:
using Tweetinvi;public class TwitterService
{public async Task<List<string>> GetTweets(){var userClient = new TwitterClient("consumerKey", "consumerSecret", "accessToken", "accessTokenSecret");var tweets = await userClient.Timelines.GetUserTimelineAsync("YourTwitterUsername");return tweets.Select(t => t.Text).ToList();}
}
20. 持续集成和持续部署(CI/CD)
20.1 持续集成
可以使用 CI 工具(如 Jenkins、GitLab CI/CD、Azure DevOps)来自动化构建和测试过程。例如,在 GitLab CI/CD 中配置 .gitlab-ci.yml
文件:
yaml
stages:- build- testbuild:stage: buildscript:- dotnet build YourProject.csprojtest:stage: testscript:- dotnet test YourProject.Tests.csproj
20.2 持续部署
可以使用 CD 工具(如 Docker、Kubernetes、Azure App Service)来自动化部署过程。例如,使用 Docker 打包应用程序并部署到 Azure App Service:
Dockerfile
# 基础镜像
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80# 构建镜像
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["YourProject.csproj", "./"]
RUN dotnet restore "YourProject.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "YourProject.csproj" -c Release -o /app/build# 发布镜像
FROM build AS publish
RUN dotnet publish "YourProject.csproj" -c Release -o /app/publish# 最终镜像
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YourProject.dll"]
通过以上内容,你对 ASP.NET MVC 开发有了更全面的了解,可以开发出功能丰富、安全可靠、性能优良的 Web 应用程序。同时,持续集成和持续部署的引入可以提高开发效率和软件质量。
相关文章:
ASP.NET MVC 入门指南三
16. 安全性 16.1 身份验证和授权 身份验证:确认用户的身份。ASP.NET MVC 支持多种身份验证方式,如表单身份验证、Windows 身份验证和 OAuth 等。 表单身份验证:用户通过输入用户名和密码登录,服务器验证后颁发一个身份验证票证&…...
导览项目KD-Tree最近地点搜索优化
背景描述 我在做一个校园导览的小程序的时候,涉及到最近地点搜索的业务功能,根据当前位置搜索最近的校园地点,比如教学楼,图书馆,自习室,办事地点等等。 我最初想到的办法就是获取用户当前位置的经纬度后&…...
【Pandas】pandas DataFrame rmul
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
苹果(IOS)手机怎么开启开发者模式(简单明了版)
苹果手机怎么开启开发者模式(简单明了版) iOS 16 以后,苹果新增了「开发者模式」。如果你要在 iPhone 上运行自己开发的 App,比如通过 Xcode 或其它工具安装测试包,必须先开启这个模式。 下面是开启方法👇…...
Agent2Agent
rag系列文章目录 文章目录 rag系列文章目录前言一、协议设计原则与技术基础二、通信机制与消息格式三、身份验证与安全设计四、能力发现与任务协作总结 前言 谷歌于2025年4月推出了A2A(Agent2Agent)协议,旨在解决当前AI智能体生态中的互操作…...
【MCP】了解远程MCP调用背后使用的SSE协议
本文介绍了远程MCP使用的SSE协议,通过wireshark抓包的方式了解MCP客户端和服务端之间通过SSE协议交互涉及到的请求与响应。 1. 什么是SSE协议? 参考:https://zhuanlan.zhihu.com/p/1894024642395619635和https://blog.csdn.net/aerror/artic…...
Log4j Properties 配置项详细说明
Log4j Properties 配置项详细说明 1. 核心配置项说明 根日志记录器:定义全局日志级别和输出目标 log4j.rootLogger [级别], appender1, appender2,...Appender 定义:指定日志输出目标(控制台、文件等) log4j.appender.[名称].[属…...
哪些物联网框架支持多协议接入?选型指南与核心能力解析
在物联网(IoT)领域,设备通信协议的多样性(如MQTT、CoAP、Modbus、Zigbee等)是开发者面临的核心挑战之一。选择支持多协议接入的物联网框架,可以显著降低异构设备连接的复杂度,提升系统的兼容性和…...
第三方测试机构如何保障软件质量并节省企业成本?
在软件行业,第三方测试机构扮演着极其重要的角色。他们提供独立且专业的测试服务,目的是为了保障软件的质量以及提升用户的使用体验。 专业独立 测试机构拥有经验丰富的测试员和严谨的测试流程。他们会对软件各项功能进行细致检验,力求不放…...
Eigen迭代求解器类
1. 迭代求解器核心类概览 Eigen 提供多种迭代法求解稀疏线性方程组 AxbAxb,适用于大规模稀疏矩阵: 求解器类适用矩阵类型算法关键特性ConjugateGradient对称正定(SPD)共轭梯度法(CG)高精度,内…...
AI 与高性能计算的深度融合:开启科技新纪元
在当今科技迅猛发展的时代,人工智能(AI)与高性能计算(HPC)正以前所未有的态势深度融合,这种融合宛如一场强大的风暴,席卷并重塑着众多领域的格局。从科学研究的突破到商业应用的革新,…...
写入cache时数据格式错误产生的ERRO导致整个测试框架无法运行
背景 在yaml文件里面提取request放入缓存时,request是form-data,错用jsonpath提取并写入缓存,导致后面的所有运行都异常 原因 起因是我想引用请求体的Uid,提取方式用错了,所以可以看到最后一段current_request_set_…...
3:QT联合HALCON编程—海康相机SDK二次程序开发
思路: 1.定义带UI界面的主函数类 1.1在主函数中包含其它所有类头文件,进行声明和实例化;使用相机时,是用公共相机的接口在某一个具体函数中去实例化具体的海康相机对象。 1.2设计界面:连接相机,单次采集&a…...
图论---LCA(倍增法)
预处理 O( n logn ),查询O( log n ) #include<bits/stdc.h> using namespace std; typedef pair<int,int> pii; const int N40010,M2*N;//是无向边,边需要见两边int n,m; vector<int> g[N]; //2的幂次范围 0~15 int depth[N],fa[N][1…...
Bento4的安装和简单转码
1.下载Bento4 2解压复制到安装位置 3配置环境变量 在path下配置 5.视频转码为Dash 视频分片化 mp4fragment --track video --fragment-duration 4000 C:\Users\zcc\Downloads\Video\gg.mp4 C:\Users\zcc\Downloads\Video\out3\input_fragmented.mp4分片化的视频转码为dash…...
用python写一个相机选型的简易程序
最近有点忙,上来写的时间不多。 今天就把之前写的一个选型的简易程序,供大家参考。 代码: import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QGro…...
论人际关系发展的阶段
朋友关系的建立和发展是一个渐进的过程,通常需要经历情感积累、信任磨合和价值观融合等阶段。以下是朋友关系发展的详细阶段划分及核心特征: 一、表层接触阶段(社交试探期) 核心特征:以信息交换为主,关系停…...
2软考系统架构设计师:第一章系统架构概述 - 练习题附答案及超详细解析
第一章系统架构概述综合知识单选题 每道题均附有答案解析: 1. 系统架构的核心定义是什么? A. 系统代码的实现细节 B. 系统组件、组件关系及与环境交互的高层次设计蓝图 C. 用户界面的设计规范 D. 数据库表结构的详细设计 答案:B 解析&…...
华为OD机试真题——素数之积RSA加密算法(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…...
k8s中资源的介绍及标准资源namespaces实践
文章目录 第1章 k8s中的资源(resources)介绍1.1 k8s中资源(resouces)的分类1.2 k8s中资源(resources)的级别1.3 k8s中资源(resources)的API规范1.4 k8s中资源(resources)的manifests 第2章 k8s中的标准资源之namespaces的实践2.1 基本介绍2.2 编写相关ns资源对象的manifests2.3…...
k8s学习记录(四):节点亲和性
一、前言 在上一篇文章里,我们了解了 Pod 中的nodeName和nodeSelector这两个属性,通过它们能够指定 Pod 调度到哪个 Node 上。今天,我们将进一步深入探索 Pod 相关知识。这部分内容不仅信息量较大,理解起来也有一定难度࿰…...
联想笔记本电脑在Windows下通过联想驱动实现风扇控制
概述 本文旨在解决部分联想笔记本电脑无法使用主流的风扇控制工具(如Fan Control, SpeedFan)控制风扇的问题。主流的风扇控制工具在这些电脑上会因无法找到控制风扇的EC寄存器而无法发挥作用。但这是不是就意味着没办法控制风扇了呢?答案是否…...
Java单链表题目
Java链表题目练习 移除链表元素反转单链表链表的中间节点返回倒数第K个节点合并两个有序列表判断链表是否回文 学习了知识,就要进行其检验自己是否真正学会,练习题目来加强对知识的理解,今天就来练习一下链表题目 移除链表元素 目的ÿ…...
springboot入门-controller层
在 Spring Boot 中,Controller 层是处理 HTTP 请求的核心组件,负责接收客户端请求、调用业务逻辑(Service 层)并返回响应。其核心原理基于 Spring MVC 框架,通过注解驱动的方式实现请求的路由和参数绑定。以下是 Contr…...
游戏引擎学习第245天:wglChoosePixelFormatARB
Blackboard: PBO(像素缓冲对象) 我们将一起编写一个完整的游戏。老实说,我原本以为我们会花更长时间来实现异步纹理上传,结果我们只用了两天时间,主要原因是我们没有设置标志来真正告诉程序下载纹理,所以这…...
中国大陆DNS服务选择指南:阿里云VS AWS,合规性与最佳实践
导语 在中国大陆开展互联网业务时,DNS服务的选择不仅关乎性能,更涉及合规性问题。本文将深入探讨DNS服务商选择的自由度、阿里云与AWS DNS服务的优劣势,以及如何在确保合规的同时优化您的域名解析策略。无论您是初创公司还是跨国企业,这份指南都将助您在复杂的中国互联网环境中…...
LLaMa Factory大模型微调
LLaMa Factory大模型微调 大模型微调平台&硬件LLaMA-Factory安装hfd下载hugging face模型自我认知微调Alpaca数据集指令监督微调断点续训 大模型微调 微调自我认知微调特定领域数据集。 平台&硬件 Ubuntu20.04显卡:M40 24G 2080TI 22G微调框架ÿ…...
git和github的使用指南
目录 1.git初始化本地仓库 2.远程仓库 3.如何将自己的代码上传到远程仓库的某一个分支 1.git初始化本地仓库 在项目目录中初始化 Git 仓库: cd your-project-directory git init 将文件添加到暂存区: git add . //添加所有文件 git add <fi…...
如何快速轻松地恢复未保存的 Word 文档:简短指南
文字处理器已经存在了几十年,其中许多已经变得非常擅长防止问题。丢失未保存的数据是一个常见问题,因此办公软件通常带有恢复文件的方法。在本文中,我们将介绍如何恢复 Word 文档,即使您尚未保存它。 确保数据安全的最佳方法是保…...
【Linux网络】打造初级网络计算器 - 从协议设计到服务实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
基于STM32定时器中断讲解(HAL库)
基于STM32定时器中断讲解(HAL库) 1、定时器简单介绍 以STM32F103C8T6中几个定时器为例: TIM1:这是一个高级定时器,不仅具备基本的定时中断功能,还拥有内外时钟源选择、输入捕获、输出比较、编码器接口以…...
《Vue3学习手记5》
pinia 共享的数据交给集中状态管理 引入与使用 //main.ts // 引入Pinia import {createPinia} from "pinia"const piniacreatePinia() app.use(pinia)案例: <template><div class"count"><h2>当前和为:{{ sum…...
MySQL多查询条件下深度分页性能优化技巧及示例总结
深度分页(Deep Pagination)是MySQL中常见的性能瓶颈问题,特别是在多查询条件下,当offset值很大时,查询性能会急剧下降。本文将总结多种优化技巧,并提供实际示例。 一、深度分页的性能问题分析 当执行类似SELECT * FROM table WHERE condition1 AND condition2 LIMIT 1000…...
3、初识RabbitMQ
界面上的导航栏共分6部分,分别代表不同的意思 一、Producer和Consumer Producer: 生产者, 是RabbitMQ Server的客户端, 向RabbitMQ发送消息 Consumer: 消费者, 也是RabbitMQ Server的客⼾端, 从RabbitMQ接收消息 Broker:其实就是RabbitMQ Server, 主要…...
量子计算与GPU的异构加速:基于CUDA Quantum的混合编程实践
一、量子模拟的算力困境与GPU破局 量子计算模拟面临指数级增长的资源需求:n个量子比特的态向量需要存储2^n个复数。当n>30时,单机内存已无法承载(1TB需求)。传统CPU模拟器(如Qiskit Aer)在n28时计算…...
在Spring Boot项目中实现Word转PDF并预览
在Spring Boot项目中实现Word转PDF并进行前端网页预览,你可以使用Apache POI来读取Word文件,iText或Apache PDFBox来生成PDF文件,然后通过Spring Boot控制器提供文件下载或预览链接。以下是一个示例实现步骤和代码: 1. 添加依赖 …...
Windows怎样使用curl下载文件
安装curl 从官网下载:访问curl官方网站,根据系统位数(32 位或 64 位)选择相应的版本进行下载。下载完成后,双击安装程序并按照提示进行安装。也可以选择自定义安装路径,记住安装路径,后续配置环…...
priority_queue的学习
priority_queue的介绍 优先级队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被…...
浅谈Java 内存管理:栈与堆,垃圾回收
在Java编程世界里,内存管理是一项极为关键的技能,它就像程序运行背后的“隐形守护者”,默默影响着程序的性能与稳定性。今天,咱们就来简单学习一下Java内存管理中的两大核心要点:栈与堆的内存分配机制,以及…...
windows下查看idea运行的进程占的JVM情况工具
jconsole 查看JVM 查看线程数 自己测试时,可以先不把线程关闭查效果。 也可以用这工具查下是不是有线程一直在增加。...
【新技术】微软 Azure Test Impact Analyzer (TIA) 全面解析
目录 一、什么是 Azure Test Impact Analyzer?二、核心功能与优势三、如何掌握 Azure TIA?四、工作中的典型应用场景五、最佳实践与注意事项六、总结 一、什么是 Azure Test Impact Analyzer? Azure Test Impact Analyzer (TIA) 是微软 Azur…...
JAVA服务内存缓慢上涨,年轻代GC正常但Full GC频繁,如何定位?
1. 分析 : 年轻代GC正常,说明年轻代的对象回收没有问题,可能大部分对象都是朝生夕死的,所以Minor GC能有效清理。但Full GC频繁,通常意味着老年代空间不足,导致频繁进行Full GC来回收老年代。而内存缓慢上…...
浏览器界面无显示,提示“代理服务器可能有问题”,这是怎么回事呢?
前言 🌟🌟本期讲解浏览器代理服务器解决办法介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话不…...
C#中的弱引用使用
弱引用(Weak Reference)是一种特殊的引用类型,它允许你引用一个对象,但不会阻止该对象被垃圾回收器(GC)回收。弱引用通常用于需要缓存或跟踪对象,但又不希望因保留引用而导致内存泄漏的场景。弱…...
在Linux虚拟机下使用vscode,#include无法跳转问题
总结:需要通过Linux指令来添加编译器和压缩文件,解压,这样获得的编译器会具有可执行权限类似于 -rwxr-xr-x 1 user user 12345 Apr 26 14:22 myscript.sh 如果你直接从window中拖入文件到Linux文件下,你需要自己来再度开启可编译…...
MIL、SIL、HIL与Back-to-Back测试详解:从模型到硬件的完整验证链
1. 引言 在嵌入式系统和控制算法开发中,MIL、SIL、HIL和Back-to-Back测试构成了从模型设计到硬件部署的完整验证流程。它们覆盖不同开发阶段,确保系统功能正确性、实时性和可靠性。 本文将清晰解析这四种测试方法的核心概念、应用场景及差异。 2. 四种测…...
【Android Compose】焦点管理
官方文档链接: https://developer.android.google.cn/develop/ui/compose/touch-input/focus?hlzh-cn 1、更改焦点遍历顺序 1.1、替换一维遍历顺序 (1)创建焦点引用对象: /// 创建4个引用对象(二选一)…...
启动命令汇总(Redis / Kafka / Flume / Spark)
本文总结了本地开发环境(Windows系统)中启动推荐系统所需的所有组件命令,包括 Redis、Kafka、Flume 及 SparkStreaming 程序的启动流程。 1. 启动 Redis 进入 Redis 安装目录,执行: redis-server.exe测试连接&#x…...
python 画折线统计图
Python 画折线统计图(line chart)最常用的是 matplotlib。 最基本的折线图代码如下: import matplotlib.pyplot as plt# 假设这是你的数据 x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11]# 创建折线图 plt.plot(x, y, markero) # markero 是在点…...
java面向对象编程【高级篇】之继承
目录 🚀前言🤔什么是继承?🌟权限修饰符💯private 修饰符💯默认(无修饰符)💯protected 修饰符💯public 修饰符💯归纳 🦜继承的特点&…...