【Unity面试篇】Unity 面试题总结甄选 |热更新与Lua语言 | ❤️持续更新❤️

news2024/12/25 0:15:43

请添加图片描述


前言

  • 关于Unity面试题相关的所有知识点:🐱‍🏍2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】
  • 为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新的内容,并对之前的版本中有些模糊的地方进行了纠正。
  • 进阶篇中有些题目在基础篇已经有了,这里划分模块时有些会再加一遍用于加深印象学习。
  • 所以本篇文章就来整理一下Unity 热更新与Lua语言,说不准就会面试的时候就会遇到!

【Unity面试篇】Unity 面试题总结甄选 |热更新与Lua语言 | ❤️持续更新❤️

      • 前言
    • 🖤热更新与Lua语言
        • 1.什么是热更新?
        • 2. 主流的代码热更方案有哪些?
        • 3. AssetBundle介绍
        • 4. AssetBundle的具体开发流程
        • 5. AssetBundle的压缩格式
        • 6. AssetBundle对象的加载方式
        • 7. AssetBundle资源卸载
        • 8. 资源如何打包?依赖项列表如何生成?
        • 9. 如何解析版本文件?如何加载AB包资源?具体流程是怎么样的?
        • 10. 热更新打包方案有哪些?
        • 11. 热更新的流程
        • 12. 简述Lua实现面向对象的原理
        • 13. 简述Lua有哪8个类型?简述用途
        • 14. C#与Lua的交互原理简述
        • 15. Lua中 pairs与ipairs区别
        • 16. Lua中 点和冒号区别
        • 17. Lua深拷贝和浅拷贝
        • 18. Lua中的闭包简述
        • 19. __index和__newindex元方法的区别
        • 20.table的一些知识点
        • 21. Lua是如何实现热更新的
  • 👥总结

请添加图片描述


🖤热更新与Lua语言

1.什么是热更新?

热更新 是一种App软件开发者常用的更新方式。简单来说,就是在用户通过下载安装APP之后,打开App时遇到的即时更新。

在安卓、iOS平台,热更新表示在更新游戏资源或逻辑的时候不需要开发者将游戏再打包、上传、审核、发布、玩家重新下载安装包更新游戏,仅需要开发者打出新的ab(AssetBundle)资源文件放到网上,然后游戏程序下载新的ab资源文件替换本地的资源文件来实现游戏更新的流程。

热更代码可以理解成是特殊的资源。

Unity热更新详细文章可参考文章:Unity 热更新技术 | (一) 热更新的基本概念原理及主流热更新方案介绍

