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

解锁MacOS开发:环境配置与应用开发全攻略

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧)

✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客

目录

引言

一、MacOS 开发环境配置

(一)必备工具安装

(二)集成开发环境(IDE)选择与安装

(三)系统设置优化

二、MacOS 应用开发流程

(一)需求分析与设计

(二)代码编写

(三)测试环节

(四)部署与发布

三、常见问题及解决方案

(一)依赖库安装失败

(二)编译错误

(三)Xcode 相关问题

四、实战案例:开发一个简单 MacOS 应用

(一)创建项目

(二)设计用户界面

(三)编写代码

(四)测试应用

(五)打包与发布


引言

在软件开发的广阔领域中,MacOS 凭借其独特的优势,成为众多开发者的首选平台。它基于 Unix 架构,拥有出色的稳定性与强大的命令行工具,让开发者能够轻松驾驭各种复杂的开发任务,无需担忧系统崩溃或数据丢失等问题 ,在处理大型项目和数据密集型任务时游刃有余。

MacOS 对多种编程语言和开发工具提供了良好的兼容性,无论是热门的 Python、Java,还是苹果官方大力推广用于开发 iOS 和 Mac 应用的 Swift 语言,都能在 MacOS 上找到适宜的开发环境。像 Xcode 这样强大的官方集成开发环境(IDE),为开发者提供了代码编辑、调试、版本控制等全方位的功能,助力应用开发更加高效流畅。同时,MacOS 还支持诸如 Visual Studio Code、Sublime Text 等主流代码编辑器,满足不同开发者的个性化需求。

此外,MacOS 与苹果的硬件设备,如 iPhone、iPad 等实现了无缝集成,为开发多平台应用提供了得天独厚的便利条件。其简洁直观、美观优雅的用户界面,不仅能让开发者在长时间的编码工作中保持舒适,更能有效提升开发效率,让开发者可以将更多的精力聚焦于代码本身。

看到这里,你是不是已经迫不及待想要在 MacOS 上搭建自己的开发环境,开启应用开发之旅了呢?接下来,本文将详细地为你介绍 MacOS 开发环境的配置步骤以及应用开发的相关流程,帮助你快速上手,在 MacOS 平台上释放自己的开发潜能。

一、MacOS 开发环境配置

(一)必备工具安装

  1. Command Line Tools:这是 MacOS 上开发的基础工具集,包含编译器、调试器等开发所需的命令行工具。打开终端,输入命令xcode-select --install,按提示操作即可完成安装。安装完成后,你就可以在终端中使用诸如gcc(GNU 编译器集合)、make(构建自动化工具)等命令,方便进行各种开发任务,比如编译 C、C++ 程序。
  1. Homebrew:作为 MacOS 上最受欢迎的包管理工具,Homebrew 能够帮助你轻松安装各种开发工具和库。在终端中输入/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)",等待安装完成。安装完成后,可以通过brew doctor检查安装状态,使用brew install <package-name>命令安装软件包,例如brew install node来安装 Node.js。有了 Homebrew,你无需再手动从官网下载、解压、配置各种软件,大大提高了开发效率。
  1. Git:这是一个分布式版本控制系统,常用于追踪代码历史和协作开发。可以使用 Homebrew 来安装,在终端输入brew install git。安装完成后,通过git --version命令检查是否安装成功。Git 能够让你方便地管理代码版本,与团队成员协作开发时,可以轻松拉取、推送代码,还能查看代码的修改历史,对于多人协作开发和个人项目管理都非常重要。例如,在开发一个大型项目时,团队成员可以各自在本地进行代码修改,然后通过 Git 将修改同步到远程仓库,方便又高效。

(二)集成开发环境(IDE)选择与安装

  1. Xcode:这是苹果官方的集成开发环境,主要用于开发 macOS、iOS、watchOS 和 tvOS 应用。它集成了代码编辑器、调试器、模拟器等一系列强大的工具,并且对 Swift 和 Objective - C 等编程语言提供了出色的支持。在 App Store 中搜索 “Xcode”,找到后点击 “获取” 然后是 “安装” 按钮。若提示,输入你的 Apple ID 信息以进行下载。下载完成后,打开安装程序并按照提示完成安装。初次运行时,可能会要求你同意 Xcode 许可协议,需要阅读并同意才能继续。Xcode 自带的 Interface Builder 工具,让开发者可以通过可视化的方式快速搭建应用界面,大大缩短了开发周期 。
  1. 其他 IDE 推荐
  • Visual Studio Code:这是一个轻量级但功能强大的源代码编辑器,支持多种编程语言,如 JavaScript、TypeScript、Python 等。它具有丰富的扩展程序市场,开发者可以根据自己的需求安装各种插件来扩展功能。比如安装 Python 插件后,就可以获得代码补全、调试支持等功能,非常适合小型项目、快速编辑文件以及多种开发场景。使用 Homebrew 安装的话,在终端输入brew install --cask visual-studio-code。
  • PyCharm:由 JetBrains 开发,是一款专为 Python 开发而设计的强大 IDE。它提供了高效的代码编辑功能、智能代码补全、代码分析、图形化的调试器以及测试运行系统,还支持多种 Web 开发框架,如 Django、Flask 等,非常适合进行大型 Python 项目开发、Web 开发、科学计算和数据分析等任务。可在 JetBrains 官网下载安装包进行安装,下载完成后,将下载的文件拖动到 “应用程序” 文件夹即可完成安装。

