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

Unity跨平台基本原理

Unity跨平台基本原理

微软的.Net是什么

微软的 .Net既不是编程语言也不是框架 是类似于 互联网时代、次时代、21世纪、信息时代之类的宣传口号

它是一整套技术体系的统称,或者说它是微软提供的技术平台的代号

包含的内容有

框架体系:.Net Framework、.Net Core、Mono等等

开发语言:C#、VB、F#等等(C#是.Net平台主推的开发语言)

开发工具:Visual Studio、Visual Studio Code 等等

你可以简单理解.Net本质上就是微软为自己的一系列产品取的一个代号

微软做 .Net平台的目的

  1. 跨语言

只要是面向.NET平台的编程语言(C#、VB、C++、F#等等),用其中一种语言编写的内容可以无缝地用在另一种语言编写的应用程序中

  1. 跨平台

一次编译,不需要任何代码修改,应用程序就可以运行在任意有**.NET框架实现的操作系统上,即代码不依赖于操作系统,也不依赖硬件环境**

如何实现的.Net跨语言?

CLS(Common Language Specification) 公共语言规范

.Net专门参考每种语言并找出了语言间的共性,定义了一组规则。

与其说是规则,不如说它是一组语言互操作的标准规范

只要开发者都遵守这个规则来编码,那么代码就能被任意.Net平台支持的语言所通用,即可以通过不同的编程语言(C#、VB、J#等等)来创建应用程序

CTS(Common Type System) 公共类型系统

当你需要设计面向.Net的语言时需要遵循一个体系,这个体系就是CTS

刚才提到的CLS公共语言规范就是是CTS公共类型系统的子级

一个编程语言,如果它能够支持CTS,那么我们就称它为**面向.NET平台的语言 **

CLI(Common Language Infrastructure) 公共语言基础结构

是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准

总结

微软为了实现跨语言,制定了一些规范

只要一门语言支持CTS(公共类型系统)的规则

那么我们就能够使用它在.Net平台下开发应用程序 CLS(公共语言规范)是CTS的一个子级,是一组语言互操作的标准规范

我们经常可以看到的CLI公共语言基础结构,它包含CTS公共类型系统 它是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准

Net的跨语言是让各种语言支持.Net的规范CLI(也就是CTS等规范)

早期的.Net系列产品主要是为了给Windows操作系统服务的 并没有跨平台的特性,即使跨语言了

也只是可以使用多语言开发Windows上的应用程序

那么这里就不得不提几个个概念 .Net Framework 、 .Net、Mono

.Net Framework

.Net Framework 在2002年推出1.0版本 .NET Framework 是一个可以快速开发、部署网站服务及应用程序的开发框架 是 Windows 中的一个组件,部分开源,主要用于开发Windows下应用程序

包括 公共语言运行时(Common Language Runtime, CLR) 虚拟执行系统 .NET Framework 类库

.Net Framework的体系结构

在这里插入图片描述

制作应用程序

编程语言 + 调用各种类库进行开发 生成程序集

  1. 只要支持CLS公共语言规范的语言都可以用于 开发Windows下的各种应用程序和网站程序

  2. **BCL(基础类库)和FCL(框架类库)**是这个 框架体系中为我们实现好的各种API

  3. 程序集的表现就是后缀为.dll或者.exe格式的文件 其中包含的最关键信息:

    PE头、CLR头(就是一些程序的格式信息,比如入口方法,版本号等等)

    CIL代码(通用中间代码)介于源代码和机器码之间的代码之后会通过CLR产生机器码

    CIL代码你可以理解为由于可能使用不同的代码进行开发,所以会将这些代码翻译为统一规范的中间代码

CLR

让应用程序在操作系统上运行 CLR(Common Language Runtime) 公共语言运行时,

它是.Net Framework的基础, 所有的.Net技术都是建立在此之上的 它是一个在执行时管理代码的代码,提供内存管理、 线程管理等等核心服务,就好像一个小型的操作系统一样 所以形象的把它称为**“.Net虚拟机” 。**

如果想要应用程序在目标操作系统上能够运行 就必须依靠.Net提供的CLR环境来支持

那就必须在操作系统上安装.Net Framework 它会把程序集中的IL(中间代码)翻译成机器码

最终在操作系统上运行

在这里插入图片描述

总结

.Net Framework 是一个主要用于跨语言开发 Windows操作系统下的 应用程序的框架结构

他并不支持跨平台

如何实现的跨平台?

.Net Core

Net Core 是2016年推出的.Net Framework的新一代版本

它就像是.Net Framework的兄弟 是.Net Framework的翻版实现,它是一个开源项目

它是基于.Net Framework来进行设计的主要目的就是跨平台

是.Net技术框架组成在Windows、MacOS、类Linux系统下的具体实现

它的原理就是为不同的操作系统实现对应的 CLR公共语言运行时(.Net虚拟机)

这样就可以在不同的平台上 将IL(中间代码)翻译成机器码最终在操作系统上运行

.Net FrameWork 到 .Net Core

从前面.Net FrameWork 和 .Net Core相关内容

我们了解到 从并不跨平台的.Net FrameWork 在2002年正式问世 到2016年跨平台的.Net Core的诞生 中间

.Net 平台有14年的并不跨平台的空窗期 而在这段时间内,

难道.Net就并不支持跨平台了吗? 答案当然是否定的,那么我们就不得不提Mono了

Mono

Mono是一个由Xamarin公司(已被微软收购)所赞助的开源项目

它基于.Net的CLI(Common Language Infrastructure)公共语言基础结构

提供了微软.Net FrameWork的另一种实现 它相对.Net FrameWork最大的区别就是具备跨平台的能力

它不仅可以运行在Windows、MacOS、Linux等操作系统 甚至还可以运行在PS3、XBOX、Wii等主机平台上 Mono的1.0版本出现在2004年 也就是说在.Net Core出现之前,Mono是.Net平台实现跨平台的不二之选

Mono如何实现跨平台

Mono利用 .Net平台制定的CLI公共语言基础结构规则

利用它我们可以把很多种语言编译成通用规范的CIL公共中间语言

再利用CLR公共语言运行时,将这些CIL公共中间语言转换为 操作系统的原生代码(主要做的就是在各种操作系统上实现了对应的CLR内容

这样用各种不同语言编写的逻辑就能够在指定操作系统上运行了 它的这一套规则是在**.Net Framework规则上进行的修改和添加**

总结如何实现的跨平台?

在.Net Core出现之前开发者都通过Mono来实现.Net的跨平台

我们可以使用基于.Net平台的Mono开发 便可以发布可以在主流的各种操作系统上运行的应用程序

主要内容

微软的.Net是什么

是一个包含编程语言、框架、IDE等产品的系列产品统称

.Net跨语言的实现

CLI公共语言基础结构(CTS公共类型系统)

CLS公共语言规范是它的子级

.Net跨平台的实现

基于.Net Framework的 Mono 和 .Net Core

他们两都基于CLI公共语言基础结构和CLR公共语言运行时实现跨语言和跨平台

Unity和Mono的关系

Mono是基于.Net的跨平台方案,同时它具备.Net平台的跨语言特点 Mono的第一个版本是在2004年发布的

Unity公司于2004年成立

Unity的底层是通过C/C++来完成的 但是为了更方便的让开发者使用

Mono在当时成为了不二之选 它同时具备跨平台和跨语言的两个特性

Unity希望能有更多的开发者使用其进行游戏开发并且一次开发一劳永逸

所以跨语言和跨平台对于他们来说是很重要的

虽然C++本身跨平台,但是如果使用C++作为上层逻辑开发语言,那么作为开发者来说选择性相对较少,并且对于初学者来说学习难度也较大

所以当时的Mono是非常满足Unity需求的 不仅支持跨语言还支持跨平台

Unity跨平台的必备概念

Unity主要包括两个部分:

  1. Unity Engine(引擎): 提供UnityEngine.dll动态库,各平台不同,C/C++编写,包含平台相关代码、 图形API、物理引擎、灯光等等所有游戏引擎底层内容
  2. Unity Editor(编辑器):提供UnityEditor.dll动态库,大部分由C#编写,用户脚本最初可以使用C#、 JavaScript、Boo语言编写,项目代码最后由Mono编译

Mono跨平台基本原理

Mono利用 .Net平台制定的CLI公共语言基础结构规则

利用它我们可以把很多种语言编译成通用规范的CIL公共中间语言

再利用CLR公共语言运行时,将这些CIL公共中间语言转换为 操作系统的原生代码(主要做的就是在各种操作系统上实现了对应的CLR内容

这样用各种不同语言编写的逻辑就能够在指定操作系统上运行了 它的这一套规则是在**.Net Framework规则上进行的修改和添加**

Mono主要构成部分

  1. C#编译器(mcs)

  2. Mono Runtime 类似CLR公共语言运行时(虚拟机) 包括JIT(Just in time)即时编译器、AOT(Ahead of time)提前编译器、 GC、类库加载器 等等

  3. BCL基础类库

  4. Mono类库 提供很多超出.Net的一些额外功能,主要用于构建各种操作系统上的应用

Unity跨平台的基本原理(Mono)

在这里插入图片描述

在Unity下使用各种语言进行逻辑实现 这些语言在发布时会被编译成 IL中间代码

最终这些中间代码在对应操作系统上 通过Mono VM(虚拟机) 真正翻译成机器码运行起来

在这里插入图片描述

基于Mono跨平台的优缺点

优点:只要在不同操作系统上实现Mono VM(虚拟机) 那我们能够支持的平台就会“无限”多

缺点: 维护工作耗时耗力,当Unity版本更新时,Mono VM也需要维护和更新,那多对于N多个平台来说,工作量是非常大的。(Unity的工作量) 低版本Mono无法支持新版本C#的强大新特性

总结

  1. Unity和Mono的关系

    利用Mono实现Unity上层逻辑的跨语言和跨平台

  2. Unity跨平台的必备概念:

    Unity底层是C/C++,上层逻辑支持多语言(目前只用C#)

    Mono的基本构成有C#编译器、Mono运行时(虚拟机)、各种类库等

  3. Unity跨平台的基本原理(Mono)

    将基于CLI公共语言基础规则的语言编译成CIL公共中间语言,再通过Mono VM(虚拟机) 将其在各操作系统中转译为原生机器码进行运行

  4. 基于Mono跨平台的优缺点

    无限跨平台

    维护工作量大,低版本的Mono无法支持新版C#新功能

IL2CPP是什么

IL2CPP是在Unity4.6.1 p5之后的版本中 加入的脚本后处理方式

你可以把它简单理解为是继Mono之后的一种跨平台解决方案

顾名思义就是把 IL中间代码转译为CPP代码(C++)

IL2CPP跨平台原理

在这里插入图片描述

通过IL2CPP我们可以将编译好的IL中间代码转译成C++代码,再利用各平台优化过的编译器编译为对应平台的目标代码

IL2CPP和Mono的区别

当生成了IL中间代码

Mono是直接通过虚拟机转译运行

而IL2CPP的步骤多了一些 会将IL中间代码转译为C++代码,再通过各平台的C++编译器直接编译为可执行的原生汇编代码

虽然中间代码变为了C++ 但是内存管理还是遵循C#中GC的方式 这也是为什么有一个IL2CPP VM(虚拟机) 存在的原因,它主要是用来完成 GC管理,线程创建等服务工作的

在这里插入图片描述

Mono优缺点

  1. 构建(最终打包时)速度快
  2. Mono编译机制是JIT即时编译,所以支持更多类库
  3. 必须将代码发布为托管程序集(.dll文件)
  4. Mono VM虚拟机平台维护麻烦,且部分平台不支持(WebGL)
  5. 由于Mono版本授权原因,C#很多新特性无法使用
  6. IOS支持Mono,但不在允许32位的Mono应用提交到应用商店

IL2CPP优缺点

  1. 相对Mono构建(最终打包时)速度慢
  2. 只支持AOT提前编译
  3. 可以启用引擎代码剥离来减少代码的大小
  4. 程序的运行效率比Mono高,运行速度快
  5. 多平台移植更加方便

Mono和IL2CPP的最大区别

IL2CPP不能在运行时动态生成代码和类型,所以必须在编译时就完全确定需要用到的类型

IL2CPP在进行AOT编译时,会裁剪掉那些在代码中没有显式引用的类型,以减小最终打包文件的大小。这是因为AOT编译需要在编译时就确定所有需要的类型,而JIT编译则可以在运行时动态加载和编译代码,因此对于类型的需求不那么严格

举例:List和List中A和B是我们自定义的类,我能必须在代码中显式的调用过,IL2CPP才能保留List和List两个类型。如果在热更新时我们调用List,但是它之前并没有在代码中显示调用过,那么这时就会出现报错等问题。主要就是因为JIT和AOT两个编译模式的不同造成的

如果你在代码中没有显式调用过List<A>List<B>,那么在IL2CPP的AOT编译过程中,这两个类型可能会被裁剪掉,因为IL2CPP无法确定这两个类型在运行时是否需要。而JIT编译模式下,由于可以在运行时动态编译代码,所以不会出现这个问题

Mono和IL2CPP的使用建议

由于IL2CPP的运行效率有很大优势

所以建议大家在实际开发中 直接使用IL2CPP模式进行打包

总结

  1. IL2CPP是什么

    是Unity4.6.1版本之后加入的新的一种跨平台解决方案

  2. Mono跨平台原理

    C#代码—>Mono C#编译器—>IL中间代码—>Mono VM—>操作系统的原生代码

  3. IL2CPP跨平台原理

    C#代码—>Mono C#编译器—>IL中间代码—>IL2CPP—>C++—>C++编译器—>原生汇编代码—>IL2CPP VM

  4. Mono和IL2CPP的区别

    IL2CPP效率高于Mono,跨平台也更好维护。

    Mono是JIT即时编译,IL2CPP是AOT提前编译

  5. Mono和IL2CPP两种方式的使用建议

    建议使用效率更高的IL2CPP

相关文章:

Unity跨平台基本原理

Unity跨平台基本原理 Unity跨平台基本原理微软的.Net是什么微软做 .Net平台的目的如何实现的.Net跨语言&#xff1f;总结 .Net Framework.Net Framework的体系结构CLR总结 如何实现的跨平台&#xff1f;.Net Core.Net FrameWork 到 .Net CoreMonoMono如何实现跨平台总结如何实现…...

基于 Python、OpenCV 和 PyQt5 的人脸识别上课打卡系统

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是基于 Python、OpenCV 和 PyQt5 的人脸识别上课签到系统。该系统采用 Python 语言开发&#xff0c;开发过程中采用了OpenCV框架&#xff0c;Sqlite db 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强…...

IDEA的简易安装思路

IDEA(本身就是Java开发的)&#xff1a;是目前为止开发Java效率最高的工具&#xff0c;但正版收费……&#xff08;eclipse的话不好说&#xff0c;反正还是随主流吧&#xff09; 使用IDEA的前提&#xff1a;必须先安装JDK【否则直接使用IDEA工具来运行程序是无效的&#xff0c;它…...

【实战】在Koa.js中实现文件上传的接口 (本地存储)

目录 环境准备 使用 koa-body 中间件获取上传的文件 使用 Postman 测试 使用 koa-static 中间件生成图片链接 编写前端页面上传文件 文件上传是一个基本的功能&#xff0c;每个系统几乎都会有&#xff0c;比如上传图片、上传Excel等。那么在Node Koa应用中如何实现一个支持…...

flink学习(10)——allowedLateness/测道输出

allowedLateness(lateness: Time) 水印&#xff1a;短期延迟&#xff0c;达到条件后触发计算并且关闭窗口&#xff08;触发关闭同时进行&#xff09; 水印allowedLateness : 短期延迟 等待长期延迟效果 1、达到水印条件后&#xff0c;会触发窗口计算&#xff0c;但是不关闭窗口…...

微信小程序按字母顺序渲染城市 功能实现详细讲解

在微信小程序功能搭建中&#xff0c;按字母渲染城市会用到多个ES6的方法&#xff0c;如reduce&#xff0c;map&#xff0c;Object.entries()&#xff0c;Object.keys() &#xff0c;需要组合熟练掌握&#xff0c;才能优雅的处理数据完成渲染。 目录 一、数据分析 二、数据处理 …...

openjdk17 jvm 对象 内存溢出 在C++源码体现

##java大对象类 public class MiBigObject {private String f1;private String f2;private String f3;private String f4;private String f5;private String f6;private String f7;private String f8;private String f9;private String f10;private String f11;private String…...

【软考速通笔记】系统架构设计师⑧——系统质量属性与架构评估

文章目录 一、前言二、软件系统质量属性2.1 开发期质量属性2.2 运行期质量属性 三、质量属性场景描述四、系统架构评估方法4.1 方法分类4.2 软件架构分析方法4.3 架构权衡分析法4.4 成本效益分析法 一、前言 笔记目录大纲请查阅&#xff1a;【软考速通笔记】系统架构设计师——…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第5篇:YOLOv3——多尺度预测】

YOLOv3 1 摘要2 YOLOv32.1 相对于v2的改进2.2 网络架构2.3 多尺度预测2.4 YOLOv3结果 YOLO系列博文&#xff1a; 【第1篇&#xff1a;概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇&#xff1a;YOLO系列论文、代码和主要优缺点汇总】【第3篇&#xff1a;YOLOv…...

HarmonyOS4+NEXT星河版入门与项目实战(25)------UIAbility启动模式(文档编辑案例)

文章目录 1、启动模式2、Specified启动模式实现步骤3、文档编辑案例1、文件创建2代码实现3、Statge 创建4、添加配置1、启动模式 Singleton启动模式: 每个 UIAbility 只存在一个实例,是默认的启动模式,任务列表中只会存在一个相同的 UIAbilityStandard启动模式: 每次启动 U…...

PyTorch张量运算与自动微分

PyTorch张量运算与自动微分 PyTorch由Facebook人工智能研究院于2017年推出&#xff0c;具有强大的GPU加速张量计算功能&#xff0c;并且能够自动进行微分计算&#xff0c;从而可以使用基于梯度的方法对模型参数进行优化&#xff0c;大部分研究人员、公司机构、数据比赛都使用P…...

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…...

1.1 数据结构的基本概念

1.1.1 基本概念和术语 一、数据、数据对象、数据元素和数据项的概念和关系 数据&#xff1a;是客观事物的符号表示&#xff0c;是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据是计算机程序加工的原料。 数据对象&#xff1a;是具有相同性质的数据元素的集合&…...

【NebulaGraph】深入了解查询语句(二)

【NebulaGraph】深入了解查询语句 1. NebulaGraph 查询语句概述 1. NebulaGraph 查询语句概述 文档&#xff1a;https://docs.nebula-graph.com.cn/3.8.0/3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/ NebulaGraph 的数据以点和边的形式存…...

Oracle—系统包使用

文章目录 系统包dbms_redefinition 系统包 dbms_redefinition 功能介绍&#xff1a;该包体可以实现将Oracle库下的表在线改为分区结构或者重新定义&#xff1b; 说明&#xff1a;在检查表是否可以重定义和开始重定义的过程中&#xff0c;按照表是否存在主键&#xff0c;参数 o…...

org.apache.commons.lang3包下的StringUtils工具类的使用

前言 相信平时在写项目的时候&#xff0c;一定使用到StringUtils.isEmpty()&#xff1b;StringUtils.isBlank();但是你真的了解他们吗&#xff1f; 也许你两个都不知道&#xff0c;也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外&#xff0c;并不知道还有isAnyEmpty/isNon…...

详细介绍Node.js的中间件及使用方法

在Node.js的生态中&#xff0c;中间件&#xff08;Middleware&#xff09;是一个不可或缺的概念&#xff0c;它为构建灵活而高效的应用程序提供了强大的支持。以下是对Node.js中间件的详细介绍&#xff1a; 中间件的概念与定义 中间件是一种软件架构的设计模式&#xff0c;用…...

VPC9527同步整流控制器,相对最大电压检测与强力自供电,与MP6908完全PIN TO PIN

VPC9527 是一款高性能的同步整流控制器,它兼容 CCM 和 DCM 两种模式,最大工作频率高达 700kHz;可 通过 SEL 引脚的逻辑电压来选择 400nS 或 800nS 两个关断检测的屏蔽时间;可通过 VLC 引脚来调整限压导通的 参数,以便与所选同步整流管的参数相匹配,获得适应的最优性能;它…...

【聚类】主成分分析 和 t-SNE 降维

1 主成分分析PCA PCA 是一种线性降维技术&#xff0c;旨在通过选择具有最大方差的特征方向&#xff08;称为主成分&#xff09;来压缩数据&#xff0c;同时尽可能减少信息损失。 1.1 原理 1.2 优缺点 from sklearn.decomposition import PCA import matplotlib.pyplot as plt…...

MyBatis框架-日志配置

MyBatis框架的日志配置 MyBatis作为一个封装好的ORM框架&#xff0c;其运行过程我们没有办法跟踪&#xff0c;为了让开发者MyBatis执行流程及执行步骤所完成的工作&#xff0c;MyBatis框架本身支持log4j日志框架&#xff0c;对运行的过程进行跟踪记录。我们只需对MyBatis进行相…...

【数据结构】哈希 ---万字详解

unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到log_2 N&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好 的查询是&#xff0c…...

Python Web 框架

Python 有多个强大的 Web 框架&#xff0c;每个框架都具有不同的特点和应用场景。根据开发者的需求&#xff08;如开发速度、灵活性、功能等&#xff09;&#xff0c;可以选择适合的框架。以下是一些常见的 Python Web 框架&#xff1a; 1. Django 简介&#xff1a;Django 是一…...

大模型翻译能力评测

1. 背景介绍 随着自然语言处理技术的飞速发展&#xff0c;机器翻译已经成为一个重要的研究领域。近年来&#xff0c;基于大模型的语言模型在机器翻译任务上取得了显著的进展。这些大模型通常具有数亿甚至数千亿的参数&#xff0c;能够更好地理解和生成自然语言。 但是&#xf…...

深度学习中的前向传播与损失函数

目录 ​编辑 前向传播&#xff1a;神经网络的推理过程 什么是前向传播&#xff1f; 前向传播的步骤 数学表达 代码示例&#xff1a;前向传播 损失函数&#xff1a;衡量预测与真实值的差异 损失函数的定义 损失函数的作用 常见的损失函数 代码示例&#xff1a;损失函…...

MySQL 复合查询

实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。本节我们用一个简单的公司管理系统&#xff0c;有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下&#xff1a; DROP database IF EXISTS scott; CREATE database IF NOT EXIST…...

Java程序调kubernetes(k8s1.30.7)core API简单示例,并解决403权限验证问题,即何进行进行权限授权以及验证

简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用&#xff0c;但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…...

Java安全—原生反序列化重写方法链条分析触发类

前言 在Java安全中反序列化是一个非常重要点&#xff0c;有原生态的反序列化&#xff0c;还有一些特定漏洞情况下的。今天主要讲一下原生态的反序列化&#xff0c;这部分内容对于没Java基础的来说可能有点难&#xff0c;包括我。 序列化与反序列化 序列化&#xff1a;将内存…...

火鸟地方门户系统V8.5系统源码+搭建环境教程

一.介绍 火鸟地方门户系统V8.5源码 系统包含4端&#xff1a; PCH5小程序APP 二.搭建环境 系统环境&#xff1a;CentOS、 运行环境&#xff1a;宝塔 Linux 网站环境&#xff1a;Nginx 1.2.22 MySQL 5.6 PHP-7.4 常见插件&#xff1a;fileinfo &#xff1b; redis 三.测…...

深度学习:梯度下降法

损失函数 L&#xff1a;衡量单一训练样例的效果。 成本函数 J&#xff1a;用于衡量 w 和 b 的效果。 如何使用梯度下降法来训练或学习训练集上的参数w和b &#xff1f; 成本函数J是参数w和b的函数&#xff0c;它被定义为平均值&#xff1b; 损失函数L可以衡量你的算法效果&a…...

Git常用命令

Git是一个优秀的代码版本管理工具&#xff0c;其常用命令包括但不限于以下这些&#xff1a; 一、初始化与配置 git init&#xff1a;在当前目录初始化一个新的Git仓库。git clone [url]&#xff1a;克隆远程仓库到本地。git config&#xff1a;配置Git的各种选项和变量&#…...

css预处理器scss/sass

一、css预处理器sass的诞生 众所周知css并不能算是一们真正意义上的“编程”语言&#xff0c;它本身无法未完成像其它编程语言一样的嵌套、继承、设置变量等工作&#xff0c;仅仅只能用来编写网站样式&#xff0c;如此一来代码就会百年的臃肿难以维护。为了解决css的不足&#…...

磁盘/系统空间占满导致黑屏死机无法开机的解决办法

文章目录 起因具体操作1.重启虚拟机&#xff0c;一直按CtrlShitf进入GRUP界面2.选“Ubuntu高级选项”并回车选择第二个&#xff0c;recovery mode![请添加图片描述](https://i-blog.csdnimg.cn/direct/201f9784c203406d802d24b39dc2d4a3.png)3.4.命令查看磁盘情况5.查找和删除文…...

API 与 SDK 之间的区别

API 与 SDK 之间的区别 很多人在软件开发中经常会分不清 SDK 与 API &#xff0c;今天就来浅谈一下两者之间的区别。 直白地说&#xff0c;SDK 包含了 API &#xff0c;是一套完整的&#xff0c;能完成更多功能的工具包&#xff0c;无论你想获取什么样的信息&#xff0c;SDK …...

Lua的环境与热更

一、global_State,lua_State与G表 Lua支持多线程环境&#xff0c;使用 lua_State 结构来表示一个独立的 Lua 线程&#xff08;或协程&#xff09;。每个线程都需要一个独立的全局环境。而lua_State 中的l_G指针&#xff0c;指向一个global_State结构&#xff0c;这个就是我们常…...

java八股-分布式服务的接口幂等性如何设计?

文章目录 接口幂等token Redis分布式锁 原文视频链接&#xff1a;讲解的流程特别清晰&#xff0c;易懂&#xff0c;收获巨大 【新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频面试真题&#xff09;】 https://www.bilibili.com/…...

鸿蒙学习使用模拟器运行应用(开发篇)

文章目录 1、系统类型和运行环境要求2、创建模拟器3、启动和关闭模拟器4、安装应用程序包和上传文件QA:在Windows电脑上启动模拟器&#xff0c;提示未开启Hyper-V 1、系统类型和运行环境要求 Windows 10 企业版、专业版或教育版及以上&#xff0c;且操作系统版本不低于10.0.18…...

基于 FFmpeg/Scrcpy 框架构建的一款高性能的安卓设备投屏管理工具-供大家学习研究参考

支持的投屏方式有:USB,WIFIADB,OTG,投屏之前需要开启开发者选项里面的USB调试。 主要功能有: 1.支持单个或多个设备投屏。 2.支持键鼠操控。 3.支持文字输入。 4.支持共享剪切板(可复制粘贴电脑端文字到手机端,也可导出手机剪切板到电脑端)。 5.支持视频图片上传,可单…...

ESLint v9.0.0 新纪元:探索 eslint.config.js 的奥秘 (4)

从 v9.0.0 开始&#xff0c;官方推荐的配置文件格式是 eslint.config.js&#xff0c;并且支持 ESM 模块化风格&#xff0c;可以通过 export default 来导出配置内容。 // eslint.config.js export default [{rules: {semi: "error","prefer-const": "…...

电脑还原重置Windows系统不同操作模式

电脑有问题,遇事不决就重启,一切都不是问题!是真的这样吗。其实不然,主机系统重启确实可以自动修复一些文件错误,或者是设置问题,但是,当你由于安装了错误的驱动或者中毒严重,亦或是蓝屏,那么重启这个方子可能就治不了你的电脑了。 那么,除了当主机出现异常故障现象…...

图论2图的应用补充

图论1基础内容-CSDN博客 图的应用 4.1 拓扑排序 拓扑排序针对有向无环图的顶点进行线性排列的算法&#xff0c;使得对于任何来自顶点A指向顶点B的边&#xff0c;A都在序列中出现在B之前。这样的排序存在于有向无环图中&#xff0c;而对于非有向无环图则不存在拓扑排序。 拓扑排…...

非线性模型预测控制(NMPC)算法及其Python实现

目录 非线性模型预测控制(NMPC)算法及其Python实现第一部分:NMPC算法概述1.1 NMPC的定义1.2 NMPC的优点1.3 NMPC的应用领域第二部分:NMPC算法的数学模型2.1 系统建模2.2 目标函数与约束2.3 NMPC算法的求解第三部分:NMPC算法的实现与优化3.1 实现步骤3.2 Python实现3.3 设计…...

sql语句分类

SQL语句分类 SQL&#xff0c;英文全称为Structured Query Language&#xff0c;中文意思是结构化查询语言&#xff08;属于编程语言的一种&#xff09; DDL数据定义语⾔ Data Definition Language&#xff0c;数据定义语言&#xff0c;例如修改数据库中的表、视图、索引等对…...

<一>51单片机环境

目录 1,51单片机开发语言是C,环境keil 1.1,工程创建 1.2用什么把代码放进单片机里面 2,初识代码 1,51单片机开发语言是C,环境keil 1.1,工程创建 1. 创建项目工程文件夹&#xff0c;可以当作模板Template 2. 创建文件&#xff0c;取名main.c 3,编译&#xff0c;选择输出文…...

flutter 解决webview加载重定向h5页面 返回重复加载问题

long time no see. 如果觉得该方案helps&#xff0c;点个赞&#xff0c;评论打个call&#xff0c;这是我前进的动力~ 通常写法&#xff1a; 项目里用的webview_flutter 正常webview处理返回事件 if (await controller.canGoBack()) {controller.goBack(); } else {Navigator…...

折腾基本功:Redis 从入门到 Docker 部署

前面写过了两篇 “Redis” 相关的内容&#xff0c;今天补一篇“基本功”内容&#xff0c;让后续折腾系列文章可以篇幅更短、内容更专注。 前言 在日常工作中&#xff0c;我们构建应用时总是离不开一些基础组件&#xff0c;Redis 就是其中特别常用的一个。之前我写过不少文章&…...

【C++习题】24.二分查找算法_0~n-1中缺失的数字

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 剑指 Offer 53 - II. 0&#xff5e;n-1中缺失的数字 题目描述&#xff1a; 解法 哈希表&#xff1a; 建立一个hash表看哪个数字出现次数为0 直接遍历找结果&#xff1…...

分享一款内存马检测工具(附网盘链接)

DuckMemoryScan DuckMemoryScan是一款简单寻找包括不限于iis劫持,无文件木马,shellcode免杀后门的工具 功能列表 HWBP hook检测 检测线程中所有疑似被hwbp隐形挂钩内存免杀shellcode检测可疑进程检测(主要针对有逃避性质的进程[如过期签名与多各可执行区段])无文件落地木马检…...

vscode ctrl+/注释不了css

方式一.全部禁用插件排查问题. 方式二.打开首选项的json文件,注释掉setting.json,排查是哪一行配置有问题. 我的最终问题:需要将 "*.vue": "vue",改成"*.vue": "html", "files.associations": { // "*.vue": &qu…...

python数据分析之爬虫基础:爬虫介绍以及urllib详解

前言 在数据分析中&#xff0c;爬虫有着很大作用&#xff0c;可以自动爬取网页中提取的大量的数据&#xff0c;比如从电商网站手机商品信息&#xff0c;为市场分析提供数据基础。也可以补充数据集、检测动态变化等一系列作用。可以说在数据分析中有着相当大的作用&#xff01;…...

洛谷 P1036 [NOIP2002 普及组] 选数 C语言

题目&#xff1a;https://www.luogu.com.cn/problem/P1036 题目描述 已知 nn 个整数 x1,x2,⋯ ,xn&#xff0c;以及 1 个整数 k&#xff08;k<n&#xff09;。从 n 个整数中任选 k 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4&#xff0c;k3&#xff0c;4 个…...