2. 主流的代码热更方案有哪些?

  • LUA热更(xLua/toLua等)(LUA与C#绑定,方案成熟)
  • ILRuntime热更
  • puerts
  • HyBridCLR(原huatuo)

iOS:IL2CPP,AOT(Ahead of Time,运行前编译)
安卓:Mono,JIT(Just in Time,动态(即时)编译)

DLL基于动态即时编译,只能在JIT模式下使用,即无法在iOS平台使用
lua有自己的虚拟机和运行时解释器,不受限于编译方式(IL2CPP、Mono)
ILRuntime和LSharp也有自己的虚拟机和运行时解译引擎,也不受限于编译方式

3. AssetBundle介绍

AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合,它可以存储任何一种Unity可以识别的资源,如模型,纹理图,音频,场景等资源。也可以加载开发者自定义的二进制文件。

用途:

  1. 制作DLC (动态的可下载内容)
  2. 减少初始包大小
  3. 加载为用户平台优化的资源
  4. 减少运行时的内存压力

4. AssetBundle的具体开发流程

  1. 创建Asset bundle,开发者在unity编辑器中通过脚本将所需要的资源打包成AssetBundle文件。
  2. 上传服务器。开发者将打包好的AssetBundle文件上传至服务器中。使得游戏客户端能够获取当前的资源,进行游戏的更新。
  3. 下载AssetBundle,首先将其下载到本地设备中,然后再通过AsstBundle的加载模块将资源加到游戏之中。
  4. 加载,通过Unity提供的API可以加载资源里面包含的模型、纹理图、音频、动画、场景等来更新游戏客户端。
  5. 卸载AssetBundle,卸载之后可以节省内存资源,并且要保证资源的正常更新。

5. AssetBundle的压缩格式

  • LZMA格式: 使用LZMA格式压缩的AssetBundle的包体积最小(高压缩比),但是相应的会增加解压缩时的时间。
  • LZ4格式:压缩后的AssetBundle包体的体积较大(该算法基于chunk)。但是使用LZ4格式的好处在于解压缩的时间相对要短。
  • 不压缩:没有经过压缩的包体积最大,但是访问速度最快。

6. AssetBundle对象的加载方式

Unity提供了三个不同的API从AssetBundles加载UnityEngine.Objects,这些API都绑定到AssetBundle对象上,并且这些API具有同步(和异步变体):

  1. LoadAsset(LoadAssetAsync):从资源包中加载指定的资源
  2. LoadAllAssets (LoadAllAssetsAsync):加载当前资源包中所有的资源
  3. LoadAssetWithSubAssets (LoadAssetWithSubAssetsAsync)

并且这些API的同步版本总是比异步版本快至少一个帧(其实是因为异步版本为了确保异步,都至少延迟了1帧),异步加载每帧会加载多个对象,直到它们的时间切片切出。

7. AssetBundle资源卸载

  • AssetBundle.Unload(false):内存中的AssetBundle对象包含的资源会被销毁。
  • AssetBundle.Unload(true):不仅仅内存中的AssetBundle对象包含的资源会被销毁。根据这些资源实例化而来的游戏内的对象也会销毁。
  • Reources.UnloadAsset(Object):显式的卸载已加载的Asset对象,只能卸载磁盘文件加载的Asset对象Resources。
  • UnloadUnusedAssets:用于释放所有没有引用的Asset对象
  • Destroy:主要用于销毁克隆对象,也可以用于场景内的静态物体,不会自动释放该对象的所有引用。虽然也可以用于Asset,但是概念不一样要小心,如果用于销毁从文件加载的Asset对象会销毁相应的资源文件!但是如果销毁的Asset是Copy的或者用脚本动态生成的,只会销毁内存对象。

8. 资源如何打包?依赖项列表如何生成?

  1. 查找指定文件夹ABResource里的资源文件
    • Directory.GetFile(资源路径)
    • 新建AssetBundleBuild对象
    • 获取资源名称,并赋值对应AB名称
    • 获取各个资源的依赖项:通过UnityEditor.AssetDataBase类获取各个资源的依赖项
  2. 使用Unity自带的BuildPipeline进行构建AB包
    • BuildPipeLine.BuildAssetBundles(输出AB包路径)
    • File.WriteAllLines(将依赖项写入文件里)

9. 如何解析版本文件?如何加载AB包资源?具体流程是怎么样的?

  1. 解析版本文件列表
    • File.ReadAllLines(读取文件列表资源路径URL)
    • 获取资源名称,获取AB包名称,获取依赖项,字典容器存储
    • 获取Lua文件
  2. 加载资源
    • 异步加载资源AB包,AssetBundleRequest请求,AssetBundle.LoadFromFileAsync
    • 先检查依赖项,再异步加载AB包依赖项
    • 加载成功后都有对应的回调方法,将资源作为参数传入

10. 热更新打包方案有哪些?

  1. 整包:将完整更新资源放在Application.StreamAssets目录下,首次进入游戏将资源释放到Application.persistentDataPath下。

    • 优点:首次更新少
    • 缺点:安装包下载时间长,首次安装久
  2. 分包:少部分资源放在包里,其他资源存放在服务器上,进入游戏后将资源下载到Application.persistentDataPath目录下。

    • 优点:安装包小,安装时间短,下载快
    • 缺点:首次更新下载解压缩包时间旧
  3. 适用性

    • 海外游戏大部分是使用分包策略,平台规定
    • 国内游戏大部分是使用整包策略

11. 热更新的流程

(1) 导出热更流程

  1. 打包热更资源的对应的md5信息(涉及到增量打包)
  2. 上传热更 ab 到热更服务器
  3. 上传版本信息到版本服务器

(2) 游戏热更流程

  1. 启动游戏。
  2. 根据当前版本号,和平台号去版本服务器上检查是否有热更。
  3. 从热更服务器上下载 MD5 文件,比对需要热更的具体文件列表。
  4. 从热更服务器上下载需要热更的资源,解压到热更资源目录。
  5. 游戏运行加载资源,优先到热更目录中加载,再到母包资源目录加载。

12. 简述Lua实现面向对象的原理

  1. 表table就是一个对象,对象具有了标识self,状态等相关操作
  2. 使用参数self表示方法的该接受者是对象本身,是面向对象的核心点,冒号操作符可以隐藏该self参数
  3. 类(Class):每个对象都有一个原型,原型(lua类体系)可以组织多个对象间共享行为
  4. setmetatable(A,{__index=B}) 把B设为A的原型
  5. 继承(Inheritance):Lua中类也是对象,可以从其他类(对象)中获取方法和没有的字段
  6. 继承特性:可以重新定义(修改实现)在基类继承的任意方法
  7. 多重继承:一个函数function用作__Index元方法,实现多重继承,还需要对父类列表进行查找方法,但多继承复杂性,性能不如单继承,优化,将继承的方法赋值到子类当中
  8. 私有性(很少用)基本思想:两个表表示一个对象,第一个表保存对象的状态在方法的闭包中,第二个表用来保存对象的操作(或接口),用来访问对象本身。使第一个表完成内容私有性。

13. 简述Lua有哪8个类型?简述用途

  • nil 空——可以表示无效值,全局变量(默认赋值为nil),赋值nil ,使其被删除。
  • number 整数
  • table 表
  • string 字符
  • userdata 自定义
  • function 函数
  • bool 布尔
  • thread线程

14. C#与Lua的交互原理简述

想要理解Lua语言与其它语言交互的实质,我们首先就要理解Lua堆栈。
简单来说,Lua语言之所以能和C/C++进行交互,主要是因为存在这样一个无处不在的虚拟栈。栈的特点是先进后出,在Lua语言中,Lua堆栈是一种索引可以是正数或者负数的结构,并规定正数1永远表示栈底,负数-1永远表示栈顶。
换句话说,在不知道栈大小的情况下,我们可以通过索引-1取得栈底元素、通过索引1取得栈顶元素。

Lua是一种嵌入式脚本语言,可以方便的与c/c++进行相互调用。但是Unity中主要是用c#进行开发的,因此在Unity中使用Lua通常有以下两种方案:

  • 使用c#实现一个lua虚拟机
  • 基于原生的c lua api做一个封装,让c#调用

从性能上考虑,当前主流方案都是第二种。

基于第二种方案实现的框架目前主要有xLua,sLua,uLua,NLua(+KeraLua)。在这些方案中,都能找到一个相关的类,封装了c#对lua c api的调用。例如在xlua中是XLua.LuaDLL.Lua这个类,在slua中是SLua.LuaDll这个类。

所以在Unity里执行Lua是以c作为中间媒介的:

C# <=> C <=> Lua

Lua与宿主语言(这里以c#为例)最基础的两种交互模式即:

  • c#执行lua代码
  • lua执行c#静态/成员函数

这种交互是通过一个栈结构进行的。

15. Lua中 pairs与ipairs区别

  • pairs会遍历所有key,对于key的类型没有要求,遇到nil时可以跳过,不会影响后面的遍历,既可以遍历数组部分,又能遍历哈希部分。
  • ipairs只会从1开始,步进1,只能遍历数组部分, 中间不是数字的key忽略, 到第一个不连续的数字为止(不含),遍历时只能取key为整数值,遇到nil时终止遍历。

16. Lua中 点和冒号区别

  • 点 :无法传递自身,需要显示传递
  • 冒号 :隐式传递自身

17. Lua深拷贝和浅拷贝

如何实现浅拷贝
使用 = 运算符进行浅拷贝

  • 拷贝对象是string、number、bool基本类型。拷贝的过程就是复制黏贴!修改新拷贝出来的对象,不会影响原先对象的值,两者互不干涉。
  • 拷贝对象是table表,拷贝出来的对象和原先对象时同一个对象,占用同一个对象,只是一个人两个名字,类似C#引用地址,指向同一个堆里的数据~,两者任意改变都会影响对方。

如何实现深拷贝
复制对象的基本类型,也复制源对象中的对象
常常需用对Table表进行深拷贝,赋值一个全新的一模一样的对象,但不是同一个表。

Lua没有实现,封装一个函数,递归拷贝table中所有元素,以及设置metetable元表。

如果key和value都不包含table属性,那么每次在泛型for内调用的Func就直接由if判断返回具体的key和value。
如果有包含多重table属性,那么这段if判断就是用来解开下一层table的,最后层层递归返回。

18. Lua中的闭包简述

闭包=函数+引用环境
子函数可以使用父函数中的局部变量,这种行为可以理解为闭包!

  1. 闭包的数据隔离
    不同实例上的两个不同闭包,闭包中的upvalue变量各自独立,从而实现数据隔离

  2. 闭包的数据共享
    两个闭包共享一份变量upvalue,引用的是更外部函数的局部变量(即Upvlaue),变量是同一个,引用也指向同一个地方,从而实现对共享数据进行访问和修改。

  3. 利用闭包实现简单的迭代器
    迭代器只是一个生成器,他自己本身不带循环。我们还需要在循环里面去调用它才行。
    1)while…do循环,每次调用迭代器都会产生一个新的闭包,闭包内部包括了upvalue(t,i,n),闭包根据上一次的记录,返回下一个元素,实现迭代
    2)for…in循环,只会产生一个闭包函数,后面每一次迭代都是使用该闭包函数。内部保存迭代函数、状态常量、控制变量。