(三)系统设置优化

  1. 调整触控板和键盘设置:MacOS 的触控板操作非常丰富,你可以根据自己的使用习惯进行设置。打开 “系统偏好设置”,点击 “触控板”,在这里可以设置三指切换应用、四指显示桌面等操作,让你在开发过程中能够更高效地切换应用和操作界面。对于键盘设置,同样在 “系统偏好设置” 中点击 “键盘”,可以调整键盘重复率和延迟,使输入更加流畅,提高代码编写的效率。
  2. 关闭文件验证和 App 验证:在开发过程中,有时需要运行一些未签名的应用或文件,这时可以关闭文件验证和 App 验证。打开终端,输入sudo spctl --master-disable,输入密码后回车,即可关闭系统完整性保护(SIP),从而允许运行未签名的应用和文件。但需要注意的是,关闭 SIP 可能会降低系统的安全性,所以在开发完成后,建议重新开启。
  3. 加速动画和关闭键盘输入延迟:为了让系统操作更加流畅,可以在 “终端” 中输入以下命令来加速窗口动画:defaults write NSGlobalDomain NSWindowResizeTime -float 0.001。同时,如果你觉得键盘输入有延迟,可以通过修改配置文件来关闭延迟。在终端输入defaults write -g InitialKeyRepeat -int 10(默认值是 15)和defaults write -g KeyRepeat -int 1(默认值是 2),即可减少键盘输入延迟,让你在编写代码时更加得心应手。

二、MacOS 应用开发流程

(一)需求分析与设计

在开始 MacOS 应用开发之前,明确应用的功能和目标是至关重要的。这需要与项目相关人员进行充分沟通,深入了解用户需求,分析市场竞争情况,从而确定应用的核心功能和独特卖点。例如,若要开发一款文件管理应用,需考虑用户对文件分类、搜索、备份等方面的需求,以及如何在众多类似应用中脱颖而出,如提供更便捷的操作方式、更高效的搜索功能等。

用户界面设计是应用开发的重要环节,它直接影响用户体验。要遵循苹果的人机交互指南,确保界面简洁、直观、易于操作。使用 Sketch、Adobe XD 等设计工具进行界面原型设计,通过绘制草图、创建交互流程,不断优化界面布局和元素设计。例如,设计一个图像编辑应用的界面时,要合理安排各种工具按钮的位置,使其符合用户的操作习惯,方便用户快速找到并使用所需功能。

架构设计则决定了应用的整体结构和性能。可以根据应用的复杂程度选择合适的架构模式,如 MVC(Model - View - Controller)、MVVM(Model - View - ViewModel)等。MVC 模式将应用分为模型、视图和控制器三个部分,模型负责数据处理,视图负责展示,控制器负责协调两者之间的交互。以一个简单的待办事项应用为例,模型可以是存储待办事项数据的结构体或类,视图是显示待办事项列表和输入框的界面,控制器则负责处理用户添加、删除、修改待办事项的操作,并更新视图和模型。

(二)代码编写

根据开发的应用类型和需求,选择合适的编程语言。在 MacOS 开发中,Swift、Objective - C 和 Python 是常用的编程语言。

  • Swift:这是苹果推出的现代编程语言,具有简洁、安全、高效等特点,越来越受到开发者的青睐。例如,创建一个简单的 Swift 命令行程序,计算两个数的和:
    let num1 = 5let num2 = 3let sum = num1 + num2print(\"两数之和为:\(sum)\")

  • Objective - C:作为苹果开发的传统语言,具有良好的兼容性,在一些旧项目或需要与 Cocoa 框架深度集成的场景中仍被广泛使用。以下是用 Objective - C 实现相同功能的代码:
    #import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {@autoreleasepool {int num1 = 5;int num2 = 3;int sum = num1 + num2;NSLog(@"两数之和为:%d", sum);}return 0;
    }

  • Python:结合 PyObjC 库,Python 也可以用于 MacOS 应用开发,适合快速原型开发和脚本编写。例如,使用 Python 和 PyObjC 创建一个简单的窗口:
    import Cocoaclass MyWindowController(Cocoa.NSWindowController):def windowDidLoad(self):super(MyWindowController, self).windowDidLoad()window = self.window()window.setTitle_("Python Mac App")app = Cocoa.NSApplication.sharedApplication()
    windowController = MyWindowController.alloc().initWithWindowNibName_("MainMenu")
    windowController.showWindow_(None)
    app.run()

