AI大模型系列之一:大模型原理科普(深度好文)

目录 认识AI大模型家族 AI是什么? 机器学习是什么? 机器学习有哪些分支? 什么是强化学习? 深度学习属于哪一类学习? 生成式AI和深度学习是什么关系? 大语言模型是什么? 所有大语言模型都是生成式AI? 大语言模型LLM (large language model)到底是个啥? 大模型LLM的“大”是什么含义? LLM核心技术到底是什么? 为什么Transformer模型能一统江湖? Transformer的自注意力机制是干什么的? Transformer背后的黑科技是什么? Transformer演变了哪些成功的模型? Transformer在CV计算机视觉上,为什么大放异彩? 天地转,光阴迫。一万年太久,只争朝夕。数字时代,要顺势而为,让我们系统性掌握AI大模型家族的技术本领,成为行业翘楚! 今天,我们突然发现,AI可以帮忙生成文字、图片、音频和视频等等内容了,而且让人难以分清背后的创作者到底是人类还是AI。这些AI生成的内容被叫做AIGC,它是AI generated content,即AI生成内容的简写。像ChatGPT生成的文章、GitHub Copilot生成的代码、Midjourney生成的图片等,都属于AIGC。而当AIGC这个词在国内火爆的同时,海外更流行的是另外一个词Generative AI,即生成式AI。从字面上来看,生成式AI,这之间的关系很好理解,生成式AI所生成的内容就是AIGC。所以,ChatGPT、GitHub Copilot、Midjourney等都属于生成式AI。由此可见,AIGC和生成式AI的概念都是很容易理解。因为AI这个词,在国内比生成式AI更加流行,很多语境下AIGC也被用于指代生成式AI。 AIGC主要有两种类型:一种是基于模板的自动化生成,另一种是基于深度学习技术的自动化生成。 首先,基于模板的自动化生成是一种较为简单的AIGC方法。其基本原理是先设计一个模板,然后填充模板中的空白部分以生成内容。这种方法的优点是生成的内容结构清晰、逻辑严谨,但缺点是生成的内容形式单一、难以与其他文章区分开来。 其次,基于深度学习技术的自动化生成则更加灵活,可以根据需求自由生成不同风格、不同主题的内容。与基于模板的自动化生成相比,基于深度学习技术的自动化生成能够更好地满足用户的需求,但也存在着一些问题,例如生成的内容质量和可信度难以保证,需要经过人工编辑和审核。 AIGC将走过三个发展阶段:第一个阶段是“助手阶段”,AIGC用来辅助人类进行内容生产;第二个阶段是“协作阶段”,AIGC以虚实并存的虚拟人形态出现,形成人机共生的局面;第三个阶段是“原创阶段”,AIGC将独立完成内容创作。 认识AI大模型家族 生成式AI、监督学习、无监督学习、强化学习、深度学习、大语言模型、Transformer等,这些算法之间又是什么关系呢? 其实,这些AI知识点,如何了解原理,可以一言以蔽之,先通过一张图,感性认识它们之间的关系。 AI是什么? 人工智能(Artificial Intelligence),英文缩写为AI。是计算机科学的一个分支学科,旨在让计算机系统去模拟人类的智能,从而解决问题和完成任务。早在1956年,AI就被确立为了一个学科领域,在此后数十年间经历过多轮低谷与繁荣。AI是新一轮科技革命和产业变革的重要驱动力量,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是智能学科重要的组成部分,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能是十分广泛的科学,包括机器人、语言识别、图像识别、自然语言处理、专家系统、机器学习,计算机视觉等。 AI发展经历了很多举足轻重的关键里程碑,例如:从1943年的神经网络诞生,到2024年的Sora风靡全球,经历了81年的心路历程。 机器学习是什么? 机器学习是AI的一个子集,它的核心在于不需要人类做显示编程,而是让计算机通过算法自行学习和改进,去识别模式,做出预测和决策。比如,如果我们通过代码告诉电脑,图片里有红色说明是玫瑰,图片里有橙色说明是向日葵,程序对花种类的判断就是通过人类直接明确编写逻辑达成的,不属于机器学习。举例:如果我的电脑,有大量玫瑰和向日葵的图片,让电脑自行识别模式,总结规律,从而能对没见过的图片进行预测和判断,这种就是机器学习。 机器学习有哪些分支? 机器学习有多个分支,包括监督学习、无监督学习、强化学习。在监督学习里,机器学习算法会接受有标签的训练数据,标签就是期望的输出值,所以每个训练数据点都既包括输入特征,也包括期望的输出值。算法的目标:是学习输入和输出之间的映射关系,从而在给定新的输入特征后,能够准确预测出相应的输出值。监督学习任务包括分类和回归,分类数据划分为不同的类别。举例:拿一堆猫和狗的照片,和照片对应的猫狗标签进行训练,然后让模型根据没见过的照片预测是猫还是狗,这就属于分类。举例:拿一些房子特征的数据,比如面积、卧室数、是否带阳台等和相应的房价作为标签进行训练。回归是让模型根据没见过的房子的特征预测房价是什么数值,这就属于回归。无监督学习,和监督学习不同,主要是学习的数据是没有标签的,所以算法的任务是自主发现数据里的规律。无监督学习任务包括聚类,就是把数据进行分组,举例:拿一堆新闻文章,让模型根据主题或内容的特征,自动把相似文章进行组织。 什么是强化学习? 强化学习,是让模型在环境里采取行动,获得结果反馈,从反馈里学习,从而能在给力情况下采取最佳行动来最大化奖励或是最小化损失。举例:和训练小狗类似,刚开始的时候,小狗会随心所欲做出很多动作,但随着和训犬师的互动,小伙会发现某些动作能够获得零食,某些动作没有流失,某些动作甚至会遭受惩罚。通过观察动作和奖惩之间的联系,小狗的行为会逐渐接近训犬师的期望。强化学习可以应用在很多任务上,举例:让模型下围棋时,获得不同行动导致的奖励或损失反馈,从而在一局游戏里优化策略,学习如何采取行动达到高分。 深度学习属于哪一类学习? 深度学习属于机器学习中的特殊类,深度学习是机器学习的一个分支,核心在于:使用人工神经网络模仿人脑处理信息的方式,通过层次化的方法提取和表示数据的特征,专注于非结构化数据处理。神经网络,是有许多基本的计算和储存单元组成,这些单元被称为神经元。这些神经元通过层层连接来处理数据,并且深度学习模型通常有很多层,因此称为深度。举例:要用计算机识别小猫的照片。在深度学习中,数据首先被传递到一个输入层,就像人类的眼睛看到图片一样。然后数据通过多个隐藏层,每一层都会对数据进行一些复杂的数学运算,来帮助计算机理解图片中的特征,例如小猫的耳朵、眼睛等等。最后计算机会输出一个答案,表明这是否是一张小猫的图片。神经网络可以用于监督学习、无监督学习、强化学习,所以深度学习不属于他们的子集。 总之,深度学习是机器学习的一个特定领域,它利用人工神经网络模型进行学习和训练。深度学习模型由多个层次(称为神经网络的层)组成,每一层都会对输入数据进行变换和表示。这些网络层通过一系列的非线性转换将输入数据映射到输出结果。深度学习模型的核心是深度神经网络(Deep Neural Network,DNN),它可以通过大量的标记数据进行训练,从而实现高度准确的预测和分类任务。 这里必须提一下,卷积神经网络(CNN)是深度学习的杰出代表作,革命性提升了AI模型在江湖上的多年霸主地位,卷积神经网络作为深度学习中的一种重要网络结构,具有自动提取特征和高效分类的能力。随着深度学习技术的发展,CNN在计算机视觉、自然语言处理、语音识别等领域取得了显著的成果。详解参见:深入浅出图解CNN-卷积神经网络-CSDN博客 生成式AI和深度学习是什么关系? 其是深度学习的一种应用,它利用神经网络来识别现有的模式和结构,学习生成新的内容,内容形式可以是文本、图片、音频。而大语言模型也叫LLM (large language model),也是深度学习的一种应用,专门用于进行自然语言处理任务。 生成式AI的原理主要基于深度学习技术和神经网络。其基本原理是,通过训练模型来学习从输入到输出的映射关系。这种映射关系通常由一组权重和偏置参数来定义,这些参数是通过优化损失函数来获得的。通过调整这些参数,模型可以逐渐改进其预测和生成结果的能力。 生成式AI的神经网络通常采用前馈神经网络(Feedforward Neural Network)或循环神经网络(Recurrent Neural Network)。在前馈神经网络中,信息从输入层逐层传递到输出层,每个神经元只与前一层的神经元相连。而在循环神经网络中,信息在同一个网络中循环传递,每个神经元可以与自身的多个输出相连。这两种网络结构都可以用于生成式AI,但它们的应用场景有所不同。 生成式AI的优点在于,它可以高效地生成大量有意义的内容,比如文章、图像、音频等。此外,它还可以根据用户的个性化需求,生成符合用户兴趣和需求的内容。但是,生成式AI也存在一些缺点,比如它可能会出现语法错误、语义错误等问题,而且它生成的内容可能缺乏创新性和独特性。 2024年2月16日,OpenAI发布了“文生视频”(text-to-video)的大模型工具,Sora(利用自然语言描述,生成视频)。这个消息一经发出,全球社交主流媒体平台以及整个世界都再次被OpenAI震撼了。AI视频的高度一下子被Sora拉高了,要知道Runway Pika等文生视频工具,都还在突破几秒内的连贯性,而Sora已经可以直接生成长达60s的一镜到底视频,要知道目前Sora还没有正式发布,就已经能达到这个效果。 大语言模型是什么? 公式:大模型 = 海量数据 + 深度学习算法 + 超强算力