19. __index和__newindex元方法的区别

__newindex用于表的更新,__index用于表的查询。

  • 如果访问不存在的数据,由__index提供最终结果
  • 如果对不存在的数据赋值,由__newindex对数据进行赋值

__index元方法可以是一个函数,Lua语言就会以【表】和【不存在键】为参数调用该函数
__index元方法也可以是一个表,Lua语言就访问这个元表
对表中不存在的值进行赋值的时候,解释器会查找__newindex
__newindex元方法如果是一个表,Lua语言就对这个元表的字段进行赋值

20.table的一些知识点

  1. table 是 Lua 的一种数据结构,用于帮助我们创建不同的数据类型,如:数组、字典等;
  2. table 是一个关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil,所有索引值都需要用 “[“和”]” 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引,Lua table 是不固定大小的,你可以根据自己需要进行扩容;
  3. table 的默认初始索引一般以 1 开始,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;
  4. table 的变量只是一个地址引用,对 table 的操作不会产生数据影响;
  5. table 不会固定长度大小,有新数据插入时长度会自动增长;
  6. table 里保存数据可以是任何类型,包括function和table;
  7. table所有元素之间,总是用逗号 “,” 隔开;

21. Lua是如何实现热更新的

Lua的模块加载机制,热更的核心就是替换Package.loaded表中的模块。

  1. 导出函数require(mode_name)
  2. 查询全局缓存表package.loaded
  3. 通过package.searchers查找加载器
  • package.loaded
    存储已经被加载的模块:当require一个mode_name模块得到的结果不为假时,require返回这个存储的值。require从package.loader中获得的值仅仅是对那张表(模块)的引用,改变这个值并不会改变require使用的表(模块)。

  • package.preload
    保存一些特殊模块的加载器:这里面的值仅仅是对那张表(模块)的引用,改变这个值并不会改变require使用的表(模块)。

  • package.searchers
    require查找加载器的表:这个表内的每一项都是一个查找器函数。当加载一个模块时,require按次序调用这些查找器,传入modname作为唯一参数。此方法会返回一个函数(模块的加载器)和一个传给这个加载器的参数。或返回一个描述为什么没有找到这个模块的字符串或者nil。