在编写代码时,要遵循良好的编程规范,注重代码的可读性和可维护性。合理使用注释,清晰地解释代码的功能和逻辑,方便团队成员理解和协作。同时,充分利用各种开发框架和库,如 AppKit(用于构建 Mac 应用的界面)、Foundation(提供基础数据类型和功能)等,提高开发效率。例如,在使用 AppKit 创建一个按钮时,可以这样编写代码:

import AppKitclass ViewController: NSViewController {override func viewDidLoad() {super.viewDidLoad()let button = NSButton(frame: NSRect(x: 100, y: 100, width: 100, height: 50))button.title = "点击我"button.target = selfbutton.action = #selector(buttonClicked)view.addSubview(button)}@objc func buttonClicked() {let alert = NSAlert()alert.messageText = "按钮被点击了"alert.runModal()}
}

(三)测试环节

测试是确保应用质量的关键步骤,通过各种测试方法可以发现并修复潜在的问题。

  • 单元测试:针对代码中的最小可测试单元(如函数、方法)进行测试,验证其功能是否正确。Xcode 自带的 XCTest 框架是 MacOS 开发中常用的单元测试工具。例如,对一个计算两个整数之和的函数进行单元测试:
    import XCTestfunc add(_ a: Int, _ b: Int) -> Int {return a + b
    }class MathTests: XCTestCase {func testAdd() {let result = add(3, 5)XCTAssertEqual(result, 8, "加法函数测试失败")}
    }

  • 集成测试:用于测试多个模块之间的交互是否正常,确保不同组件能够协同工作。可以使用 Xcode 的测试框架结合模拟对象来进行集成测试。例如,测试一个包含数据模型和视图控制器的简单应用,验证视图控制器能否正确获取和显示数据模型中的数据。
  • 系统测试:对整个应用进行全面测试,包括功能、性能、兼容性等方面。可以使用 Selenium 等工具进行自动化系统测试,模拟用户的操作流程,验证应用在不同场景下的表现。例如,测试一个文件管理应用在不同文件数量、不同系统版本下的文件操作功能是否正常,以及应用的响应速度和内存占用情况。

在测试过程中,要编写详细的测试用例,覆盖各种可能的输入和边界条件。及时记录和修复测试中发现的问题,确保应用的稳定性和可靠性。同时,定期进行回归测试,防止在后续开发中引入新的问题。

(四)部署与发布

完成测试后,就可以将应用打包并发布到目标平台。

  • 应用打包:在 Xcode 中,选择 “Product” -> “Archive”,Xcode 会对应用进行编译和打包,生成一个归档文件。在归档过程中,要确保应用的图标、版本号等信息设置正确。例如,在 Xcode 的项目设置中,找到 “General” 选项卡,上传应用图标,设置版本号和构建号,这些信息将显示在应用的安装包和 App Store 上。
  • 发布到 App Store:将归档文件提交到 App Store Connect 进行审核。在提交之前,需要准备好应用的描述、截图、隐私政策等资料。描述要简洁明了,突出应用的功能和特点;截图要展示应用的主要界面和功能,吸引用户下载。隐私政策则要明确说明应用如何收集、使用和保护用户数据,确保符合相关法律法规。审核过程可能需要一定时间,期间要关注审核反馈,及时处理审核人员提出的问题。
  • 其他发布平台:除了 App Store,也可以选择将应用发布到其他平台,如 Mac App Store 之外的网站、第三方应用市场等。但需要注意不同平台的发布规则和要求,确保应用能够顺利上线。例如,发布到网站时,要提供易于下载和安装的方式,可能需要使用 DMG 格式的安装包,并提供详细的安装说明。

三、常见问题及解决方案

在 MacOS 开发环境配置与应用开发过程中,难免会遇到一些问题,以下是一些常见问题及对应的解决方案。

(一)依赖库安装失败

在使用 Homebrew 或 pip 安装依赖库时,可能会遇到安装失败的情况,报错信息中常常包含网络连接问题、依赖冲突或权限不足等提示。

  • 网络连接问题:如果是网络连接不稳定或超时导致的安装失败,可以尝试更换网络,或者使用代理服务器。比如在终端中设置 HTTP 代理:export http_proxy=http://your_proxy_address:port,export https_proxy=https://your_proxy_address:port ,这里your_proxy_address是代理服务器地址,port是端口号,设置完成后再重新执行安装命令。
  • 依赖冲突:当出现依赖冲突时,需要仔细查看错误信息,了解冲突的具体依赖库。有时可以通过指定依赖库的版本来解决冲突,例如pip install package_name==specific_version,这里package_name是依赖库名称,specific_version是指定的版本号。还可以尝试使用虚拟环境(如 venv、virtualenv)来隔离不同项目的依赖,避免相互干扰。例如,使用 venv 创建虚拟环境:python3 -m venv myenv,然后激活虚拟环境:source myenv/bin/activate,在虚拟环境中进行依赖库安装,这样可以保证每个项目都有独立的依赖环境 。
  • 权限不足:若提示权限不足,可以使用sudo命令获取管理员权限进行安装,但不建议频繁使用sudo安装,以免对系统造成不必要的影响。例如sudo brew install package_name。更好的解决方法是将当前用户添加到相应的权限组,或者修改安装目录的权限,使当前用户具有写入权限。比如对于 Python 库的安装,可以修改 Python 的 site-packages 目录权限,让当前用户可以写入:sudo chown -R your_username /Library/Python/3.8/site-packages,这里your_username是当前用户名,3.8 是 Python 版本号,根据实际情况修改 。

(二)编译错误

在使用 Xcode 或其他编译器进行代码编译时,可能会遇到各种编译错误,错误信息常常包含语法错误、缺少头文件、链接错误等。

  • 语法错误:这是最常见的编译错误,通常是由于代码书写不规范导致的。仔细查看错误提示,定位到错误所在的代码行,检查代码的语法是否正确。例如,在 Swift 中,变量声明时类型不匹配就会导致语法错误:let num: Int = "abc",这里将字符串赋值给了整型变量,应改为let num: Int = 10。
  • 缺少头文件:如果编译时提示缺少头文件,首先检查头文件是否确实存在于项目中。若存在,确认头文件的路径是否正确,是否需要在编译器的设置中添加头文件搜索路径。例如,在使用 C++ 开发时,如果使用了自定义的头文件myheader.h,且该头文件位于项目的include目录下,可以在 Xcode 的项目设置中,找到 “Build Settings”,搜索 “Header Search Paths”,添加$(SRCROOT)/include,这里$(SRCROOT)表示项目根目录 。
  • 链接错误:链接错误通常是由于找不到函数或库的定义导致的。检查是否正确链接了相关的库文件,在 Xcode 中,需要在 “Build Phases” -> “Link Binary With Libraries” 中添加所需的库。比如在开发一个使用 SQLite 数据库的应用时,需要添加libsqlite3.dylib库。如果库文件的路径不正确,也会导致链接错误,此时需要确保库文件的路径设置正确。例如,使用第三方库时,库文件可能位于自定义的目录下,需要在 “Build Settings” -> “Library Search Paths” 中添加该目录的路径 。

(三)Xcode 相关问题

Xcode 作为 MacOS 开发的重要工具,在使用过程中也可能出现一些问题。

  • Xcode 无法启动或闪退:这可能是由于 Xcode 版本与 MacOS 系统版本不兼容,或者 Xcode 安装文件损坏导致的。首先检查 Xcode 版本是否支持当前的 MacOS 系统版本,如果不支持,升级或降级 Xcode 版本。若怀疑安装文件损坏,可以尝试重新下载并安装 Xcode。在下载前,先卸载当前的 Xcode,打开 “应用程序” 文件夹,将 Xcode 拖移到废纸篓,然后清空废纸篓。接着在 App Store 中重新下载安装 Xcode。
  • 模拟器无法正常运行:有时模拟器会出现无法启动、启动后黑屏或运行应用时出错等问题。确保模拟器的版本与 Xcode 和应用的目标版本兼容,在 Xcode 的 “Window” -> “Devices and Simulators” 中,选择正确的模拟器版本。如果模拟器出现异常,可以尝试重置模拟器,在模拟器的菜单栏中选择 “Hardware” -> “Erase All Content and Settings”,然后重新启动模拟器。此外,检查电脑的内存和磁盘空间是否充足,内存不足或磁盘空间不足也可能导致模拟器运行异常。

四、实战案例:开发一个简单 MacOS 应用

接下来,我们以开发一个简单的待办事项应用为例,完整展示从创建项目到发布的全过程,帮助你更直观地理解 MacOS 应用开发的流程。

(一)创建项目

打开 Xcode,在欢迎界面选择 “Create a new Xcode project”,或者点击菜单栏中的 “File” -> “New” -> “Project”。在模板选择页面,选择 “macOS” 下的 “App”,然后点击 “Next”。在项目设置页面,输入项目名称 “TodoApp”,组织标识符(Organization Identifier)可采用反向域名格式,如 “com.yourcompany”,语言选择 “Swift”,用户界面(Interface)选择 “Storyboard”,其他选项保持默认,点击 “Next”。选择项目保存的位置,然后点击 “Create”,这样一个新的 MacOS 应用项目就创建完成了 。

(二)设计用户界面

在项目导航器中找到 “Main.storyboard” 文件并打开,它是应用界面的可视化设计文件。从 Object Library(对象库)中拖拽一个 Table View(表格视图)到视图控制器的主视图中,用于显示待办事项列表。再拖拽一个 TextField(文本输入框)和一个 Button(按钮)到视图中,TextField 用于输入新的待办事项,Button 用于添加待办事项。

为了使界面更加美观和布局合理,需要设置这些控件的约束(Constraints)。选中 Table View,点击界面底部的 “Pin” 按钮,设置其与父视图的上下左右间距都为 0,使其铺满整个视图。对于 TextField 和 Button,设置它们水平居中对齐,并且 Button 在 TextField 的右侧,两者之间保持一定的间距。比如 TextField 距离父视图左边距为 20,Button 距离 TextField 右边距为 20 。

(三)编写代码

  1. 定义数据模型:在项目中创建一个新的 Swift 文件,命名为 “TodoItem.swift”。在该文件中定义一个结构体来表示待办事项:
    struct TodoItem {var title: Stringvar isCompleted: Bool = false
    }

  2. 配置视图控制器:打开 “ViewController.swift” 文件,在文件顶部导入 AppKit 框架。定义一个数组来存储待办事项,并与界面上的 Table View 和 Button 建立连接。
    import Cocoaclass ViewController: NSViewController {@IBOutlet weak var todoTableView: NSTableView!@IBOutlet weak var newTodoTextField: NSTextField!var todoItems: [TodoItem] = []override func viewDidLoad() {super.viewDidLoad()todoTableView.dataSource = selftodoTableView.delegate = self}@IBAction func addTodoButtonClicked(_ sender: Any) {guard let newTodo = newTodoTextField.stringValue else { return }let item = TodoItem(title: newTodo)todoItems.append(item)todoTableView.reloadData()newTodoTextField.stringValue = ""}
    }extension ViewController: NSTableViewDataSource {func numberOfRows(in tableView: NSTableView) -> Int {return todoItems.count}
    }extension ViewController: NSTableViewDelegate {func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "TodoCell"), owner: self) as? NSTableCellViewcell?.textField?.stringValue = todoItems[row].titlereturn cell}
    }

