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

学习笔记(C#基础书籍)-- C#高级应用

(12.25,12.26)

I/O数据流技术:《第十二章》

为了能够长时间保存程序中的数据,I/O技术可以将数据保存到文件(如文本文件等)中。
⭕文件基本操作
a.File类:支持对文件的基本操作,它包括用于创建(create),复制(cope),删除(detale),移动(Move)和打开文件(Open)的静态方法,并协助创建FileStream对象。首先需要添加System.IO命名空间。
b.FileInfo类:与File类的区别:File类是静态类,其调用需要字符串参数为每个方法调用规定文件位置,因此如果要在对象中进行单一方式调用,则可以使用静态File类;如果要在文件上执行几种操作,则实例化FileInfo对象并调用其方法更好一些,这样会提高效率,因为对象将在文件系统上引用正确的文件,而静态类必须每次都要寻找文件。
很多方法调用相同,但是FileInfo类中,没有静态方法,该类中的方法仅可以用于实例化的对象。
判断文件是否存在:.Exists(string path)

//举例一个对比:
File类:
File.Exists("C:\\Test.txt");FileInfo类:
FileInfo finfo = new FileInfo("C:\\Test.txt");
if(finfo.Exists)
{
}

创建文件:Create
复制文件:Cope
移动文件:Move(File),MoveTo(FileInfo)
删除文件:Delete
(还可以获取文件的各种信息:例如创建时间,文件名称,长度等)

⭕文件夹基本操作
Directory类,DirectoryInfo类(区别跟File类与FileInfo类相似)
判断文件夹是否存在:Exists方法
创建文件夹:CreateDirectory方法
移动文件夹:Move,MoveTo(Info类)
删除文件夹:Delete方法
遍历文件夹:GetDirectories:用来返回当前目录的子目录。GetFiles:返回当前目录的文件列表。GetFileSystemInfos方法:检索表示当前目录的文件和子目录的强类型FileSystemInfo对象的数组。(三种方法都有重载,可传入字符串进行搜索)

//查找路径下的文件夹以及子文件夹内容
//创建DirectoryInfo对象
DirectoryInfo dinfo = new DirectoryInfo("filepath");
//获取指定目录下的所有子目录及文件类型
FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos();foreach (FileSystemInfo fsinfo in fsinfos)
{if (fsinfo is DirectoryInfo)    //如果是文件夹的话{//使用获取的文件夹名称实例化DirectoryInfo对象DirectoryInfo dirinfo = new DirectoryInfo(fsinfo.FullName);//可以获取文件夹信息string direname = dirinfo.Name;//.....  }else{FileInfo finfo = new FileInfo(fsinfo.FullName);//获取文件信息string filename = finfo.Name;//.....  }
}

⭕I/O(输入/输出)
FileStream类:
常用属性:CanRead(是否支持读取),CanTimeout(是否可以超时),CanWrite(是否支持写入),Length(获取用字节表示的流长度)
常用方法:close,read,write,
操作文件:Append,create,open,等

FileStream afile = new FileStream("Test.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite);

使用I/O操作文本文件:
StreamWriter类:属性:Encoding,NewLine;方法:close,write,writeLine
streamReader类:close,read,readline,…

GDI+绘图技术:《第十三章》

实现图形的绘制,使用图形分析数据,提供画笔,画刷,颜色,图形等。
暂时使用此功能少,暂时不看

socket网络编程:《第十四章》

实现计算机互联系统,相互连接的计算机之间彼此能够进行数据交流,TCP/IP协议是网络应用程序首选,此章从介绍网络协议开始,介绍TCP网络程序和UDP网络程序。

网络协议:IP,TCP:提供两台计算机之间可靠的数据传送,,UDP:不保证可靠的数据传输,但是能向若干个目标发送数据,接受发自若干个源的数据。

端口和套接字:
普通网络应用程序应该使用1024以上的端口,以避免被占用。网络程序中的套接字(socket)用于将程序与网络连接起来。C#将套接字抽象化成类,程序设计者只需要创建socket类对象,即可使用套接字。

⭕IP地址封装
IP地址是每个计算机在网络中和的唯一标识(例如:192.169.128.255),IP地址是一种低级协议,TCP和UDP协议都是在它的基础上构建的。
C#提供了IP地址相关的类,包括Dns类,IPAdrress类,IPHostEntry类等。他们都位于System.Net命名空间中。
1.Dns类 (后续需要加详解)
2.IPAddress类
3.IPHostEntry类

⭕TCP程序设计
TCP传输控制协议是一种面向连接的,可靠的,基于字节流的传输层通信协议。TCP程序设计利用socket类,TcpClient类和TcpListener类编写的网络通信协议(这三个类都位于System.Net.Sockets命名空间中)
1.socket类
为网络通信提供一套丰富的方法和属性,用于管理连接:实现Berkeley通信端套接字接口,同时还定义了绑定,连接网络端口及传输数据所需的各种方法,TcpClient和UdpClient等在内部使用该类。
常用属性和说明:

socket常用属性:Connected,SendTimeout【设置或获取同步send调用将超时的时间长度】
socket常用方法:Accept【为新建连接创建新的socket】,connect,Disconnnect,Listen,receive,send

2.TcpClient类和TcpListener类
TcpClient类用于在同步阻止模式下通过网络来连接,发送和接收流数据。为了使TcpClient连接并交换数据,TcpListener实例或socket实例必须侦听是否有传入的连接请求。有两种方法:1.创建一个TcpClient,并调用Connect方法连接。2.使用远程主机的主机名和端口号创建TcpCient,此构造函数将自动尝试一个连接。

TcpClient类的常用属性和方法:
Client属性【获取或设置基础socket】,Connected属性【获取一个值,该值指示TcpCient的基础socket是否已连接到远程主机】,ReceiveBufferSize属性【接收缓冲区的大小】,ReceiveTimeout属性,SendBufferSize属性,SendTimeout属性。
BeginConnect方法【开始一个对远程主机连接的异步请求】,Close方法【释放此TcpClient实例,而不关闭基础连接】,Connect方法【使用指定的主机名和端口号将客户端连接到Tcp主机】,EndConnect方法【异步接受传入的连接尝试】,GetStream方法【返回用于发送和接收数据的NetworkStream】

TcpListener类用于在同步组织模式下侦听和接受传入的连接请求。可使用TcpClient类或Socket类来连接TcpListener,并且可以使用IPEndPoint,本地IP地址以及端口号或者仅使用端口号来创建TcpListener实例对象

TcpListener类的常用属性和方法:
Server属性【获取基础网络socket】
AcceptSocket/AcceptTcpCient方法【接受挂起的连接请求】,BeginAcceptSocket/BeginAcceptTcpCient方法【开始一个异步操作来接受一个传入的连接尝试】,EndAcceptSocket方法【异步接受传入的连接尝试,并创建新的socket来处理远程主机通信】,EndAcceptTcpClient方法【异步接受传入的连接尝试,并创建新的TcpClient来处理远程主机通信】,Start方法【开始侦听传入的连接请求】,stop方法【关闭侦听器】

TCP网络程序实例:
服务器端:
创建服务器端项目server,在main方法中创建TCP连接对象;然后监听客户端接入,并读取接入的客户端IP地址和传入的消息;最后向接入的客户端发送一条消息。
代码:(P343)

客户端:创建客户端项目Client,在Main方法中创建Tcp连接对象,以指定的地址和端口连接服务器;然后向服务端发送数据和接受服务器端传输的数据。
代码:(P345)
TCP服务端客户端代码

⭕UDP程序设计
用户数据报协议,UDP信息传递更快,但不提供可靠的保证。用户无法知道数据能否正确地到达主机,也不能确定到达目的地的顺序。
UdpClient类:用于在同步阻止模式下发送和接收无连接UDP数据报,由于UDP是无连接的,所以不需要在发送和接收数据前建立远程主机连接。可以选择两种办法来建立默认远程主机:1.使用远程主机名和端口号作为参数创建UdpClient类的实例。2.创建UdpClient类的实例,然后调用Connect方法。

UdpClient类的常用属性:Available属性【获取从网络接收的可读取的数据量】,Clinet属性【获取或设置基础网络Socket】,
常用方法:
(异步)BeginReceive方法【从远程主机异步接收数据报】,BeginSend【将数据报异步发送到远程主机】,EndReceive【结束挂起的异步接收】,EndSend【结束挂起的异步发送】,
(同步)close【关闭】,Connect【建立默认远程主机】,Receive【返回已由远程主机发送的UDP数据报】,Send【将UDP数据报发送到远程主机】

Udp网络程序实例:
广播数据报程序:(服务端)创建广播主机项目Server,在main方法中创建UDP连接,然后通过UDP连接不断向外发送广播信息。
程序代码:P347

(客户端)创建接收广播项目client
程序代码:P349

TCP协议通过数据流来实现数据传递,UDP协议通过数据包来实现传递,不管是数据流还是数据包都是以字节来存储的,所以不管哪种协议都可以传输任何类型的数据,例如文字,图片,视频等。

多线程编程技术:《第十五章》

当程序同时完成多件事情时,就是多线程程序。
⭕概述
世间万物的事务会同时完成很多工作,活动同时进行,这种思想在C#中被称为并发,而将并发完成的每一件事成为线程。
先了解进程的概念:系统中资源分配和资源调度的基本单位,叫做进程。每一个独立执行的程序在系统中都是一个进程。
每个进程中都可以同时包含多个线程,例如QQ由收发信息,下载,播放音乐等,同时进行互不打扰,这就使用了线程的并发机制,每个功能都是一个可以独立运行的线程。

而计算机的CPU只有一个,那么这些线程是怎么做到并发运行的呢?
–》windows操作系统是多任务操作系统,它以进程为单位,每个独立执行的程序称为进程,在系统中可以分配给每个进程一段有限的使用CPU的时间(CPU时间片),CPU在片段时间中执行某个进程,然后下一个时间片又跳到下一个进程中去执行。由于CPU转换较快,所以使得每个进程好像是同时执行一样。
–》一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程也可以得到一个小段程序的执行时间,这样一个进程就可以具有多个并发的执行的线程。

多线程的优缺点:
优点:提高对用户的响应速度:通过网络与Web服务器和数据库进行通信;执行占用大量时间的操作;
缺点:不要在程序中使用太多的线程,可以减少操作系统资源的使用:系统将为进程和线程所需的上下文信息使用内存;跟踪大量的线程将占用大量的处理器时间;使用多个线程控制代码执行较为复杂,可能会有bug。

⭕线程的实现
通过使用Thread类实现线程,介绍Thread类,以及创建线程,线程的生命周期进行介绍。

使用Thread类创建线程

Thread类位于System.Threading命名空间下,该类主要用于创建并控制线程,设置线程优先级并获取其状态,构造函数需要传入参数start,参数start表示 一个委托,表示线程开始执行时要调用的方法。

Thread类常用属性:Thread类常用方法:

使用:创建了 Thread类的对象之后,线程对象已存在并已配置,但并未创建实际的线程。只有在调用start方法后,才会创建实际的线程。(如果线程已终止,则无法通过再次调用Start方法重新启动)

void Roll()
{
...
}private void load()
{Thread th = new Thread(new ThreadStart(Roll));		//创建线程对象th.start();			//启动线程
}
线程的生命周期:

出生【new Thread()】 ,start() --》就绪,得到系统资源–》运行,sleep(),Join()等待,等待输入输出–》暂停,休眠结束,输入输出完成–》就绪,
运行 ---- 时间片结束 --》就绪
运行 ---- 调用Abort()终止线程 --》死亡

操作线程的方法:

a.线程的休眠:Thread.Sleep(1000);
b.线程的加入:使用Join方法:当线程A使用join方法加入到已有的线程B时,线程B会等待该线程A执行完毕后再继续执行。Join方法用来阻塞调用线程,直到某个线程终止时为止。

Thread th1,th2;
void pro1()
{...th2.Join();		//使用线程2调用Join方法
}void pro2()
{...
}
private void Load(object sender,EventArgs e)
{th1 = new Thread(new ThreadStart(pro1));	//创建线程1对象th1.start();th2 = new Thread(new ThreadStart(pro2));	//创建线程1对象th2.start();
}

c.线程的终止:Thread类的Abort方法,且线程一旦被终止,它将无法重新启动。

if(th1.ThreadState == ThreadState.Running)		//判断线程是否正常运行th1.Abort();								//终止线程

d.线程优先级

线程的同步:

在多线程程序中,会发现两个线程抢占资源问题,C#提供线程同步机制来防止资源访问的冲突,其中主要用到Lock关键字,Monitor关键字,Mutex关键字。
线程同步机制:基本上所有解决多线程资源冲突问题的方法都是采用给定时间只允许一个线程访问共享资源,这时就需要给共享资源上一道锁,这就是程序开发中的线程同步。所谓同步,就是指某一时刻只有一个线程可以访问资源。
⭕Lock关键字实现线程同步
通过为给定对象获取互斥锁来实现的。提供给Lock语句的参数必须为基于引用类型的对象,用来定义锁的范围

class Program
{int num =10;void Ticket(){while (true){lock (this)		//这里有线程调用时会锁住,其他线程就无法进行同时调用{if (num > 0){num--;}}}}static void main(string[] args){Program p = new Program();Thread tA = new Thread(new ThreadStart(p.Ticket));Thread tB = new Thread(new ThreadStart(p.Ticket));Thread tC = new Thread(new ThreadStart(p.Ticket));Thread tD = new Thread(new ThreadStart(p.Ticket));tA.Start();tB.Start();tC.Start();tD.Start();}
}

但是如果在静态方法中使用lock关键字,不能用this

⭕Monitor关键字实现线程同步
提供同步对对象的访问机制,它通过向单个线程授予对象锁来控制对对象的访问,该对象锁提供限制访问代码块的能力。当一个线程拥有对象锁时,其他任何线程都不能获取该锁。

//上一段代码的Ticket函数改成:
void Ticket()
{while (true){Monitor.Enter(this);	//锁定代码块if (num > 0){num--;}Monitor.Exit(this);		//解锁代码块}
}

Monitor类有很好的控制能力,它可以使用wait方法指示活动的线程等待一段时间,线程操作完成时,还可以使用Pulse方法或者PulseAll方法通知等待中的线程。

⭕使用Mutex类实现线程同步
Mutex类与Monitor类似,它防止多个线程在某一时间同时执行某个代码,然而与监视器不同的是,Mutex类可以用来使跨经常的线程同步。

void Ticket()
{while (true){Mutex mymutex = new Mutex(false);       //构造函数参数指定了创建该对象的线程是否希望立即获取其所有权,在一个资源得到保护的类中创建常设置成falsemymutex.WaitOne();          //阻塞当前线程if (num > 0){num--;}mymutex.ReleaseMutex();     //释放Mutex对象}
}

尽管Mutex可用于进程间的线程同步,但是Monitor类通常更可取,因为Monitor类是专门为.new Framework而设计的,Mutex类是WIN32的包装,转换需要更多的资源。

备注:Thread类中,被标注为过时的Suspend方法和Resume方法。
1.Suspend方法:该方法用来挂起线程,如果线程已挂起,则不起作用
2.Resume方法:该方法用来继续已挂起的线程

static void Main(string[] args)
{Thread myThread;myThread = new Thread(new ThreadStart(createThread));myThread.Start();       //启动线程myThread.Suspend();     //挂起线程myThread.Resume();      //恢复挂起的线程
}
public static void createThread()
{//...
}

了解线程池:程序需要创建大量段生命周期的线程,应该使用线程池,在C#中提供了创建线程池的ThreadPool类,该类提供了一些静态方法,用于发送工作项,处理异步IO等。

相关文章:

学习笔记(C#基础书籍)-- C#高级应用

(12.25,12.26) I/O数据流技术:《第十二章》 为了能够长时间保存程序中的数据,I/O技术可以将数据保存到文件(如文本文件等)中。 ⭕文件基本操作 a.File类:支持对文件的基本操作&…...

pytorch将数据与模型都放到GPU上训练

默认是CPU,如果想要用GPU需要: 安装配置cuda,然后更新/下载支持gpu版本的pytorch,可以参考:https://blog.csdn.net/weixin_35757704/article/details/124315569设置device:device torch.device(cuda if t…...

华为 IPD,究竟有什么特点?(二)

关注作者 (四)华为版 IPD 特点四:一定要把差异化竞争力持 续建立在平台上 平台不仅带来研发效率的提升,更重要的是,它是技术竞争力的载体,是研发质 量的重要保证。 1)为什么很多企业摆脱不了同…...

CV(7)--神经网络训练

前言 仅记录学习过程,有问题欢迎讨论 什么是神经网络: 神经网络是一种模拟人脑神经元工作原理的算法,它由多个神经元组成,每个神经元都接受输入,通过计算产生输出,并将输出传递给其他神经元。神经网络的…...

git更改当前项目的远程仓库,保留原始仓库提交记录提交到新仓库

在开发过程中,有时需要将当前项目的远程仓库切换到另一个新的远程仓库,同时保留所有原始的提交记录。以下是详细的步骤和最佳实践,确保你能够顺利完成这一操作。 更改当前项目的远程仓库 1.查看当前的远程仓库 确认当前项目的远程仓库地址。…...

【产品应用】一体化无刷电机在旋转等离子喷枪中的应用

在现代工业制造与加工领域,等离子喷枪凭借其高温、高速的等离子射流,能够实现高效的材料表面处理、切割以及焊接等工艺,在众多行业中发挥着关键作用。而一体化无刷电机的应用,更是为等离子喷枪的性能提升和稳定运行注入了强大动力…...

docker django uwsgi 报错记录

这个配置中是能够正常进行网页访问的,能够查看网页 [uwsgi] chdir /home/luichun/lc/Pyfile/PyCursor/app module app.wsgi:application plugin-dir /usr/lib/uwsgi/plugins plugins python311 env TZAsia/Shanghai socket-timeout 60 websocket-ma…...

【自由能系列(初级),论文解读】神经网络中,熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。

神经网络中的熵、自由能与动力学 核心结论: 神经网络在“学习”和“成长”过程中,熵、自由能以及动力学扮演着关键角色。 熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。 这…...

云计算时代携程的网络架构变迁

大家觉得有意义和帮助记得及时关注和点赞!!! 前言0 携程云平台简介 网络演进时间线1 基于 VLAN 的二层网络 1.1 需求1.2 解决方案:OpenStack Provider Network 模型1.3 硬件网络拓扑1.4 宿主机内部网络拓扑1.5 小结 优点缺点2 基于 SDN 的大二层网络 2.1 面临的新问…...

uniapp 微信小程序 数据空白展示组件

效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…...

java 线程池为什么设计成先进队列再创建最大线程为何先入队列再增加线程数?

java 线程池为什么设计成先进队列再创建最大线程为何先入队列再增加线程数&#xff1f; 这个设计与 线程池的性能优化 、资源利用和任务调度策略密切相关。要理解为什么线程池设计成“ 先将任务入队列&#xff0c;再创建最大线程数 ”&#xff0c;可以从以下几个方面进行分析&…...

我的Qt作品(20)使用Qt+OpenCV写一个旋转/抠图/mask生成工具

使用QtOpenCV写一个旋转/抠图/mask生成工具 1、旋转功能 void FormRotate::rotateImage(const cv::Mat &src, cv::Mat &dst, double degree) //旋转 {if (fabs(degree) < 0.001){dst src;return;}//center旋转的中心点坐标//degree旋转的角度,不是弧度,>0逆时针…...

【vue】vite + ts +vue3 安装及使用 pinia

vue3 TS 安装使用pinia状态管理_vue3 ts pinia-CSDN博客 Vue项目进阶&#xff1a;再谈Pinia函数式&#xff08;composition API&#xff09;用法-腾讯云开发者社区-腾讯云...

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…...

1085 PAT单位排行

每次 PAT 考试结束后&#xff0c;考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。 输入格式&#xff1a; 输入第一行给出一个正整数 N&#xff08;≤105&#xff09;&#xff0c;即考生人数。随后 N 行&#xff0c;每行按下列格式给出一个考生的信息&#xff…...

知识库1: 什么是知识库?

知识库&#xff08;Knowledge Base, KB&#xff09;是一个存储和组织知识的信息系统或数据集合&#xff0c;用于保存、管理和访问结构化或非结构化的信息。它的目的是帮助人们快速获取所需的知识、解答问题或支持决策。知识库可以被广泛应用于技术支持、教育、研究以及智能系统…...

[SAP ABAP] 程序备份

备份当前程序到本地的方式如下&#xff1a; 1.复制粘贴 Ctrl A 、Ctrl V 2.【实用程序】|【更多实用程序】|【上载/下载】|【下载】 ​ 3.快捷键&#xff0c;支持多种格式导出(.abap .html .pdf 等) 在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图…...

SpringBoot 自动装配原理及源码解析

目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 &#xff08;1&#xff09;SpringBootConfiguration&#xff1a; &#xff08;2&#xff09;EnableAutoConfiguration&#xff1a; &#xff08;3&#xf…...

【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38654 在当今时代背景下&#xff0c;社会发展日新月异&#xff0c;人们的生活方式与消费观念正经历深刻变革。MoonFox 月狐数据的《2024 年悦己生活消费洞察报告》聚焦于这一充满活力与变化的消费领域。随着就业、婚姻等社会压力的…...

empire靶机

打开靶机 我们先查看页面源代码&#xff0c;发现什么也没有 再去用nmap扫描 nmap -sV -p- 192.168.95.144 发现也没什么用 我们在用dirb扫一下 dirb http://192.168.95.144 我们发现了robots.txt并且响应码是200&#xff0c;去访问一下 又得到了一个目录&#xff0c;去访问…...

uniapp 判断多选、选中取消选中的逻辑处理

一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"...

arthas查看拼接好参数的sql, redis, es完整可直接执行的命令

arthas查看拼接好参数的sql, redis, es完整可直接执行的命令 arthas查看sql可执行命令arthas查看redis可执行命令arthas查看es可执行命令相关链接 经常修bug的时候, 拿不到能够执行的命令, 真是太难受了 arthas查看sql可执行命令 # mybatis plus (参数和sql分离了) watch org.…...

Flamingo:少样本多模态大模型

Flamingo&#xff1a;少样本多模态大模型 论文大纲理解1. 确认目标2. 分析过程&#xff08;目标-手段分析&#xff09;3. 实现步骤4. 效果展示5. 金手指 解法拆解全流程核心模式提问Flamingo为什么选择使用"固定数量的64个视觉tokens"这个特定数字?这个数字的选择背…...

nacos-gateway动态路由

在Nacos官网中给出了手动监听Nacos配置变更的SDK&#xff1a; Nacos Java SDK 所需依赖 <!--统一配置管理--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <…...

Kotlin 协程基础知识总结二 —— 启动与取消

协程启动与取消的主要内容&#xff1a; 启动协程&#xff1a;启动构建器、启动模式、作用域构建器、Job 生命周期取消协程&#xff1a;协程的取消、CPU 密集型任务取消、协程取消的副作用、超时任务 1、协程构建器 &#xff08;P20&#xff09;launch 与 aysnc 两种协程构建…...

【漏洞复现】Struts2(CVE-2024-53677)任意文件上传逻辑绕过漏洞

文章目录 前言一、漏洞描述二、漏洞详情三、影响版本四、危害描述五、漏洞分析六、漏洞复现七、修复建议前言 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设…...

使用 IDE生成 Java Doc

使用步骤 Android Studio界面->Tools->Generate JavaDoc zh-CN -encoding UTF-8 -charset UTF-8 -classpath “C:\Users\fangjian\AppData\Local\Android\Sdk\platforms\android-34\android.jar” 报错问题 错误: 目标 17 不允许选项 --boot-class-path 如果你正在使用…...

AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode和 桔子数据 的 价格对比

要对比 AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode 和 桔子数据 的 价格&#xff0c;我们需要先了解每个平台的定价模型、服务类型以及不同服务之间的价格差异。以下是根据各个平台常见服务&#xff08;如计算实例、存储、数据传输等&#xff09;做的一个 简化…...

【C++篇】AVL树的实现

前言 本篇是基于二叉搜索树写的&#xff0c;详情可以去看上篇【二叉搜索树】 一&#xff0c;AVL树的概念 &#xff08;1&#xff09;&#xff0c;AVL树是一颗二叉搜索树&#xff0c;它是一棵空树或者是具备以下性质的二叉搜索树&#xff1a;它的左右子树都是AVL树&#xff…...

VIVO Android面试题及参考答案

请重写算法题:求数组的全排列。 思路: 要获取一个数组的全排列,我们可以利用回溯算法。具体来说,回溯算法通过递归的方式逐步生成排列,在每一步都将一个元素加入排列中,然后在下一步递归中排除已选元素,回溯的时候撤销选择,尝试其他可能。 步骤: 递归生成排列: 使…...

联邦大模型微调

微调&#xff08;Fine-tuning&#xff09;是一种迁移学习的技术&#xff0c;用于在一个已经预训练好的模型基础上&#xff0c;通过进一步训练来适应特定的任务或数据集。微调可以在具有相似特征的任务之间共享知识&#xff0c;从而加快训练速度并提高模型性能。 微调步骤&…...

DigitalOcean Kubernetes现已支持VPC natvie集群

DigitalOcean Kubernetes (DOKS)的VPC natvie集群功能现已正式上线&#xff01;这一新功能实现了DOKS集群与虚拟私有云&#xff08;VPC&#xff09;资源之间的无缝集成&#xff0c;提升了工作负载的网络灵活性和可扩展性。 什么是VPC natvie 集群&#xff1f; VPC natvie 集群支…...

【每日学点鸿蒙知识】H5与C++通讯、动态参数化配置、ArkTS调用JS、Json对象转换、showToast在多次调用问题

1、HarmonyOS h5页面和C如何进行双向通讯&#xff1f; 前的规格是H5只能和ArkTS通讯&#xff0c;ArkTS通过NDK接口与C通讯&#xff0c;只有网络拦截有C接口。参考链接&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/_web-V5 2、HarmonyO…...

ZC706开发板教程:使用SD卡启动工具烧写flash

在使用开发板的过程中&#xff0c;常常需要通过 Flash 模式启动。然而&#xff0c;使用 JTAG 模式在线烧写 flash 的过程既繁琐又耗时&#xff0c;许多用户对此表示困扰。本期将为您提供解决方案&#xff0c;以简化这一流程。 我们分析正常的flash烧写过程&#xff0c;就是通过…...

问题-01

Mybatis比较失效问题 1、问题复现 whetherPromoterNull是字符串类型&#xff0c;0使用单引号包裹&#xff0c;进行比较时发现不起作用 <if test"whetherPromoterNull ! null and whetherPromoterNull.trim() 0"> and sui.share_user_id is not null</if&g…...

内容营销专家刘鑫炜:误区四,目标不明,营销如同“盲头苍蝇”?

我们经常会遇到这样的客户&#xff0c;稿件提交过来后&#xff0c;一会儿说要发这个媒体&#xff0c;不一会儿又要发那个媒体&#xff0c;而且这两个媒体根本没有关联性&#xff0c;这时候&#xff0c;我们都会问客户&#xff0c;你推广这篇稿件的目的是什么&#xff0c;是为了…...

java基础1:处理Map

一、适用场景&#xff1a;相对Map排序&#xff0c;想获取其中最大或最小值。 1、获取map集合里&#xff0c;获取 max(value)对应的key 1)、方式1 Testpublic void MapInnerMaxValue() {HashMap<String, Integer> hashMap new HashMap<>();hashMap.put("a&q…...

企业销售人员培训系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

设计模式-责任链模式

一、简介 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;用于将请求的发送者与接收者解耦&#xff0c;使多个处理对象都有机会处理该请求。这些处理对象通过形成一条链式结构依次处理请求&#xff0c;直到某个对象能够完…...

04、Spring MVC

Spring MVC是Spring的Web模块,用来开发Web应用的,它最终作为B/S、C/S模式下的Server端 Web应用的核心就是处理HTTP请求并响应。 一、关于两种开发模式说明 我们使用Spring MVC有两个开发模式 前后分离(数据与页面分离) @ResponseBody@RestController其涉及的生要机制是:…...

K8S 黑魔法之如何从 Pod 拿到节点的命令行

搞 K8S 运维的时候&#xff0c;偶尔会遇到一个难题&#xff0c;定位到问题出在某个节点上&#xff0c;而由于权限审批&#xff0c;错误配置等等各种原因&#xff0c;没有办法拿到节点的 SSH 权限&#xff0c;无法进入节点命令行进一步排障。 这个时候&#xff0c;就可以用这个…...

谷歌用Anthropic的Claude帮Gemini“打磨”性能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

React性能优化:构建更高效的应用

在现代前端开发中,React已经成为构建复杂、交互频繁应用的首选框架。然而,随着应用规模的扩大和功能的丰富,组件的频繁重渲染可能会成为性能瓶颈,影响用户体验。为了提升React应用的性能,开发者需要掌握一系列性能优化技巧和工具。本文将详细介绍React性能优化的各个方面,…...

Linux从0到1——线程同步和互斥【互斥量/条件变量/信号量/PC模型】

Linux从0到1——线程同步和互斥 1. Linux线程互斥1.1 问题引入1.2 互斥相关概念1.3 多执行流并发访问公共资源的数据不一致问题1.4 互斥量&#xff08;锁&#xff09;1.5 改进抢票系统1.6 锁的简单封装1.7 锁的实现原理1.8 可重入VS线程安全1.9 死锁 2. Linux线程同步2.1 理解同…...

无人机驾驶证对入伍有帮助吗?

无人机驾驶证对入伍确实有一定的帮助&#xff0c;主要体现在以下几个方面&#xff1a; 一、提升专业技能 无人机操作是一项高度专业化的技能&#xff0c;需要掌握飞行原理、航电系统、任务规划、紧急处理等多方面的知识。通过考取无人机驾驶证&#xff0c;个人可以系统地学习这…...

【贪心算法】贪心算法七

贪心算法七 1.整数替换2.俄罗斯套娃信封问题3.可被三整除的最大和4.距离相等的条形码5.重构字符串 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f…...

MySQL 锁概述

1.锁的分类 根据不同的分类角度可将锁分为&#xff1a; 按是否共享分&#xff1a;S 锁、X 锁按粒度分&#xff1a;表级锁、行级锁、全局锁&#xff08;锁整个库&#xff09;、页锁&#xff08;锁数据页&#xff09;意向锁&#xff1a;意向 S 锁、意向 X 锁&#xff1a;都是表…...

springboot502基于WEB的牙科诊所管理系统(论文+源码)_kaic

牙科诊所管理系统的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定牙科诊所管理系统的…...

overleaf中出现TeX capacity exceeded PDF object stream buffer=5000000的原因和解决方案

在插入pdf 配图后&#xff0c;编译出错提示信息如图&#xff0c;很可能的一个原因是pdf文件大小太大了&#xff0c;最好压缩一下&#xff0c;压缩到1MB以内。...

LabVIEW神经肌肉电刺激与记录系统

神经肌肉电刺激技术在康复医学和神经科学领域占有重要地位。基于LabVIEW开发了神经肌肉电刺激与记录系统&#xff0c;该系统具备可控电脉冲输出与高效数据采集功能&#xff0c;适用于临床和科研领域。 项目背景 神经肌肉电刺激技术用于治疗各类神经和肌肉系统疾病&#xff0c;…...