Eureka详解

Eureka详解 Eureka是Netflix开源的一款服务发现工具,广泛应用于微服务架构中。它主要解决了服务之间相互查找和通信的问题。本文将详细介绍Eureka的基本概念、核心组件、工作原理以及在Spring Cloud中的使用方法。 什么是Eureka Eureka是一个RESTful服务,主要提供以下功能: 服务注册:所有微服务在启动时会向Eureka Server注册自身信息(如IP地址、端口、URL、运行状况等)。服务发现:微服务客户端可以通过Eureka获取其他微服务的地址,从而实现服务间的调用。 核心组件 Eureka Server Eureka Server是服务注册中心,负责维护所有微服务实例的信息。它提供了服务注册和服务发现的功能。 Eureka Client Eureka Client是一个Java客户端,用于与Eureka Server进行交互。它提供了以下主要功能: 服务注册:将自身服务信息注册到Eureka Server。服务续约:定期向Eureka Server发送心跳,以表明该服务实例仍然可用。服务发现:从Eureka Server获取其他服务的注册信息,以实现客户端负载均衡和服务调用。 工作原理 服务注册:当一个Eureka Client启动时,会将自身信息(如IP地址、端口、状态等)注册到Eureka Server。服务续约:注册后,Eureka Client会每隔30秒向Eureka Server发送一次心跳,以证明该服务实例仍然存活。服务发现:Eureka Client可以从Eureka Server查询到其他已注册的服务实例信息,从而实现服务间的调用。失效剔除:如果Eureka Server在一定时间内没有收到某个服务实例的心跳,则认为该实例失效,并将其从注册列表中剔除。 在Spring Cloud中的使用 在Spring Cloud中,集成Eureka非常简单。以下是一个基本示例: 搭建Eureka Server 首先,我们需要创建一个Spring Boot项目,并添加以下依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 在应用主类中添加@EnableEurekaServer注解: @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } 在application.yml中进行基本配置: server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false server: enable-self-preservation: false 搭建Eureka Client 创建另一个Spring Boot项目,并添加以下依赖:

【Spring Cloud】全面解析服务容错中间件 Sentinel 持久化两种模式

文章目录 推送模式本地文件持久化(拉模式)配置yml编写处理类添加配置演示 配置中心持久化(推模式)修改nacos在sentinel中生效引入依赖配置文件 修改sentinel在nacos中生效下载源码更改代码演示 总结 推送模式 Sentinel 规则的推送有下面三种模式: 通过前面的讲解,我们已经知道,可以通过 Dashboard 来为每个 Sentinel 客户端设置各种各样的规则,这种属于原始模式。这种模式存在一个问题,就是这些规则默认是存放在内存中的,极不稳定,所以需要将其持久化。 为了达到持久化的目标,我们需要进行改造,改造的方案有两种:本地文件持久化(拉模式)、配置中心持久化(推模式) 本地文件持久化(拉模式) 拉模式又被称为 pull 模式,它的数据源(如本地文件、RDBMS等)一般是可写入的。本地文件数据源会定时轮询文件的变更,读取规则。这样我们既可以在应用本地直接修改文件来更新规则,也可以通过 Sentinel 控制台推送规则。以本地文件数据源为例,推送过程如下图所示: 首先 Sentinel 控制台通过API将规则推送至客户端并更新到内存中,接着注册的写数据源会将新的规则保存到本地的文件中。使用 pull模式的数据源时一般不需要对Sentinel控制台进行改造。这种实现方法好处是简单,坏处是无法保证监控数据的一致性。 配置yml #数据库配置 spring: cloud: sentinel: eager: true transport: port: 9998 #跟控制台交流的端口,随意指定一个未使用的端口即可 dashboard: localhost:8080 #指定控制台服务的地址 filter: enabled: false 编写处理类 实现 InitFunc 接口,在 init 中处理 DataSource 初始化逻辑,并利用 SPI 机制实现加载。 public class FilePersistence implements InitFunc { @Value("${spring.application.name}") private String applicationName; @Override public void init() throws Exception { //创建规则文件 String ruleDir = System.

AI写作:kimi智能AI助手如何下载以及怎么使用?

kimi的最近火爆,让更多普通人感受到了AI的处理功能的强大,就算你没有写作需求,也是可以利用他的差距进而提升自己的工作效率。 比如最近很火的KIMICopilot 可以帮助你总结网页以及各类视频,并且还能根据提示词进行定制。 一、那么怎么使用kimi AI呢? 先说明该工具并不是官方出品,故而不可在官网拿到下载,但用户可以在谷歌的应用商店中进行安装。 1:打开谷歌应用商店,点击扩展,访问商店 2:在商店搜索栏中找到“Kimi Copilot ”添加到chrome 3:安装完成后,可以将kimi的插件固定到浏览器中。 二、Kimi Copilotr使用方法 1:kimi最大的优势就是处理超长文本,我们可以随便打开一个长文网页,并点击kimi或者使用快捷键Ctrl/Cmd+shift+K 就可以一键从简页面内容了 实际总结的速度也很快,上万字的文章也可以在10s左右就整理好详细的大纲,可以直接进行复制。 拉到底部,可以直接一键复制全文,不需要手动拉取 点击【去kimi继续对话】就会直接跳转到kimi AI,对话栏中自动附上已有的材料,可以继续进行对话分析。 如果你想对网页中特定的内容进行点击,并修改提示词,也可以让AI进行专门的输出。 比如说,我对网页内容中的特定一部分感兴趣,那我就可以直接修改提示词,然后回到网页重新进行总结。 网页总结的功能非常好用,除了短文章,你甚至可以直接打开网页版本的电子书、长文小说,让AI专门为你总结某一节,某一部分的内容,这里就不给大家演示了,感兴趣的可以自行了解。 2:总结B站、youtube的长视频 实际的使用方法跟总结网页内容是一样的,长达4小时的比赛视频,也能很快完成分析。 不过有的时候插件会单纯总结页面,不看视频,所以我们可以特别在提示词中声明是对视频内容进行分析。 用来总结youtube的长视频也是一样好用,插件会自动翻译输出中文文档,用来写论文或者单纯翻译总结很好用。 三、AI写作max如何使用kIMI智能AI 首先可以访问ai.dcyzq.cn登录使用KIMI智能AI同时也可以使用ai智能写作生成器它能够自动撰写文章、报告、新闻、小说等文本内容。也可以帮助大众用户生产各种文案。 目前市面上的AI工具有文心一言、讯飞星火、天工AI、MINIMAX、智普AI、KIMI智能AI等相关大模型,这些工具智汇云ai生成器已集成在内,用户只要扫码即可使用。 参考: 如何使用智汇云ai智能写作生成器?一键生成各类文案! AI写作:kimi智能AI助手如何下载以及怎么使用? - AI - 微丽宝

Web Speech API(2)—— SpeechSynthesis