在这段代码中,ViewController类负责管理视图和用户交互。@IBOutlet属性将界面上的控件与代码关联起来,@IBAction方法处理按钮点击事件,将新的待办事项添加到数组中并刷新表格。NSTableViewDataSource和NSTableViewDelegate的扩展分别实现了表格视图的数据提供和单元格配置功能。

(四)测试应用

点击 Xcode 右上角的运行按钮(或使用快捷键 Command + R),选择一个 Mac 模拟器或直接在本地 Mac 设备上运行应用。在应用运行界面,在文本输入框中输入待办事项,点击 “添加” 按钮,待办事项会显示在表格中。通过这样的测试,可以验证应用的基本功能是否正常,如添加待办事项、显示待办事项列表等。在测试过程中,若发现问题,如按钮点击无反应、表格不更新等,可利用 Xcode 的调试工具,如设置断点、查看变量值等,来定位和解决问题。

(五)打包与发布

  1. 应用打包:选择菜单栏中的 “Product” -> “Archive”,Xcode 会对应用进行编译和打包,生成一个归档文件。在归档过程中,Xcode 会检查应用的代码、资源文件等是否存在问题,若有问题会提示错误信息,需要根据提示进行修复。
  2. 发布到 App Store:将归档文件提交到 App Store Connect 进行审核。在提交之前,需要在 App Store Connect 上注册应用,填写应用的名称、描述、截图、隐私政策等信息。应用名称要简洁易记,能准确传达应用的功能;描述要详细介绍应用的特点和优势,吸引用户下载;截图要展示应用的主要界面和功能,让用户对应用有直观的了解;隐私政策则要明确说明应用如何收集、使用和保护用户数据,确保符合相关法律法规。提交审核后,需要耐心等待审核结果,期间要关注审核反馈,及时处理审核人员提出的问题。
  3. 其他发布方式:除了发布到 App Store,也可以选择将应用发布到其他平台,如 Mac App Store 之外的网站、第三方应用市场等。发布到网站时,需要将应用打包成 DMG 格式的安装包,并提供详细的安装说明,方便用户下载和安装。在发布到第三方应用市场时,要了解其发布规则和要求,确保应用能够顺利上线。

