虚幻引擎VR游戏开发02 | 性能优化设置
常识:VR需要保持至少90 FPS的刷新率,以避免用户体验到延迟或晕眩感。以下是优化性能的一系列设置(make sure the frame rate does not drop below a certain threshold)
In project setting-> (以下十个设置都在project setting中)
1.Platforms-Windows -> Default RHI:DirectX12
0)Default RHI
Default RHI指的是“默认渲染硬件接口”(Default Rendering Hardware Interface), RHI 是Unreal Engine用来抽象不同图形API(如DirectX、Vulkan、Metal、OpenGL等)的接口层。
"抽象不同图形API" 是指在编程和软件开发中,通过定义一个统一的接口层来屏蔽底层的具体实现细节,使得上层代码不直接与这些具体的实现交互,而是通过该接口与底层进行交互。
1)什么是图形API?
图形API(Application Programming Interface)是指一组用于与图形硬件进行交互的函数和工具。常见的图形API包括:
- DirectX(主要用于Windows)DirectX 12是由微软(Microsoft)开发的多媒体编程接口(API),专门用于Windows操作系统。它是DirectX系列的一部分,主要用于游戏开发和其他高性能图形应用程序。DirectX 12的主要目标是提高图形性能、降低CPU的负担,并为开发者提供更精细的控制权,以便他们能够更有效地利用现代图形硬件的资源。
- Vulkan(跨平台)
- Metal(用于Apple设备,如macOS和iOS)
- OpenGL(跨平台,但逐渐被Vulkan取代)
每种图形API都有自己的一套接口和实现方式,但它们的基本功能都是相似的,比如渲染三维图形、处理着色器、管理纹理和缓冲区等。
2)举个例子
假设你要在Unreal Engine中渲染一个三角形。对于不同的图形API,这可能会有不同的代码和步骤:
- 在DirectX 12中,你可能需要设置渲染目标、配置管线状态对象(PSO)、绑定资源、然后提交渲染命令。
- 在Vulkan中,你可能需要创建命令缓冲区、设置渲染通道、绑定着色器资源、然后提交命令。
尽管这些API的细节和调用方式不同,Unreal Engine通过RHI将它们抽象为一个统一的接口。开发者只需调用一个通用的函数(比如DrawTriangle
),RHI会根据当前使用的图形API选择合适的实现并执行相应的操作。
2. Platforms-Windows -> sm6
D3D 12 Targeted Shader formats -> enable sm6
sm6
代表Shader Model 6,是DirectX 12支持的一种高级着色器模型。Shader Model 6引入了许多改进和新特性,如更好的优化、支持高级数学操作、改进的内存管理和对硬件光线追踪的支持(当与DirectX Raytracing结合使用时)。
3. Project -> Target Hardware -> Desktop Scalable
Target Hardware (optimize project setting for) -> Desktop Scalable
(可选项有mobile和desktop,根据需求平台选择)
4.Engine - Rendering -> Disable allow static lighting
禁用static lighting之后,关卡构建时间变短:
- 关闭 Allow Static Lighting 后,不再需要为静态光源生成光照贴图,这将显著减少关卡构建时的光照构建时间。这对开发周期短、需要频繁迭代的项目来说可能是个优点。
阴影细节和全局光照效果可能质量下降:
- 静态光照通常提供高质量的阴影、光照和全局照明效果。关闭后,必须依赖动态光照或其他实时技术,这可能导致某些光照效果的质量下降,尤其是在阴影细节和全局光照方面。
- 另外,一些高级的光照特性,如光照反弹(Light Bounce)等,可能需要额外的设置或额外的计算资源来实现类似效果。
关闭静态光照后,性能不一定会提高,具体效果取决于场景的复杂性和你的光照设置。这里是一些关键因素和影响:
1. 静态光照与动态光照的区别
- 静态光照(Static Lighting)通常在构建(Build)时预先计算并烘焙到光照贴图中。这种光照在运行时几乎不占用任何计算资源,适合用于静态场景。
- 动态光照(Dynamic Lighting)在每一帧都实时计算,适合处理移动物体、实时阴影等效果,但会消耗更多的CPU和GPU资源。
2. 关闭静态光照的影响
- 无预计算光照:关闭静态光照后,光照不再预先烘焙,所有的光照效果都需要实时计算。这通常会增加运行时的计算开销,特别是在使用复杂的光照和阴影时。
- 减少光照贴图开销:静态光照使用光照贴图,这些贴图需要存储在内存中。如果你的场景有大量的静态光源和光照贴图,关闭静态光照可以减少内存和磁盘空间的使用,加载时间也可能变短。
3. 性能影响
- 实时光照的成本:如果你关闭了静态光照并完全依赖动态光照,GPU和CPU的负载会增加,特别是在复杂的场景中。这可能会导致帧率下降,尤其是在中低端硬件上。
- 混合光照场景:在某些情况下,关闭静态光照并使用一些混合的光照方案(例如,使用实时阴影、光探针等)可能会优化性能,尤其是在减少光照贴图存储和加载时间的情况下。
- 光照复杂度和场景规模:如果场景的光照复杂度较低,关闭静态光照可能对性能影响不大,甚至可能提高性能,因为省去了光照贴图的加载和存储。然而,在光照复杂度高的场景中,实时光照计算的负担可能会导致性能下降。
在做出决定前,最好在你的目标硬件上进行性能测试,观察不同设置下的性能表现。
根据项目灵活设置
在VR交互项目中,Dynamic Lighting 通常是必要的,尤其是在场景需要动态光源或实时阴影变化的情况下。然而,由于VR项目对性能的高要求,动态光照的使用需要谨慎规划和优化。对于高交互性、高沉浸感的VR项目,动态光照能显著提升视觉体验,但在性能受限的硬件上,可能需要通过混合光照或其他优化技术来找到最佳平衡点。
如果你的VR项目中用户只能在几个预定义的点之间移动,而不是自由移动,动态光照的重要性就降低了。如果场景中没有移动的光源或需要实时阴影变化的对象,那么完全可以依靠静态光照来处理大部分的光照需求。
5. Engine - Rendering -> disable forward shading
因为本文示例中禁用了static lighting. 而Deferred Shading 是 Dynamic Lighting 的最佳选择,特别是在场景中有许多光源或者需要复杂光照效果的情况下。它能够更高效地处理实时光照、阴影和其他动态效果,而不会显著影响性能。如果你的项目需要在多个光源下实现实时光照变化和高质量阴影效果,使用 Deferred Shading 是最合适的渲染方式。
Forward Shading 和 Deferred Shading 简介:
-
Forward Shading:
- Forward Shading 是一种较为传统的渲染路径,适用于场景中光源数量相对较少的情况。它的优势包括较低的渲染开销和更高的抗锯齿效果(如多重采样抗锯齿 MSAA)。
- Forward Shading 通常在虚拟现实(VR)或需要严格控制渲染性能的场合使用,因为它可以提供较好的性能表现。
- 它在处理透明物体和复杂材质时较为有效,适合场景中有大量透明材质或需要高质量抗锯齿的项目。
-
Deferred Shading:
- Deferred Shading 是一种更现代的渲染路径,允许场景中有大量光源,而不会显著影响性能。这是因为光照计算是在一个单独的延迟阶段进行的,而不是在几何渲染时完成的。
- Deferred Shading 可以处理更多的光源,特别是在复杂的场景中,这是它的主要优势之一。
- 由于 Deferred Shading 的架构特点,它不支持一些 Forward Shading 专属的特性,如MSAA。不过它适合高复杂度场景的光照处理。
Disable Forward Shading 的效果:
-
启用 Deferred Shading:
- 关闭 Forward Shading 后,虚幻引擎会切换到使用 Deferred Shading。这将允许引擎更高效地处理场景中大量的动态光源,尤其是在光源数量较多的复杂场景中。
-
影响性能和光照处理:
- Deferred Shading 能更高效地管理和渲染多个光源,但在透明材质处理和抗锯齿方面可能不如 Forward Shading。这意味着在某些情况下,可能会导致性能下降,特别是在处理复杂的透明物体时。
- 对于需要处理大量光源的场景,Deferred Shading 可以带来更好的光照效果和性能。
-
限制特性:
- 禁用 Forward Shading 后,项目将无法使用 Forward Shading 提供的一些特性,如MSAA。对于需要这种高质量抗锯齿效果的项目,这可能是一个缺点。
-
光照和材质效果:
- 在使用 Deferred Shading 时,项目中的光照和材质效果会更加复杂和多样化,特别是涉及到全局光照和屏幕空间反射等高级渲染特性。
何时禁用 Forward Shading:
- 复杂场景和光照:如果你的项目包含复杂的光照设置,或你需要在场景中使用大量动态光源,禁用 Forward Shading 并使用 Deferred Shading 可能是最佳选择。
- 高端设备或主机平台:在图形处理能力较强的平台(如高端PC或主机)上,Deferred Shading 通常是首选,因为它能处理更复杂的光照和材质效果。
总结:
禁用 Forward Shading 意味着启用 Deferred Shading,这将使引擎更好地处理复杂场景中的大量光源,同时也可能在透明材质处理和抗锯齿效果上有所牺牲。具体是否禁用应根据项目的复杂度、性能要求以及目标平台的特点来决定。
6. Engine - Rendering -> Reflection->
reflection Method: Lumen
reflection capture resolution 128 ->96/64
8. Engine - Rendering ->Hardware ray tracing -> support hardware ray tracing
enable support hardware ray tracing
disable ray trace shadows && ray trace skylight (they are too expensive) (even you render with 4090!)
- Support Hardware Ray Tracing 是一个全局开关,用于启用Unreal Engine对硬件加速光线追踪的支持。开启后,相关的光线追踪效果才能发挥作用。
- Ray Traced Shadows 是一个具体的光线追踪功能,用于生成更精确、柔和且物理上更准确的阴影。
- Ray Traced Skylight 是另一个具体的光线追踪功能,用于计算来自天空光的全局照明效果,提升间接光的真实感。
如果你只开启了Support Hardware Ray Tracing但没有开启任何具体的光线追踪效果:
-
GPU会支持光线追踪,但不会进行相关计算:因为没有启用任何具体的光线追踪功能(如阴影或全局照明),GPU虽然支持光线追踪,但没有实际执行这些计算任务。你的场景将继续使用传统的光栅化方法渲染阴影和照明。
-
其他光线追踪功能:虽然你没有启用Ray Traced Shadows和Ray Traced Skylight,但如果你启用了其他光线追踪功能(如Ray Traced Reflections(反射)或Ray Traced Ambient Occlusion(环境遮蔽)),那么这些功能仍然会受益于硬件光线追踪的支持。
在Unreal Engine的项目设置中,不同版本可能会有一些变化或简化。虽然在项目设置里可能没有直接显示“Ray Traced Reflections”和“Ray Traced Ambient Occlusion”,但这些功能实际上仍然存在并可以在材质和后期处理卷中启用它。
1. Ray Traced Reflections(反射)
- 在哪里控制: 虽然项目设置中没有直接列出“Ray Traced Reflections”选项,但你可以在材质和后期处理卷中控制它。
- 启用方法:
- 后期处理卷(Post Process Volume): 在场景中添加一个后期处理卷,确保它的
Unbound
选项被勾选(这样它会影响整个场景)。 - 在后期处理卷的设置中,找到“Reflections”部分。
- 将“Reflection Method”设置为Ray Tracing。
- 你还可以调整反射的质量和样本数量以平衡性能和视觉效果。
- 后期处理卷(Post Process Volume): 在场景中添加一个后期处理卷,确保它的
2. Ray Traced Ambient Occlusion(环境遮蔽)
- 在哪里控制: 类似于Ray Traced Reflections,这个设置通常在后期处理卷中找到。
- 启用方法:
- 在后期处理卷的设置中,找到“Ambient Occlusion”部分。
- 将“Ambient Occlusion Method”设置为Ray Tracing。
- 调整相关参数(如
Intensity
和Radius
)以获得所需的效果。
3. 其他设置(如Texture LOD和Path Tracing)
- Texture LOD: 这是与纹理细节相关的设置,控制在光线追踪渲染中使用的纹理细节级别。
- Path Tracing: 这是一个高级的全局光照渲染模式,使用路径追踪来生成极其逼真的光照效果,但它主要用于静态渲染(例如电影级别的场景或静态图像),而非实时渲染。
9. rendering ->Nanite -> enable Nanite
10. rendering ->Anti-Aliasing Method
- FXAA: 最适合低性能影响的情况,画面可能稍模糊。
- TAA: 适合动态画面和平滑边缘,但可能导致轻微的模糊或鬼影。
- MSAA: 提供高质量的边缘抗锯齿,但性能开销较大。
- TSR: 在高分辨率下提供优质图像,并优化了传统抗锯齿方法的不足之处。
MSAA(multisample anti-aliasing/antialiasing by supersampling)
MSAA就是一个像素划分成很多个小的像素,划分成4*4甚至是100*100. 它不是靠提高分辨率直接解决采样问题,像素划分只是为了近似一个合理的覆盖率。
------------------------混合光照方案补充(待更新)-----------------------
1.实时阴影
2.光探针
光探针(Light Probe) 是一种用于捕捉和存储场景中光照信息的技术。它们通常用于在动态光照和静态光照之间找到平衡,特别是在混合光照场景中。光探针能够为场景中的动态物体提供逼真的间接光照,而无需实时计算复杂的全局照明。
光探针的工作原理
光探针通常是放置在3D空间中的一个或多个点,这些点用于捕捉环境的全局光照信息。这个信息包括来自周围环境的间接光照,比如来自天光、反射光等。光探针的作用主要体现在以下几个方面:
-
捕捉环境光照:
- 光探针会捕捉并存储场景中某些点的光照数据,包括光的颜色、方向和强度。这个数据可以被动态物体使用,以获得与环境一致的照明效果。
-
影响动态物体:
- 当场景中的动态物体(例如移动的角色或物体)移动到光探针的范围内时,它会使用探针的数据来调整自己的光照,模拟出更逼真的环境光和间接光照效果。
- 例如,一个角色移动到阴影区域时,光探针可以提供较低的光照信息,从而使角色变得更加阴暗。
-
球谐函数(Spherical Harmonics):
- 光探针通常使用一种叫做球谐函数(Spherical Harmonics)的技术来存储和处理光照数据。这种方法可以有效地表示复杂的光照环境,并在渲染时快速应用于动态物体。
应用场景
- 混合光照场景:在使用静态光照贴图的同时,光探针可以为动态物体提供间接光照。这种方法减少了实时光照计算的开销,同时保留了光照的真实性。
- 大型开放世界:在一些大型开放世界游戏中,场景的光照通常非常复杂。光探针可以帮助动态物体与静态环境的光照更好地融合,使整个场景的视觉效果更加统一。
优势和局限
-
优势:
- 性能优化:通过使用预先捕捉的光照数据,减少实时计算的开销,特别是在需要处理复杂的间接光照时。
- 一致性:能够提供与环境一致的间接光照,使动态物体与静态场景更好地融合。
-
局限:
- 精度有限:光探针通常只能捕捉到低频的光照信息,对于非常细致的光照变化可能不够精确。
- 探针布置:需要合理地布置光探针,以覆盖场景中所有可能的动态物体位置。过少的探针可能导致光照信息不准确,而过多的探针则会增加存储和处理的负担。
总结
光探针是一种有效的技术,用于在不牺牲性能的前提下,提供逼真的间接光照效果,特别是在混合光照场景中。通过合理使用光探针,可以在场景中实现高质量的动态光照,优化性能,同时保持视觉一致性。
相关文章:

