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

unity面试八股文 - 框架设计与资源管理

Unity项目框架是如何设计的?有哪些原则

在设计Unity项目框架时,通常会遵循一些基本的原则和步骤。以下是主要的一些原则:

  • 模块化:每个功能都应该被作为一个独立的模块来处理,这样可以方便修改和维护。

  • 低耦合:不同模块之间应尽可能减少直接交互,使用事件或者接口等方式进行通信。

  • 高内聚:每个模块应尽量只做一件事情,并且做好它。

  • 可扩展性:设计框架时要考虑到未来可能需要添加或者修改功能的需求,所以需要有良好的扩展性。

  • 可维护性:代码结构清晰、注释充分、命名规范等都能提高代码的可读性和维护性。

以下是一个简单的Unity项目框架设计流程

  • 确定游戏类型和核心玩法。

  • 根据需求分析出需要哪些系统(比如角色系统、战斗系统、UI系统等)。

  • 为每个系统创建相应的目录,并在目录下创建对应类文件。

  • 设计各个类之间关系,如何交互和通信。

  • 编写具体实现代码,并进行测试优化。

资源管理是如何做的,如何更新与打空包

在Unity中,资源管理是一个非常重要的部分。

基本步骤和原则

  • 资源分类:根据资源类型(如场景、音频、模型、贴图等)进行分类存放,有利于维护和查找。

  • 使用AssetBundle:AssetBundle是Unity用于实现动态加载和更新的一种方式。你可以将游戏中的各种资源打包成AssetBundle,然后在运行时动态加载。

  • 优化内存使用:尽量避免不必要的内存占用。比如对于不再使用的资源,应该及时销毁或者卸载。

  • 版本控制:对项目中所有重要文件进行版本控制,以便追踪每个文件的修改历史,并在需要时回滚到之前的版本。

关于更新与打空包:

在Unity中,你可以通过构建AssetBundle来实现热更新。当有新内容需要添加或者旧内容需要修改时,只需构建出相应的AssetBundle并上传到服务器即可。客户端在启动游戏时检测到新版本后会自动下载并加载新版AssetBundles。

打空包通常指生成一个不含任何内容(或只含极少必须内容)但结构完整可运行且能从服务器下载更新数据包填充自身内容以达到完全功能状态游戏安装包,在移动平台上这样做可以显著减小安装包大小以提高用户体验。

注意这里所说“空”并非真正意义上无任何东西而是相较完全版来说去除了大部分非必须启动项而言。“空”的定义因项目需求可能会有所变化。

具体操作过程可能涉及多个环节如服务器配置、客户端代码编写等,请根据具体需求设定合适流程。

资源管理的平台,版本,渠道是如何管理的

在Unity中,资源管理的平台、版本和渠道通常需要通过一些特定的工具和策略来进行管理。以下是一些基本的方法:

  • 平台管理

Unity提供了跨平台发布功能,可以方便地将游戏发布到不同的平台上。在项目设置中,你可以选择目标平台,并对该平台进行特定的优化设置。