👥总结

  • 全网最全的 Unity 热更新与Lua语言 面试题都在这里了,希望本篇文章能够让你在面试关卡如鱼得水得到自己想要的工作。
  • 看完觉得有用别忘了点赞收藏哦,如果觉得哪个方面的内容不够丰富欢迎在评论区指出!
  • 如果你的Unity基础知识还不够熟练,也欢迎来 『Unity精品学习专栏⭐️』『Unity 实战100例 教程⭐️』继续学习哦!
  • 如果你还有更好的面试题,欢迎在评论区提出,会整理到文章中去哦!!!

请添加图片描述


资料白嫖,技术互助
请添加图片描述

  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创 🙉

  • 🎄 学习专栏推荐:Unity系统学习专栏

  • 🌲 游戏制作专栏推荐:游戏制作

  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

学习路线指引(点击解锁)知识定位人群定位
🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者万人社区💚 互助/吹水数万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Unity100个实用技能💙 Unity查漏补缺针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决 Qt 下载安装太慢的办法

Qt 现在新的版本都是采用在线安装&#xff0c;那速度实在是.... 找了一些方法&#xff0c;原理就是用 Fiddler 来代理&#xff0c;然后替换掉 url 成清华的镜像地址&#xff0c;这样就相当于直接从清华安装了&#xff0c;嘎嘎快 打开 Fiddler, 打开 Qt 安装程序&#xff0c;在…