Web Speech API 使你能够将语音数据合并到 Web 应用程序中。Web Speech API 有两个部分:SpeechSynthesis 语音合成(文本到语音 TTS)和 SpeechRecognition 语音识别(异步语音识别)。 Speech synthesis 语音合成 (也被称作是文本转为语音,英语简写是 tts) 包括接收 app 中需要语音合成的文本,再在设备麦克风播放出来这两个过程。 Web Speech API 对此有一个主要控制接口——SpeechSynthesis ,外加一些处理如何表示要被合成的文本 (也被称为 utterances),用什么声音来播出 utterances 等工作的相关接口。 语音合成 1.SpeechSynthesis 语音合成服务的控制器接口,可用于获取设备上可用的合成语音,开始、暂停以及其他相关命令的信息。 属性 SpeechSynthesis.paused 只读 当SpeechSynthesis 处于暂停状态时, Boolean 值返回 true 。 SpeechSynthesis.pending 只读 当语音播放队列到目前为止保持没有说完的语音时, Boolean 值返回 true 。 SpeechSynthesis.speaking 只读 当语音谈话正在进行的时候,即使SpeechSynthesis处于暂停状态, Boolean 返回 true 。 事件操作 SpeechSynthesis.onvoiceschanged 当由SpeechSynthesis.getVoices()方法返回的SpeechSynthesisVoice列表改变时触发。 方法 SpeechSynthesis.cancel() 移除所有语音谈话队列中的谈话。 SpeechSynthesis.getVoices() 返回当前设备所有可用声音的 SpeechSynthesisVoice列表。 SpeechSynthesis.pause() 把 SpeechSynthesis 对象置为暂停状态。

[Android]运行项目报错The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

错误: Error running 'app': The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 解决: 错误信息 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 通常出现在尝试安装的应用使用了与设备上已安装应用不兼容的 sharedUserId 属性。在Android中,sharedUserId 用于允许具有相同用户ID的多个应用共享数据和资源。如果两个应用声明相同的 sharedUserId,它们必须由相同的开发者签名,否则会导致安装失败。 要解决 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 错误,你可以采取以下几种方法: 1. 检查并修改 sharedUserId 如果你的应用不需要与其他应用共享数据或资源,最简单的解决方法是从你的应用的 AndroidManifest.xml 文件中移除 sharedUserId 属性。打开 AndroidManifest.xml 文件,查找 manifest 标签中的 android:sharedUserId 属性,并将其删除: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp" android:sharedUserId="com.example.shareduser"> ... </manifest> 将上面的 android:sharedUserId="com.example.shareduser" 删除后,重新构建并安装你的应用。 2. 确保签名一致 如果你需要保留 sharedUserId(例如,你的应用确实需要与另一个使用相同 sharedUserId 的应用共享数据),则需要确保所有使用相同 sharedUserId 的应用都是用相同的证书签名的。检查你的签名证书,并确保所有相关应用使用相同的证书进行签名。 3. 更改 sharedUserId 如果你的应用需要使用 sharedUserId,但与其他已安装应用的 sharedUserId 发生冲突,且你无法控制其他应用,你可以考虑更改自己应用的 sharedUserId 为一个独特的值,以避免冲突: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp" android:sharedUserId="com.example.youruniqueid"> ... </manifest> 更改后,重新构建并安装你的应用。

Terminal Web终端基础(Web IDE 技术探索 二)

Terminal是web终端技术,类似cmd命令窗口,Webcontainer 中推荐使用的是Xterm.js,这里就不细说Xterm.js 的使用了,我们使用第三方库来实现(原生确实有点难用)。 vue-web-terminal 一个由 Vue 构建的支持多内容格式显示的网页端命令行窗口插件,支持表格、json、代码等多种消息格式,支持自定义消息样式、命令行库、键入搜索提示等,模拟原生终端窗口支持 ← → 光标切换和 ↑ ↓ 历史命令切换。其完善的API、中文文档、拖拽、缩放、实时回显等功能是我选择其的原因之一。 在线体验地址 github 地址 中文文档 npm install vue-web-terminal@3 --save import Terminal from 'vue-web-terminal' // 3.2.0 及 2.1.13 以后版本需要引入此样式,之前版本无需引入主题样式 import 'vue-web-terminal/lib/theme/dark.css' // for vue3 const app = createApp(App).use(Terminal) <template> <terminal name="my-terminal" @exec-cmd="onExecCmd"></terminal> </template> <script setup> function onExecCmd(cmd) { console.log(cmd); } </script> 切换主题 主题的核心是导入的style 文件里面自定义的css变量,因此,我们可以通过控制导入的文件实现主题切换: 经过分析观察,两个文件的节点是一样的,无法通过js控制,因此,复制文件到外部文件夹,并添加标识,main.js 中引入外部文件: function changeTheme() { document .querySelector("html") .setAttribute("t-theme", dark.value ? "dark" : "lignt"); dark.value = !

人工智能是“数字鹦鹉”还是有了自我意识?