同时,在代码中也可以使用预处理指令(如#if UNITY_ANDROID, #if UNITY_IOS等)来编写针对不同平台的代码。

  • 版本管理:

版本控制系统(如Git、SVN等)是用于跟踪文件变更历史以及协同开发非常重要的工具。每次提交都会记录下当前所有文件状态,当需要时还能回滚到之前任意一个提交状态。

除此之外,Unity内部也有一个简单版控制系统——Asset Serialization模式。它允许你以文本或二进制格式保存场景和预设体等资源,并且支持多人同时编辑一个场景。

  • 渠道管理

对于渠道管理,你可能需要构建不同版本的应用以适配各个发行渠道(如Google Play Store, App Store, Steam等)。这可能涉及改变游戏内购买系统、广告SDK或者其他第三方插件配置等内容。

此外,在打包时候添加相应标识符区分不同渠道包也是常见做法。例如通过Scripting Define Symbols定义预处理指令区分各个市场版本,在编译时动态改变某些代码执行流程。

以上就是在Unity中进行资源管理相关操作所采取方法概述,请根据实际项目需求选择合适方式。

项目框架是如何让美术,策划,程序愉快的工作的

在一个项目中,美术、策划和程序员都有各自的专业领域和任务,而一个良好的项目框架应该能够让他们愉快地一起工作。以下是一些实现这个目标的方法:

  • 明确角色与职责:每个团队成员都应清楚自己的角色和职责。这样可以防止工作重叠或者遗漏,并且让每个人都知道他们需要完成什么。

  • 良好的沟通:团队成员之间需要保持开放、诚实和频繁的沟通。定期进行会议以更新项目进度,同时也要鼓励团队成员提出问题和建议。

  • 使用合适的工具:选择适合你们团队需求的软件或平台来协同工作。例如使用版本控制系统(如Git)来管理代码,使用Trello或Jira等项目管理软件来跟踪任务进度。

  • 规范化流程:建立并坚持执行规范化流程可以帮助提高效率并减少错误。例如设定命名规则、文件组织结构等。

  • 模块化设计: 采用模块化设计思想,在编码时尽可能使得各部分解耦,降低依赖性,提高代码复用性。这样不仅方便程序自身开发与维护,并且在一定程度上也能让美术与策划更容易理解整体结构及其对应部分功能实现方式。

  • 尊重专业意见: 尊重每位参与者在其专业领域能力及其意见表达权,在决策时充分考虑各方面因素以达到最优决策结果。

  • 提供足够资源支持: 确保所有人都有足夠时间和资源去完成他们所负责任务, 这包括了必要硬件设备, 软件, 教育资料等.

真机调试,看打印日志你是如何处理的

调试移动设备上的应用并查看其打印日志,通常需要使用一些特定的工具和技术。以下是一些基本步骤:

  1. 连接设备:首先,你需要将移动设备通过USB线连接到电脑。确保你已经在设备上开启了开发者模式以及USB调试。

  2. Android平台

    • 如果你正在开发的是Android应用,可以使用Android Studio或者adb(Android Debug Bridge)命令行工具来查看和过滤日志信息。
    • 在Android Studio中,打开Logcat窗口即可实时查看到连接设备输出的日志。
    • 使用adb命令行工具时,可以在终端输入adb logcat命令来显示所有日志信息。
  3. iOS平台

    • 对于iOS应用,你可以使用Xcode进行调试和查看控制台输出。
    • 连接iPhone或iPad后,在Xcode中选择该设备作为目标设备,并运行项目即可在控制台窗口实时查看输出信息。
  4. 过滤与搜索日志

    • 无论是在Logcat还是Xcode中都提供了搜索功能,这对于从大量信息中找出关键错误非常有帮助。
    • 同样地,在编写代码时候也可以加入特定标签或关键词使得能够更快地过滤出相关日志。
  5. 清理与导出

    • 当需要清空当前所有显示内容以便观察新产生日志时,都支持一键清理功能。
    • 当需要保存某段时间内产生的所有或部分内容时也支持导出功能。

Unity如何避免多人提交代码冲突

在Unity项目中,多人合作时避免代码冲突的方法主要有以下几种:

  1. 使用版本控制系统:像Git这样的版本控制系统可以帮助你管理和跟踪代码的变更。当两个开发者同时修改了同一部分代码时,Git会标记出冲突并让开发者手动解决。

  2. 规定工作流程:团队成员应该在开始新任务之前先更新他们本地的项目副本,这样可以尽早发现和解决潜在的合并问题。此外,每次提交应该尽可能小且具有明确目标,以降低产生大量冲突的风险。

  3. 模块化设计:通过模块化设计能够减少不必要的依赖关系,并让团队成员能够专注于他们自己负责的部分。这样就能降低多人同时修改同一段代码而导致冲突的情形。

  4. 清晰明确地划分职责区域:每个团队成员都应该清楚知道自己负责哪些文件或哪些功能模块。避免无谓交叉操作。

  5. 定期进行代码审查: 这是一个很好机会检查是否存在潜在问题,并讨论最佳实践和编码规范等问题。

  6. 使用Unity特定工具: Unity提供了一些用于协作开发场景、预设等资源类型文件(如UnityYAMLMerge)工具, 这也是非常有效避免或处理资源文件类型导致提交冲突问题.

  7. 良好沟通: 按照计划进行工作, 并保持与其他团队成员之间频繁沟通以及同步进度状态.

你用了哪些设计模式,分别是什么?解决什么问题

开发者使用一些设计模式来提高代码的可读性、可扩展性和可维护性。

以下是在软件开发过程中常见的一些设计模式:

  1. 工厂模式:这种模型被用于创建对象,而不需要指定这些对象应该属于哪个具体类。它解决了直接实例化类时可能出现的耦合问题。

  2. 单例模式:这种模式确保一个类只有一个实例,并提供全局访问点。例如,在配置管理或日志记录等场景下可以使用单例。

  3. 观察者模式:当对象间存在一对多关系时,如何通知依赖对象状态改变就需要观察者模式。例如在事件驱动系统中会非常有用。

  4. 策略模式:它定义了算法族,并分别封装起来,让他们之间可以互相替换。策略让算法独立于使用它的客户端变化。

  5. 装饰器/适配器 模式: 这两种都是结构型设计,装饰器为已有功能动态添加更多功能,适配器则将不兼容接口转换为兼容接口.

你的项目是如何做热更新的?

Unity项目的热更新通常包括资源更新和代码逻辑更新两部分。这里主要介绍一下比较常见的几种方式:资源AssetBundle 和 代码 ILRuntime,HybridCLR。

  1. AssetBundle:AssetBundle 是 Unity3D 的一种资源打包方式,可以将场景、模型、贴图、材质、Shader 等各种类型的资源进行打包,并在运行时动态加载。你可以把游戏中会频繁更改或者追加的内容做成 AssetBundle,然后放在服务器上。当需要更新时,客户端从服务器下载最新的 AssetBundle 即可实现热更新。

  2. ILRuntime:对于代码逻辑的热更,ILRuntime 是一个不错的选择。它是一个针对 .NET 平台(C#)开发并且完全开源免费的跨平台即时编译执行环境,在支持所有 C# 语言特性同时还具备轻量级虚拟机所必须具备的跨平台能力(如 iOS/Android)。你可以将部分游戏逻辑编写在 DLL 中,并使用 ILRuntime 进行加载运行,当需要更新游戏逻辑时只需要重新下载 DLL 文件即可。

  3. HybridCLR:一种Unity热更新框架,主要用于游戏逻辑的热更新。这个框架可以让你在C#中编写游戏逻辑,并将其编译为DLL文件。然后,你可以在运行时动态加载和执行这些DLL文件。HybridCLR的工作原理基于.NET的Common Language Runtime (CLR),它能够在运行时加载和执行.NET程序集(比如C#编译出来的DLL)。因此,通过HybridCLR,你可以轻松地实现代码逻辑的热更新

框架设计里面你常用的第三方库和插件是哪些?解决哪些问题?

在Unity开发中,有很多优秀的第三方库和插件可以提升开发效率,解决各种问题。以下是一些常用的:

  1. DOTween:这是一个高效、易用、全功能的动画引擎。它可以让你更简单地创建各种动画,如移动、旋转、缩放等。

  2. TextMeshPro:这是一个高级文本渲染插件,提供了丰富的文本样式和布局选项,以及更强大的性能。

  3. Cinemachine:Cinemachine 是 Unity 官方出品的一个摄像机系统插件。它为游戏摄像机制作提供了许多便利性工具和自动化系统。

  4. UniRx:UniRx 是 Reactive Extensions (Rx) 的 Unity 版本。它使得你可以使用响应式编程风格来处理复杂事件和数据流。

  5. Odin Inspector:这个插件允许你在Unity编辑器中创建更强大且易于使用的检视面板,并添加自定义行为和验证器等功能。

  6. Photon Unity Networking (PUN): 这是一款网络库, 专门用于实现Unity游戏项目中实时在线多人交互部分.

  7. Shader Graph: 这是一个可视化着色器编辑工具, 让开发者不需要写代码就能创造出复杂美观的图形特效.

以上只列出了部分常见第三方库与插件,在实际开发过程中可能还会有其他需求特定或者项目特定地选择其他组件或者框架。

聊聊ECS框架,DOTS模式。

Entity Component System (ECS) 是一种新的编程架构模型,它是 Unity 的 Data-Oriented Technology Stack (DOTS) 的核心部分。ECS、Jobs System 和 Burst Compiler 构成了 DOTS 框架。

  1. ECS(Entity Component System):在 ECS 中,数据和行为被分离开来。实体(Entities)仅作为唯一标识符存在,组件(Components)包含数据,系统(Systems)则包含行为。这种设计使得数据存储更加紧凑、连续,从而大大提高了缓存命中率和性能。

  2. Jobs System:Unity 的 Jobs 系统允许你利用多核处理器的优势来提高游戏性能。通过将任务拆分成小块,并在多个线程上并行运行它们,可以显著提升效率。

  3. Burst Compiler:Burst 是一个数学优化编译器,专门针对 Unity 的 C# Job 系统进行优化。它可以将 C# 代码转换为高效的本地代码。

DOTS 模式是 Unity 提出的一种面向数据驱动编程模式,在该模式下开发者需要以数据为中心进行思考和设计程序结构。由于其能够有效地利用现代硬件架构特性,在很多情况下都能带来显著的性能提升。

需要注意的是虽然 DOTS/ECS 提供了很强大的性能优势, 但同时也增加了开发复杂度

Addressable 管理资源的优势有哪些

Addressable Asset System 是 Unity 提供的一种新的资源管理系统,它有很多优势:

  1. 简化资源管理:Addressables 通过使用字符串地址来引用对象,而不是直接引用对象实例,这使得资源加载和卸载更加灵活和方便。

  2. 按需加载:你可以在需要时加载或卸载资源,而不是在游戏启动时就把所有内容都加载进内存。这样可以降低内存使用量,并提高游戏性能。

  3. 异步加载:Addressables 支持异步操作,可以避免长时间的阻塞操作导致游戏卡顿。

  4. 远程和本地资源:你可以从网络上或者本地文件系统中获取 Addressable 资源。这对于在线游戏或者需要下载更新内容的应用来说非常有用。

  5. 自动依赖跟踪:Addressables 会自动处理资源之间的依赖关系,在你请求一个对象时会自动加载所需的所有相关对象,并在所有相关对象都不再被使用时将它们一起卸载。

  6. 内存管理优化: Addressable 系统提供了强大且灵活的内存管理机制, 可以根据场景变化有效地控制并优化内存使用.

  7. 打包策略: 游戏开发者可以根据项目需求设定合适的打包策略, 这对于控制项目大小以及分发更新等场景非常有帮助.

因此, 使用 Addressable Asset System 可以大大简化 Unity 中复杂且重要的资源管理工作.

Unity如何对接网络游戏服务器?

在 Unity 中对接网络游戏服务器主要可以使用 Unity 自带的UNET(Unity Networking)系统,或者使用第三方网络库如 Photon、Mirror 等。以下是一个基本的步骤:

  1. 选择网络库:根据你的需求选择合适的网络库。如果你需要高性能、大规模多人在线支持,可能需要考虑像 Photon 这样的专业解决方案。

  2. 建立连接:在客户端和服务器上初始化所选网络库,并建立连接。这通常涉及到输入服务器地址和端口号。

  3. 同步数据:设计并实现数据同步机制,使得所有客户端都能看到相同的游戏状态。这可能包括玩家位置、动画状态、游戏对象等信息。

  4. 处理断线重连:设计断线重连机制以应对玩家意外掉线或者网络不稳定情况。

  5. 安全防护:实施必要的安全措施来防止作弊行为,例如加密通信内容,验证客户端发送过来的数据等。

  6. 性能优化: 对于大型多人在线游戏, 需要进行一些性能优化, 如减少不必要传输, 压缩数据等.

以上只是一个简单概述,并且每个步骤都有很多具体细节需要去处理和优化。

以 Photon 为例:

  1. 安装 Photon Unity SDK:首先在 Unity 中导入 Photon 的 Unity SDK。这个 SDK 包括了你需要连接到 Photon 服务器和实现网络功能所需的所有组件和脚本。

  2. 创建并配置PhotonServerSettings:在Unity编辑器中,选择“Window > Photon Unity Networking > Highlight Server Settings”,在Inspector窗口中输入你的应用ID(从Photon网站获取)。

  3. 连接到服务器:使用 PhotonNetwork.ConnectUsingSettings() 方法连接到 Photon 服务器。你可以传递一个游戏版本号作为参数,只有相同版本号的玩家才能一起玩游戏。

  4. 加入或创建房间:连接成功后,使用 PhotonNetwork.JoinOrCreateRoom() 方法加入或创建一个游戏房间。每个房间都有一些属性如最大玩家数、是否公开等。

  5. 同步数据:Photon 提供了多种方式来同步数据:

    • 使用 PhotonViewPhotonTransformView 组件来自动同步 GameObject 的变化。

    • 使用 RPC (Remote Procedure Call) 来调用远程方法。

    • 使用 Custom Properties 来存储和共享其他类型的数据。

  6. 处理断线重连与游戏暂停: 在网络不稳定或者用户切换至其他应用时, 游戏可能会被暂停或者掉线, 这时就需要处理断线重连与游戏暂停问题.

  7. 优化性能: 对于大型多人在线游戏, 需要进行一些性能优化, 如减少不必要传输, 压缩数据等.

  8. 安全防护: 实施必要的安全措施来防止作弊行为,例如验证客户端发送过来的数据等。

以 Socket 为例:

  1. 创建 Socket:在 Unity 中,你可以使用 System.Net.Sockets.Socket 类来创建一个新的 socket。你需要为其指定地址族(通常是 IPv4 或 IPv6)、套接字类型(流或数据报)和协议类型(TCP 或 UDP)。

  2. 连接到服务器:使用 Socket 的 Connect 方法连接到服务器。你需要提供服务器的 IP 地址和端口号。

  3. 发送和接收数据:通过 Socket 的 SendReceive 方法来发送和接收数据。由于这些方法会阻塞当前线程直到操作完成,所以通常需要将网络代码放在单独的线程或者使用异步方法。

  4. 处理数据:当从服务器接收数据时,你需要解析这些数据并更新游戏状态。同样地,当游戏状态发生变化时,也要将相关信息打包成字节并通过 socket 发送给服务器。

  5. 关闭 Socket:当不再需要与服务器通信时,应该调用 Socket 的 ShutdownClose 方法来关闭连接并释放资源。

  6. 异常处理: 在与网络相关的代码中, 异常可能随时发生, 如超时、断开连接等, 适当地处理这些异常对于保证程序稳定运行非常重要.

  7. 优化性能: 对于大型多人在线游戏, 需要进行一些性能优化, 如减少不必要传输, 压缩数据等.

  8. 安全防护: 实施必要的安全措施来防止作弊行为或被攻击,例如加密通信内容、验证客户端发送过来的数据等。

注意,在 Unity 中进行网络编程还有其他一些细节问题需要考虑,比如 Unity 主线程与网络线程之间如何交互、如何避免内存泄漏等。

相关文章:

unity面试八股文 - 框架设计与资源管理

Unity项目框架是如何设计的?有哪些原则 在设计Unity项目框架时,通常会遵循一些基本的原则和步骤。以下是主要的一些原则: 模块化:每个功能都应该被作为一个独立的模块来处理,这样可以方便修改和维护。 低耦合&#x…...

智能网关IOT 2050采集应用

SIMATIC IOT2050 是西门子公司新推出的应用于企业数字化转型的智能边缘计算和云连接网关。 它将云、公司内 IT 和生产连接在一起,专为直接在生产环境中获取、处理和传输数据的工业 IT 解 决方案而设计。例如,它可用于将生产 过程与基于云的机器和生产数据…...

iOS代码混淆-从入门到放弃

​ 目录 1. 什么是iOS代码混淆? 2. iOS自动代码混淆的方法是什么? 3. iOS代码混淆的作用是什么? 4. 怎么样才能做到更好的iOS代码混淆? 总结 参考资料 1. 什么是iOS代码混淆? 代码混淆是指将程序中的方法名、属…...

基于Eigen的位姿转换

位姿中姿态的表示形式有很多种,比如:旋转矩阵、四元数、欧拉角、旋转向量等等。这里基于Eigen实现四种数学形式的相互转换功能。本文利用Eigen实现上述四种形式的相互转换。我这里给出一个SE3(4*4)(先平移、再旋转)的构建方法&…...

Jmeter之Bean shell使用详解

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精…...

TCP/IP(八)TCP的连接管理(五)四次握手

一 tcp连接断开 每一个TCP报文的超时重传都由一个特定的内核参数来控制 ① 四次握手的过程 遗留: 谁先发送FIN包,一定是client吗? --> upload和download补充: 主动和被动断开连接的场景 "四次握手过程描述" F --> FIN --> F…...

MyBatis-Plus主键生成策略[MyBatis-Plus系列] - 第491篇

历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 ​…...

Spring——和IoC相关的特性

目录 IoC中Bean的生命周期 实例化(Instantiation) 属性注入(Populate Properties) 初始化(Initialization) 使用(Bean in Use) 销毁(Destruction) Laz…...

在 TensorFlow 中调试

如果调试是消除软件错误的过程,那么编程一定是添加错误的过程。Edsger Dijkstra。来自 https://www.azquotes.com/quote/561997 一、说明 在这篇文章中,我想谈谈 TensorFlow 中的调试。 在之前的一些帖子(此处、此处和此处)中&…...

想要精通算法和SQL的成长之路 - 连续的子数组和

想要精通算法和SQL的成长之路 - 连续的子数组和 前言一. 连续的子数组和1.1 最原始的前缀和1.2 前缀和 哈希表 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 连续的子数组和 原题链接 1.1 最原始的前缀和 如果这道题目,用前缀和来算,我们的思路…...

【C++】头文件chrono

2023年10月16日,周一晚上 当前我只是简单的了解了一下chrono 以后可能会深入了解chrono并更新文章 目录 功能原理头文件chrono中的一些类头文件chrono中的数据类型一个简单的示例程序小实验:证明a的效率比a高 功能 这个chrono头文件是用来处理时间的…...

Python学习六

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…...

Springboot 集成 WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接…...

谨以此篇,纪念我2023年曲折的计算机保研之路

目录 阶段一:迷茫阶段二:准备个人意愿保研材料准备套磁老师5.1日 浙大线上编程测试5.8日 浙大线上面试 —— 一面5.17日 浙大线上面试——二面5.29日 实验室面试结果5.27日 南开线上面试6.20日 华师电话面试 阶段三:旅途北航CS(6.…...

VSS、VDD、VBAT、VSSA

引言 在学习设计TM32时,发现芯片除了GPIO引脚外还会引出许多引脚,以STM32F407ZGT6为例除了GPIO引脚还会有以下引脚 如VSS、VDD、VBAT、VSSA、NRST、VREF、VDDA、VCAP_1、VCAP_2、PDR_ON这些引脚。他们有何作用,电路设计中应如何连接&#x…...

【Rust基础③】方法method、泛型与特征

文章目录 6 方法 Method6.1 定义方法self、&self 和 &mut self 6.2 自动引用和解引用6.3 关联函数 7 泛型和特征7.1 泛型 Generics7.1.1 结构体中使用泛型7.1.2 枚举中使用泛型7.1.3 方法中使用泛型为具体的泛型类型实现方法 7.1.4 const 泛型 7.2 特征 Trait7.2.1 为类…...

48.排列问题求解

思路分析&#xff1a;通过为每一队分配一个id&#xff0c;join条件要求t1.num < t2.num实现相同两队只比一次 代码实现&#xff1a; with t as (SELECT team_name,caseteam_nameWHEN 勇士 then 1WHEN 湖人 then 2WHEN 灰熊 then 3else 4end numFROM team )SELECT t1.team_…...

18.(开发工具篇Gitlab)Git如何回退到指定版本

首先: 使用git log命令查看提交历史,找到想要回退的版本的commit id. 使用git reset命令 第一步:git reset --hard 命令是强制回到某一个版本。执行后本地工程回退到该版本。 第二步:利用git push -f命令强制推到远程 如下所示: 优点:干净利落,回滚后完全回到最初状态…...

IDEA初始配置

1. 详细设置 安装完IDEA之后的简单配置。 1.1 如何打开详细配置界面 1、显示工具栏 2、选择详细配置菜单或按钮 1.2 系统设置 1、默认启动项目配置 启动IDEA时&#xff0c;默认自动打开上次开发的项目&#xff1f;还是自己选择&#xff1f; 如果去掉Reopen projects on …...

WM_COPYDATA传回返回值的一个方案

方案背景 适应场景&#xff0c;通过WM_COPYDATA进行进程间通信时&#xff0c;SendMessage不能返回自定义的数据&#xff0c;由此想到以下思路解决这个问题 A进程使用VirtualAlloc分配一块内存&#xff0c;通过某种方式将此地址以及A进程ID传给另一个进程B B进程使用OpenProce…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...