相关文章:

解锁MacOS开发:环境配置与应用开发全攻略

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 引言 一、MacOS 开发环境配置 &#xff08;一&#xff09;必备工具安装 &#xff08;二&#xff09;集成开发环境&#xff08;IDE&#xff09;选…...

IDEA 2025最新版2024.3.3软件安装、插件安装、语言设置

IntelliJ IDEA是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java语言的开发&#xff0c;它通过提供丰富的功能如智能代码补全、代码分析、版本控制集成等来提高开发效率。 IDEA有社区版和专业版两个版本&#xff0c;社区版是免费开…...

leetcode 0018 四数之和-medium

1 题目&#xff1a;四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#x…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump

ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…...

家政预约小程序用例图分析

在和客户进行需求沟通的时候&#xff0c;除了使用常规的问答的形式&#xff0c;我还使用图形化工具更深入的沟通。比如借助UML的用例图来开展系统分析&#xff0c;并且按照角色详细拆解了家政预约小程序的各个用例。在分析阶段思考的越多&#xff0c;沟通的越多&#xff0c;在系…...

unity学习62,尝试做第一个小游戏项目:flappy bird

目录 学习参考 1 创建1个unity 2D项目 1.1 2D项目模板选择 1.1.1 2D(built-in-Render pipeline) 1.1.2 universe 2D 1.1.3 这次选择 2D(built-in-Render pipeline) 1.2 创建项目 1.2.1 注意点 1.2.2 如果想修改项目名 2 导入美术资源包 2.1 下载一个flappy bird的…...