【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 之前在 Windows 上完成了使用 Visual Studio 构建 VTK&#xff0c;这一篇结合实现 Qt 在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK。之前的文章链接为…

最新2023水果编曲软件FL Studio Producer Edition 21.0.3 Build 3517中文版下载安装激活图文教程

各位&#xff0c;大家好&#xff0c;今天兔八哥给大家带来最新最新2023水果编曲软件FL Studio Producer Edition 21.0.3 Build 3517中文版下载安装激活图文教程。我们一起先了解一些FL Studio 。FL Studio21是目前流行广泛使用人数最多音乐编曲宿主制作DAW软件&#xff0c;这款…

腾讯、飞书等在线表格自动化编辑--python

编辑在线表格 一 目的二 实现效果三 实现过程简介1、本地操作表格之后进入导入在线文档2、直接操作在线文档 四 实现步骤讲解1、实现方法的选择2、导入类库3、设置浏览器代理直接操作已打开浏览器4、在线文档登录5、在线文档表格数据操作6、行数不够自动添加行数 五 代码实现小…

2023年Q2京东大家电市场前瞻分析报告(含电商销售数据)

今年Q2&#xff0c;京东平台各个主要家电板块的表现分化较为明显&#xff0c;各个细分的子版块在今年第二季度的业绩都各有亮点&#xff0c;部分品类甚至还出现了较大的市场格局变化。 这一期&#xff0c;我们率先来分析一下京东四个大家电品类的行业大盘变动情况。我们将从行业…

51单片机LCD12864温度曲线显示温度温控系统加热制冷控制

实践制作DIY- GC00155-温度曲线显示温度温控系统 一、功能说明&#xff1a; 基于51单片机设计-温度曲线显示温度温控系统 二、功能说明&#xff1a; STC89C52单片机LCD12864显示器DS18B20温度传感器1个红色LED灯模拟加热1个绿色LED灯模拟制冷4个按键&#xff08;温度下限加减键…

递归总结

递归每次自己调用自己&#xff0c;每次调用自己后函数的数据会较上次缩减&#xff0c;而且最后缩减至无需继续递归。内层函数调用完成&#xff0c;外层函数才算调用完成 n的阶乘伪代码 外层必须逐级向里面递&#xff0c;最后再向外归。 public class 递归_02 {public static vo…

ITIL 4—监控和事态管理实践

1 关于本文 本文为监控和事态管理实践提供了实用指南。它分为五个主要部分&#xff0c;内容包括&#xff1a; 有关实践的一般信息监控和事态管理的流程和活动及其在服务价值链中的角色监控和事态管理中涉及的组织和人员支持监控和事态管理的信息和技术合作伙伴和供应商对监控…