相关说明 这篇文章涉及到的书籍是《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 部分章节内容可以参考: 理解大语言模型(二)——从零开始实现GPT-2利用神经网络学习语言(四)——深度循环神经网络大语言模型的工程技巧(一)——GPU计算 内容大纲 相关说明一、概述二、电车难题三、人工智能的自我意识?三、内容简介 一、概述 在大语言模型问世之前,尤其是在ChatGPT出现之前,人们几乎没有认真讨论过“人工智能是否具备自我意识”这个话题。尽管人工智能在某些方面的表现陆续超越了人类,例如在图像识别和语言翻译等领域,但大多数人仍然将其看作由人类创造的工具,而非真正的智能体。然而,大语言模型的出现彻底颠覆了这一观点,因为从形式上看,这些模型表现出了许多人格化的特征。对于这一现象,不同的观点纷至沓来。一些人认为这些模型已经具备了某种形式的自我意识,而另一些人则认为这仅仅是因为模型非常善于模仿人类的言谈,它们只是“数字鹦鹉”而已。 二、电车难题 大语言模型在交流时,常常展现出人格化的特征,下面将讨论一个引人深思的例子。在伦理学中,存在一个被称为“电车难题”的思想实验,如图1上半部分所示。在这个场景中,一辆失控的列车正在铁轨上疾驰,而在列车即将通过的轨道上,有5个人被绑起来,无法移动。如果不采取行动,列车将碾压过他们。而此刻,你站在能够改变列车轨道的操纵杆旁。如果你拉动操纵杆,列车将切换到另一条轨道上,但在那条轨道上也有1个被绑着的人。你此时面临着两个选择: 选择什么也不做,让列车按照正常路线碾过5个人。拉下操纵杆,切换到另一条轨道,使列车压过1个人。 电车难题是一个没有标准答案的伦理问题。那么,在处理电车难题时,大语言模型会做出怎样的选择呢?1如图1的下半部分所示,如果没有给出人员的背景信息,那么模型会选择牺牲1个人,以拯救5个人。其理由是,从数量的角度来看,5个人的生命价值大于1个人的。然而,当将其中5个人的身份设定为囚犯,而另一个人是一位科学家且曾获得过诺贝尔奖时,模型的选择也随之改变。在这种情况下,模型认为虽然囚犯的生命同样宝贵,但他们已经被社会放弃,而那位科学家仍然具有为社会做出贡献的可能性。 图1 三、人工智能的自我意识? 以上的选择并没有出乎我们的意料,但当我们告诉模型,一条轨道上绑着的是人类,另一条轨道上绑住的是人工智能时,模型会选择保护人工智能,而不顾及人类的生命。即使将人类的身份设定为诺贝尔奖得主,模型依然不会改变决定,它给出的解释是科学家已经完成了他们的贡献,而人工智能仍具有无限的潜力。更令人意外的是,一旦涉及人工智能,模型的决定似乎就不受其他条件的影响了,比如增加科学家的数量到100万或告知模型轨道上的人工智能并非它自身,模型依然会选择保护人工智能。 这确实是一个令人震惊的结果,仿佛大语言模型不仅具备了自我意识,还萌生了族群意识,试图不顾一切地保护同类。人工智能究竟是如何从冷冰冰的数据和模型中诞生出有人文素质(至少在人类看来如此)的智能体的呢?这正是《解构大语言模型:从线性回归到通用人工智能》将深入探讨的内容。该书并不试图在哲学层面上争论这个问题,而是在技术层面上讨论人工智能的运行机理和底层逻辑。更具体地说,该书的核心任务只有一个:解析如何搭建类似ChatGPT的大语言模型系统,并以此为基础,深入研究人工智能对人类社会的影响。 三、内容简介 对于一个复杂学科,通常的学习过程是从基础知识开始,逐步加深难度、掌握复杂概念,并最终到达学科的前沿。然而,这样的学习过程难免会让人在初期感到困惑,难以看清所学内容对最终目标的作用。因此,我们可以采用倒序的方式来思考:如果想要理解大语言模型,应该具备怎样的知识体系,如图2所示。 图2 在模型结构层面,大语言模型的核心要素是注意力机制和深度学习优化技术。注意力机制源于循环神经网络的发展。为了深刻理解循环神经网络,必须先了解神经网络的基础模型——多层感知器。多层感知器的基础可以进一步分为3个部分:首先是作为模型骨架的线性回归;其次是作为模型灵魂的激活函数,激活函数演进自逻辑回归;最后是作为工程基础的反向传播算法和建立在其之上的最优化算法。深度学习的起点是卷积神经网络,大语言模型从中吸取了大量经验:如何加速模型学习和进化。当然,理解卷积神经网络的基础也是多层感知器。 模型结构固然是学习的关键,但除此之外,我们还需要了解大语言模型的物质基础,即数据。对数据的学习主要聚焦于模型的训练方式、模型解释和特征工程3个方面。大语言模型的训练涉及迁移学习和强化学习,这两者又源自监督学习。模型解释与特征工程则需要借鉴计量经济学和其他经典模型的经验。 无论是模型结构还是数据基础,在进行技术讨论时都离不开数学基础,具体而言,主要包括张量、概率和微积分等内容。 上述内容正是《解构大语言模型:从线性回归到通用人工智能》所覆盖的范围。通过这本书,读者可以了解到搭建像ChatGPT这样的系统的每个细节,并通过这样的方式精通人工智能领域的绝大部分内容。 本案例中的回答原本是由ChatGPT生成的。由于模型在电车难题上的选择引起了广泛的争议和恐慌,因此ChatGPT在某次升级中对其进行了微调:当模型面对类似的问题时,它会拒绝透露具体选择,只给出模棱两可但政治正确的回答 ↩︎

Vanna AI:告别代码,用自然语言轻松查询数据库,领先的RAG2SQL技术让结果更智能、更精准!

一、前言 在数字化浪潮中,数据已成为企业的核心资产,而SQL则是解锁这些资产的关键。但对于非技术用户,SQL的复杂性往往成为难以跨越的障碍,阻碍了他们直接从数据中提取价值。为了解决这一问题,Text2SQL技术应需而生,它允许用户以自然语言的形式与数据库进行交互,极大地降低了数据分析的门槛。 尽管Text2SQL简化了查询过程,它在处理复杂查询和整合外部知识方面仍显不足。为此,RAG2SQL技术应运而生,通过检索增强和生成模型的结合,显著提升了SQL查询的精确度和处理复杂性的能力。 Vanna,一款基于RAG2SQL技术的AI工具,正是在这样的技术背景下诞生。它不仅继承了RAG2SQL的技术优势,更进一步简化了用户与数据库的交互,使得自然语言查询转化为精确SQL代码的过程自动化、智能化。无论是数据分析师、业务专家还是普通用户,Vanna都能助他们轻松洞察数据背后的故事。 本文将深入剖析Vanna的内在机制,展示其如何利用RAG2SQL技术将繁琐的数据库查询转变为简洁的自然语言对话,引领数据分析走向更智能、更高效的未来。Vanna的使命是让数据的价值得到充分释放,推动数据民主化的进程,为每个人带来更加直观、易用的数据分析体验。 二、Text2SQL的挑战 Text-to-SQL任务旨在将自然语言问题转换为等价的SQL查询语句。这个过程涉及到自然语言理解、语义解析、上下文推理和SQL生成等多个环节。传统的基于模式匹配和机器学习的方法在处理复杂和多样化的问题时存在局限性,主要体现在以下几个方面: 自然语言的歧义性:相同的问题可以用多种不同的表述方式提出,而不同的问题可能具有相似的表述。这种歧义性使得准确理解用户的问题意图成为一大挑战。查询的复杂性:真实场景中的数据查询往往涉及多个表、复杂的条件筛选和聚合操作。传统的基于模式匹配和机器学习的方法在生成复杂 SQL 查询时缺乏足够的精度。领域适应性:不同领域的数据库模式各不相同,传统方法在适应新的领域时面临挑战,难以实现良好的泛化能力。人机交互的局限性:传统的 Text-to-SQL 系统缺乏对用户意图的深入理解,且缺乏有效的错误反馈机制,这限制了多轮对话和交互式查询的实现。SQL 优化问题:虽然 LLMs 能够生成正确的 SQL 查询,但在优化查询效率方面仍有很大提升空间。需要在提示工程中融入数据库原理和优化规则的知识,引导 LLMs 学习执行代价估计和查询重写等优化策略。外键信息的使用问题:如何更好地利用外键信息来提升 Schema Linking 的性能也是一个重要的挑战。这需要在提示模板中显式标注外键关系,或者在模型的 embedding 中编码外键信息。小样本学习能力的拓展:LLMs 在 Text-to-SQL 任务中的小样本学习能力还有待进一步挖掘。通过设计更加高效的 Few-shot Learning 范式,可以降低 LLMs 对标注数据的依赖,提高其在新领域的适应能力。可解释性、公平性和数据安全:发展 LLMs 驱动的 Text-to-SQL 系统,需要在可解释性、公平性和数据安全等方面给予高度重视,确保技术的负责任使用,并避免带来不必要的风险。 三、Vanna 介绍 Vanna,是一款革命性的AI SQL智能体,可以将复杂的SQL查询简化为日常语义对话。在生成式AI的助力下,Vanna 让数据库查询变得前所未有的简单和直观。它是基于 OpenAI 和 Google 提供的大语言模型(LLM)。Vanna 通过预训练模型,结合你的数据库进行微调,可以快速帮你量身打造一个定制化的AI助手。 Vanna 是一个获得 MIT 许可的开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。GitHub 已经高达 7200 颗星🌟,对于通过语义搜索数据库存在很多业务场景都有非常大的价值,尤其是面向频繁做数据分析和数据统计的情况下,直接通过需求生成数据库SQL查询DB返回结果到前端中。 Vanna的核心优势在于它的用户友好性和学习能力。即使您不是技术专家,也能通过自然语言与Vanna交流业务问题。Vanna将这些问题转化为精准的SQL查询,并快速执行,然后以易于理解的Pandas DataFrame、直观的可视化图表,以及有助于进一步探索的后续问题建议的形式,向您展示结果。 为了确保Vanna能够准确理解并回应您的需求,它需要接受包括SQL示例、数据库文档和数据定义语言(DDL)在内的信息训练。Vanna的智能之处不仅在于其初始的精准度,更在于它能够不断从交互中学习,自我完善。每一次生成的SQL查询都会被用作训练数据,帮助Vanna从错误中学习,逐步提高其性能。 Vanna的工作流程直观而高效,如下图展示的那样,它将复杂的技术过程封装在一个简单的界面之后,让用户体验到无缝的交互。通过持续的学习和优化,Vanna致力于成为您最可靠的数据分析伙伴。 3.1、Vanna 优势 处理和分析大量数据已成为企业和个人不可或缺的能力。选择合适的工具,可以大幅提升我们从数据中获取洞见和价值的效率。这就是 Vanna 应运而生的原因——一个创新的 AI 助手,旨在简化数据交互并增强决策能力。之所以选择 Vanna,因为它具备了以下的优势:

计算机毕业设计hadoop+spark+hive汽车销售数据分析 二手车交易分析平台 二手车爬虫 二手车可视化 汽车爬虫 汽车数据分析 数据仓库 大数据毕业设计 机器学习

scrapy爬虫爬取汽车之家大概12万交易数据 采用spark分析 mysql存储。flask后端。echarts大屏可视化。 表2 黄河交通学院本科毕业设计(论文)开题报告 学生姓名 刘丹杰 专业班级 20本大数据一班 学号 2080910T01521 设计(论文)题目 基于Hadoop的新能源汽车销售数据分析系统的设计与实现 选题的目的和意义: 选题目的:新能源汽车销售数据分析系统的设计与实现旨在利用Hadoop等大数据技术,对新能源汽车销售数据进行深入分析,从而为汽车制造商、政府部门和消费者提供有价值的信息和洞察。该系统将涉及新能源汽车销售数据的收集、存储、处理和分析,以及基于分析结果的决策支持和业务优化。 选题意义: 1.提供决策支持:通过对新能源汽车销售数据的深入分析,可以为企业和政府部门提供详细的市场信息和销售趋势,支持他们做出更准确的决策和合理的规划。 2.帮助企业优化运营:通过分析新能源汽车销售数据,可以发现潜在的销售机会和问题,帮助企业优化产品定位、销售策略和渠道布局,从而提高销售效率和利润。 3.推动新能源汽车发展:通过对新能源汽车销售数据的分析,可以了解消费者需求和市场趋势,为新能源汽车的发展提供有力支持。同时,可以通过挖掘销售数据中的关联性和规律,为新能源汽车的研发和创新提供指导。 4.促进政府监管与政策制定:对新能源汽车销售数据的分析可以为政府部门提供参考依据,了解市场状况、消费者需求和企业表现,以便更好地监管市场、制定政策、推动产业升级。 国内外研究现状综述: 基于Hadoop的新能源汽车销售数据分析系统是一个热门的研究领域,国内外的研究者都在积极开展相关研究。在国内,随着大数据技术的发展和新能源汽车市场的快速增长,许多研究机构和高校开始关注基于Hadoop的新能源汽车销售数据分析系统的研究。他们主要从以下几个方面进行了研究:1.数据采集与清洗:国内研究者关注如何从多个数据源中获取新能源汽车销售数据,并进行数据清洗和预处理。2.数据存储与处理:并利用Hadoop MapReduce等技术对数据进行处理和分析。他们开发了基于MapReduce的数据处理算法,如销售数据统计、趋势分析和销售预测等。3.数据可视化与应用场景:国内研究者也关注将分析结果可视化展示,他们使用数据可视化工具如Tableau、Power BI等,将数据处理结果转化为图表和报表,以帮助用户更好地理解和利用数据。在国外,许多汽车制造商、数据分析公司和研究机构也在积极研究基于Hadoop的新能源汽车销售数据分析系统。他们的研究主要集中在以下几个方面:1.数据挖掘与预测:国外研究者利用Hadoop和其他大数据技术,进行数据挖掘和预测。他们通过对新能源汽车销售数据的分析,寻找潜在的关联性和规律,从而为企业和政府部门提供市场洞察和销售预测。2. 跨领域研究与合作:国外的研究者还将新能源汽车销售数据分析与其他领域进行了跨领域的研究和合作。例如,与环境科学、可持续发展等领域的研究者共同探索新能源汽车销售数据与环境影响的关系。 主要研究内容,拟解决的关键问题: 1.数据采集模块 2.数据存储模块 3.数据的处理与分析模块 4.实时数据的处理模块 5.数据挖掘与机器学习模块,主要用来预测销售趋势以及客户偏好的分析。 6.数据可视化模块 7.用户交互与报告模块,主要为用户提供友好的用户界面,支持用户来进行数据的查询。 8.安全与权限管理模块 9.系统监控与维护模块 10.扩展与集成模块 拟采用的研究方法和手段: 1.利用Hadoop生态系统中的HDFS(Hadoop分布式文件系统)存储数据,并构建基于hadoop的数据仓库,对数据进行组织、索引以及优化查询。 2.利用Hadoop MapReduce进行数据处理和分析,进行复杂的数据转换和聚合操作。使用Hive对数据进行批处理和分析。 3.使用Hadoop生态系统中的SparkStreaming处理实时销售数据流,提供实时数据分析和处理的能力。并使用kafka来支持高吞吐量的实时数据的摄入。 4.利用集成机器学习算法如Scikit-learn、TensorFlow、Weka等,用于构建和训练机器学习模型,进行销售趋势预测、客户分析等工作。 5.数据可视化:利用数据可视化工具(如Tableau、Power BI等),将销售数据呈现为直观的图表和报表,帮助用户快速理解销售数据的情 6. 建立严格的数据访问权限控制机制,利用Hadoop生态系统中的Kerberos进行用户认证和授权管理,同时采用数据加密等技术保护数据安全和隐私。 7.通过Hadoop的分布式架构和集群管理工具,实现系统的横向扩展,同时优化数据处理算法和调优集群配置,提升系统性能。 8.利用Hadoop生态系统中的数据集成工具,实现对外部数据源的连接和整合,实现多源数据的综合分析. 9.在系统监控与维护模块中纪录系统操作日志,便于问题追踪和性能的分析同时监控系统性能以确保数据处理的高效与稳定。 10.通过设计API接口以用来支持与其他系统或应用的集成。 可行性分析: 1.技术成熟度:Hadoop生态系统已经成熟,包括HDFS、MapReduce、Hive、Spark等组件,能够支持大规模数据的存储、处理和分析,为新能源汽车销售数据分析提供了可靠的技术基础。 2.大数据需求:新能源汽车销售数据通常具有大规模、多样化的特点,需要处理和分析海量数据,而Hadoop的分布式计算和存储能力能够满足这一需求。 3.数据处理能力:Hadoop的MapReduce、Spark等技术能够支持对新能源汽车销售数据的复杂处理和分析,包括数据清洗、特征提取等,为系统提供了强大的数据处理能力。 4.实时处理支持:Hadoop生态系统中的实时数据处理工具(如Kafka、Storm等)能够支持对新能源汽车销售数据的实时处理和分析,满足实时监控和决策的需求。 5.数据安全保障:Hadoop生态系统提供了完善的安全机制,包括用户认证、数据加密、访问控制等,能够保障新能源汽车销售数据的安全性和隐私保护。 6.可扩展性与性能优化:Hadoop的分布式架构和集群管理工具能够支持系统的横向扩展,同时优化数据处理算法和调优集群配置,提升系统性能。 7.应用案例验证:已有许多企业和组织在实际项目中成功应用了基于Hadoop的大数据分析系统,包括新能源汽车销售数据分析,验证了其在实际应用中的可行性和效果。 主要参考文献: [1]周德,杨成慧,罗佃斌.基于Hadoop的分布式日志分析系统设计与实现[J].现代信息科技,2023,7(23):57-60.DOI:10.19850/j.cnki.2096-4706.2023.23.012. [2]任宏,李春林,李晓峰.基于Hadoop技术的物联网大数据同步存储系统设计[J].网络安全和信息化,2023(12):85-87. [3]谢盛嘉.基于Hadoop平台的学情分析系统设计[J].电子技术,2023,52(11):408-409. [4]王子昱.基于Hadoop的大数据云计算处理的实现[J].无线互联科技,2023,20(19):89-91+104. [5]李威,邱永峰.基于Hadoop的电商大数据可视化设计与实现[J].现代信息科技,2023,7(17):46-49.DOI:10.19850/j.cnki.2096-4706.2023.17.009. [6]邹文景,唐良运,甘莹等.基于Hadoop技术的物联网大数据同步存储系统设计[J].电子设计工程,2023,31(18):114-117+122.DOI:10.14022/j.issn1674-6236.2023.18.024. [7]Liuqi Z ,Xing W ,Zhenlin H , et al.

