kafka源码阅读-ReplicaStateMachine(副本状态机)解析

概述 Kafka源码包含多个模块,每个模块负责不同的功能。以下是一些核心模块及其功能的概述: 服务端源码 :实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。 Java客户端源码 :实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。 Connect源码 :用来构建异构数据双向流式同步服务。 Stream源码 :用来实现实时流处理相关功能。 Raft源码 :实现了Raft一致性协议。 Admin模块 :Kafka的管理员模块,操作和管理其topic,partition相关,包含创建,删除topic,或者拓展分区等。 Api模块 :负责数据交互,客户端与服务端交互数据的编码与解码。 Client模块 :包含Producer读取Kafka Broker元数据信息的类,如topic和分区,以及leader。 Cluster模块 :包含Broker、Cluster、Partition、Replica等实体类。 Common模块 :包含各种异常类以及错误验证。 Consumer模块 :消费者处理模块,负责客户端消费者数据和逻辑处理。 Controller模块 :负责中央控制器的选举,分区的Leader选举,Replica的分配或重新分配,分区和副本的扩容等。 Coordinator模块 :负责管理部分consumer group和他们的offset。 Javaapi模块 :提供Java语言的Producer和Consumer的API接口。 Log模块 :负责Kafka文件存储,读写所有Topic消息数据。 Message模块 :封装多条数据组成数据集或压缩数据集。 Metrics模块 :负责内部状态监控。 Network模块 :处理客户端连接,网络事件模块。 Producer模块 :生产者细节实现,包括同步和异步消息发送。 Security模块 :负责Kafka的安全验证和管理。 Serializer模块 :序列化和反序列化消息内容。 Server模块 :涉及Leader和Offset的checkpoint,动态配置,延时创建和删除Topic,Leader选举,Admin和Replica管理等。 Tools模块 :包含多种工具,如导出consumer offset值,LogSegments信息,Topic的log位置信息,Zookeeper上的offset值等。 Utils模块 :包含各种工具类,如Json,ZkUtils,线程池工具类,KafkaScheduler公共调度器类等。 这些模块共同构成了Kafka的整体架构,使其能够提供高吞吐量、高可用性的消息队列服务。 kafka源码分支为1.0.2 分区状态机记录着当前集群所有 Partition 的状态信息以及如何对 Partition 状态转移进行相应的处理;副本状态机则是记录着当前集群所有 Replica 的状态信息以及如何对 Replica 状态转变进行相应的处理。 kafkaController初始化时,会启动replicaStateMachine和partitionStateMachine: //在 KafkaController 中 //有两个状态机:分区状态机和副本状态机; //一个管理器:Channel 管理器,负责管理所有的 Broker 通信; //相关缓存:Partition 信息、Topic 信息、broker id 信息等; //四种 leader 选举机制:分别是用 leader offline、broker 掉线、partition reassign、最优 leader 选举时触发; //启动副本状态机,初始化所有 Replica 的状态信息,如果 Replica 所在节点是 alive 的,那么状态更新为 OnlineReplica, 否则更新为 ReplicaDeletionIneligible; replicaStateMachine.

KubeSphere介绍及一键安装k8s

KubeSphere介绍 官网地址:https://kubesphere.io/zh/ KubeSphere愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度。 全栈的 Kubernetes 容器云 PaaS 解决方案,KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户(NS、sa )容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。 KubeSphere 作为企业级的全栈化容器平台,为用户提供了一个极致体验的 Web 控制台,让您能够像使用任何其他互联网产品一样,快速上手各项功能与服务。KubeSphere 目前提供了工作负载管理、微服务治理、DevOps 工程、Source to Image、多租户管理、多维度监控、日志查询与收集、告警通知、服务与网络、应用管理、基础设施管理、镜像管理、应用配置密钥管理等功能模块,并支持对接多种开源的存储与网络方案,支持高性能的商业存储与网络服务。 线上Demo体验:https://kubesphere.cloud/login/?redirect=%2Fconsole%2Fmanaged-cluster%2F 参考设置pwd:Aa123456. KubeKey一键部署K8S集群 官方文档:https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ 一台master node(初始化主节点)、两台 work node( join加入主节点) 安装docker #移除以前的docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 配置yum源 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 安装docker sudo yum install -y docker-ce docker-ce-cli containerd.

Spark实时(五):InputSource数据源案例演示