VMamba 安装教程(无需更改base环境中的cuda版本)

导航 Linux下 Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法Windows 下 Mamba 的安装参看本人之前博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)Windows 下 VMamba的安装参看本人之前博客:Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)Window 下 Vim 环境安装参考本人之前博客:Window 下 Vim 环境安装踩坑问题汇总及解决方法 目录 导航背景Linux 下正确安装命令CUDA 12.1CUDA 11.8最后一步编译不成功 报错及解决(20240714)1. 基本报错信息2. CUDA version mismatch3. fatal error: cusparse.h网传方法解决方法 4. fatal error: cublas_v2.h5. fatal error: cusolverDn.h6. fatal error: crypt.h网传方法解决方法 7. fatal error: cuda_runtime.h 报错及解决(20240715)8. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块9. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块10. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块11. g++ 版本不支持12. fatal error: cuda_bf16.h: 背景 最近有不少小伙伴在 Linux 上安装 VMamba (VMamba: Visual State Space Model)时,按照官方的安装命令会遇到各种各样的错误,部分错误可以按照 Mamba 以及 Vim 中相似的方法进行处理(参考笔者之前的博客:Mamba 环境安装踩坑问题汇总及解决方法),但是有些问题无法解决,特此汇总。注意,即使base环境中安装的 CUDA 版本过低,也不影响 Mamba,Vim 以及 VMamba 环境的正常安装。