虚幻引擎VR游戏开发02 | 性能优化设置
常识:VR需要保持至少90 FPS的刷新率,以避免用户体验到延迟或晕眩感。以下是优化性能的一系列设置(make sure the frame rate does not drop below a certain threshold) In project setting-> (以下十个设置都在pr…...

Web应用监控:URL事务监测指标解读
监控易是一款功能强大的IT监控软件,它能够实时监控各种IT资源和应用的运行状态,确保业务的连续性和稳定性。在Web应用监控方面,监控易提供了URL事务监测功能,通过模拟用户访问流程,监测整个事务的执行过程和性能表现。…...

redis之缓存淘汰策略
1.查看redis的最大占用内存 使用redis-cli命令连接redis服务端,输入命令:config get maxmemory 输出的值为0,0代表redis的最大占用内存等同于服务器的最大内存。 2.设置redis的最大占用内存 编辑redis的配置文件,并重启redis服务…...

CMake/C++:一个日志库spdlog
项目仓库 GitHub - gabime/spdlog: Fast C logging library.Fast C logging library. Contribute to gabime/spdlog development by creating an account on GitHub.https://github.com/gabime/spdlog 知乎参考贴 https://zhuanlan.zhihu.com/p/674073158 先将仓库clone一下 然…...

rig——管理不同R语言版本的工具
在Python中,我可以用Conda去管理多个版本的Python,包括一些Python模块,因此想在R语言中也找一个类似的工具。 之前在Mac上,有一个名为 Rswitch 的R语言版本管理工具,可以管理不同版本的R以及相应的R包。 现在想在Win…...

Java内存模型详解
1. 引言 在Java中,内存模型是非常重要的概念,它涉及到线程之间如何共享数据以及保证数据的一致性。了解Java内存模型对于开发高质量的多线程程序是至关重要的。 本篇博客将详细介绍Java内存模型的概念、原则、规则以及相关的概念和术语。同时ÿ…...

空气能热泵热水器
空气能热泵热水器压缩机把低温低压气态冷媒转换成高压高温气态,压缩机压缩功能转化的热量为q1,高温高压的气态冷媒与水进行热交换,高压的冷媒在常温下被冷却、冷凝为液态。这过程中,冷媒放出热量用来加热水,使水升温变…...

计算机毕业设计选题推荐-消防站管理系统-社区消防管理系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

移动UI:新手指引页面,跟着指引不迷路。
移动端新手指引在提供用户引导、提升用户体验、提高用户留存率、促进功能使用和降低用户流失率方面都有积极的作用。 移动端新手指引在应用程序或移动网站中有以下几个作用: 1. 提供用户引导: 新手指引可以帮助用户快速了解应用程序或移动网站的功能和…...

数据库MySQL基础
目录 一、数据库的介绍 1.数据库概述 (1)数据的存储方式 (2)数据库 2.常见数据库排行榜 二、数据库的安装与卸载 1.数据库的安装 2.数据库的卸载 三、数据库服务的启动与登录 1.Windows 服务方式启动 (1&…...

AUTOSAR_EXP_ARAComAPI的5章笔记(3)
5.3.4 Finding Services Proxy Class提供类(静态)方法来查找“连接”的服务实例。由于服务实例的可用性本质上是动态的(因为它有一个生命周期),所以ara::com提供了如下两种不同的方法来实现“FindService ”: StartFindService是一个类方法,它在后台启…...

【Godot4.3】基于纯绘图函数自定义的线框图控件
概述 同样是来自2023年7月份的一项实验性工作,基于纯绘图函数扩展的一套线框图控件。初期只实现了三个组件,矩形、占位框和垂直滚动条。 本文中的三个控件类已经经过了继承化的修改,使得代码更少。它们的继承关系如下: 源代码 W…...

申万宏源证券完善金融服务最后一公里闭环,让金融服务“零距离、全天候”
在数字化转型的浪潮中,申万宏源作为金融行业的先锋,持续探索科技如何赋能金融服务,以提升企业效率并优化客户服务体验。面对日益增长的视频化需求,传统的图文形式已难以满足市场与用户的新期待。为了应对这一挑战,申万…...

无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了。
智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…...

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践
本章考点: 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分)。在历年考试中,案例题对该部分内容都有固定考查,综合知识选择题目中有固定分值…...

centos8stream 修改为阿里云yum源
centos8stream 官方已经不再维护,导致该系统官方源实效,可以使用阿里云源进行替换 阿里云文档:centos-vault镜像_centos-vault下载地址_centos-vault安装教程-阿里巴巴开源镜像站 (aliyun.com) 咱们只需要执行下面命令,即可替换官…...

python转换并提取pdf文件中的图片
#安装fitz包 pip install pymupdf 脚本如下所示: import fitz import re import os import time import sysarguments sys.argvfor arg in arguments:print(arg)def file_name_list(base_dir):for i, j, k in os.walk(base_dir):name [i.replace(.pdf, ) for i …...

【MySQL】MySQL常用的数据类型——表的操作
前言: 🌟🌟本期讲解关于MySQL常用数据类型,表的简单使用,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/wwaqe 🌈感兴趣的小伙伴看一看小编主页:GGBondl…...

自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列五十三文本聚类算法》文本聚类介绍及相关算法K…...

计算机网络(一) —— 网络基础入门
目录 一,关于网络 二,协议 2.1 协议是什么,有什么用? 2.2 协议标准谁定的? 2.3 协议分层 2.4 OSI 七层模型 2.5 TCP/IP 四层模型 三,网络传输基本流程 3.1 局域网中两台主机通信* 3.2 报文的封装与…...

从监控到智能:EasyCVR视频汇聚平台助力加油站安全监管升级转型
随着科技的不断进步,视频监控技术在各个行业的应用日益广泛,尤其在加油站这一关键领域,视频智能监管系统的应用显得尤为重要。TSINGSEE青犀视频EasyCVR视频汇聚平台作为一款基于“云-边-端”一体化架构的视频融合与AI智能分析平台,…...

日志服务管理
系统日志管理 sysklogd 系统日志服务 在 CentOS5 以及之前的发行版中,其采用的 sysklogd 服务来记录和管理系统日志的。 sysklogd 服务有两个模块: klogd: 用于记录 linux kernel 相关的日志 syslogd:用于记录用户空间应用日志…...

ROS 工具箱系统要求
ROS 工具箱系统要求 要为 ROS 或 ROS 2 生成自定义消息,或从 MATLAB 或 Simulink 软件中部署 ROS 或 ROS 2 节点,您必须构建必要的 ROS 或 ROS 2 软件包。要构建这些软件包,您必须具备 Python 软件、CMake 软件以及适用于您的平台的 C 编译器…...

CSS解析:定位和层叠上下文
许多开发人员对定位的理解很粗略,如果不完全了解定位,就很容易给自己挖坑。有时候可能会把错误的元素放在其他元素前面,要解决这个问题却没有那么简单。 一般的布局方法是用各种操作来控制文档流的行为。定位则不同:它将元素彻底…...

无名管道与有名管道的区别(C语言)
目录 一、引言 二、无名管道(匿名管道) 1.概念 2.特点 3.使用方法 三、有名管道(命名管道) 1.概念 2.特点 3.使用方法 四、总结 本文将详细介绍在C语言中无名管道(匿名管道)与有名管道(命名…...

Vue+Nginx前端项目多种方式部署一文搞定(练习源码自取)
目录 介绍 本地项目部署 nginx部署 云端服务器部署 介绍 对于Vue项目而言,Nginx可以轻松地配置来处理SPA的路由问题,即对于所有未定义的路径请求返回index.html,这样前端路由机制就可以接管URL的处理。此外,Nginx支持反向代理设…...

MATLAB 中双引号 ““ 和单引号 ‘‘ 的区别详解
在 MATLAB 中,双引号 "" 和单引号 都可以用来表示字符串,但它们的作用和底层类型是不同的。理解它们之间的区别,对于正确使用字符串处理功能非常重要。本文将深入探讨 MATLAB 中 "" 和 的区别,以及在实际编…...

Linux概述、远程连接、常用命令
Linux介绍 Linux操作系统介绍 Linux操作系统的特点 开源免费安全稳定可移植性好 Linux可以安装在不同的设备上 高性能 Linux的使用领域 应用服务器数据库服务器网络服务器虚拟化云计算嵌入式领域个人PC移动手机 Linux文件系统和目录 /:根目录,唯一/h…...

闯关leetcode——1.Two Sum
大纲 题目地址内容 解题 题目 地址 https://leetcode.com/problems/two-sum/description/ 内容 Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would hav…...

02 Shell Script注释和debug
Shell Script注释和debug 一、ShellScript注释 # 代表不解释不执行 语法:# # 创建myshell.sh文件 [rootlocalhost ~]# vi myshell.sh # 写入内容 #!/bin/bash# 打印hello world(正确) echo "hello world" echo "he…...