文章目录 InputSource数据源案例演示 一、​​​​​​​File Source 1、读取text文件 2、读取csv文件 3、读取json文件 二、Socket Source 三、Rate Source InputSource数据源案例演示 在Spark2.0版本之后,DataFrame和Dataset可以表示静态有边界的数据,也可以表示无边界的流式数据。在Structured Streaming中我们可以使用SparkSession针对流式数据源创建对应的Dataset或者DataFrame,并可以像处理批数据一样使用各种Operators操作处理流式数据。 Structured Streaming的数据源目前支持File Source 、Socket Source 、Rate Source、Kafka Source ,与Kafka的整合在后续整理,这里对其他三种数据源分别演示。 一、​​​​​​​​​​​​​​File Source Sturctured Streaming可以读取写入目录的文件作为数据流,文件将按照文件修改时间的顺序进行处理,文件必须原子性的存入到监控目录中,支持的格式有text、csv、json、orc、parquet。 1、读取text文件 Scala代码如下: package com.lanson.structuredStreaming.source import org.apache.spark.sql.streaming.StreamingQuery import org.apache.spark.sql.{DataFrame, Dataset, SparkSession} /** * Structured Streaming监控目录 text格式数据 */ object SSReadTextData { def main(args: Array[String]): Unit = { //1.创建对象 val spark: SparkSession = SparkSession.builder().master("local") .appName("SSReadTextData") .config("spark.sql.shuffle.partitions", 1) .getOrCreate() import spark.implicits._ spark.sparkContext.setLogLevel("Error") //2.监控目录 val ds: Dataset[String] = spark.

【人工智能】AI绘画:科技与艺术交汇的新时代

文章目录 🍊AI绘画:开启艺术创作新纪元AI绘画技术发展:算法与艺术的完美交融AI绘画的工作原理与创意生成AI绘画的应用 AI绘画工具介绍 🍊AI绘画:开启艺术创作新纪元 人工智能正以前所未有的力量重塑我们的世界,而AI绘画作为这股科技浪潮中的璀璨明星,正以其非凡的魅力吸引着无数目光。本文将引领您踏入AI绘画的奇幻之旅,揭秘其背后的技术发展、应用价值,并向您推荐几款强大的AI绘画工具,让您亲身体验这一创新科技带来的无限魅力! AI绘画技术发展:算法与艺术的完美交融 AI绘画,这一前沿的艺术创新形式,正引领我们进入一个全新的艺术纪元。它巧妙融合了机器学习、深度学习等尖端人工智能技术,让计算机能够模拟人类的绘画创作过程,生成充满艺术美感的图像作品。其核心奥秘在于,通过训练AI模型学习海量的图像数据,从中提炼出独特的艺术风格、精妙的构图规律等关键信息,最终实现自主创作,让技术与艺术在AI绘画中碰撞出璀璨的火花。 AI绘画的工作原理与创意生成 AI绘画究竟是如何工作的呢? 1. 数据训练阶段: AI模型如同一位勤奋的学者,它需要通过大量的图像数据进行训练。这些数据涵盖了各种绘画风格、色彩搭配以及构图元素,无论是古典的油画笔触,还是现代的抽象艺术,都一一被AI模型吸纳并学习。在这个过程中,AI模型逐渐掌握了艺术创作的规律和技巧,为接下来的创作之旅储备了丰富的灵感库。 2. 模型生成阶段: 当数据训练阶段告一段落,AI模型便拥有了无穷的创意源泉。它可以根据用户的简单文本描述,如“春日的乡间小路”,或者用户提供的图像参考,瞬间挥洒出全新的绘画作品。这一过程中,AI模型将所学的艺术风格和元素进行巧妙的组合和创新,每一幅作品都仿佛蕴含着AI对世界的独特理解和诠释。 3. 输出结果阶段: AI模型将精心生成的图像作品呈现给用户,但这仅仅是开始。用户如同拥有了一位私人艺术顾问,可以随心所欲地对作品进行修改和调整。无论是调整色彩饱和度,还是改变画面的构图布局,AI都能即时响应,与用户共同探索艺术的无限可能。这种互动式的体验让用户更加深入地参与到艺术创作中来,感受艺术带来的无尽魅力。 4. 持续学习与进化: AI绘画的魅力不仅在于其当前的创作能力,更在于它的持续学习与进化能力。随着用户反馈的不断积累,AI模型可以不断优化其绘画技巧和艺术理解,为用户带来更加个性化、高质量的艺术作品。可以预见,在未来的日子里,AI绘画将不断突破创作的边界,为我们带来更多前所未有的艺术惊喜。 AI绘画的应用 AI绘画在我们生活中有哪些应用呢? 1. 广告与营销:注入新活力 AI绘画为广告与营销领域带来了前所未有的创意革新。它能够生成独具匠心的广告海报和产品宣传图,为品牌营销注入新的活力。通过深度学习和大数据分析,AI能够洞察消费者喜好和市场趋势,从而创作出更加吸引人眼球的广告作品。这些作品不仅具有高度的个性化,还能在瞬间捕捉观众的注意力,实现品牌与消费者之间的深度互动。 2. 游戏与电影:提升制作效率与艺术表现力 在游戏与电影制作领域,AI绘画同样发挥着举足轻重的作用。它能够迅速生成逼真的游戏场景、角色和道具,为玩家带来更加沉浸式的游戏体验。同时,在电影制作过程中,AI绘画也能够帮助概念设计师快速绘制出令人惊叹的场景和角色设计,极大地提升了制作效率和艺术表现力。这些由AI创作的作品不仅具有高度的真实感,还能展现出独特的艺术风格,为观众带来前所未有的视觉盛宴。 3. 产品设计:助力创新与效率提升 在产品设计领域,AI绘画成为了设计师们的得力助手。它能够辅助设计师进行产品外观设计和图案创作,提供丰富的灵感和创意。通过AI的帮助,设计师们能够更加高效地完成设计任务,同时还能保证作品的创新性和独特性。这种智能化的设计方式不仅提高了设计效率,还为产品的市场竞争力和品牌形象注入了新的活力。 4. NFT:开辟新的创作和变现途径 随着NFT(非同质化代币)的兴起,AI绘画作品也找到了新的应用场景。这些作品可以作为数字艺术品进行确权和交易,为艺术家们开辟了新的创作和变现途径。通过NFT平台,艺术家们可以将自己的AI绘画作品转化为独特的数字资产,实现作品的版权保护和价值转化。这种创新的模式不仅为艺术家们带来了更多的经济收益,还推动了数字艺术品的繁荣和发展。 5. 收藏:独特的艺术风格和收藏价值 除了在应用领域的广泛探索外,AI绘画作品还因其独特的艺术风格和收藏价值而逐渐受到艺术爱好者和收藏家的关注。这些作品不仅展示了AI在艺术创作方面的无限潜力,还体现了人类与机器智能之间的紧密合作。一些具有独特风格和创意的AI绘画作品甚至成为了收藏家们争相追捧的珍品。 6. 个性化定制:满足多元化需求 AI绘画在个性化定制领域也展现出了巨大的潜力。它能够根据用户的需求生成个性化的图像作品,如肖像画、插画等。这种定制化的服务不仅满足了用户多元化的需求,还为AI绘画的应用开辟了新的市场空间。无论是个人用户还是企业客户,都可以通过AI绘画获得独特且富有创意的图像作品。 AI绘画工具介绍 Midjourney: https://www.midjourney.com/home 作为目前最受欢迎的AI绘画工具之一,Midjoumey以其强大的功能和精美的画风著称,用户可以通过简单的文字描述生成充满想象力的图像。 DALL-E 3: https://openai.com/index/dall-e-3/ DALL-E 3是OpenA开发的新一代AI绘画模型,其生成图像的质量和细节表现力令人惊叹,被誉 为AI绘画领域的里程碑。 Stable Diffusion (这是开源的,不知道有没有官网) Stable Diffusion是一个开源的AI绘画模型,用户可以根据自己的需求对模型进行训练和调整,创 作出独具个性的作品。 Leonardo.ai: https://leonardo.ai/ 一个非常不错的AI绘画平台,集成了多个主流的AI绘画模型。 国内大模型 如文心一言、豆包 :https://www.doubao.com/chat/等,可以文生图,出图效果不如专业的AI绘画平台 国内专业AI绘画平台 快影、奇域: https://www.qiyuai.net/、无界、美图秀秀、Vega等在MJ和SD的基础上定制开发,国风表现出色 随着AI技术的飞速发展,AI绘画已经从一个遥不可及的梦想转变为现实,并在多个领域展现出巨大的潜力和广泛的应用前景。从广告与营销的创意革新,到游戏与电影制作的效率提升,再到产品设计的创新助力,AI绘画正以其====实用性和艺术性并重的特点,深刻改变着我们的创意产业。同时,NFT的兴起为AI艺术作品提供了新的确权与交易方式,进一步推动了数字艺术品的繁荣。 我们见证了AI绘画工具的不断涌现与进步,从Midjourney的精美画风,到DALL-E 3的惊人细节表现力,再到Stable Diffusion的开源自由,每一款工具都在为艺术家和创作者们打开新的可能。国内市场的崛起也不容忽视,无论是大型模型如文心一言,还是专业的AI绘画平台如奇域、无界等,都在不断探索和突破,为国风文化艺术注入新的活力。

[Spring] MyBatis操作数据库(基础)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm=1001.2014.3001.5482 🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482 🧀线程与网络(96平均质量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482 🍭MySql数据库(93平均质量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482 🍬算法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12676091.html?spm=1001.2014.3001.5482 🍃 Spring(97平均质量分)https://blog.csdn.net/2301_80050796/category_12724152.html?spm=1001.2014.3001.5482 感谢点赞与关注~~~ 目录 1.什么是MyBatis2. MyBatis入门2.1 创建项目引入依赖2.2 准备数据与相关实体类2.3 配置数据库相关信息2.4 编写Mapper2.5 编写测试代码 2. MyBatis基础操作2.1 MyBatis打印日志2.2 参数传递2.3 增(insert)2.4 删(Delete)2.5 改(Update)2.6 查(select)3.6.1 起别名3.6.2 结果映射2.6.3 开启驼峰命名与蛇形命名转换(推荐做法) 3. MyBatis XML配置文件3.1 配置连接字符串和MyBatis3.2 持久层代码3.2.1 添加mapper接口3.2.2 添加UserInfoXMLMapper.xml3.2.3 单元测试 3.3 增删改查操作3.3.1 增(Insert)3.3.2 删(Delete)3.3.3 改(Update)3.3.4 查(select) 4. 其他查询操作4.1 多表查询(联合查询)4.1.1 准备数据,创建对应的实体类4.1.2 查询数据 4.2 #{} 和 ${}4.2.1 使用4.2.2 #{} 和 ${}的区别(高频面试题) 4.3 排序功能4.4 like查询 1.什么是MyBatis 在前面,我们学习过JDBC编程对数据库的操作,不过JDBC对于数据库的操作在步骤上过于麻烦,所以我们在Spring中引入了MyBatis. MyBatis是一款优秀的持久层框架,用于简化JDBC的开发. 那么持久层是什么意思呢?持久层指的就是持久化操作的层,通常指的是数据库的访问层,通常用来操作数据库. 简单来说MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库工具. 2. MyBatis入门 MyBatis操作数据库的步骤:

2024华为数通HCIP-datacom最新题库(H12-831变题更新⑦)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、如图所示的网络,相邻的路由器之间单选使用直连接口建立EBGP邻居关所,每台设备的 RouterID为10.0.XX,AS号为6500x.其中x为路由器的编号,R1和R4均有到达192.168.1.0/24的静志路由,通过import方式引入BGP,R3针对所有部送配置了"peer yyvy as-path-filter 1 import"命令,以下将一项可以使R3到达192.168.1.0/24选择AS-Path最长的路径? A、ip as-path-filter 1 permit .*ip as-path-filter 1 deny 65001$ip as-path-filter 1 deny^65005 B、ip as-path-filter 1 deny ^65002ip as-path-filter 1 deny ^65005ip as-path-filter 1 permit .* C、ip as-path-filter 1 deny 65001Sip as-path-filter 1 permit .* D、ip as-path-filter 1 deny .*6500ip as-path-filter 1 permit .* 试题答案:B 2、在某MPLS网络中,R1和R3的LSP信息如图所示,此时管理员在R1上输入命令ping a 1.1.1.1 3.3.3.3,那么以下关于该场景的描述正确的是哪一项? A、R2收到的Echo Request报文携带标签1025,R2收到的EchoReply报文不携带标签 B、R2收到的Echo Request报文携带标签1025,R2收到的Echo Reply报文携带标签1024 C、R2收到的Echo Request报文不携带标签,R2收到的EchoReply报文也不携带标签 D、R2收到的Echo Request报文不携带标签,R2收到的Echo Reply报文携带标签1024 试题答案:B

排序算法详解

​ 💎所属专栏:数据结构与算法学习 💎 欢迎大家互三:2的n次方_ 🍁1. 插入排序 🍁1.1 直接插入排序 插入排序是一种简单直观的排序算法,它的原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 以从小到大排序为例 1.从第一个元素开始,可以看作是有序的元素 2.取出下一个元素,与前面已经排好序的元素比较,如果前面的元素大于此元素,就把前面的元素往后移,继续往前找,找到小于或等于的位置进行插入,直到找到最前面 ​ public class InsertSort { public static void main(String[] args) { int[] arr = {5, 1, 2, 4, 3}; insertSort(arr); System.out.println(Arrays.toString(arr)); } public static void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int tmp = arr[i]; int j = i - 1; //比tmp大的元素往后移 for (; j >= 0 && arr[j] > tmp; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = tmp; } } } 🍁1.

决策树与随机森林:比较与应用场景分析

决策树与随机森林:比较与应用场景分析 引言 决策树和随机森林是机器学习中广泛使用的两种算法,因其简单性和强大的功能而被广泛采用。决策树是一种树形结构的决策模型,易于理解和解释。随机森林则是通过集成多棵决策树来提高预测性能的模型。在本文中,我们将深入比较决策树与随机森林,探讨它们的工作原理、优缺点、应用场景,并通过具体的代码示例展示如何在实际问题中应用这些算法。 目录 决策树概述 决策树的定义决策树的构建决策树的优缺点 随机森林概述 随机森林的定义随机森林的构建随机森林的优缺点 决策树与随机森林的比较 模型复杂度与泛化能力训练时间与预测时间可解释性与可视化 决策树与随机森林的应用场景 分类问题回归问题特征重要性评估 代码示例 决策树的实现随机森林的实现比较两种算法的性能 总结 1. 决策树概述 决策树的定义 决策树是一种基于树形结构的监督学习算法,主要用于分类和回归任务。每个内部节点表示一个特征的判断条件,每个分支代表一个判断结果,每个叶节点表示一个最终决策(分类或数值)。通过树形结构的分裂,决策树可以逐步细化样本的特征,最终达到分类或预测的目的。 决策树的构建 构建决策树的过程包括选择最佳特征进行分裂、根据特征值将数据集划分为子集、递归地对每个子集构建决策树。常用的特征选择指标包括信息增益、基尼指数和卡方统计量。 信息增益:表示特征在分类上的信息增加量,信息增益越大,特征越重要。 基尼指数:用于衡量数据集的纯度,基尼指数越小,数据集越纯。 以下是决策树构建的基本步骤: 计算所有特征的信息增益或基尼指数。选择信息增益最大或基尼指数最小的特征进行分裂。根据选定的特征值将数据集划分为子集。对每个子集递归地重复上述过程,直到满足停止条件(如树的深度达到限制或子集纯度足够高)。 决策树的优缺点 优点: 简单易懂,易于解释。适用于数值型和类别型数据。能够处理多输出问题。模型可视化,便于理解和解释。 缺点: 容易过拟合,尤其是当树的深度过大时。对噪声数据敏感,容易受到异常值的影响。决策边界呈现阶梯状,不适用于复杂边界的拟合。 2. 随机森林概述 随机森林的定义 随机森林是基于集成学习思想的算法,通过构建多棵决策树并集成它们的结果来提高预测性能。随机森林通过引入随机性来增强模型的泛化能力,减少过拟合风险。 随机森林的构建 随机森林的构建过程包括: 通过有放回抽样从训练数据集中采样生成多个子数据集。对每个子数据集构建一棵决策树,构建过程中引入随机性(如在每个分裂节点随机选择部分特征进行分裂)。将所有决策树的结果进行集成(分类问题中使用投票法,回归问题中使用平均法)。 以下是随机森林构建的基本步骤: 通过有放回抽样从原始数据集中生成多个子数据集(每个子数据集大小与原始数据集相同)。对每个子数据集构建一棵决策树,构建过程中在每个节点随机选择部分特征进行分裂。将所有决策树的结果进行集成(多数投票法或平均法)。 随机森林的优缺点 优点: 强大的泛化能力,减少过拟合风险。能够处理高维数据和大规模数据集。对噪声数据和异常值的鲁棒性较高。可以评估特征重要性。 缺点: 相对于单棵决策树,计算复杂度较高。模型解释性较差,不易于可视化。需要调整的超参数较多。 3. 决策树与随机森林的比较 模型复杂度与泛化能力 决策树模型简单,训练速度快,但容易过拟合。随机森林通过集成多棵决策树,增强了模型的泛化能力,减少了过拟合风险,但计算复杂度较高。 训练时间与预测时间 决策树的训练时间和预测时间相对较短,适合处理小规模数据集。随机森林的训练时间较长,但可以并行化处理。预测时间相对较长,但对于大多数应用场景来说是可以接受的。 可解释性与可视化 决策树的可解释性和可视化效果较好,易于理解和解释模型的决策过程。随机森林模型较为复杂,不易于解释和可视化,但可以通过特征重要性评估来理解模型。 4. 决策树与随机森林的应用场景 分类问题 决策树和随机森林都广泛应用于分类问题。决策树适用于简单的分类任务,如信用评分、客户细分等。随机森林则适用于复杂的分类任务,如图像分类、文本分类等。 回归问题 决策树和随机森林也可以用于回归问题。决策树适用于简单的回归任务,如房价预测、销售额预测等。随机森林则适用于复杂的回归任务,如股票价格预测、气象预测等。 特征重要性评估 随机森林可以通过计算每个特征在决策树分裂节点上的重要性,评估特征的重要性。这对于特征选择和数据分析具有重要意义。 5. 代码示例 在这一部分,我们将使用Python和常用的机器学习库(如Scikit-learn)来实现决策树和随机森林,并比较它们在分类和回归问题上的性能。 决策树的实现 首先,我们实现一个简单的决策树分类器。 import numpy as np import pandas as pd from sklearn.

go程序在windows服务中优雅开启和关闭

本篇主要是讲述一个go程序,如何在windows服务中优雅开启和关闭,废话不多说,开搞!!! 使用方式:go程序 + net服务启动 Ⅰ 开篇不利 Windows go进程编译后,为一个.exe文件,直接执行即可运行 net start tamper_proof_refactored 启动后,发现windows服务根本不认识这个go二进制文件,完全起不来 注意:因为普通的程序无法处理Windows服务特有的消息,普通的Go程序也无法在服务模式运行。 Ⅱ 需求拆解 现在知道一个问题了:普通的go程序启动服务后,服务会出现"无响应控制功能" 现在是想要实现什么? go程序编译的二进制文件,可以被当作windows服务,稳定在后台执行,并可优雅开启和关闭 Ⅲ 具体实现 找到一个go的官方库,用于实现windows服务注册和启动的 golang.org/x/sys/windows/svc 具体实现逻辑如下 func (m *myService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue changes <- svc.Status{State: svc.StartPending} go Star() // 启动go程序的主程序【需要有一个主入口函数】 changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} loop: for { c := <-r switch c.Cmd { case svc.

深入探索 Postman:使用 API 性能测试优化你的 Web 服务

引言 在当今快速发展的互联网时代,Web 服务的性能至关重要。API 作为服务之间的桥梁,其性能直接影响到整个应用的响应速度和用户体验。Postman,作为一个多功能的 API 开发工具,提供了强大的性能测试功能,帮助开发者评估和优化 API 的响应时间和处理能力。本文将详细介绍如何在 Postman 中使用 API 性能测试工具,以及如何通过测试结果来优化你的 Web 服务。 Postman 性能测试基础 在开始性能测试之前,首先需要了解 Postman 提供的几种测试类型: 单次请求测试:对单个 API 进行请求,获取响应时间和状态码。并发请求测试:同时发送多个请求,模拟高并发场景。持续压力测试:在一定时间内持续发送请求,评估 API 在持续负载下的表现。 准备性能测试 创建请求:首先,在 Postman 中创建一个或多个 API 请求,确保这些请求能够代表你想要测试的 API 的使用场景。 配置测试脚本:使用 Postman 的测试脚本功能,可以在请求发送前后执行自定义的 JavaScript 代码。这可以用来模拟登录、获取令牌等操作。 设置测试环境:在 Postman 中设置环境变量,以便于在不同的测试场景下快速切换配置。 执行性能测试 选择测试类型:在 Postman 的“Tests”选项卡中编写测试脚本,并在“Pre-request Script”中设置测试前的准备工作。 使用集合运行器:将相关的请求放入一个集合中,然后使用集合运行器来执行性能测试。在集合运行器中,可以设置迭代次数、并发用户数等参数。 监控测试结果:在测试执行过程中,Postman 会实时显示请求的响应时间、失败率等关键指标。 分析测试结果 查看概要统计:测试完成后,Postman 会提供一个概要统计,包括平均响应时间、最快响应时间、最慢响应时间等。 分析响应时间图表:Postman 会生成一个响应时间图表,显示测试过程中的响应时间变化趋势。 识别瓶颈:通过分析测试结果,识别出响应时间较长或失败率较高的请求,并进一步分析原因。 优化 API 性能 调整服务器配置:根据测试结果,可能需要调整服务器的硬件配置或软件设置,如增加内存、优化数据库查询等。 优化代码逻辑:审查 API 代码,优化逻辑处理,减少不必要的计算和资源消耗。 使用缓存机制:对于重复请求相同的数据,可以使用缓存来减少服务器的负载。 负载均衡:在多服务器环境下,使用负载均衡技术分散请求,提高系统的处理能力。 代码示例 以下是一个简单的 Postman 测试脚本示例,用于在发送请求前获取一个 API 令牌,并在请求头中设置该令牌。

【Python Web】Flask扩展开发指南

Flask是一个轻量级的Python Web框架,它提供了丰富的扩展库和工具,可以帮助开发者快速构建Web应用。本篇博客将介绍如何进行Flask扩展开发,包括扩展的创建、配置、使用等方面的内容。 目录 Flask扩展开发指南 一、Flask扩展简介 二、创建Flask扩展 1. 设计扩展结构 2. 编写扩展代码 a. 定义初始化函数 b. 管理配置选项 c. 使用蓝图集成路由 d. 自定义命令 3. 发布扩展 三、使用Flask扩展 1. 安装扩展 2. 导入并配置扩展 3. 初始化和整合扩展 4. 使用扩展提供的功能 5. 管理数据库迁移 6. 整合模板和静态文件 7. 测试与调试 四、了解更多 1. Flask 官方网站 2. Flask Extension Registry 3. Stack Overflow 4. Real Python 5. Planet Flask 五、总结 Flask扩展开发指南 一、Flask扩展简介 Flask扩展是一些预先编写好的代码库,它们为Flask应用提供了额外的功能和特性。通过使用Flask扩展,可以大大减少开发者的工作负担,提高开发效率。例如,可以使用Flask-SQLAlchemy扩展来实现数据库操作,使用Flask-Login扩展来实现用户认证等。 二、创建Flask扩展 要创建一个Flask扩展,首先需要了解Flask的扩展机制。Flask扩展通常由一个或多个模块组成,这些模块包含了扩展的核心功能和相关的辅助函数。在创建扩展时,需要遵循一些规范和最佳实践,以确保扩展的可维护性和易用性。 1. 设计扩展结构 一个好的扩展应该具有良好的模块化和可扩展性。通常,可以将扩展分为以下几个部分: __init__.py:初始化扩展并导出主要的功能模块。<extension_name>.py:包含扩展的核心功能和相关函数。commands.py:定义自定义的Flask命令。templates/:存放扩展使用的模板文件。static/:存放扩展使用的静态文件。tests/:存放扩展的测试代码。 2. 编写扩展代码 当涉及到编写Flask扩展代码时,开发者需要遵循一些最佳实践和准则,以确保扩展的质量和易用性。以下是详细的指南: a. 定义初始化函数 在Flask扩展中,__init__.py文件是至关重要的,它不仅是扩展的入口点,也设定了初始化的具体逻辑。在__init__.py文件中,通常需要定义一个初始化函数,这个函数将Flask应用实例作为参数,并将应用实例传递给扩展中的其他模块。这样做可以确保扩展能够访问应用的配置和状态。 例如,如果你的扩展名为MyExtension,你的__init__.py可能看起来像这样:

Vue3 + Vite 打包引入图片错误

1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入,注意src最好引用为@符引入,不然docker部署的时候可能也会显示不了 <template> <img :src="loginBg" alt=""> </template> <script lang='ts' setup> import loginBg from "@/assets/images/login-svg.png"; </script>

Nginx网站服务

Nginx网站服务 一、Nginx 服务基础关于Nginx 实验报告资源列表基础环境一、编译安装Nginx安装支持软件创建运行用户、组 二、源码编译及安装1、解包2、配置编译安装3、优化执行路径 三、Nginx 的运行控制1、检查配置文件2、启动、停止 Nginx3、添加 Nginx 系统服务 四、Nginx访问控制1、访问状态统计2、基于账号密码的访问控制3、基于客户端的访问控制 五、Nginx 虚拟主机1、基于域名的虚拟主机2、基于 IP 的虚拟主机3、基于端口的虚拟主机 一、Nginx 服务基础 关于Nginx 一款高性能、轻量级Web服务软件 稳定性高系统资源消耗低对HTTP并发连接的处理能力高 单台物理服务器可支持30 000 ~ 50 000个并发请求 实验报告 资源列表 操作系统配置主机IPCentOS7.3.16112C4Gnginx192.168.72.154 基础环境 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭内核安全机制 setenforce 0 sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config 修改主机名 hostnamectl set-hostname nginx 一、编译安装Nginx 安装支持软件 yum -y install pcre-devel zlib-devel gcc++ gcc 创建运行用户、组 useradd -M -s /sbin/nologin nginx # 不创建用户的主目录 # 指定用户的登录shell 二、源码编译及安装 1、解包 tar zxf nginx-1.

详解数据结构之二叉树(二叉链,使用递归)

详解数据结构之二叉树(二叉链,使用递归实现) 二叉链 二叉链,二叉树的链式结构,其中数据域data存放节点的值,指针域left和right分别存放左孩子节点的地址、右孩子节点的地址。 typedef int BinaryTDataType; typedef struct BinaryTree { BinaryTDataType data; struct BinaryTree* left;//指向当前节点左孩子节点的指针 struct BinaryTree* right;//指向当前节点右孩子节点的指针 }BTree; 创建二叉树 由于二叉树的创建没有过多的规则限定,我们想如何创建就如何创建,所以实现二叉树的创建函数是没有意义的,这里实现一颗二叉树。 //创建节点 BTree* BtreeCreat(BinaryTDataType x) { BTree* node = (BTree*)malloc(sizeof(BTree)); if (node == NULL) { perror("malloc"); exit(1); } node->data = x; node->left = NULL; node->right = NULL; return node; } //创建二叉树 BTree* CreatBTree() { BTree* node1 = BtreeCreat(1); BTree* node2 = BtreeCreat(2); BTree* node3 = BtreeCreat(3); BTree* node4 = BtreeCreat(4); BTree* node5 = BtreeCreat(5); node1->left = node2; node1->right = node3; node2->left = node4; node2->right = node5; return node1; } 前序遍历 前序遍历,是一种使用遍历二叉树每一个节点的方法,主要遍历方法为先遍历根节点,然后遍历左子树,最后遍历右子树,简称:根左右。

为什么有了MAC还需要IP?

目录 MAC地址(Media Access Control Address)IP地址(Internet Protocol Address)为什么需要两者? IP地址和MAC地址在网络通信中扮演着不同的角色,它们各自有独特的功能和用途。下面是它们的主要区别和为什么两者都需要的原因: 使用MAC地址通信 使用IP地址通信 定位在物理网络中 路由数据包跨网络 OSI模型第二层 OSI模型第三层 通过DHCP 由制造商分配 IP地址易伪装 MAC地址难伪造 设备移动保持IP地址 路由器使用IP地址 局域网内设备使用MAC 局域网设备 MAC Address 互联网设备 IP Address 物理层/数据链路层 网络层 局域网内设备识别 互联网连接与路由 动态IP地址分配 静态MAC地址 安全性 安全性 移动性 识别 识别 MAC地址(Media Access Control Address) 定义:MAC地址是网络设备的唯一硬件地址,通常由制造商分配,并且固化在网络接口卡(NIC)上。作用: 局域网(LAN)内设备之间的通信:MAC地址用于局域网内部的设备识别和通信。物理层和数据链路层:MAC地址工作在OSI模型的第二层,即数据链路层,它负责在物理网络中定位设备。 IP地址(Internet Protocol Address) 定义:IP地址是分配给网络中每个设备或主机的逻辑地址,用于在互联网上进行通信。作用: 网络层通信:IP地址工作在OSI模型的第三层,即网络层,它负责在不同网络之间路由数据包。互联网连接:IP地址允许设备连接到互联网,并与全球范围内的其他设备通信。 为什么需要两者? 不同的作用域:MAC地址用于局域网内部,而IP地址用于跨越不同网络,包括互联网。 不同的寻址范围:MAC地址是全球唯一的,但仅限于局域网内部;IP地址可以用于全球范围内的设备。 动态与静态:IP地址可以是动态分配的(如通过DHCP),而MAC地址是静态的,由制造商分配,不会改变。 安全性:IP地址可以更容易地被伪装或更改,而MAC地址由于是硬件地址,更难被伪造。 移动性:设备可以在不同的网络中移动,而保持相同的IP地址,但MAC地址始终保持不变。 网络设备识别:在局域网内,设备通过MAC地址进行通信,而路由器使用IP地址来决定如何将数据包发送到不同的网络。 协议栈层次:MAC地址和IP地址分别对应于OSI模型的不同层次,它们共同工作以支持复杂的网络通信。

速腾聚创激光雷达复现FAST-LIO

目录 1.软件环境 2.测试执行 3.代码学习 3.1.找主节点代码文件 3.2.整体流程结构 3.3.具体函数理解 记录复现FAST-LIO算法的过程和,代码梳理和理解 1.软件环境 Windows 10(64bits) + VMware 16 Pro + Ubuntu 20.04 + ROS Noetic FAST-LIO的简化版、注释版。感谢大佬的工作! zlwang7/S-FAST_LIO: A simplified implementation of FAST_LIO (with Chinese note) (github.com) PCL 1.10.0,Eigen 3.3.7。 Sophus按照上面代码中的readme过程安装即可,但是会遇到一些问题,一些报错可参考: VMware虚拟机走主机代理-CSDN博客 SLAM十四讲中Sophus库的make报错 lvalue required as left operand of assignment unit_complex_.real()_sophus lvalue required as left operand of assignme-CSDN博客 Sophus 编译错误_undefined reference to `sophus::so3::so3-CSDN博客 已解决:动态库加载失败:cannot open shared object file: No such file or directory-CSDN博客 以上依赖环境实测可以成功运行!

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript

2024年华为OD的D卷是2024-4-15号切换过来的,不过就目前来看,D卷题目和C卷的重合率很高,只要把C卷练好了,D卷是可以轻松过的,加油呀,同学们。 目前据考了D卷的同学反馈,基本上和C卷题目达到了99%的重合率。 2024年C、D卷真题题集题库,有2种分数的题目列表,分别是100分的列表、200分的列表 需要订阅请看链接: C、D卷100分真题集质量分:94价格:39.9元C、D卷200分真题集质量分:94价格:99.9元 从2023年11月开始,华为OD题目切换到C卷,基本上大概率会使用半年左右,要在2024年5月之前把这些题目都好好练习一下,可以得到很好的收获,基本上都是出的原题,提前恭喜大家都上岸。目前通过大大提供的真题练习,已经有上百人成功上岸了。 2024年8月之前,碰到原题的概率是98%以上。 华为OD真题:D卷真题目录[收集中,目前和C卷重复率99%] D卷100分题目列表 题号题目考点语言1按身高和体重排队排序C++、Java、C、python、JS2万能字符单词拼写哈希C++、Java、C、python、JS3寻找身高相近的小朋友排序C++、Java、C、python、JS4执行任务赚积分贪心算法C++、Java、C、python、JS5API集群负载统计哈希C++、Java、C、python、JS6传递悄悄话递归C++、Java、C、python、JS7手机App防沉迷系统逻辑C++、Java、C、python、JS8密码输入检测逻辑C++、Java、C、python、JS9小朋友来自多少小区排序、逻辑C++、Java、C、python、JS10字符串序列判定逻辑C++、Java、C、python、JS11考勤信息逻辑C++、Java、C、python、JS12游戏分组回溯、二进制C++、Java、C、python、JS13计算三叉搜索树的高度递归C++、Java、C、python、JS14智能成绩表排序C++、Java、C、python、JS16需要打开多少监控器逻辑C++、Java、C、python、JS17螺旋数字矩阵逻辑C++、Java、C、python、JS18查找众数及中位数哈希、mapC++、Java、C、python、JS19CPU算力分配逻辑C++、Java、C、python、JS20幼儿园篮球游戏双端队列C++、Java、C、python、JS21数的分解奇偶分解C++、Java、C、python、JS22灰度图恢复逻辑、二分C++、Java、C、python、JS23英文输入法哈希、正则C++、Java、C、python、JS24素数之积逻辑C++、Java、C、python、JS25查找接口成功率最优时间段贪心算法C++、Java、C、python、JS26围棋的气逻辑C++、Java、C、python、JS27找座位逻辑C++、Java、C、python、JS28找单词递归C++、Java、C、python、JS29整型数组按个位值排序排序:冒泡C++、Java、C、python、JS30找城市广度优先搜索C++、Java、C、python、JS31玩牌高手动态规划C++、Java、C、python、JS32机场航班调度程序排序C++、Java、C、python、JS33通过软盘拷贝文件动态规划C++、Java、C、python、JS34靠谱的车逻辑C++、Java、C、python、JS35剩余银饰的重量排序C++、Java、C、python、JS36最多购买宝石数目双指针C++、Java、C、python、JS37分班排序C++、Java、C、python、JS38机器人仓库搬砖逻辑C++、Java、C、python、JS39求幸存数之和逻辑C++、Java、C、python、JS40精准核酸检测哈希、广搜C++、Java、C、python、JS41分割均衡字符串贪心C++、Java、C、python、JS42分配土地逻辑C++、Java、C、python、JS43求字符串中所有整数的最小和逻辑C++、Java、C、python、JS44反射计数逻辑C++、Java、C、python、JS45执行时长逻辑C++、Java、C、python、JS46转盘寿司数组C++、Java、C、python、JS47字符串统计字符串、逻辑C++、Java、C、python、JS48最大坐标值逻辑+异常处理C++、Java、C、python、JS49攀登者1数组C++、Java、C、python、JS50小华最多能得到多少克黄金递归C++、Java、C、python、JS51小明找位置循环、二分法C++、Java、C、python、JS55开源项目热榜排序C++、Java、C、python、JS56多段线数据压缩数组、逻辑C++、Java、C、python、JS57数组去重和排序逻辑、排序C++、Java、C、python、JS58求最多可以派出多少支团队双指针C++、Java、C、python、JS59贪心歌手优先队列C++、Java、C、python、JS60内存冷热标记逻辑、排序C++、Java、C、python、JS61查找接口成功率最优时间段贪心算法C++、Java、C、python、JS62围棋的气逻辑C++、Java、C、python、JS63测试用例执行计划排序C++、Java、C、python、JS64生成哈夫曼树树、遍历C++、Java、C、python、JS65来自异国的客人逻辑C++、Java、C、python、JS66虚拟游戏理财逻辑C++、Java、C、python、JS D卷200分题目列表 题号题目考点语言1攀登者2逻辑C++、Java、C、python、JS2抢7游戏[全网最高分]动态规划、枚举C++、Java、C、python、JS3跳格子三动态规划C++、Java、C、python、JS4矩阵匹配二分法+二分答案C++、Java、C、python、JS5分披萨递归C++、Java、C、python、JS6最长子字符串的长度(二)逻辑C++、Java、C、python、JS7可以组成网络的服务器递归C++、Java、C、python、JS8找到它递归C++、Java、C、python、JS9书籍叠放动态规划C++、Java、C、python、JS10部门人力分配排序C++、Java、C、python、JS11任务处理优先队列C++、Java、C、python、JS12简易内存池逻辑C++、Java、python、JS13文本统计分析字符串操作C++、Java、C、python、JS14推荐多样性逻辑C++、Java、C、python、JS15贪吃的猴子双指针C++、Java、C、python、JS16数据最节约的备份方法排序C++、Java、C、python、JS17考古学家全排列+排序C++、Java、C、python、JS18孙悟空吃蟠桃暴力、逻辑C++、Java、C、python、JS19分积木异或操作C++、Java、C、python、JS20路口最短时间问题优先队列C++、Java、C、python、JS21员工派遣二分法C++、Java、C、python、JS22反射计数逻辑C++、Java、C、python、JS23查找一个有向网络的头节点和尾节点有向图C++、Java、C、python、JS24矩形绘制逻辑C++、Java、C、python、JS25转骰子逻辑C++、Java、C、python、JS26跳格子游戏递归C++、Java、C、python、JS27打印任务排序排序C++、Java、C、python、JS28电脑病毒感染优先队列C++、Java、C、python、JS29贪吃蛇模拟C++、Java、C、python、JS30数字排列逻辑C++、Java、C、python、JS31最长的指定瑕疵度的元音子串集合C++、Java、C、python、JS32德州扑克哈希表C++、Java、C、python、JS33求小火车最多人时所在园区站点逻辑C++、Java、C、python、JS34田忌赛马全排列C++、Java、C、python、JS35石头剪刀布游戏哈希C++、Java、C、python、JS36会议室占用时间排序+合并C++、Java、C、python、JS37伐木工动态规划C++、Java、C、python、JS38亲子游戏广度优先遍历C++、Java、C、python、JS39项目排期贪心+回溯C++、Java、C、python、JS41符号运算中缀表达式C++、Java、C、python、JS42信道分配逻辑C++、Java、C、python、JS43九宫格按键输入模拟C++、Java、C、python、JS44竖直四子棋逻辑C++、Java、C、python、JS45出错的或电路组合C++、Java、C、python、JS46火锅排序C++、Java、C、python、JS47园区参观路径动态规划C++、Java、C、python、JS48运输时间逻辑C++、Java、C、python、JS49计算堆栈中的剩余数字递归C++、Java、C、python、JS50数组连续和双指针C++、Java、C、python、JS51机器人走迷宫递归C++、Java、C、python、JS52没有回文串逻辑C++、Java、C、python、JS53结队编程循环,优化C++、Java、C、python、JS 华为OD真题:C卷真题目录 100分题目列表: 题号题目考点语言1 密码输入检测 逻辑C++、Java、C、python、JS2 找座位 逻辑C++、Java、C、python、JS3 转盘寿司 数组C++、Java、C、python、JS4 数组去重和排序 逻辑、排序C++、Java、C、python、JS5小明找位置循环、二分法C++、Java、C、python、JS6攀登者1数组C++、Java、C、python、JS7执行时长逻辑C++、Java、C、python、JS8需要打开多少监控器逻辑C++、Java、C、python、JS9最多购买宝石数目双指针C++、Java、C、python、JS10整型数组按个位值排序排序:冒泡C++、Java、C、python、JS11字符串统计字符串、逻辑C++、Java、C、python、JS12找城市广度优先搜索C++、Java、C、python、JS13剩余银饰的重量排序C++、Java、C、python、JS14找单词递归C++、Java、C、python、JS15 开源项目热榜 排序C++、Java、C、python、JS16传递悄悄话递归C++、Java、C、python、JS17分班排序C++、Java、C、python、JS18通过软盘拷贝文件动态规划C++、Java、C、python、JS19玩牌高手动态规划C++、Java、C、python、JS20英文输入法哈希、正则C++、Java、C、python、JS21计算三叉搜索树的高度递归C++、Java、C、python、JS22执行任务赚积分贪心算法C++、Java、C、python、JS23机器人仓库搬砖逻辑C++、Java、C、python、JS24靠谱的车逻辑C++、Java、C、python、JS25分割均衡字符串贪心C++、Java、C、python、JS26智能成绩表排序C++、Java、C、python、JS27万能字符单词拼写哈希C++、Java、C、python、JS28机场航班调度程序排序C++、Java、C、python、JS29游戏分组回溯、二进制C++、Java、C、python、JS30求幸存数之和逻辑C++、Java、C、python、JS31求字符串中所有整数的最小和逻辑C++、Java、C、python、JS32多段线数据压缩数组、逻辑C++、Java、C、python、JS33最大坐标值逻辑+异常处理C++、Java、C、python、JS34 小华最多能得到多少克黄金 递归C++、Java、C、python、JS35求最多可以派出多少支团队双指针C++、Java、C、python、JS36小朋友来自多少小区排序、逻辑C++、Java、C、python、JS37分配土地逻辑C++、Java、C、python、JS38精准核酸检测哈希、广搜C++、Java、C、python、JS39寻找身高相近的小朋友排序C++、Java、C、python、JS40需要打开多少监控器逻辑 C++、Java、C、python、JS 41反射计数逻辑C++、Java、C、python、JS42 贪心歌手 优先队列C++、Java、C、python、JS43 启动多任务排序 拓扑排序C++、Java、C、python、JS44 螺旋数字矩阵 逻辑C++、Java、C、python、JS45 考勤信息 逻辑C++、Java、C、python、JS46API集群负载统计哈希C++、Java、C、python、JS47 字符串变换最小字符串 逻辑C++、Java、C、python、JS48 查找众数及中位数 哈希、mapC++、Java、C、python、JS49查找接口成功率最优时间段贪心算法C++、Java、C、python、JS50虚拟游戏理财逻辑C++、Java、C、python、JS51生成哈夫曼树树、遍历C++、Java、C、python、JS52最长子字符串的长度(一)逻辑C++、Java、C、python、JS53内存冷热标记逻辑、排序C++、Java、C、python、JS54围棋的气逻辑C++、Java、C、python、JS55 整数对最小和 排序C++、Java、C、python、JS56来自异国的客人逻辑C++、Java、C、python、JS57CPU算力分配逻辑C++、Java、C、python、JS58数的分解奇偶分解C++、Java、C、python、JS59堆内存申请逻辑C++、Java、C、python、JS60测试用例执行计划排序C++、Java、C、python、JS61 密码解密 逻辑C++、Java、C、python、JS62灰度图恢复逻辑、二分C++、Java、C、python、JS63手机App防沉迷系统逻辑C++、Java、C、python、JS64幼儿园篮球游戏双端队列C++、Java、C、python、JS65找朋友逻辑C++、Java、C、python、JS66Wonderland游乐园动态规划C++、Java、C、python、JS67寻找最富裕的小家庭排序C++、Java、C、python、JS68最大N个数与最小N个数的和逻辑+排序C++、Java、C、python、JS69火星文计算哈希+栈C++、Java、python、JS70计算面积逻辑C++、Java、C、python、JS71 按身高和体重排队 排序C++、Java、C、python、JS72停车场车辆统计逻辑C++、Java、C、python、JS73素数之积逻辑C++、Java、C、python、JS74字符串序列判定逻辑C++、Java、C、python、JS75木板排序C++、Java、C、python、JS76 微服务的集成测试 递归C++、Java、C、python、JS77 最左侧冗余覆盖子串 字典、散列表C++、Java、C、python78 不爱施肥的小布 二分法C++、Java、C、python、JS79找数字哈希表C++、Java、C、python、JS 200分题目列表: 题号题目考点语言1 田忌赛马 全排列C++、Java、C、python、JS2字符串拼接递归-全排列C++、Java、C、python、JS3分积木异或操作C++、Java、C、python、JS4数据最节约的备份方法排序C++、Java、C、python、JS5孙悟空吃蟠桃暴力、逻辑C++、Java、C、python、JS6会议室占用时间排序+合并C++、Java、C、python、JS7文本统计分析字符串操作C++、Java、C、python、JS8攀登者2逻辑C++、Java、C、python、JS9考古学家全排列+排序C++、Java、C、python、JS10石头剪刀布游戏哈希C++、Java、C、python、JS11路口最短时间问题优先队列C++、Java、C、python、JS12推荐多样性 输出窗口元素逻辑C++、Java、python13 查找一个有向网络的头节点和尾节点 有向图C++、Java、C、python、JS14 亲子游戏 广度优先遍历C++、Java、C、python、JS15项目排期贪心+回溯C++、Java、C、python、JS16贪吃的猴子双指针C++、Java、C、python、JS17员工派遣二分法C++、Java、C、python、JS18最长子字符串的长度(二)逻辑C++、Java、C、python、JS19 伐木工 动态规划C++、Java、C、python、JS20寻找最优的路测线路递归+剪枝C++、Java、C、python、JS21找城市 多叉树+广搜C++、Java、C、python、JS22矩阵匹配二分法+二分答案C++、Java、C23 反射计数 逻辑C++、Java、C、python、JS24 找单词 递归C++、Java、C、python、JS25石头剪刀布游戏哈希C++、Java、C、python、JS26 符号运算

Python练手小项目

计算器 创建一个简单的计算器,能够进行加、减、乘、除四种基本运算。 # 定义加法函数 def add(x, y): return x + y # 定义减法函数 def subtract(x, y): return x - y # 定义乘法函数 def multiply(x, y): return x * y # 定义除法函数 def divide(x, y): if y == 0: return "Error! Division by zero." # 防止除以零 return x / y # 打印操作选项 print("Select operation:") print("1. Add") print("2. Subtract") print("3. Multiply") print("4. Divide") # 获取用户选择的操作 choice = input("Enter choice(1/2/3/4): ") # 获取用户输入的两个数字 num1 = float(input("