Windows10下本地搭建Manim环境

文章目录 1. 简介2. Python环境3. uv工具4. Latex软件5. 安装Manim数学库6. 中文支持参考 1. 简介 manim是个一科普动画的库&#xff0c; 本文用到的是社区版本。 2. Python环境 这个不用多说&#xff0c;可以参考其他的文章。记得把pip也安上。 3. uv工具 上面的pip是老…...

zabbix“专家坐诊”第277期问答

在线答疑:乐维社区 问题一 Q&#xff1a;这个怎么解决呢&#xff1f; A&#xff1a;缺少这个依赖。 Q&#xff1a;就一直装不上。 A&#xff1a;装 zabbix-agent2-7.0.0-releasel.el7.x86 64 需要前面提示的那个依赖才可以装。 问题二 Q&#xff1a;大佬&#xff0c;如果agen…...

解决git clone下载慢或者超时问题

在网上找了很多办法&#xff0c;直接最简单的使用镜像网站下载。 国内可用的镜像网站有&#xff1a; https://github.com.cnpmjs.org # 服务器位于香港https://gitclone.com # 服务器位于杭州https://doc.fastgit.org # 服务器位于香港 例如&#xff1a;将 git clone https:…...

机器学习:强化学习的epsilon贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…...

MySQL-高级查询

查询处理 排序&#xff08;默认不是按主键排序的&#xff09; order by 字段1[&#xff0c;字段2] [asc|desc] 默认是升序排序也可以指定 select 列表中列的序号进行排序如果是多个字段&#xff0c;那么在上一个字段排序完的基础上排序下一个 限制数量 limit 行数&#xff0…...

NModbus 连接到Modbus服务器(Modbus TCP)

1、在项目中通过NuGet添加NModbus&#xff0c;在界面中添加一个Button。 using NModbus.Device; using NModbus; using System.Net.Sockets; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Docu…...

value_counts()和unique()

我今天发现一个很有意思的问题哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…...

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…...

示例:在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处