“论大数据处理架构及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面,旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构,它是一种将批处理和流处理结合起来的大数据处理系统架构,其核心思想是将批处理作业和实时流处理作业分离,各自独立运行,资源互相隔离,解决传统批处理架构的延迟问题和流处理架构的准确性问题。 请围绕“大数据处理架构及其应用”论题,依次从以下三个方面进行论述。 1.概要叙述你参与管理和开发的软件项目以及你在其中所承担的主要工作。 2.Lambda体系结构将数据流分为三个层次:批处理层(batch layer)、加速层(speed Layer)和服务层(serving layer),请简要分析这三个层次的特性和用途。 3.具体阐述你参与管理和开发的项目是如何基于Lambda架构实现大数据处理的。 写作框架 第一章 项目摘要 2023年,我参与了某公司线上电子商务平台的研发工作,担任系统架构设计师的角色。该项目旨在构建一个能够处理和分析巨量复杂数据集的高效电子商务平台,通过引入大数据处理架构技术,实现数据的快速收集、存储、处理、分析和可视化。在我的主导下,我们采用了Lambda架构作为大数据处理的核心,该架构以其成熟稳定的特性,成功解决了传统批处理架构的延迟问题和流处理架构的准确性问题。 在项目的架构设计中,我主要负责了系统的整体架构设计以及大数据处理架构的实施。通过运用Lambda架构的批处理层、加速层和服务层,我们实现了对海量数据的实时处理和高效分析。批处理层负责处理大量历史数据,生成详尽的报告和分析;加速层则专注于实时数据流的快速处理,提供低延迟的数据视图;服务层将这两层的结果合并,提供一个全面的数据视图供用户查询。 本文将以该项目为例,详细阐述我在其中所承担的主要工作,以及Lambda架构在电子商务平台大数据处理中的应用和实践。通过这一项目的实施,我们不仅提升了平台的数据处理能力,还为用户提供了更加个性化、精准的服务体验。项目于2023年底成功上线,并获得了公司内部以及客户的一致好评。 第二章 项目背景 随着互联网技术的飞速发展,电子商务行业迎来了前所未有的机遇与挑战。面对海量、多样化的用户数据,如何快速、准确地进行数据处理和分析,成为电子商务平台亟需解决的问题。传统的数据处理架构在处理大数据时往往面临延迟高、准确性不足等问题,无法满足现代电子商务平台对实时性和精确性的高要求。 Lambda架构作为一种将批处理和流处理结合起来的大数据处理系统架构,其核心思想是将批处理作业和实时流处理作业分离,各自独立运行,资源互相隔离。这种架构不仅解决了传统批处理架构的延迟问题,还通过实时流处理保证了数据的准确性。因此,Lambda架构在大数据处理领域具有显著的优势。 在某公司线上电子商务平台的研发项目中,我们正是基于Lambda架构的这些优点,选择了它作为我们大数据处理的核心架构。项目背景涵盖了电子商务行业的快速发展、大数据处理技术的迫切需求以及Lambda架构在解决这些问题上的独特优势。作为系统架构设计师,我深入参与了项目的各个阶段,从需求分析到技术方案设计,再到核心代码编写和协调测试,全程主导并推动了Lambda架构在电子商务平台中的应用。 第三章 核心技术 在本项目中,Lambda架构的核心技术主要体现在其三个层次:批处理层、加速层和服务层。每个层次都有其独特的特性和用途,共同构成了Lambda架构的强大处理能力。 批处理层是Lambda架构的基础,它负责存储和管理原始数据的不变性版本,并运行预定义的批处理作业来预计算结果。这一层次通常使用分布式文件系统(如HDFS)来存储数据,并利用大数据处理框架(如Hadoop MapReduce或Apache Spark)来进行计算。批处理作业虽然具有高延迟,但能处理非常大的数据集,并确保数据的完整性和准确性。其主要用途是周期性地处理累积的数据集,用以产生详尽的报告和分析,并支持即席查询。 加速层则专注于实时数据流的快速处理,以便系统能够提供低延迟的数据视图。这一层次通常使用流处理技术(如Apache Storm、Apache Flink或Kafka Streams)来处理即时数据流。由于处理的是增量数据流,加速层的输出可能不完整,仅代表自上一次批处理作业以来发生的数据。但其主要优势在于能够迅速响应用户需求并提供即时反馈。 服务层是Lambda架构的关键,它将批处理层预计算的结果与加速层实时计算的结果合并,以提供一个全面的数据视图。这一层次需要能够快速更新和查询,通常使用NoSQL数据库(如Apache HBase或Cassandra)来支持这种需求。服务层的主要用途是整合批处理层和加速层的数据,形成统一的数据视图供用户查询,并支持定制化的数据展示和多样化的数据处理需求。 通过这三个层次的协同工作,Lambda架构实现了对大数据的高效处理和分析,为电子商务平台提供了强大的数据支持。 第四章 平台应用 在我参与的某公司线上电子商务平台项目中,Lambda架构的应用贯穿了整个数据处理流程。从数据的收集、存储到处理、分析和可视化,每一环节都充分体现了Lambda架构的优势。 在数据收集阶段,我们利用分布式文件系统(如HDFS)来存储原始数据,确保数据的不变性。同时,通过流处理技术(如Apache Kafka)实时捕获和传输数据流,为加速层提供实时数据源。 在数据处理阶段,批处理层负责周期性地运行预定义的批处理作业,对累积的数据集进行深度分析和处理。这些作业使用大数据处理框架(如Apache Spark)进行分布式计算,确保数据的完整性和准确性。同时,加速层通过流处理技术(如Apache Flink)对实时数据流进行快速处理,提供低延迟的数据视图。 在数据分析和可视化阶段,服务层将批处理层和加速层的结果合并,形成一个全面的数据视图。我们使用NoSQL数据库(如Apache HBase)来存储和查询这些数据,并通过定制化的数据展示方式(如仪表盘、报表等)为用户提供直观的数据分析结果。 通过Lambda架构在电子商务平台中的应用,我们不仅实现了对海量数据的快速处理和高效分析,还为用户提供了更加个性化、精准的服务体验。例如,基于实时数据分析的用户行为推荐系统、基于历史数据的销售趋势预测等,都极大地提升了平台的竞争力和用户满意度。 第五章 结论与反思 通过本次项目的实践,我深刻体会到了Lambda架构在大数据处理领域的重要性和实用性。其将批处理和流处理结合起来的设计理念,不仅解决了传统数据处理架构的延迟和准确性问题,还为电子商务平台提供了强大的数据支持。然而,在项目的实施过程中,我们也遇到了一些问题和挑战。 首先,Lambda架构的复杂性和高成本是我们在项目初期面临的一大挑战。为了克服这个问题,我们进行了充分的技术调研和方案论证,最终选择了适合项目需求的技术栈和工具集。 其次,数据的准确性和一致性也是我们在数据处理过程中需要重点关注的问题。为了确保数据的准确性,我们在数据收集、存储和处理阶段都进行了严格的数据校验和质量控制。同时,通过引入分布式事务和一致性协议等技术手段,保证了数据的一致性。 最后,Lambda架构的运维和管理也是一项艰巨的任务。为了降低运维成本和提高管理效率,我们建立了完善的监控和报警机制,并对系统进行了定期的维护和优化。 回顾整个项目,我认为Lambda架构在电子商务平台大数据处理中的应用是成功的。它不仅提升了平台的数据处理能力,还为用户提供了更加个性化、精准的服务体验。然而,我也意识到在未来的工作中,我们还需要继续深入研究和探索大数据处理技术的最新发展,以更好地应对电子商务行业不断变化的挑战和需求。 本篇完! 推荐&背诵范文 每年软考高项论文都是四选一,即从四道命题中选择一道自己最合适的,如果自己技术水平比较有限,不妨多读、多背几种类型的命题范文,万一它就碰上了呢。点击下方链接,直达命题论文。 1、全网稀缺资源!“论微服务架构及其应用”,软考高级论文,系统架构设计师论文 2、“论系统安全架构设计及其应用”,软考高级论文,系统架构设计师论文 3、全网稀缺资源!“论数据访问层设计技术及其应用”,软考高级论文,系统架构设计师论文 4、“论区块链技术及应用”,软考高级论文,系统架构设计师论文 5、“论面向方面的编程技术及其应”,软考高级论文,系统架构设计师论文 6、“论面向对象的建模及应用”,软考高级论文,系统架构设计师论文 7、甄选范文!“论SOA在企业集成架构设计中的应用”,软考高级论文,系统架构设计师论文 8、“论软件架构风格”,软考高级论文,系统架构设计师论文 9、甄选范文!“论单元测试方法及应用”,软考高级论文,系统架构设计师论文 10、“论多源数据集成及应用”,软考高级论文,系统架构设计师论文 11、“论基于构件的软件开发方法及其应用”,软考高级论文,系统架构设计师论文 12、“论企业集成平台的理解与应用”,软考高级论文,系统架构设计师论文 13、“湖仓一体架构及其应用”,软考高级论文,系统架构设计师论文 14、“论云上自动化运维及其应用”,软考高级论文,系统架构设计师论文 15、“论软件测试中缺陷管理及其应用”软考高级论文,系统架构设计师论文

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类,由 Spring 官方提供的方便操作 Redis 数据库的一个工具类,来源于 org.springframework.data.redis.core 包下。其本质属于 Spring-Data 模块下的 Spring-Data-Redis 部分,它提供了从 Spring 应用程序轻松配置和访问 Redis的功能。 Spring-Data-Redis 是通过整合Lettuce和Jedis这俩种Redis客户端产生的,对外则提供了RedisTemplate这样统一的API来供调用者访问。它既支持Luttuce的响应式编程也支持JDK中集合的实现。 二.如何使用RedisTemplate 首先要导入相关依赖 <!--Redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--连接池依赖--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.11.1</version> </dependency> 导入相关依赖之后,通过配置文件 application.yml 进行配置,由于 RedisTemplate 是整合的Lettuce和Jedis,因此在配置连接池的时候需要进行选择是使用Lettuce还是Jedis(默认是Lettuce) spring: data: redis: host: Redis所在主机地址 port: Redis对应端口号默认6379 password: 密码 lettuce: pool: max-active: 最大连接数 max-wait: 等待时长 max-idle: 最大空闲连接 min-idle: 最小空闲连接 在配置完成后,通过依赖注入就可以直接使用 @Autowired private RedisTemplate redisTemplate; @Test void testCode() { String checheCode = "

Python爬虫技术 第17节 使用BeautifulSoup

使用Python进行网页爬取是一个常见的任务,特别是当需要从网站上批量获取数据时。BeautifulSoup是一个非常流行的Python库,用于解析HTML和XML文档,非常适合用来提取网页中的信息。 下面我将通过一个简单的案例来介绍如何使用Python和BeautifulSoup来抓取网页上的数据。 安装依赖库 首先确保你安装了requests和beautifulsoup4这两个库。如果还没有安装,可以通过pip来安装: pip install requests beautifulsoup4 示例代码 假设我们想要从一个新闻网站上抓取最新的头条新闻标题。这里以一个虚构的新闻网站为例。 1. 导入必要的库 import requests from bs4 import BeautifulSoup 2. 发送HTTP请求 我们需要向目标网站发送一个GET请求,并获取响应的内容。 url = 'https://example.com/news' # 假设这是我们要爬取的新闻网站URL response = requests.get(url) html_content = response.text 3. 解析HTML文档 接下来,我们使用BeautifulSoup来解析HTML文档。 soup = BeautifulSoup(html_content, 'html.parser') 4. 提取所需的数据 假设我们想要获取所有的新闻标题,这些标题通常会被包含在一个特定的HTML标签中,比如<h2>或者<a>标签内。 titles = soup.find_all('h2', class_='news-title') # 这里的class_='news-title'是假设的类名,请根据实际情况调整 for title in titles: print(title.text.strip()) 完整示例 让我们把上述代码整合到一个完整的脚本中: import requests from bs4 import BeautifulSoup def fetch_news_titles(url): response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.

PostgreSQL入门与进阶学习,体系化的SQL知识,完成终极目标高可用与容灾,性能优化与架构设计,以及安全策略

​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 概述基础篇初级篇进阶篇结尾 概述 对于后端开发者而言,对数据库的熟悉程度不仅是岗位需求的基础,更是职业发展中不可或缺的一环,其全面性对于技术定级具有显著的推动作用。在选择学习的数据库时,建议从广泛应用的postgresql入手,因其在互联网领域占据重要地位。接下来,让我们逐步深入,从基础到进阶,系统梳理数据库技术的关键点。 基础篇 数据库安装与配置: 熟练掌握数据库的安装过程,包括依赖库的安装,确保数据库能够顺利运行。理解并配置数据库的基本参数,如服务端口、数据存放目录、配置文件位置等,为后续运维打下坚实基础。 SQL基础与数据库设计: 精通SQL语言,能够熟练创建数据库、表、用户、视图等对象,并理解用户授权机制。深入理解数据一致性原理,能够灵活运用主键、外键、CHECK约束、UNIQUE约束、NOT NULL约束、DEFAULT值等,确保数据准确性与完整性。掌握数据库表设计的核心原则,如第三范式(3NF),为应用设计高效、合理的数据库结构。 初级篇 权限管理与访问控制: 超越基础权限设置,深入理解数据库中的角色与用户管理机制,实现精细化的权限控制。学习数据库的访问控制策略,确保数据库资源的安全访问。 数据组织与物理存储: 洞悉数据库的数据组织层次,包括表空间、数据库、模式(Schema)、表等逻辑结构。了解数据的物理存储形式,掌握表与文件之间的对应关系,以及数据管理策略。 SQL进阶与性能优化: 深入剖析SQL语句的结构,掌握排序、分组、窗口函数等高级特性。精通连接、子查询、公用表表达式(CTE)等复杂SQL编写技巧,提升SQL使用能力。理解索引的工作原理,学会根据查询需求选择合适的索引类型,并避免索引失效的情况,优化查询性能。 存储过程、触发器与事务: 理解存储过程与触发器的概念与用法,但需注意其在不同数据库间的可移植性问题。深入掌握事务的隔离级别及其并发控制特点,确保数据一致性与业务连续性。 数据库配置与备份恢复: 熟悉数据库的常见配置选项,如内存缓存、存储位置等,以优化数据库性能。掌握数据库的备份与恢复策略,确保在紧急情况下能够迅速恢复数据。 进阶篇 高可用性与容灾: 设计并实施数据库的高可用方案,如主备同步、故障转移等,以减少数据丢失与业务中断。制定合理的数据备份策略,包括全量备份、增量备份及其存放策略,确保数据的安全性与可恢复性。了解并实践两地三中心等高级容灾方案,提升系统的整体可靠性。 性能调优与架构设计: 掌握SQL语句性能分析的方法,识别并解决性能瓶颈。合理配置数据库参数,优化事务处理策略,提升系统性能。利用读写分离、负载均衡、连接池等技术手段,提升数据库部署级的性能。合理使用分区表、物化视图等数据库功能,以及采用CQRS等架构模型,提升系统整体性能与可维护性。 安全策略: 实施基础安全策略,如访问控制、数据加密等,确保数据库资源的安全。根据应用需求制定更为复杂的安全策略,如基于IP、用户、库等的访问限制,以及数据加密与解密策略等。 结尾 最后,鼓励大家关注数据库领域的最新动态与技术趋势,如手写数据库内核的开源项目等,以拓宽视野、提升技术水平。 非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力! 作者邮箱:study@senllang.onaliyun.com 如有错误或者疏漏欢迎指出,互相学习。 注:未经同意,不得转载!

kuberneter管理GUI工具Lens

从github上可以知道,lens的前端是用electron做的客户端工具,打开安装路径你会发现kubectl.exe,没错,就是你经常用的kubectl命令行的客户端工具。kubectl本来就能输出json的数据类型,集成前端更方便了。看到这里你是不是发现,你上你也行?

MyCat 分片

更多内容,前往IT-BLOG 如今随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL是无法满足的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系型数据库。如果使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储。 一、简介 Mycat背后是阿里曾经开源的知名产品Cobar。Cobar的核心功能和优势是MySQL数据库分片,阿里随后开源的Cobar,并维护到2013年初。Cobar的思路和实现路径的确不错。基于Java开发的,实现了MySQL公开的二进制传输协议,巧妙地将自己伪装成一个MySQL Server,目前市面上绝大多数MySQL客户端工具和应用都能兼容。比自己实现一个新的数据库协议要明智的多,因为生态环境在哪里摆着。Mycat是基于Cobar演变而来,对Cobar的代码进行了彻底的重构,使用NIO重构了网络模块,并且优化了Buffer内核,增强了聚合,Join等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。 简单的说,MyCat就是一个新颖的数据库中间件产品,支持MySQL集群,或者mariaDB cluster(数据库管理系统集群),提供高可用的数据分片集群。你可以像使用MySQL一样使用MyCat。对于开发人员来说根本感觉不到MyCat的存在。 MyCat基本支持的所有数据库的集群,主要如下: 二、Mycat 下载及安装 前提: 安装并启动MySQL数据库,并设置远程访问:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION; 【1】MyCat官方网站:链接 【2】下载地址:链接 【3】将下载的MyCat(Mycat-server-1.4-release-20151019230038-linux.tar.gz)上传至服务器。 【4】解压(tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz)后生成MyCat目录。 【5】进入MyCat目录下的bin目录,启动MyCat: ./mycat start MyCat支持的命令{ console | start | stop | restart | status | dump(导出) } ,Mycat的默认端口号为:8066 Mycat大概的目录结构如下: |—— bin | |—— mycat MyCat启动程序 | |—— ... |—— catlet |—— conf | |—— log4j2.xml 日志的配置,可以根据自己的需要调整输出级别为 bebug | |—— rule.xml 分片规则的配置文件,分片规则的具体参数信息被单独存放为文件,也在当前目录下,对配置文件进行修改时需要重启 MyCat | |—— schema.

显示当前活动线程的数量threading.active_count()

【小白从小学Python、C、Java】 【考研初试+复试+毕业设计】 【Python基础+AI+数据分析】 显示当前活动线程的数量 threading.active_count() [太阳]选择题 根据给定的Python代码,关于threading.active_count()哪个选项是正确的? import threading import time def thread_function(): print("Thread starting\n") time.sleep(2) print("Thread finishing\n") thread = threading.Thread(target=thread_function) thread.start() print("【执行】threading.active_count()") print(f"当前的活动线程数量: {threading.active_count()}") thread.join() print("【执行】threading.active_count()") print(f"当前的活动线程数量: {threading.active_count()}") A选项:第一次执行时,输出数量为1 B选项:第二次执行时,输出数量为1 C选项:第二次执行时,输出数量为1 D选项:两次执行的输出数量差值为1 题目解析 代码示例 正确答案是:D

【PyTorch笔记】训练时显存一直增加到 out-of-memory?真相了!

最近用 Pytorch 训模型的过程中,发现总是训练几轮后,出现显存爆炸 out-of-memory 的问题,询问了 ChatGPT、查找了各种文档。。。 在此记录这次 debug 之旅,希望对有类似问题的小伙伴有一点点帮助。 问题描述: 训练过程中,网络结构做了一些调整,forward 函数增加了部分计算过程,突然发现 16G 显存不够用了。 用 nvidia-smi 观察显存变化,发现显存一直在有规律地增加,直到 out-of-memory。 解决思路: 尝试思路1: 计算 loss 的过程中是否使用了 item() 取值,比如: train_loss += loss.item() 发现我不存在这个问题,因为 loss 是最后汇总计算的。 尝试思路2: 训练主程序中添加两行下面的代码,实测发现并没有用。 torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = True 这两行代码是干啥的? 大白话:设置为 True,意味着 cuDNN 会自动寻找最适合当前配置的高效算法,来获得最佳运行效率。这两行通常一起是哦那个 所以: 如果网络的输入数据在尺度或类型上变化不大,设置 torch.backends.cudnn.benchmark = True 可以增加运行效率;如果网络的输入数据在每次迭代都变化,比如多尺度训练,会导致 cnDNN 每次都会去寻找一遍最优配置,这样反而会降低运行效率。 尝试思路3: 及时删除临时变量和清空显存的 cache,例如在每轮训练后添加: torch.cuda.empty_cache() 依旧没有解决显存持续增长的问题,而且如果频繁使用 torch.cuda.empty_cache(),会显著增加模型训练时长。 尝试思路4: 排查显存增加的代码位置,既然是增加了部分代码导致的显存增加,那么问题肯定出现在这部分代码中。 为此,可以逐段输出显存占用量,确定问题点在哪。 举个例子: print("训练前:{}".format(torch.cuda.memory_allocated(0))) train_epoch(model,data) print("训练后:{}".format(torch.cuda.memory_allocated(0))) eval(model,data) print("评估后:{}".format(torch.cuda.memory_allocated(0))) 最终方案: 最终发现的问题是:我在模型中增加了 register_buffer:

【Spring Boot】自动配置源码解析

目录 Spring-Boot-Starter一、准备配置类和 Bean 对象二、自动配置条件依赖三、Bean 的参数获取3.1 @EnableConfigurationProperties 注解3.2 @ConfigurationProperties 注解 四. Bean 的发现4.1 自己项目的 Bean 扫描4.2 jar 包的 Bean 扫描 五. Bean 的加载 自动配置总结 Spring-Boot-Starter 一、准备配置类和 Bean 对象 Spring Boot 提供了两个注解: @Configuration:Spring 提供的配置类注解,作用在类上,代表整个类是个 Spring 配置类,对照传统的 Spring XML 配置文件@Bean:作用于方法上,代表此方法的返回值(对象)将会被 Spring 容器所管理,从而完成 Bean 的自动注册。 这两个组合起来搭配可以完美的代替传统的 Spring XML 配置文件,并给 Spring Boot 的自动配置提供基本数据体。 二、自动配置条件依赖 有些情况下自动配置类并不是在任何条件下都能生效的,此时我们需要制定自动配置生效的条件,可以使用 Spring Boot 提供的注解来指定生效条件。 这些注解是 spring boot 特有的,常见的条件依赖注解有: 注解 功能说明 @ConditionalOnBean 仅在当前上下文中存在某个 bean 时,才会实例化这个 Bean@ConditionalOnClass 某个 class 位于类路径上,才会实例化这个 Bean@ConditionalOnExpression 当表达式为 true 的时候,才会实例化这个 Bean@ConditionalOnMissingBean 仅在当前上下文中不存在某个 bean 时,才会实例化这个 Bean@ConditionalOnMissingClass 某个 class 在类路径上不存在的时候,才会实例化这个 Bean@ConditionalOnNotWebApplication 不是 web 应用时才会实例化这个 Bean@AutoConfigureAfter 在某个 Bean 完成自动配置后实例化这个 Bean@AutoConfigureBefore 在某个 Bean 完成自动配置前实例化这个 Bean 三、Bean 的参数获取 举个例子,例如在 Spring Boot Web 项目中,我们经常会导入 MyBatis 相关的依赖,帮助我们与数据库打交道,那么在传统的 Spring 项目中,我们一般会在 Spring 容器配置 XML 文件中去使用 标签生成相关数据源(DataSource),那么这个 DataSource 需要我们提供数据库连接参数:driver、url、username、password 这四个最基本的参数,这些数据可能放在一个叫做 db.

【萌宠案例】

文章目录 页面布局调用萌宠API接口渲染到页面中previewImage图片预览和lazy-load懒加载对回调结果严格处理then_catch_finally用法完成下拉刷新和触底加载更多pageScrollTo滚动到顶部和刷新使用uni-ui扩展组件分段器组件实现点击切换萌宠类型 页面布局 <template> <view class="container"> <view class="layout"> <view class="box" v-for="item in 5"> <view class="pic"> <image src="../../static/logo.png" mode="widthFix"></image> </view> <view class="text">@@@@</view> </view> </view> </view> </template> <script setup> </script> <style lang="scss" scoped> .container{ .layout{ padding: 50rpx; .box{ margin-bottom: 60rpx; box-shadow: 0 10rpx 40rpx rgba(0,0,0,0.08); border-radius: 15rpx; overflow: hidden; .pic{ iamge{ width: 100%; } } .text{ padding: 30rpx; } } } } </style> 效果: 调用萌宠API接口渲染到页面中 随机猫咪API接口 代码如下: <template> <view class="container"> <view class="

湖仓一体架构解析:数仓架构选择(第48天)

系列文章目录 1、Lambda 架构 2、Kappa 架构 3、混合架构 4、架构选择 5、实时数仓现状 6、湖仓一体架构 7、流批一体架构 文章目录 系列文章目录前言1、Lambda 架构2、Kappa 架构3、混合架构4、架构选择5、实时数仓现状6、湖仓一体架构7、流批一体架构 前言 本文解析了Lambda 架构,Kappa 架构,湖仓一体架构,流批一体架构,以及在大数据场景中,如何选择架构。 1、Lambda 架构 在Lambda架构中,为了计算一些实时指标,就在原来的离线数仓基础之上增加了一个实时处理的链路,并对数据源做流式改造:把消息发送到消息队列中(大数据中常用Kafka),实时计算去消费消息队列中的数据,完成实时指标计算,推送到下游的数据服务中去,由数据服务层完成离线与实时结果的合并。 Lambda架构总结 优点: Lambda架构使开发人员能够构建大规模分布式数据处理系统,它具备很好的灵活性和可扩展性。也对硬件故障和人为失误有很好的容错性 缺点: 1- Lambda架构最大的问题是需要维护两套计算链路,开发和维护成本 2- 计算资源占用增多,服务器存储大 2、Kappa 架构 Kappa 架构可以认为是 Lambda 架构的简化版(只要移除 lambda 架构中的批处理部分即可)。 Kappa架构的核心思想是通过改进流计算系统来解决数据全量处理的问题,使得实时计算和批处理过程使用同一套代码。 Kappa 架构的重新处理过程: (1)选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列,根据需求设置历史数据保存的时长,比如 Kafka,可以保存全部历史数据。 (2)当某个或某些指标有重新处理的需求时,按照新逻辑写一个新作业,然后从上游消息队列的最开始重新消费,把结果写到一个新的下游表中。 (3)当新作业赶上进度后,应用切换结果表,读取 2 中产生的新结果表。 (4)停止老的作业,删除老的结果表。 Kappa架构总结 优点: 使用一条计算链路完成离线计算和实时计算,节约成本 缺点: 1- Kappa架构最大的问题是需要重新处理历史数据,程序处理数据的吞吐量会降低 2- 数据可能丢失 3- 不适用于离线计算和实时计算代码逻辑不一致的情况。举例: 全局去重 4- 消息中间件临时存储的数据量和回溯的数据量有性能瓶颈 5- 无法复用目前已经非常成熟的基于离线计算的数据质量管理体系(数据治理) 3、混合架构 Lambda 架构与 Kappa 架构的对比: 4、架构选择 5、实时数仓现状 总结: 1- Lambda架构的最大缺点是需要维护两条链路,维护和计算成本高 2- Kappa架构最大的缺点是数据处理的吞吐量低 3- Kappa架构可以称之为真正的实时数仓,目前企业中实时数仓最常使用的计算框架Flink 6、湖仓一体架构 湖仓一体架构总结 优点: 1- 可以存储海量数据 2- 可以对中间结果进行查询 3- 可以复用离线计算中形成的数据质量管理体系(数据治理) 4- 数据可以进行update更新操作 缺点: 1- 相对Flink实时数仓来说,数据湖对数据的处理延迟相对比较高。数据的分析查询耗时基本在10秒及以上 2- 如果基于数据湖搭建Lambda架构,这也是相当于需要维护两条线路 7、流批一体架构 理念:使用同一套API、同一套开发范式来实现大数据的流式计算和批量计算,进而保证处理过程和结果数据的一致性。

ubuntu2004 android webRTC编译环境搭建

一、官网下载VMware Workstation Pro16,下载地址,安装教程 二、下载ubuntu2004镜像,下载地址 三、webrtc编译 安装depot_tools 步骤如下 wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip unzip commandlinetools-linux-6609375_latest.zip -d cmdline-tools mkdir --parents "$ANDROID_HOME/cmdline-tools/latest" sudo mv cmdline-tools/* "$ANDROID_HOME/cmdline-tools/latest/" export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH 执行gclient gclient 获取源码 mkdir webrtc_android cd webrtc_android fetch --nohooks webrtc_android 同步完成以后,自动生成文件,修改根目录下.gclient文件 solutions = [ { "name": "src", "url": "git@gitlab.xxx.webrtc.git", "deps_file": "DEPS", "managed": False, "custom_deps": {}, }, ] target_os = ["android", "unix"] gclient同步 进入src目录 gclient sync 使用GN生成项目 cd src gn gen out/release --args='target_os="android" target_cpu="arm"' 依赖安装 ./build/install-build-deps.sh ./build/install-build-deps-android.sh 编译脚本

SD-WAN 的真相以及它如何支持企业数字化转型

企业需要灵活、安全的网络解决方案,以支持随时随地工作模式和多云策略,他们正在转向软件定义广域网 (SD-WAN) 技术来实现这一目标。 其操作简单、独立于运营商的 WAN 连接和改进的安全功能可提供直接云访问,并为安全访问服务边缘 (SASE) 策略奠定基础。 这使公司能够以编程方式而不是手动方式管理其网络,从而显着提高运营效率和投资回报率 (ROI)。 更多好处包括: 优先处理重要流量和服务,大幅减少数据包丢失和延迟,确保用户享受更流畅、更快速的体验 ; 支持轻松的网络扩展以满足站点和流量水平的任何变化,促进组织的快速发展而无需进行大量规划 ; 利用多协议标签交换 (MPLS)、长期演进 (LTE)、宽带和 5G 等多种连接选项来优化 WAN 容量并减少昂贵的带宽需求,从而实现显着的节省和可观的投资回报率。 尽管如此,关于 SD-WAN 的传言仍然让人困惑,阻碍了一些企业充分发挥其潜力。 让我们来揭穿四个常见的误解: 1. 误解:SD-WAN 会导致延迟 SD-WAN 不仅不会造成延迟,而且旨在通过各种机制减少延迟。 它使用辅助传输选项、宽带以太网和 WAN 优化服务来提高 WAN 性能并减少延迟。 基于云的 SD-WAN 解决方案通过利用全球 WAN 主干网进一步减少延迟,确保高效的数据流并减少网络拥塞。 2. 误区:SD-WAN 等于 uCPE 加 SSE 认为 SD-WAN 只是来自不同供应商的通用客户端设备 (uCPE) 和安全服务边缘 (SSE) 的复杂技术组合,这种想法是错误的。 SD-WAN 提供的集成方法包括设备和安全服务以及高级网络功能,可优化整体网络性能和管理。 3. 误区:网络和安全必须分开 在 SD-WAN 解决方案中集成网络和安全可以提供一种更具凝聚力和稳健的方法来管理网络流量和威胁。 这种集成策略可在不影响网络效率的情况下增强安全性,从而展示单个 SD-WAN 解决方案中网络和安全功能之间的协调。 4. 误解:SASE 将取代 SD-WAN 这种误解忽略了 SD-WAN 是 SASE 的基础组件这一事实。

力扣刷题之3098.求出所有子序列的能量和

题干描述 给你一个长度为 n 的整数数组 nums 和一个 正 整数 k 。 一个 子序列 的 能量 定义为子序列中 任意 两个元素的差值绝对值的 最小值 。 请你返回 nums 中长度 等于 k 的 所有 子序列的 能量和 。 由于答案可能会很大,将答案对 109 + 7 取余 后返回。 示例 1: 输入:nums = [1,2,3,4], k = 3 输出:4 解释: nums 中总共有 4 个长度为 3 的子序列:[1,2,3] ,[1,3,4] ,[1,2,4] 和 [2,3,4] 。能量和为 |2 - 3| + |3 - 4| + |2 - 1| + |3 - 4| = 4 。

最全ElasticSearch启动失败问题(附解决方案)

1.内核过低 unable to install syscall filter: requires kernel 3.5+ with CONFIG SECCOM 原因:因为我们使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。不过没关系,我们禁 用这个插件即可。 解决方法: 修改elasticsearch.yml文件,在最下面添加如下配置 bootstrap.system_call_filter: false 2.文件权限不足 原因:我们用的是es用户,而不是root,所以文件权限不足 解决方法: 方案1: sudo chmod -R 777 /usr/local/elasticsearch(直接给足权限,路径替换成你自己es安装目录) 方案2: 首先用root用户登录,然后修改配置文件: vim /etc/security/limits.conf 添加下面的内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 4096 * hard nproc 4096 3.线程数不够 max number of threads [1024] for user [es] is too low, increase to at least [4096] 解决方法: vim /etc/security/limits.d/20-nproc.conf 修改下面的内容:

C# 植物大战僵尸

Winform 版本开发 高效率、流畅植物大战僵尸 git地址:冯腾飞/植物大战僵尸 

Windows下Java环境配置教程

前言 这篇博客介绍Java环境的配置,主要是下载JDK,安装JDK,以及path、JAVA_hOME、CLASSPAT的配置,还会介绍配置这些的原因。 JDK的安装 下载JDK 首先,你需要到Oracle官网下载Java Development Kit (JDK)安装包。 下载JDK的步骤如下 第1步: 进入网站 ——> 第2步: 选择你需要的JDK版本,比如我这里选择的是JDK 8u411(简称JDK 8),JDK 17。下面分别演示两个版本的下载过程。 JDK 17 JDK 8u411 注意:官网下载JDK 8u411,可能会提示你需要注册登录Oracle账号,这里注册Oracle账号比较麻烦,接下来我给大家提供一个网址,里面有免注册的共用Oracle账号。 Oracle免注册账号 安装JDK 安装JDK,点击下载好的安装包,运行setup.exe文件,按照提示一步步安装即可。 建议:安装路径不要有中文或者空格等特殊符号,否则可能会导致配置环境变量失败。 安装步骤(以JDK 17为例,安装JDK 8u411的步骤类似): (1)双击jdk-17-windows-x64.exe文件,并单击下一步 (2)修改安装路径,自定义 (3)将安装路径修改为D:\0-ProgrammingSoftware\Java\jdk-17并单击下一步 ——> 这里根据自己的实际情况修改安装路径 (4)稍后几秒,安装完成 配置环境变量 ———> JAVA_HOME、path、CLASSPAT 安装完成后,你需要配置环境变量,让系统能够识别到JDK。 打开环境变量编辑器 你可以在开始菜单中搜索环境变量或者在控制面板中搜索系统,然后点击高级系统设置->环境变量。 配置JAVA_HOME环境变量 配置原因 JAVA_HOME环境变量是JDK的安装目录,它告诉系统到哪里去找Java的运行时环境。 配置方法 首先找到我的电脑图标(就是一个电脑似的图标),然后点击鼠标右键,再点击属性,找到高级系统设置,点击环境变量。弹出下图所示的窗口。 在系统变量里新建一个JAVA_HOME,并赋值为JDK的安装目录,如下图所示: 注意:这里的路径要根据自己的实际情况修改,比如我这里安装的JDK 17的安装路径是D:\0-ProgrammingSoftware\Java\jdk-17,所以JAVA_HOME的值就是D:\0-ProgrammingSoftware\Java\jdk-17。 配置Path环境变量 配置原因 因为JDK装好后的两个重要执行文件javac.exe(代码编译文件)和java.exe(代码执行文件)存在于所装的JDK的bin目录下,而我们写的Java或者跑的别人的程序一般是放在一个新的目录,主要是方便管理,如果都放在这里,会很混乱,更何况编译还有class文件生成。 但是,当我们要运行Java程序时,我们需要编译(需要使用javac.exe)和执行(需要使用java.exe),而系统默认的是在当前程序所在的文件夹目录下去寻找这两个执行文件,而不会去其他地方找,此时我们就需要配置Path环境变量,使得每次程序运行就自动到安装JDK的bin目录下去搜索javac.exe和java.exe文件。 点击新建,找到 JDK 的安装目录中javac.exe和java.exe所在的目录,把目录复制到这里,点击确认即可,Path路径就设置完毕了。 配置方法 在下面的系统变量框中(Path变量是系统本身就有的),选中Path那一行点击编辑,出现如下界面: 由于JAVA_HOME配置的是JDK的安装目录,所以Path有另一种配置方式,配置jdk和jre的bin目录即可,如下所示: %JAVA_HOME%\bin %JAVA_HOME%\jre\bin 1.其中% %表示引用JAVA_HOME的值 2.这样的好处在于,如果Java安装目录发生变话, 需要修改JAVA_HOME的值,不用再修改Path变量的值 3.部分Windows10的系统在重启之后%JAVA_HOME%\bin配置的失效, 这里解决方法是按上面的那种方法配置全路径即可 注意:Windows 8 , 10的Path变量配置要友好一些,直接配置一条记录即可,如果是Windows7的话,需要在Path变量的值中使用 ;(英文分号)分割,然后追加Java的安装目录下的bin目录路径即可。