keil5.38安装包
2025-12-12 16:21:52 880.39MB ARM开发
1
### WOW魔兽世界的APIs知识点详解 #### 一、全局函数概览 《WOW魔兽世界的APIs》提供了丰富的全局函数,旨在帮助游戏开发者和玩家更好地操控游戏内的各种功能。这些函数覆盖了从任务管理、技能操作、战斗互动到社交网络等各个方面,极大地增强了游戏的可玩性和定制性。 #### 二、任务与技能管理 - **AbandonQuest()**:此函数允许玩家放弃当前正在进行的任务,提供了一种灵活性,使玩家可以根据自己的喜好或需求重新规划游戏路径。 - **AbandonSkill(index)**:通过传递一个技能的索引值,可以实现技能的丢弃。这为角色构建提供了更多的选择和调整空间,使玩家能够根据战斗策略或个人兴趣调整技能配置。 #### 三、数学与物理运算 - **abs(number)**:计算数值的绝对值,这一基础数学函数在处理坐标、距离或任何需要正数结果的场景中十分有用。 - **acos(number)**、**asin(number)**:分别用于计算弧度制下的余弦值和正弦值对应的角,对于实现精确的角度或位置控制具有重要意义。 #### 四、社交与交互功能 - **AcceptDuel()、AcceptGroup()、AcceptGuild()、AcceptResurrect()、AcceptXPLoss()**:这些函数涵盖了PvP战斗邀请接受、组队邀请、行会加入、复活请求以及经验损失接受等,极大地丰富了玩家间的互动体验。 - **AddFriend(name)、AddIgnore(UserName)**:社交功能的增强,允许玩家添加好友或将其加入黑名单,促进社区的健康发展,同时也为玩家提供了更好的个人空间管理工具。 #### 五、聊天与贸易系统 - **AddChatWindowChannel(identifier, channel)**:通过向聊天窗口添加特定频道,玩家可以更高效地参与不同话题的讨论,增强了游戏的社交属性。 - **AddTradeMoney()**:在交易窗口中添加货币,支持更复杂的经济系统和玩家之间的物品交换,增加了游戏的经济深度。 #### 六、辅助与交易功能 - **AssistByName(target)**、**AssistUnit(target)**:通过指定目标名称或单位,实现对其他玩家或NPC的协助,增强了团队协作能力和战斗策略的多样性。 #### 七、事件触发与用户界面交互 - **ActionButtonDown(buttonID)**、**ActionButtonUp(buttonID)**:模拟鼠标对活动按钮的操作,包括按下和弹起,这对于用户界面的设计和响应性至关重要。 #### 结论 《WOW魔兽世界的APIs》不仅仅是一系列代码指令的集合,它代表了游戏开发和玩家互动的深度融合。通过这些APIs,开发者能够构建更加丰富多样的游戏环境,而玩家则能享受更加个性化和沉浸式的游戏体验。掌握并灵活运用这些APIs,无疑将为WOW的游戏生态带来更加广阔的可能性和发展空间。
2025-12-12 16:16:16 467KB 游戏开发 软件开发 魔兽世界
1
该资源是一个开源的在线答题小程序项目,主要用于内部考核、考试预约和内部评分等多种场景,它构建于云开发基础之上,适合微信平台使用。这个小程序的出现,为教育机构、企业或者个人提供了一种便捷的在线考试解决方案。 我们要了解什么是云开发。云开发(Cloud Development)是腾讯云推出的一项Serverless服务,它提供了包括数据库、存储、函数计算在内的一站式后端服务。开发者无需搭建服务器,只需关注业务逻辑,大大简化了开发流程和运维成本。在这个在线答题小程序中,云开发可能被用来存储题目、答案以及用户信息,同时处理用户的请求,进行实时评分和结果反馈。 在线答题小程序的核心功能可能包括以下几点: 1. **题库管理**:小程序内置了一个题库,包含多种类型的题目,如选择题、填空题、判断题等。管理员可以方便地添加、修改和删除题目,确保考试内容的更新与维护。 2. **考试创建与设置**:管理员能够创建不同类型的考试,设定考试时间、时长、题量,以及是否允许考生查看答案解析等功能,满足不同考核需求。 3. **用户注册与登录**:用户需要通过微信账号进行注册和登录,保证用户身份的安全性和唯一性,同时也便于利用微信平台的社交特性进行推广。 4. **预约考试**:用户可以预约参与特定的考试,系统会根据设定的时间进行通知,防止错过考试。 5. **在线答题**:用户在指定时间内进入考试页面,按照顺序作答,系统实时记录答题情况,如答题时间、答题进度等。 6. **自动评分**:答题结束后,系统根据预设的评分规则自动进行评分,结果显示给用户,提供答案解析和错题分析,帮助用户了解自己的知识盲点。 7. **成绩查询与统计**:用户可以随时查看考试成绩,同时,管理员可以查看整体的考试数据,进行统计分析,了解考试效果。 8. **安全机制**:考虑到考试的公平性,小程序可能有防作弊机制,如限制答题速度,检测异常答题行为等。 9. **互动交流**:为了增强用户体验,小程序可能设有讨论区或私信功能,用户可以就题目进行讨论,提高学习效果。 这个开源项目对于开发者来说,是一个很好的学习和实践平台,可以深入理解微信小程序的开发流程,以及如何利用云开发实现后端功能。对于使用者来说,它可以作为内部培训、知识竞赛或自我学习的工具,提升学习效率。这个在线答题小程序结合了现代技术与教育需求,为数字化时代的教育模式提供了新的可能。
2025-12-12 09:18:32 9.67MB
1
在当今互联网技术和电子商务迅猛发展的大背景下,构建一个高效、稳定且能够处理高并发请求的Web电商系统显得尤为重要。本文旨在深入探讨和解析一个采用Go语言开发的分布式高并发Web电商系统的核心技术和实现机制,以及相关文件结构。 Go语言作为一种新兴的编程语言,因其出色的并发处理能力、高性能以及简洁的语法受到了广大开发者的青睐。在Web电商系统中,高并发处理能力尤为重要,因为它直接关系到用户体验和系统稳定性。分布式系统架构设计可以有效地将高流量分散到不同的服务器上,从而提高系统的处理能力和可靠性。在Go语言的生态中,已经有许多成熟的框架和库支持分布式系统的设计,例如gRPC用于远程过程调用,etcd用于服务发现和配置管理等。 构建分布式高并发Web电商系统时,首先需要考虑的是系统的整体架构。通常这样的系统会分为几个关键组件,包括前端展示层、后端服务层、数据库层以及可能的服务治理层。在Go语言项目中,这些组件可以分别对应到不同的模块和包中。 前端展示层主要负责与用户交互,展示商品信息、处理用户请求等。在这个分布式系统中,前端可能采用Vue.js或React等现代JavaScript框架构建,并通过HTTP RESTful API与后端服务层交互。后端服务层是整个电商系统的核心,它需要处理业务逻辑,如商品检索、订单处理、支付等。Go语言的并发模型非常适配此类场景,使用goroutines可以轻松实现成百上千的并发处理。 数据库层则需要处理大量的数据读写操作,分布式电商系统可能会使用MySQL、PostgreSQL等关系型数据库存储商品信息,使用Redis作为缓存系统来降低数据库的压力,同时可能会用到MongoDB等NoSQL数据库存储日志或者非结构化数据。 服务治理层涉及到了服务注册与发现、负载均衡、配置管理、容错和分布式追踪等方面。在Go语言项目中,可以使用etcd进行服务发现和存储全局配置,使用Consul或Zookeeper来管理分布式锁和提供健康检查,使用Zipkin或Jaeger来实现服务调用的追踪。 对于该系统而言,文件结构的合理性直接关系到开发效率和后期的维护工作。一个典型的Go项目文件结构如下: ``` mxshop-master/ ├── cmd/ # 存放各个服务的入口程序 ├── internal/ # 存放项目私有的包 │ ├── config/ # 配置文件处理 │ ├── dao/ # 数据库访问对象层 │ ├── handler/ # 处理HTTP请求的业务逻辑 │ ├── middleware/ # 中间件 │ ├── model/ # 数据模型 │ ├── service/ # 业务逻辑层 │ └── util/ # 工具类代码 ├── pkg/ # 公共库,可以被其他项目引用 ├── scripts/ # 项目脚本,比如部署脚本 ├── third_party/ # 存放第三方代码 ├── Makefile # 项目构建脚本 ├── go.mod # Go模块依赖声明文件 └── main.go # 主程序入口文件 ``` 在这样的文件结构中,每一层都有清晰的职责划分,便于模块化开发和维护。例如,`internal` 文件夹下的`dao`层负责与数据库的交互,`handler`层负责处理HTTP请求并调用`service`层的业务逻辑。此外,`cmd`文件夹下会包含主程序的入口文件,它会编译成最终的可执行程序。 基于Go语言开发的分布式高并发Web电商系统,需要综合考虑系统的架构设计、性能优化、服务治理以及代码组织结构等多方面因素。通过合理的设计和编码实践,可以在保证系统高并发处理能力的同时,也确保了系统的稳定性和可维护性。这样一套系统为用户提供了快速、可靠和安全的电商购物体验,同时也为开发者提供了一套高效、现代化的电商解决方案。
2025-12-11 23:07:44 791KB go语言项目
1
本文详细介绍了OLED屏幕的点亮技术,包括OLED与LCD的区别、ST7315驱动芯片的硬件接线与软件控制方法。OLED通过单个像素点点亮实现屏幕显示,具有视角广、响应速度快、无需背光等优点,但也存在烧屏和成本较高的缺点。文章提供了IIC通讯的时序代码、ST7315的初始化流程、清屏功能以及如何在任意坐标点亮像素点的具体实现方法。通过开辟缓冲区并一次性写入屏幕数据,实现了在OLED屏幕上任意位置显示图形和文字的功能。最后,文章展示了如何在主程序中调用相关函数实现屏幕显示。 OLED(有机发光二极管)屏幕是一种显示技术,其工作原理与传统LCD(液晶显示)屏幕有显著不同。OLED屏幕不需要背光源,每个像素点都是自发光的,这使得OLED屏幕能够提供更广泛的视角、更快的响应时间和更高的对比度。OLED屏幕显示技术的一个重要特点是在显示黑色时可以完全关闭像素,这样就可以实现真正的黑色和更高的对比度。 OLED屏幕的点亮技术涉及硬件接线与软件控制方法。ST7315是一款常用的OLED驱动芯片,它通过IIC(即I2C)通信协议与主控制器进行数据交换。ST7315驱动芯片的硬件接线包括电源、地线以及IIC通信的SCL(时钟线)和SDA(数据线)。通过IIC通讯,主控制器可以发送指令给ST7315来控制OLED屏幕的显示内容。 软件控制方面,主要包括初始化ST7315驱动芯片、设置屏幕参数、清屏、以及控制像素点的点亮。初始化过程中,控制器会设置显示参数、清空显示缓冲区、初始化IIC通信接口。清屏功能是为了清除屏幕上的旧数据,确保新显示的内容不会与旧内容重叠。控制像素点点亮的核心在于发送正确的数据包到ST7315,包括像素坐标和颜色信息。ST7315驱动芯片在接收到这些信息后,会根据指令点亮对应的像素点,从而在屏幕上显示图像或文字。 为了在OLED屏幕上任意位置显示图形和文字,程序需要开辟一个缓冲区,将要显示的图形数据写入这个缓冲区。然后,一次性将缓冲区内的数据发送给ST7315驱动芯片,这样可以一次性更新整个屏幕,提高显示效率。在主程序中,开发者可以调用这些封装好的函数来实现屏幕的显示效果,例如在屏幕上显示系统信息、状态指示、图像或动画等。 ST7315驱动芯片还具有多种显示模式和功能,例如可以调整对比度、控制显示方向和亮度等。这些高级功能都可以通过发送特定的命令序列来实现。 烧屏问题是指长时间显示静态图像导致的像素退化现象,这是OLED屏幕常见的缺陷。由于OLED屏幕中每个像素点都是独立发光的,长时间显示静态图像会使这些像素点的材料过度消耗,导致屏幕留下不可逆转的残影。因此,在开发OLED屏幕显示应用时,需要注意减少静态图像的显示时间,或者在可能的情况下使用动态显示效果来避免烧屏。 在实际应用中,OLED屏幕的成本相对较高,这限制了它在某些价格敏感市场上的普及。然而,随着技术的进步和规模化生产,OLED屏幕的成本正在逐渐下降,预计未来会有更多普及性的产品采用这项技术。 另外,相较于LCD屏幕,OLED屏幕可以做得更薄,加上它的快速响应时间和宽广视角,使其成为智能手机、智能手表、电视等高端显示设备的首选。随着物联网和可穿戴设备的兴起,OLED屏幕因其低功耗和灵活的形状设计,也逐渐在这些新兴领域获得应用。 OLED屏幕的点亮技术以其特有的显示性能优势,已经成为现代显示技术中的重要组成部分。通过上述文章内容的详细描述,我们可以看到,OLED屏幕点亮技术的实现涉及到了复杂的硬件操作和精细的软件编程,这些都需要开发者具备相应的电子和计算机编程知识。随着技术的不断发展和成本的降低,OLED屏幕将会被应用到越来越多的领域,为用户带来更加丰富多彩的视觉体验。
2025-12-11 21:17:40 10KB 软件开发 源码
1
标题中的“matlab开发-负载和fd为零的单相安装器”指的是使用MATLAB进行的一个工程项目的开发,该项目专注于单相整流器的建模和仿真。在电力电子领域,单相整流器是将交流电转换为直流电的基本设备,广泛应用于各种家用电器和工业设备中。"负载和fd为零"可能指的是在特定条件下,如无负载运行(即负载电阻R=0)或傅里叶导数(fd)为零的情况下,研究整流器的性能。 描述中的“该仿真模型对单相整流器进行了循环分析,负载中含有RLE负载。”表明此MATLAB模型不仅考虑了基本的纯电阻负载,还引入了RL(电阻电感)负载。RL负载是由电阻和电感组成的电路,电感在电路中产生感抗,这会使得电流不能立即响应电压的变化,导致电流波形的相位滞后于电压波形。循环分析通常是指在特定时间间隔内重复执行的仿真过程,以研究系统动态行为,比如电流和电压的变化规律。 MATLAB中的Simulink工具箱是进行这种电力系统仿真的常用平台。SPI.mdl文件很可能是这个仿真模型的主模型文件,其中包含了整个系统的结构和参数设定。Simulink模型通常由不同的模块组成,如电压源、电流源、电阻、电感、二极管等,这些模块通过连接线组合起来,模拟实际电路的行为。 license.txt文件则通常包含软件许可协议的信息,它规定了用户可以如何使用、复制、分发和修改该MATLAB模型。在使用该模型前,用户必须遵守这些条款,以确保合法性和合规性。 通过这个项目,开发者可能探讨了单相整流器在不同负载条件下的效率、纹波电压、功率因数校正等问题。同时,对于RL负载的考虑,可能涉及到瞬态响应、谐波分析等方面的研究。在MATLAB环境中,可以方便地进行参数调整,观察系统性能变化,并通过图形化界面直观地查看仿真结果。这对于教学、科研以及实际应用的电路设计都有重要的参考价值。
2025-12-11 15:43:43 9KB
1
本文详细介绍了SC8F073单片机的串口收发实现方法,包括完整的代码示例和关键参数设置说明。代码部分涵盖了系统初始化、串口初始化、发送和接收字节的函数实现,以及中断服务程序。此外,文章还解释了SPBRG的设置方法,以及TXSTA和RCSTA寄存器的关键位配置,帮助开发者理解如何配置串口通信参数。通过本文,读者可以快速掌握SC8F073的串口通信实现技巧,适用于嵌入式开发中的串口通信需求。 SC8F073是微芯科技公司生产的一款8位高性能单片机,广泛应用于嵌入式系统开发。本文深入讲解了如何在SC8F073单片机上实现串口通信的基本原理和具体实现步骤。文中详细叙述了系统初始化的必要性以及如何进行初始化操作,这是确保单片机正常运行的基础。 接下来,文章重点阐述了串口初始化的过程,包括设置波特率、串口模式、数据位、停止位和奇偶校验等参数,这些都是进行串口通信前必须配置的选项。在串口初始化之后,文章提供了发送和接收数据的函数实现,这包括了发送单个字节数据和接收单个字节数据的具体方法。这些函数的实现,使得开发者能够根据具体的应用需求编写相应的数据传输代码。 中断服务程序在串口通信中扮演着重要的角色。本文也详细介绍了如何编写中断服务程序,以应对数据接收和发送事件。当中断触发时,能够自动处理相应的数据传输任务,保证通信的高效性和实时性。 文章还对SPBRG的设置方法进行了详尽的解释。SPBRG是SC8F073单片机中用于设置波特率的寄存器,正确设置这个寄存器的值对于实现准确的串口通信至关重要。此外,TXSTA和RCSTA是与串口发送和接收状态相关的两个寄存器,本文对这些寄存器的关键位进行了详细配置说明,帮助开发者理解这些配置位如何影响串口的发送和接收操作。 通过本文的介绍,开发者可以学会如何为SC8F073单片机配置串口通信,并通过实际的代码示例掌握其使用方法。这些知识不仅适用于SC8F073单片机,对于其他具有相似串口通信功能的微控制器同样适用。掌握串口通信对于嵌入式开发人员来说是基础且必备的技能,可以在多种应用场合中实现数据的可靠传输。 文章内容不仅涵盖了理论知识,还结合实际代码,使得理论与实践相结合,为读者提供了一个完整的学习过程。无论读者是初学者还是有经验的开发者,通过本文的学习都能够更加深入地理解和掌握SC8F073单片机串口通信的实现技巧。
2025-12-11 15:21:30 6KB 软件开发 源码
1
执行Van der Waerden版本的非参数测试(正常分数测试) 以荷兰数学家 Bartel Leendert van der Waerden 命名,Van der Waerden 检验是 k 个人口分布函数相等的统计检验。 Van Der Waerden 检验将等级转换为标准正态分布的分位数。 这些被称为正常分数,测试是根据这些正常分数计算的。 标准方差分析假设误差(即残差)是正态分布的。 如果此正态性假设无效,另一种方法是使用非参数检验。 Van Der Waerden 检验的优势在于它在实际上满足正态性假设时提供了标准 ANOVA 分析的高效率,但在不满足正态性假设时也提供了非参数检验的稳健性。 此函数计算 5 个测试的正常分数: Levene、Mann-Whitney-Wilcoxon 和 Wilcoxon 检验,当有 2 组时; Kruskal-Wallis 和 Friedm
2025-12-11 15:12:16 4KB matlab
1
本文介绍了如何在Unity3d中使用Barracuda推理库和YOLO算法实现对象检测功能。Barracuda是Unity官方推出的深度学习推理框架,支持在Unity中加载和推理训练好的深度学习模型。YOLO是一种高效的目标检测模型,通过将检测问题转化为回归问题,实现了快速且准确的检测。文章详细阐述了从模型加载、推理引擎创建到后处理的全过程,包括使用Compute Shader进行预处理和后处理的技术细节。此外,还探讨了在不同平台(如Windows和Android)上的性能差异,并提供了UI搭建和源码实现的详细说明。 Unity3d作为一款强大的游戏引擎,不仅在游戏开发领域有着广泛应用,同时也在交互式内容开发、虚拟现实等领域扮演着重要角色。Barracuda推理库作为Unity官方推出的一个深度学习推理框架,为开发者们提供了一个将训练好的深度学习模型集成到Unity3d项目中的途径,从而极大地扩展了Unity3d的应用场景和开发者的创造力。YOLO(You Only Look Once)算法是一种流行的实时目标检测系统,以其检测速度快和准确性高而著称,在多个领域中得到了广泛的应用。 在Unity3d中应用YOLO和Barracuda进行对象检测,需要经历一系列的技术步骤,包括模型的加载、推理引擎的创建、以及对推理结果的后处理。整个过程不仅仅局限于加载模型然后调用API那么简单,它还需要开发者具备一定的技术深度,比如理解深度学习模型的内部结构,以及掌握在Unity中进行数据预处理和后处理的相关技术。Compute Shader作为Unity中的一个强大的并行计算框架,使得开发者能够在GPU上进行高效的数据处理,这对于提升对象检测的性能至关重要。 文章对于在不同平台(如Windows和Android)上进行对象检测的性能差异进行了探讨,提供了详细的技术分析和对比。开发者可以根据自己的需求和平台特性来选择最适合的方案。此外,文章还提供了UI搭建的详细说明和源码实现的说明,这不仅为初学者提供了快速入门的途径,同时也为有经验的开发者提供了更深入的研究和实践材料。 在实际开发过程中,使用这样的技术组合可以为用户提供沉浸式的交互体验,尤其在移动设备、游戏和虚拟现实等资源受限的环境中,快速且准确的对象检测能力显得尤为重要。开发者可以利用该技术结合具体的项目需求,创建出更加智能和互动性强的应用程序。 通过对Unity3d、Barracuda和YOLO算法的结合使用,开发者不仅可以提高项目中对象检测功能的实现效率,还能实现更加精细化和多样化的功能开发。该技术组合提供了一个框架,使得开发者能够在保证性能的同时,拓展应用的智能化程度。 当然,对于这样的技术应用而言,不断学习和适应新技术的发展是必不可少的。开发社区和技术文档提供了大量的学习资源,使开发者能够跟上最新的技术趋势。对于有兴趣尝试或者已经在进行相关开发的开发者来说,掌握这些技术和工具,将极大地提高项目的开发效率和产品质量。
2025-12-11 14:19:42 5KB 软件开发 源码
1
本文详细介绍了Shell脚本的基础概念、核心语法及实战应用。首先解释了Shell脚本的定义及其自动化任务的优势,并列举了常见的Shell类型如bash、sh等。接着,通过编写第一个Shell脚本的示例,展示了脚本的创建、编写、权限设置和运行过程。文章深入讲解了Shell脚本的核心语法,包括Shebang行、注释、变量与数据类型、条件判断、循环结构、函数定义与调用、参数处理、错误处理等。此外,还介绍了高级技巧如数组操作、关联数组和子Shell的使用。最后,通过多个实战示例(如备份日志文件、监控CPU使用率、批量重命名文件等)展示了Shell脚本的实际应用。文章内容全面,适合初学者和有一定经验的开发者参考学习。 Shell脚本是一种在Unix/Linux操作系统下运行的脚本语言,它类似于DOS下的批处理文件,可将一系列命令组合在一起,并且可以创建一个可执行程序。脚本通常在命令行界面中使用,也可以在系统启动时运行,以完成一系列启动任务。Shell脚本的强大之处在于能够处理文本数据,执行复杂的逻辑判断,以及自动化管理任务。 基础概念部分首先阐述了Shell脚本的定义,即通过一系列命令组成的文本文件,当运行时这些命令就像手动输入到命令行中一样被执行。脚本的主要优势在于能够自动化重复性任务,减少手动操作的错误,并且提高工作效率。在常见的Shell类型中,bash是目前使用最广泛的一种,sh则是许多Unix系统上最基础的Shell。 在实战应用方面,文章通过实例演示了从编写第一个Shell脚本开始的所有必要步骤,包括脚本的创建、编写、权限设置以及运行。文章详细讲解了脚本的核心语法,例如Shebang行定义了脚本执行所使用的解释器,注释用于给脚本添加说明和解释,使得他人能更容易理解脚本的功能。变量是脚本中用来存储信息的容器,而数据类型则定义了变量中数据的种类。条件判断和循环结构是实现脚本逻辑分支和重复执行的关键,它们能够帮助脚本根据不同的情况做出判断和循环处理数据。函数的定义与调用则可以将一些常用的命令组合在一起,简化代码并增强脚本的可读性。参数处理和错误处理则是脚本与用户交互及增强脚本健壮性的重要部分。 文章还涉及了数组操作、关联数组等高级技巧。在Unix/Linux环境中,Shell脚本不仅可以使用传统的数组,还可以操作关联数组,这类数组使用字符串作为索引,可以实现更加复杂的数据管理。子Shell的使用则允许开发者在一个脚本中创建新的Shell环境来执行特定的命令,这样可以避免对当前环境产生影响。 文章通过一系列的实战示例,向读者展示了Shell脚本的实际应用能力。例如,备份日志文件的操作可以确保数据的安全性,监控CPU使用率可以及时了解系统性能状况,批量重命名文件则能够快速整理文件系统。这些示例不仅让初学者能够理解Shell脚本的实际用途,同时也为有经验的开发者提供了参考和灵感。 Shell脚本在软件开发领域扮演着重要角色,它的便捷性使得开发者可以轻松地实现任务自动化和系统管理。对于软件包、源码、代码包的开发和维护,Shell脚本提供了一种高效的方式来执行编译、安装、测试等开发过程中的常规操作。此外,由于Shell脚本可以轻松集成到各种工具中,它也是持续集成/持续部署(CI/CD)流程中的重要组成部分。
2025-12-11 09:25:17 24KB 软件开发 源码
1