一、目的&#xff1a;分享在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处 在WPF中使用Segoe MDL2 Assets字体&#xff0c;可以通过设置控件的FontFamily属性来实现。Segoe MDL2 Assets是一个包含许多图标的字体&#xff0c;通常用于Windows应用程序的图标显示。 二、…...

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法 引言 原文:On using the UA-Speech and TORGO databases to validate automatic dysarthric speech classification approaches 构音障碍简介 构音障碍是一种由于脑损伤或神经疾病(如脑瘫、肌萎缩侧索硬化症、帕金森…...

容器与虚拟机:云时代的底层架构博弈

容器与虚拟机&#xff1a;云时代的底层架构博弈 在数字化浪潮席卷的当下&#xff0c;云技术已成为企业和开发者不可或缺的基础设施。在云环境中&#xff0c;容器和虚拟机作为两种关键的底层技术&#xff0c;犹如双子星般备受瞩目。它们究竟谁能在这场技术较量中脱颖而出&#x…...

解决android studio(ladybug版本) gradle的一些task突然消失了

今天不知道干了啥&#xff0c;AS&#xff08;ladybug版本&#xff09;右边gradle的task有些不见了&#xff0c;研究了半天解决了&#xff0c;这里记录下&#xff1a; 操作&#xff1a; File -->Settings-->Experimental--> 取消选项“Enable support for multi-vari…...

Wpf-ReactiveUI-Usercontrol交互

文章目录 1、使用属性绑定UserControl 部分(MyUserControl.xaml.cs)UserControl 视图模型部分(MyUserControlViewModel.cs)主界面部分(MainWindow.xaml)主界面视图模型部分(MainWindowViewModel.cs)2、使用消息传递UserControl 视图模型部分(MyUserControlViewModel.c…...

Unity插件-Mirror使用方法(四)组件介绍(​Network Manager HUD)

目录 一、插件介绍 二、主要组件 Network Manager 三、Network Manager HUD 1、组件介绍 2、NetworkManagerHUD 的核心功能 快速操作按钮 状态信息显示 场景切换支持 调试辅助 3、关键属性与配置 4、HUD 界面详解 【主机模式&#xff08;服务器客户端&#xff09;…...

UDP协议(20250303)

1. UDP UDP:用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;传输层协议之一&#xff08;UDP&#xff0c;TCP&#xff09; 2. 特性 发送数据时不需要建立链接&#xff0c;节省资源开销不安全不可靠的协议 //一般用在实时性比较高…...

【量化金融自学笔记】--开篇.基本术语及学习路径建议

在当今这个信息爆炸的时代&#xff0c;金融领域正经历着一场前所未有的变革。传统的金融分析方法逐渐被更加科学、精准的量化技术所取代。量化金融&#xff0c;这个曾经高不可攀的领域&#xff0c;如今正逐渐走进大众的视野。它将数学、统计学、计算机科学与金融学深度融合&…...

振弦采集仪多通道振弦采集终端 物联网振弦监测 智能振弦监测系统

振弦采集仪多通道振弦采集终端 物联网振弦监测 智能振弦监测系统 VD416_DIN 多通道振弦温度综合采集仪采用模块化设计&#xff0c;配备 32 通道传感器接口&#xff0c;支持两种高效工作模式&#xff1a;16 通道振弦频率与 16 通道温度同步采集&#xff0c;或 32 通道振弦频率专…...

Synchronized解析

一、底层原理&#xff1a;Monitor机制 对象锁与Monitor关联 synchronized通过对象锁实现互斥&#xff0c;每个Java对象都可以关联一个Monitor&#xff08;监视器&#xff09;&#xff0c;其底层由JVM用C实现。当线程进入synchronized代码块时&#xff0c;会尝试获取与锁对象关联…...

别再瞎学!C 语言入门看这篇就够了

目录 1. 如何学好C语言 2. C语言是什么&#xff1f; 3. C语⾔的历史和辉煌 4. 编译器的选择 4.1 编译和链接 4.2 编译器大比拼&#xff0c;VS2022 脱颖而出 4.3 VS2022 优缺点大揭秘 5. VS项⽬ 和 源⽂件、头⽂件介绍 6. 第一个C语言程序 7. main 函数&#xff1a;程序…...

Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)

上篇文章&#xff1a;Linux操作系统5-进程信号1&#xff08;信号基础&#xff09;-CSDN博客 本篇Gitee仓库&#xff1a;myLerningCode/l25 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点&#xff1a;信号的4种产生 目录 一. signal系统调用 …...

【Groovy】Array、List、Set、Map简介

1 Array 1.1 创建数组 1.1.1 创建一维数组 int[] arr1 new int[2] arr1[0] 1 arr1[1] 2float[] arr2 new float[] { 1f, 2f, 3f } String[] arr3 ["abc", "xyz"] as String[] 1.1.2 创建二维数组 int[][] arr1 new int[2][2] arr1[0][0] 1 arr…...

DeepSeek与数据分析:现状、挑战与未来展望

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;的浪潮正以前所未有的速度席卷各个领域&#xff0c;数据分析作为众多行业决策的关键支撑&#xff0c;也不可避免地受到AI技术发展的深刻影响。近期&#xff0c;AI话题持续火热&#xff0c;不少企业老板要求员工…...

【通俗讲解电子电路】——从零开始理解生活中的电路(三)

实际应用案例&#xff1a;生活中的电子电路 ——拆解你身边的“隐形工程师” 1. 手电筒电路&#xff1a;最简单的直流系统 电路组成 电源&#xff1a;2节1.5V电池&#xff08;串联3V&#xff09;。 开关&#xff1a;按钮控制回路通断。 LED&#xff1a;发光二极管&#xff…...

JVM基本概念及内存管理模型

一、JVM基本概念 JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令&#xff0c;并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下&#xff1a; 加载和执行…...

【CPP面经】科大讯飞 腾讯后端开发面经分享

文章目录 C 面试问题整理基础问题简答1. 内存对齐2. this 指针3. 在成员函数中删除 this4. 引用占用内存吗&#xff1f;5. C 越界访问场景6. 进程通信方式7. 无锁队列实现8. ping 在哪一层&#xff1f;实现原理&#xff1f;9. HTTPS 流程10. GDB 使用及 CPU 高使用定位11. 智能…...

2.反向传播机制简述——大模型开发深度学习理论基础

在深度学习开发中&#xff0c;反向传播机制是训练神经网络不可或缺的一部分。它让模型能够通过不断调整权重&#xff0c;从而将预测误差最小化。本文将从实际开发角度出发&#xff0c;简要介绍反向传播机制的核心概念、基本流程、在现代网络中的扩展&#xff0c;以及如何利用自…...

使用Word时无法粘贴,弹出错误提示:运行时错误‘53‘:文件未找到:MathPage.WLL

报错说明 使用Word时无法粘贴&#xff0c;粘贴时弹出提示如下&#xff1a; 一般出现这种情况时&#xff0c;我想你是刚装完MathType不久&#xff0c;博主装的是MathType7版本&#xff0c;出现了这个问题。 出现这个问题的原因是"mathpage.wll"这个文件在Office的插…...

详解matplotlib隐式pyplot法和显式axes法

Python的matplotlib提供了pyplot隐式方法和显式Axes方法&#xff0c;这让很多人在选择时感到困惑。本文用9000字彻底解析两种方法的区别与适用场景&#xff0c;节选自&#x1f449;Python matplotlib保姆级教程 matplotlib隐式绘图方法&#xff08;pyplot&#xff09; matplot…...

100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全

文章目录 1. urllib概述2. urllib.request模块 1. urllib.request.urlopen()2. urllib.request.urlretrieve()3. urllib.request.Request()4. urllib.request.install_opener()5. urllib.request.build_opener()6. urllib.request.AbstractBasicAuthHandler7. urllib.request.…...

FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

Leetcode LRU缓存

LRU 缓存算法思想及代码解析 算法思想 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存 需要满足以下要求&#xff1a; 在 O(1) 时间复杂度内完成 get 和 put 操作。当缓存满时&#xff0c;删除最近最少使用的元素&#xff08;即最久没有被访问…...

结合PyMuPDF+pdfplumber,删除PDF指定文本后面的内容

🚀 一、需求场景解析 在日常办公中,我们经常会遇到这样的痛点: 合同处理:收到上百份PDF合同,需要找到"签署页"之后的内容并删除报表加工:批量移除财务报表中的敏感数据区域文档归档:快速提取技术文档的关键章节传统的手动操作方式存在三大致命缺陷: ❗ 耗时…...

【NLP 30、文本匹配任务 —— 传统机器学习算法】

目录 一、文本匹配任务的定义 1.狭义解释 2.广义解释 二、文本匹配的应用 1.问答对话 2.信息检索 3.文本匹配任务应用 三、智能问答 1.智能问答的基本思路 依照基础资源划分&#xff1a; 依照答案产出方式划分 依照NLP相关技术划分 四、智能问答的价值 1.智能客服 2.Faq知识库问…...

修改hosts文件,修改安全属性,建立自己的DNS

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

springboot + mybatis-plus + druid

目录架构 config MyMetaObjectHandler.java package com.example.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util.Date;Com…...

【零基础到精通Java合集】第十一集:List集合框架与泛型

课程标题:List集合框架与泛型(15分钟) 目标:掌握泛型在List中的应用,理解类型安全的重要性,熟练操作泛型集合 0-1分钟:泛型List的意义引入 以“分类储物箱”类比泛型List:明确容器内元素类型(如只能放书籍)。说明泛型的核心作用——编译时类型检查,避免运行时类型…...

计算机网络——子网掩码

一、子网掩码是什么&#xff1f;它长什么样&#xff1f; 子网掩码的定义 子网掩码是一个32位的二进制数字&#xff0c;与IP地址“配对使用”&#xff0c;用于标识IP地址中哪部分属于网络地址&#xff0c;哪部分属于主机地址。 示例&#xff1a;IP地址 192.168.1.10&#xff0c;…...

[自然语言处理]pytorch概述--什么是张量(Tensor)和基本操作

pytorch概述 PyTorch 是⼀个开源的深度学习框架&#xff0c;由 Facebook 的⼈⼯智能研究团队开发和维护&#xff0c;于2017年在GitHub上开源&#xff0c;在学术界和⼯业界都得到了⼴泛应⽤ pytorch能做什么 GPU加速自动求导常用网络层 pytorch基础 量的概念 标量&#xf…...

18.5 ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道

ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道 关键词:ChatGLM2 开源协议, 模型授权合规, 商业使用限制, 技术伦理条款, 国产大模型治理 1. 协议核心条款全景解析 ChatGLM2-6B 采用 分层授权模式,其核心条款可归纳为三大维度: #mermaid-svg-xgEnsN0y2TMOR0Hf {font…...

javaweb自用笔记:Vue

Vue 什么是vue vue案例 1、引入vue.js文件 2、定义vue对象 3、定义vue接管的区域el 4、定义数据模型data 5、定义视图div 6、通过标签v-model来绑定数据模型 7、{{message}}直接将数据模型message展示出来 8、由于vue的双向数据绑定&#xff0c;当视图层标签input里的…...

FreeRTOS 源码结构解析与 STM32 HAL 库移植实践(任务创建、删除篇)

1. FreeRTOS源码结构介绍 1.1 下载源码 ​ 点击官网地址&#xff0c;选择 FreeRTOS 202212.01非 LTS 版本&#xff08;非长期支持版&#xff09;&#xff0c;因为这个版本有着最全的历程和更多型号处理器支持。 1.2 文件夹结构介绍 ​ 下载后主文件 FreeRTOSv202212.01 下包…...

第五节:基于Winform框架的串口助手小项目---串口收发《C#编程》

“路漫漫其修远兮&#xff0c;吾将上下而求索” &#xff0c; -----------------------WHAPPY 目标任务&#xff1a; 1 从本地设备列表获取串口。 RegistryKey keyCom Registry.LocalMachine.OpenSubKey("Hardware\DeviceMap\SerialComm"); RegistryKey 是.NET 框…...

CSS2.1基础学习

1.定位盒模型相关 2.浮动 3.使用定位实现三列布局(不可取&#xff0c;定位父级为初始包含块) 4.使用浮动实现三列布局(不可取的原因是中间主列无法优先加载) 5.圣杯布局 6.等高布局 7.双飞翼布局 8.解决IE6下fixed失效问题 9.短暂总结 10.粘连布局 11.BFC是什么 12.BFC实现两列…...

alpine linux 系统最新版安装及使用教程

1.下载镜像包 官网地址 官网下载阿里云镜像站下载华为云镜像站下载清华大学镜像站下载中科大镜像站下载 官方安装文档 2.新建虚拟机 3.编辑虚拟机并开机 4.虚拟机安装 开启虚拟机 首次启动使用root登录&#xff0c;没有密码 登录成功&#xff0c;执行 setup-alpine 命令进…...