A_003.adb常用命令使用介绍

1.adb工作原理说明 adb命令是调试控制手机过程中用的比较多工具。adb是一个C/S架构的应用程序,主要由三部分组成: (1)、运行在电脑端的adb client程序 在电脑终端中执行adb --help可以查看当前支持的adb命令。当在命令行执行程序adb相关命令的时候,adb程序尝试连接到主机上…

VUE根据图片做图片形状的词云效果

VUE根据图片形状制作词云效果 针筒图片&#xff1a;&#xff08;是png&#xff09; 效果图&#xff1a;&#xff08;文章底部有完整代码&#xff09; 限制横竖显示&#xff0c; 在两种颜色中随机。 爱心图片&#xff1a;&#xff08;是白底的png&#xff09; 效果图&#xff…

什么是CI/CD?让你的项目变得更加敏捷!

在今天这个快速变化的时代&#xff0c;开发者们需要与时俱进&#xff0c;不断提升自己的工作效率。在这篇文章里&#xff0c;将一起探讨如何使用CI/CD和Github Action让你的项目更加高效&#xff0c;快速响应市场变化。 一、什么是CI&#xff1f; CI&#xff08;持续集成&…

【Java面试丨并发编程】线程的基础知识

一、进程与线程的区别 1. 进程 程序是由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至CPU&#xff0c;数据加载至内存在指令运行过程中还需要用到磁盘、网络等设备进程就是用来加载指令、管理内存、管理IO的当一个程序被…

青岛大学_王卓老师【数据结构与算法】Week05_08_顺序栈的操作2_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

C++学习 内存分区模型

内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理。全局区&#xff1a;存放全局变量和静态变量以及常量。栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值&#…

【TI毫米波雷达笔记】DCA1000EVM+mmWave Studio数据采集的MIMO模式设置(多天线发射工作模式)

【TI毫米波雷达笔记】DCA1000EVMmmWave Studio数据采集的MIMO模式设置&#xff08;多天线发射工作模式&#xff09; 以IWR6843AOP为例 其为3发4收的雷达 MIMO模式有两种 TDM-MIMO和BPM-MIMO TDM-MIMO模式&#xff08;时分复用&#xff09; TDM-MIMO模式是最简单和常用的MIM…

Vector - CANoe - CAPL文件加密

目录 为什么会有CAPL文件加密需求? 加密文件介绍 “*.can”和“*.cin” 文件创建 <

win11安装virtual box和vagrant,附带centos7镜像

环境检查 1. 开启CPU虚拟化 修规bios配置 configuration -> Intel Virtual Technology 改为 enabled 2. 关闭hyper-v 以管理员启动 powershell&#xff0c;执行&#xff1a; bcdedit /set hypervisorlaunchtype off 3. 关闭wsl虚拟机 以管理员启动 powershell&#x…

C#探索之路(10):实现一个简单应用的功能——志愿填报

C#探索之路(10)&#xff1a;实现一个简单应用的功能——志愿填报 文章目录 C#探索之路(10)&#xff1a;实现一个简单应用的功能——志愿填报1、前景&#xff1a;2、需求分析3、功能实现3.1、界面交互-输入3.2、界面交互-输出 3、代码示例&#xff1a;4、效果图&#xff1a;5、总…

利用缓存模拟进度条(c实现)

代码如下&#xff1a; #include <stdio.h> #include <Windows.h>int main() {int total 100;int progress 0;char progressBar[101] {};while (progress < total) {progressBar[progress] #;printf("[%-100s] %d%%", progressBar, progress);ffl…

音视频开发实战03-FFmpeg命令行工具移植

一&#xff0c;背景 作为一个音视频开发者&#xff0c;在日常工作中经常会使用ffmpeg 命令来做很多事比如转码ffmpeg -y -i test.mov -g 150 -s 1280x720 -codec libx265 -r 25 test_h265.mp4 &#xff0c;水平翻转视频&#xff1a;ffmpeg -i src.mp4 -vf hflip -acodec copy …