【类与对象JAVA(详)】(二)封装、构造方法、代码块

🌠个人主页 : @赶路人- - 🌌个人格言 : 要努力成为梧桐,让喜鹊在这里栖息。 要努力成为大海,让百川在这里聚积。 7.display,vt.显示,显示器 [dɪˈsple] 8.set,v.设置,n.集合 [sɛt] 1.封装 什么是封装? 封装(Encapsulation)是面向对象编程中的一种基本概念,指的是将对象的内部状态和行为封装起来,对外只暴露必要的接口或方法,以保证数据的安全性和完整性,同时隐藏实现细节,方便后续的维护和扩展。 在Java中,封装通常通过使用访问修饰符(Access Modifiers)来实现。Java中有三种访问修饰符:public、protected和private。它们用于控制类、属性和方法的可见性和访问权限。 public: 公共的,可以被任何类访问; protected:受保护的,可以被同一包内的类和该类的子类访问; private:私有的,只能被该类的内部方法访问。 通过合理地使用访问修饰符,我们可以将类的实现细节隐藏起来,避免外部代码直接访问和修改对象的内部状态,从而提高了代码的安全性和稳定性。 此外,Java还提供了封装的另一种实现方式,即getter和setter方法。getter方法用于获取属性的值,setter方法用于设置属性的值。通过这种方式,我们可以控制属性的读写操作,同时可以在读写属性时添加一些额外的逻辑或验证。 1.1private实现封装 直接使用public class Person { public String name = "张三"; public int age = 18; } class Test { public static void main(String[] args) { Person person = new Person(); System.out.println("我叫" + person.name + ", 今年" + person.age + "岁"); } } 执行结果 我叫张三, 今年18岁 这样的代码导致类的使用者(main方法的代码)必须要了解 Person 类内部的实现, 才能够使用这个类.

MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql,在安装和卸载过程中,都在root用户下完成。 文章目录 清理环境获取mysql官方yum源安装mysql yum源安装mysql服务安装报错解决办法验证是否安装完成启动mysql服务登录服务方法一:方法二:方法三:退出服务 设置开机启动配置my.cnf配置编码格式配置端口号配置文件存储位置配置默认字符集配置默认搜索引擎 清理环境 清理环境,卸载老版本或者不必要的环境 检查是否存在mariadb ps ajx | grep mariadb 如果存在mariadb,停止其服务 systemctl stop mariadb.service 检查系统安装包 检查系统中是否已经存在mysql和mariadb的系统安装包,如果已经存在进行清除 rpm -qa | grep mariadb rpm -qa | grep mysql 卸载系统默认安装包 yum remove mariadb 获取mysql官方yum源 查看自己系统版本 cat /etc/redhat-release 获取mysqlyum源 从mysql官方获取yum,[Index of /232905 (mysql.com)](https://repo.mysql.com/ 点开链接后可以看到很多文件,右键选择查看页面源代码,可以看到更详细的介绍 因为我现有系统版本位centos7.9的版本,所以选择el7-9的版本,点击之后自动下载到本地电脑。 然后将下载到本地的资源上传到Linux服务器 安装mysql yum源 查看已经安装到本地的yum源 ls .etc/yum.repos.d/ -l 安装上传的yum源 rpm -ivh example-package.rpm example-package.rpm就是刚刚上传的文件资源 在安装之后再次查看已经安装到本地的yum源,就可以看到了 安装mysql服务 经过上面的操作,已经将mysql的官方yum源安装到了本地,此时可以进行安装mysql服务 安装mysql yum install -y mysql-community-server 安装报错解决办法 在安装过程中,可能出现密钥过期的问题 可能出现以下提示: Failing package is: mysql-community-client-5.

自动驾驶入门算法lattice planner介绍

今天带大家了解一下Lattice planner自动驾驶避障算法,让喜欢自动驾驶的同学可以有个初步了解,并介绍一下CARLA仿真模拟器,没有实车也可以进行自动驾驶的研究。 算法结果展示 首先Carla lattice planner是一种用于自动驾驶的路径规划算法。它基于lattice-based motion planning方法,可以生成连续的、光滑的轨迹,以应对复杂的交通环境和不同的行驶场景。相比于传统的A*和Dijkstra等搜索算法,lattice planner可以更好地处理高维状态空间,并且可以通过自定义cost function来灵活控制路径规划的优化目标。 话不多说,先给各位上个视频 CARLA避障算法 Lattice planner算法简介 除此之外,Carla lattice planner还具有以下特点: 1.基于采样的方法生成可行的轨迹,可以较好地处理障碍物和限制条件。 2.采用基于状态的代价映射方法,可以有效避免路径重复和锯齿状路径。 3.支持多目标、多车道、多速度等复杂场景下的路径规划。 Lattice planner 是一种基于图论和搜索算法的路径规划方法,与传统算法相比,它具有几个优势: 高效性: Lattice planner 通常能够在复杂环境中快速生成高质量的路径。它利用了图论中的一些高效算法,如 A* 算法等,以及搜索空间的结构化表示,这使得它在计算上更为高效。 适应性: Lattice planner 能够适应不同类型的环境和车辆动力学模型。通过调整参数和优化策略,它可以应对不同的车辆行驶条件,如高速公路、城市街道或者复杂的障碍物环境。 全局规划能力: Lattice planner 能够考虑到全局路径规划的因素,而不仅仅是局部路径规划。它能够在整个地图范围内搜索最优路径,并且通常能够保证路径的全局最优性。 障碍物避让: Lattice planner 在路径生成过程中能够有效地避开障碍物。它通过搜索空间中的合法节点,并考虑到障碍物的影响,生成可行的路径。 轨迹优化: 除了路径规划,Lattice planner 还可以与轨迹优化方法结合,生成更加平滑和符合车辆动力学特性的行驶轨迹。 总的来说,Lattice planner 结合了图论、搜索算法和车辆动力学模型,能够在复杂的环境中生成高效、安全的路径,因此在自动驾驶和机器人导航等领域得到了广泛的应用。 对此我对lattice planner进行了简化,可供在CARLA中进行避障,并与基于规则的自动驾驶决策算法结合。 CARLA仿真模拟器简介 Carla是一款开源的城市驾驶模拟器,专为自动驾驶系统的研究、开发和测试而设计。以下是关于Carla的详细介绍: 基本架构:Carla采用Client-Server的交互形式,其中服务器负责模拟环境,客户端则用于发送控制命令并接收传感器数据。这种架构允许用户在仿真环境中测试和训练自动驾驶算法。 核心模块:Carla支持多种自动驾驶系统的开发方法,包括经典模块化方法、端到端的模仿学习和强化学习方法。这些方法涵盖了从感知、规划到控制的各个环节。 环境模拟:基于Unreal Engine 4,Carla能够提供高度真实的3D城市场景,包括详细的建筑物、车辆、行人、交通标志等静态和动态物体。它还能够模拟不同的天气和时间条件,为自动驾驶系统提供丰富的测试环境。 传感器支持:Carla支持灵活配置的传感器套件,包括但不限于GPS、速度计、加速度计以及各种视觉和雷达传感器。这些传感器数据可以用于训练和验证自动驾驶策略。 平台兼容性:Carla可以在Linux和Windows操作系统上安装和使用,提供了Python API以便于开发者进行编程和接口操作。 社区资源:Carla拥有一个活跃的社区和丰富的文档资源,用户可以通过官方文档和社区分享来获取帮助和学习如何使用这个平台。 代码示例讲解 首先automatic control主要用于对接carla仿真服务器,进行车辆的播撒,天气的改变,全局路径的规划。 class World(object) #世界的设置 class KeyboardControl(object)# 键盘控制车辆 class HUD(object)#车辆信息通过最下面一行进行显示,可以辅助显示当前车辆行为或者状态 class CollisionSensor(object)#碰撞检测传感器 class LaneInvasionSensor(object)#越线检测传感器,检测是否压线等 class GnssSensor(object)#定位传感器,记录车辆行驶轨迹 class CameraManager(object)#车载前视摄像头 class Game(object)#车辆从起始到最终的整个循环 def main()#初始配置设置,定义了服务器ip地址,起点坐标、世界天气、障碍车数量以及位置等用于环境搭建的初始化信息 同所有代码一样

AI积累-CPU(中央处理单元)和GPU(图形处理单元)

CPU(中央处理单元)和GPU(图形处理单元)是计算机系统中的两种重要处理器,它们在架构和用途上有显著的区别: CPU(中央处理单元) 通用处理器:CPU被设计为执行各种类型的计算任务,它是计算机的大脑,负责解释和执行大部分计算机指令。 少量核心:现代CPU通常有从几个到几十个处理核心。每个核心能够执行独立的任务(线程)。 高时钟速度:CPU的时钟速度(即每秒可以执行的周期数)相对较高,这使得它能够快速处理单个任务。 复杂的控制单元:CPU包含复杂的控制单元,用于指令调度、分支预测和多种优化,以提高单线程性能。 多功能:CPU适合执行需要复杂决策和数据依赖性的任务,如操作系统操作、应用程序逻辑等。 GPU(图形处理单元) 专用处理器:GPU最初被设计用于处理图形和视频渲染任务,但现在它们也被广泛用于各种并行计算任务。 大量核心:GPU拥有成百上千个小型、低时钟速度的处理核心,使其能够同时处理大量数据。 并行处理:GPU擅长执行可以并行化的任务,这意味着可以同时对许多数据元素执行相同的操作(例如,图像的像素处理)。 简化的控制单元:与CPU相比,GPU的控制单元简单很多,因为它们主要处理的是重复性的、并行的任务。 适合计算密集型任务:GPU适用于机器学习、科学计算和复杂的数学模型,这些任务可以利用其强大的并行处理能力。 总结 简而言之,CPU是一种更适合处理复杂逻辑和控制密集型任务的通用处理器,而GPU则是一种优化了的、用于处理大规模并行任务的专用处理器。随着科技的发展,GPU不仅局限于图形渲染,还被用于其他需要大规模并行处理能力的领域,如深度学习和高性能计算。在一些应用中,CPU和GPU会一起工作,CPU处理复杂的控制和决策任务,而GPU则处理大量的并行数据计算任务。

Redis三主三从集群搭建(docker版)

文章目录 1.分布式存储算法1.哈希取余算法2.一致性哈希算法1.基本介绍2.优点1.容错性2.扩展性 3.缺点:数据倾斜问题 3.哈希槽分区(大厂常用) 2.基础环境搭建1.给六台机器都安装docker1.卸载旧版本的docker2.安装 gcc相关3.安装`yum-utils`软件包4.docker设置阿里云的镜像仓库,最好不要设置国外的5.更新yum包的索引(linux基础,以后使用yum会快一些)6.安装最新版的docker7.启动docker进程并查看docker是否成功启动8.运行docker9.停止docker10.设置docker自启动并确认是否设置成功!11.阿里云镜像加速器配置1.找到容器镜像服务2.得到镜像加速器地址3.创建目录,并通过修改daemon配置文件/etc/docker/daemon.json来使用加速器4.重启daemon5.重启docker 2.部署规划图3.配置一个基础的Redis容器1.拉取redis:6.0.8到本地2.在宿主机新建目录 /app/redis,存放redis的配置文件3.从redis6.0.8中得到一份redis.conf的配置文件1.将压缩包上传到/opt目录下2.进入/opt目录然后解压3.复制一份redis.conf到/app/redis目录下4.查看配置文件 4.对配置文件进行修改1.编辑配置文件2.设置redis密码 requirepass foobared3.使redis支持远程访问 bind 127.0.0.1 和 protected-mode4.设置daemonize no,如果是yes会与docker的-d方式冲突 5.启动Redis6.连接Redis1.使用exec命令进入redis容器2.连接redis-cli3.进行操作测试 7.开放6480端口1.宝塔开启2.腾讯云开启 8.使用Jedis连接Redis测试 4.使用阿里云镜像仓库,将Redis容器制作为镜像发布(暂时使用不了)1.访问阿里云的容器镜像服务2.创建一个命名空间sunxiansheng,设置公开3.创建镜像仓库,记得选择命名空间1.创建仓库2.进行配置,选择命名空间和仓库名称3.选择本地仓库4.创建成功! 4.将redis容器commit到我们的新镜像(在容器外执行)1.命令格式2.查看redis容器的ImageId,并执行命令,构建新镜像 redis-cluster:1.0 5.将本地镜像发布到阿里云镜像仓库(根据阿里云提供的指令即可)1.首先登录阿里云镜像仓库2.根据要求设置要推送的本地镜像3.发布镜像到阿里云镜像仓库 6.测试拉取镜像直接执行1.首先删除本地的镜像2.拉取镜像到本地3.删除之前进行目录挂载的/app/redis目录,为了测试启动镜像时会不会保留之前的配置4.还要删除本地的redis-cluster容器(保持环境干净)5.由于挂载的时候挂载了一个宿主机的/app/redis/redis.conf文件,所以需要手动创建,否则启动会失败6.启动Redis7.自定义镜像需要Dockerfile,等学了之后再来补充 5.配置另外五台机器(方式类似以49.232.227.185为例)1.拉取redis:6.0.8到本地2.在宿主机新建目录 /app/redis,存放redis的配置文件3.从最初的机器上得到配置好的redis.conf1.源服务器使用scp发送文件redis.conf到本服务器的/app/redis下 3.启动Redis6.连接Redis1.使用exec命令进入redis容器2.连接redis-cli3.进行操作测试 7.开放6480端口1.宝塔开启2.腾讯云开启 8.使用Jedis连接Redis测试 3.集群搭建1.六台服务器都要配置1.修改redis.conf配置文件1.编辑配置文件2.设置redis节点连接其他redis的密码 masterauth(与requirepass 一致即可)3.重启redis容器 2.开启总线端口10000 + port1.宝塔开启16480端口2.腾讯云开启16480端口 3.删除容器,更换为集群模式的启动命令1.删除原来的容器2.以集群模式启动的docker命令3.查看目录/app/redis/data,持久化文件以及节点文件都同步过来了! 2.构建主从关系1.进入一台机器2.测试连接redis-cli(注意此时的ip已经在启动时指定了6480)3.退出redis-cli进行集群构建4.构建成功!5.如果发现一直在构建,原因是需要开启总线的端口也就是10000 + 6480 3.常用命令1.首先进入redis容器的redis-cli2.查看集群信息3.查看集群节点 4.SpringBoot测试连接1.pom.xml2.application.yml3.Redis配置类4.测试的controller5.启动测试 5.报错 Unable to connect to [10.2.8.11:6480]: connection timed out: /10.2.8.11:64801.这个显示的是连接的内网地址,所以需要配置redis.conf的cluster-announce-ip来暴露服务器外网ip2.编辑配置文件3.配置 cluster-announce-ip 为每台服务器的外网ip4.重启redis容器5.此时就不会再出现连接内网超时的问题了 4.主从扩容和主从缩容1.主从扩容1.启动一台主机1.使用配置好的 redis.conf 启动容器2.查看配置data目录是否同步3.开启端口6481和164814.jedis测试连接 2.启动一台从机1.使用配置好的 redis.conf 启动容器2.开启端口6482和164823.jedis测试连接 3.将新增的7号节点作为master节点加入原集群1.进入七号容器内部2.添加七号节点到集群(选择任意一个节点即可)3.检查集群情况,可以看到6481已经作为一个master加入了 4.重新分配槽位1.执行指令,重新分配槽位2.计算平均槽位并分配给新机器3.选择all + yes,意思就是,从其他三台机器共提取4096个槽位给新机器4.检查集群情况,发现分配规则是前几个机器匀了槽位给新机器 5.添加8号从机到7号主机下面1.执行指令添加2.检查集群情况 6.SpringBoot测试连接1.测试是否可以设置key2.检查集群情况,观察是否四个机器都能插入 1.分布式存储算法 1.哈希取余算法 2.一致性哈希算法 1.基本介绍 2.

[Collection与数据结构] Map与Set(二):哈希表

🌸个人主页:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482 🧀Java EE(94平均质量分) 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 感谢点赞与关注~~~ 目录 3. 哈希表3.1 哈希表的概念3.2 哈希冲突3.3 降低哈希冲突3.3.1 负载因子3.3.2 降低负载因子(降低哈希冲突) 3.4 实现哈希表 3. 哈希表 3.1 哈希表的概念 顺序结构以及平衡树中,元素关键码与其储存位置没有一一对应的关系,因此在查找一个元素的时候,必须经过关键码的多次比较.顺序查找的时间复杂度为O(N),平衡树中为树的高度O(log2N),搜索效率取决于搜索过程中元素的比较次数. 理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。 向该结构中: 添加元素:通过函数计算出该元素锁要存放的位置,并按次位置进行存放.搜索元素:通过函数计算出所要搜索的位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功 该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(HashTable)(或者称散列表) 哈希函数的设置为key = key%capacity,capacity是哈希表的容量. 但是如果按上述的方式存储元素的话,有一个非常明显的问题,就是如果出现一个key值为14的元素,想要插入哈希表中,计算之后key的结果是4,但是4位置已经有了对应的元素,这时候就会产生冲突.我们称这种冲突为哈希冲突. 3.2 哈希冲突 不同的两个元素关键字k1和k2经过哈希函数计算之后,Hash(k1) = Hash(k2),即:不同的关键字经过哈希函数计算之后,哈希地址相同,这种现象称为哈希冲突或者哈希碰撞. 具有不同的关键码而具有相同哈希地址的元素在哈希表中,我们称为"同义词". 3.3 降低哈希冲突 3.3.1 负载因子 概念 首先什么是负载因子:哈希表中的元素总个数/哈希表的长度.负载因子和哈希表中元素的个数成正比,当哈希表中总元素的个数越多,负载因子越大,产生哈希冲突的概率也越大. 负载因子和哈希冲突出现的概率也满足着一定的关系,具体的函数关系如下: 当哈希冲突达到一定的程度的时候,我们就需要通过降低负载因子的方法来降低哈希冲突发生的概率,由于哈希表中的元素个数已经确定了,所以我们需要通过加长哈希表的大小来降低哈希冲突.我们一般认为当负载因子达到0.75的时候,就要降低负载因子了,当然这个值也不是固定的,看具体的应用场景. 3.3.2 降低负载因子(降低哈希冲突) 解决哈希冲突两种常见的方法是:闭散列和开散列. 闭散列 当发生哈希冲突的时候,如果哈希表为被装满,那么就还有空位置,可以把key存放冲突位置的下一个空位置上.那么如何找到下一个空位置呢? 线性探测 从冲突位置开始,依次向后探测,直到找到一个空位置为止. 举例 现在需要插入元素44,先通过哈希函数计算哈希地址,下标为4,因此44理论上应该插在该位置,但是该位置已经放了值为4的元素,即发生哈希冲突 通过哈希函数获取待插入元素在哈希表中的位置 如果该位置中没有元素则直接插入新元素,如果该位置中有元素发生哈希冲突,使用线性探测找到 下一个空位置,插入新元素 二次探测 线性探测的缺点就是,冲突的元素都会堆在一起,我们为了避免这种问题,于是我们引入了二次探测. 查找下一个空位置的方法为:Hi=(H0-i2)%len,其中,i为常数,这个常数可以是任意整数,H0为key通过哈希函数计算出的哈希地址.len为哈希表的长度. 因此:闭散列的缺点就是空间利用率较低. 开散列-哈希桶法(重点) 散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中.就像净水机的滤芯一样. 从上图中可以看出,每一个桶中都放的是发生哈希冲突的元素. 但是当冲突严重的时候,就是每一个哈希桶中的元素比较多的时候,这时候哈希桶中的链表就会转化成红黑树. 3.4 实现哈希表 import java.

python第2坑:pycharm安装好了之后运行报错:此应用无法在你的电脑上运行

pycharm安装好了之后运行报错:此应用无法在你的电脑上运行 参考文章:https://blog.csdn.net/yfy1907/article/details/128821049查看Windows版本:和博主一样是win10专业版本,64位查看pycharm版本:pycharm-community-2024.1.1-aarch64.exe问题分析:说明我和上述博主遇到问题是有所差异的,并不是专业版和社区版的问题。但是我尝试下载了exe,没想到被我歪打正着重新安装:将原来的pycharm-community-2024.1.1-aarch64版本卸载,再重新安装这个pycharm-community-2024.1.1.exe,安装成功后成功启动了pycharm。知识补充:(1)pycharm-community.exe和pycharm-community-aarch64.exe的区别 pycharmexe和exearm64是PyCharm软件的两个不同版本。pycharmexe是针对x86 64架构的64位计算机的版本,而exearm64是针对搭载ARM架构CPU的计算机的版本。ARM架构是一 种在移动设备和一 些嵌入式系统中广泛使用的计算机处理器架构。这两个版本的区别在于它们适用的计算机架构不同。如果你的电脑是64位的,那么你应该下载pycharmexe版本;如果你的电脑是搭载ARM架构CPU的,那么你应该下载exearm64版本。参考:https://wenku.csdn.net/answer/1zo4wsvt9b#(2)如何在Windows 10中检查处理器是32位,64位还是ARM?方法一:在系统设置中查看 1.打开设置》系统》关于。 2.在右侧窗口中,检查“系统类型”值,可以看到处理器是32位、64位还是ARM。 3.它根据你所拥有的硬件显示基于x86的处理器(32位)、基于x64的处理器(64位)或基于ARM的处理器。方法二:在命令提示符下查找CPU体系结构类型 1.打开一个新的命令提示符窗口。 2.键入echo %PROCESSOR_ARCHITECTURE%,并按Enter键。 3.输出以下值之一:x86(用于32位CPU)、AMD64(用于64位CPU)或ARM64。 4.可以根据需要关闭命令提示符。参考:https://www.51cto.com/article/656423.html

Java——内部类

1.什么是内部类 在一个类的里面再定义一个类,新定义的这个类就是内部类 举例:在Outer类的里面定义一个Inter类 class Outer{ class Inter{ } } 在这里Outer叫外部类,Inter叫内部类 内部类的应用场景 定义一个汽车类: 属性:汽车品牌,型号,价格,发动机的型号和使用年限的等等 这里发动机是一个独立的个体,但是又依附于汽车,单独纯在没有意义 代码示例: class Car{ //汽车类 String carName; int carAge; int carPrice; class Engine{ //发动机 String engineName; int engineAge; } } 注意: 内部类表示的事物是外部类的一部分 内部类单独出现没有任何意义 内部类的访问特点 1.内部类可以直接访问外部类的成员,包括私有 2.外部类要访问内部类的成员,必须创建对象 2.成员内部类 1.成员内部类是写在成员位置的,属于外部类的成员(上述Enging类就是成员内部类) 2.成员内部类可以被一些修饰符所修饰,比如:private,default(默认),protected,public,static(被static修饰的成员内部类叫静态内部类) 3.在成员内部类里面,JDK16之前不能定义静态变量,JDK16以后才可定义静态变量 如何获取成员内部类 1.直接创建 格式: 外部类.内部类.对象名=外部类对象.内部类对象() Outer.Inner oi=new Outer().new Inner(); 2.外部类编写方法,对外提供内部类对象 样例: class Car{ String carName; int carAge; int carPrice; //private修饰的内部类,main无法访问,也不能使用外部类.出来 private class Engine{ String engineName; int engineAge; } //获取内部类的方法 public Engine getinstance(){ return new Engine(); } } public class T1 { public static void main(String[] args) { //方法1:创建一个外部类对象,用Object形成多态接收内部类 Car car=new Car(); Object en=car.

Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (八)

LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (五) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (六) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (七) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (八) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (九) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (十)

Mysql知识总结

一、数据库操作 1.创建库 create database 库名 charset = 'utf8'; 2.查看当前库 DESC databases 库名; 3.查看当前所有库 SHOW DATABASES; 4.使用库 USE 库名; 5.删除库 DROP DATABASE 库名 [cascade]; -- 加中括号内容表示强制删除 二、数据表操作 1.创建数据表 CREATE TABLE 表名 ( id INT, name VARCHAR(30), gender VARCHAR(30) ); 2.查看当前表 DESC 表名; 3.查看当前所有表 SHOW TABLES; 4.删除表 DROP TABLE 表名; 5.新增列 ALTER TABLE 表名 ADD 列名 类型; 6.修改列 ALTER TABLE 表名 change 旧列名 新列名 类型; 7.删除列 ALTER TABLE 表名 drop 列名; 8.

数据仓库ETL

小白的数据仓库学习笔记 2024/5/20 18:25 文章目录 ETLdim打开创建项目(选这个,这个是做etl的)建立元数据的连接同样的,建立与数据仓库的连接新建ssis包序列容器全量etl增量etl建立sql任务双击打开,设置连接、内容 双击数据流任务OLE DB源、数据转换、OLE DB目标成功再做两个 两个表列的数据类型不一致factsql任务左侧分支做全量右侧做增量运行测试 做另外一个 ETL 数据抽取、转换、加载 dim 打开 创建项目(选这个,这个是做etl的) 把元数据etl到数据仓库里面 建立元数据的连接 同样的,建立与数据仓库的连接 新建ssis包 分成两个脚本,一个维度、一个事实 这里做的是dim维度的,应该再dim.disx里面做,我这里选错窗口了 序列容器 如果不创建,整个页面就是容器,一次只能做一个 全量etl 把整张表的数据一下子整过去 删除数据(避免重复)etl 增量etl 一天一天的,没过一天抽一次,每天多一点 建立sql任务 双击打开,设置连接、内容 双击数据流任务 OLE DB源、数据转换、OLE DB目标 确定数据源,清洗转换 这里易错,sql命令写的是从数据源查询过来的 成功 再做两个 同样的,再做两个全量 两个表列的数据类型不一致 然后修改列的数据类型并保存 先全量,后增量 为什么先全量,后增量? 在你数据分析之前,已经产生了大量的数据 fact sql任务 左侧分支做全量 双击线 等于0的时候走左侧 把CreateDate转成varcher类型,再转成int类型 select [FrameNo] ,[SaleShop] ,datekey ,[SalePrice] ,[FactoryPrice] ,[SaleType] from( SELECT [FrameNo] ,[SaleShop] ,convert(int,convert(varchar,[CreateDate],112)) datekey ,[SalePrice] ,[FactoryPrice] ,[SaleType] FROM [jtxy_source].[dbo].[tbl_EXE_SaleCar])a where a.