游戏包含冒险模式、挑战模式、生存模式三种不同玩法。冒险模式主打关卡闯关,挑战模式则挑战特殊设计的关卡,生存模式结合无尽模式和特殊地图,各具特色。玩家可根据喜好自由选择模式,体验不同的游戏乐趣。快来尝试这款独特的pvz游戏吧!赶紧加入!"
麒麟V10 安装jdk,tomcat,rabbitmq 1.操作系统和软件包 操作系统
Kylin-Server-10-8.2-Release-Build09-20211104-X86_64
软件包
apache-tomcat-8.5.100.tar.gz
jdk-8u411-linux-x64.tar(系统自带openjdk1.8.0_252)
rabbitmq-server-3.8.14-1.el7.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
erlang-23.2.7-2.el7.x86_64.rpm
安装jdk(系统自带openjdk1.8.0_252 可不安装) 查看openjdk java -version
卸载openjdk
rpm -qa | grep java | xargs rpm -e --nodeps
在/usr/local创建java文件夹
拷贝jdk软件到 /usr/local/java
解压jdk1.8软件包到安装目录
配置jdk环境变量
vim /etc/profile
添加配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_411
export JRE_HOME=${JAVA_HOME}/jreexport JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
重新加载配置文件
source /etc/profile
验证
java -version
安装Tomcat 新建文件夹
Mkdir tomcat /指定路劲
拷贝到tomcat文件夹
Cp -r 软件包名 /usr/local/tomcat
解压tomcat软件包到安装目录
Tar -xzvf 软件报名
配置环境变量
vim /etc/profile
添加配置
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 赠书活动专栏
✨特色专栏: MySQL学习
🥭本文内容: Leo赠书活动-26期 不同数据库背后的数据存储方案
📚个人知识库: Leo知识库,欢迎大家访问
目录 01 关系型数据库&NoSQL数据库&NewSQL数据库1. 关系型数据库2. NoSQL数据库3. NewSQL数据库 02 OLTP&OLAP&HTAP对比1. OLTP数据库2. OLAP数据库3. HTAP数据库 03 总结 在大数据和AI时代,数据库成为各类应用不可或缺的重要组成部分。而数据库中的数据依赖存储引擎进行管理,包括数据的存储、查询、更新和删除等。因此,在设计系统时,选择正确的数据库存储引擎方案变得尤为重要。这篇文章将以关系型、NoSQL和NewSQL数据库,以及OLTP、OLAP和HTAP处理方式为切入点,深入探讨不同类型的数据库背后的存储引擎方案选型取舍。
01 关系型数据库&NoSQL数据库&NewSQL数据库 下图展示了关系型数据库、NoSQL数据库、NewSQL数据库的发展过程。
1. 关系型数据库 关系型数据库也称为SQL数据库,最早的数据库发展可以追溯至1970年IBM研发的第一个SQL数据库System R,这也是最早的SQL数据库,再后来1980~1990年这段时间涌现出来了一些SQL数据库产品,例如Oracle、DB2、SQL Server、PostgreSQL、MySQL等。
到2000年左右,关系型数据库越来越丰富,出现了很多迄今一直在发挥重要的组件,例如MySQL、Oracle等。
SQL数据库按照以“行”为单位的二维表格存储数据,这种方式最符合现实世界中的实体,同时通过事务的支持为数据的一致性提供了非常强的保证。因此SQL数据库主要适合的场景是读多写少的场景。
关系型数据库中为了适配不同的应用场景,通常会将存储引擎设计为插件式的接口。然而主流的存储引擎,仍然是读多写少的特点。以MySQL为例,InnoDB存储引擎被广泛运用,它通过B+树来存储索引和数据。B+树这种数据结构,由于其独特的特性使得查询的性能非常高。
B+树存储引擎适用于需要高效的数据查找、范围查询和顺序访问的场景。它在关系型数据库中被广泛应用,如MySQL的InnoDB存储引擎和Oracle的B+树索引。然而,B+树存储引擎对于频繁的数据插入和删除操作可能会有一定的开销,因为这会触发节点的分裂和合并操作。
2. NoSQL数据库 在面对海量数据存储、高并发访问的场景下,关系型数据库的扩展性和性能会受到限制。随着互联网的飞速发展,到2000年左右,存储海量数据、高并发处理读写的需求变得非常明显。这对SQL数据库提出了巨大挑战。为了解决这个问题,出现了支持数据可扩展性、最终一致性的NoSQL数据库。因此,NoSQL数据库可以看作是基于SQL数据库的缺陷而诞生的一种新产品。
NoSQL组件普遍选择牺牲复杂SQL的支持及ACID事务功能,以换取弹性扩展能力和更高的读写性能。这类系统主要存储半结构化或非结构化数据。根据存储的数据种类,NoSQL数据库主要分为基于文档存储的文档数据库(Document-based Database)、基于键-值存储的键值数据库(Key-Value Database)、图数据库(Graph-based Database)、时序数据库(Time Series Datebase)、宽列式存储(Wide Column-based Store)以及多模数据库(Multi-Model Database)。
不同类型的NoSQL数据库特性如下图所示。
NoSQL数据库典型的特点是具备很高的读写性能,但数据一致性保证较弱。绝大多数的NoSQL数据库适合写多读少、写多读多的场景。以列式数据库、时序数据库而言,它们通过LSM的思想,提供了非常高的写入性能。这类系统的存储引擎广泛意义上也称为LSM Tree存储引擎,这些系统单机的存储引擎有RocksDB、LevelDB等。此外再以键值数据库为例,它们绝大部分通过利用哈希表这种数据结构,外加内存介质存储数据。实现非常高的读写性能。Redis就是这类系统的典型代表。
3. NewSQL数据库 虽然NoSQL数据库解决了关系型数据库存储的缺陷,但它也没法完全替代掉关系型数据库。在NoSQL数据库出现后的一段时间内,互联网软件的构建基本上都是结合二者来提供服务。在不同的场景下选择不同的数据库进行存储数据。虽然这样的合作方式很好,但是在这样的模式下,一个用户可能会因为场景的不同而存储多份相同的数据到不同的数据库中,当用户量级和存储数据量很小的情况下没什么问题。一旦量级发生变化就会引发出新的问题。
随着存储数据量的不断增加,造成资源的浪费和成本的上升不容忽略。于是工业界和学术界都在寻找更好的解决方案,直到2010年左右,诞生了NewSQL数据库(也称为分布式数据库)。它的出发点是结合关系型数据库事务一致性,又具备NoSQL数据库的扩展性及访问性能。这无疑给系统的设计及实现带来了更大的挑战,NewSQL数据库不仅要考虑单机环境下高效存储的问题,还需要考虑多机情况下数据复制、一致性、容灾、分布式事务等问题。目前NewSQL数据库典型的代表作有TiDB、OceanBase、CockroachDB等。NewSQL数据库中绝大部分的系统还是采用LSM 树存储引擎,来实现系统高性能的写入。
02 OLTP&OLAP&HTAP对比 在现代数据管理领域,OLTP、OLAP和HTAP是常见的数据库类型,它们各自针对不同的数据处理场景和需求。本文将对这三种数据库进行对比,以帮助读者更好地理解它们的特点和适用性。
1. OLTP数据库 OLTP数据库(联机事务处理)是专门设计用于处理事务性工作负载的数据库系统。它们被广泛应用于业务应用程序,如在线购物、银行交易和订单处理等。OLTP数据库的主要特点是高并发、低延迟和高事务吞吐量。它们通过支持ACID(原子性、一致性、隔离性和持久性)特性来确保数据的一致性和可靠性。OLTP数据库通常采用规范化的数据模型,以支持高效的事务处理和即时的数据更新。
OLTP数据库主要的功能是处理用户在线实时的请求,直接为用户提供服务,因此这类数据库通常对处理请求的时延要求比较高,绝大部分的请求正常情况下会在毫秒级完成。OLTP数据库很多,除了大家最熟悉的关系型数据库(如MySQL、Oracle)外,还有Redis、MongoDB等这些非关系型数据库。绝大部分的OLTP数据库则是采用B树、B+树甚至哈希表来构建存储引擎。
2. OLAP数据库 OLAP数据库(联机分析处理),它们专注于支持决策支持和分析工作负载。OLAP数据库用于处理大量数据的复杂分析查询和报表生成。OLAP系统的关键特点是高度可扩展、支持复杂的分析操作和提供灵活的数据聚合能力。为了实现这些特性,OLAP数据库通常采用了针对分析查询优化的特殊数据结构,如多维数据模型(如星型或雪花模型)和列存储技术。此外,OLAP数据库还提供了灵活的查询语言和数据切片、切块、钻取等功能,以支持交互式的数据分析和探索。
OLAP数据库在功能上侧重于对数据或者任务进行离线处理,它不直接对用户提供服务。OLAP系统对请求的处理通常比OLTP慢得多,一般在秒级、分钟级甚至小时级,通常在数据统计、报表分析、推荐系统数据聚合分析等场景用的比较多。这一类数据库典型的代表有HBase、Teradata、Hive、Presto、Druid、ClickHouse等。互联网企业往往都需要使用OLTP和OLAP。因此为了满足这两类需求,通常需要结合多个系统一起开发使用。这样的做法当然是可行的,而且基本也是采用这种方式进行实现。绝大部分的OLAP数据库是采用LSM树构建存储引擎。
3. HTAP数据库 随着数据处理需求的不断演变,需要存储的数据量爆炸式增长,在这种模式下直接带来的存储成本问题成为新的矛盾点,人们开始探索是否能诞生一种数据库将OLTP和OLAP这两类应用合二为一呢?于是,HTAP(混合事务/分析处理)数据库应运而生。HTAP数据库旨在将OLTP和OLAP的功能集成到同一个数据库系统中,以满足实时分析和事务处理的需求。HTAP数据库通过在同一数据库上同时支持事务处理和分析查询,消除了数据复制和数据移动的需求,提供了更高的数据一致性和实时性。HTAP数据库通常采用了内存计算、分布式架构和智能查询优化等技术,以保证高性能和灵活性。这类数据库既可以处理在线事务处理,又可以处理在线分析处理。可以认为HTAP=OLTP+OLAP。HTAP的主要代表有TiDB、OceanBase、CockroachDB等。
目录
JavaMail
用JavaMail向qq邮箱发消息
▐ 授权码的获取 JavaMail JavaMail 是一个用于发送和接收电子邮件的 Java API。它提供了一个平台无关和协议无关的框架,允许开发人员通过标准电子邮件协议(如 SMTP、POP3 和 IMAP)来创建、发送和读取电子邮件。以下是 JavaMail 的一些关键概念和功能介绍:
▐ 基本概念
Session:JavaMail 的 Session 对象表示邮件会话。它存储了配置信息,如邮件服务器地址和认证信息。Store:Store 对象用于与邮件服务器通信,特别是接收邮件时。它支持协议如 IMAP 和 POP3。Transport:Transport 对象用于发送邮件。它支持协议如 SMTP。Message:Message 对象代表一封电子邮件。JavaMail 提供了 MimeMessage 类,用于创建和解析 MIME 类型的电子邮件。Folder:Folder 对象代表邮件文件夹,如收件箱、发件箱、草稿等。通过 Folder 对象可以操作邮件。 用JavaMail向qq邮箱发消息 发送电子邮件的基本步骤包括:
创建一个 Session 对象。使用 MimeMessage 创建电子邮件内容。使用 Transport 对象发送邮件。 示例代码:
import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class SendEmail { public static void main(String[] args) { // 配置邮件服务器属性 Properties props = new Properties(); props.
📝个人主页:哈__
期待您的关注 目录
一、🔥今日内容
二、🌏前端页面的改造
2.1新增电子书管理页面
2.2新增路由规则
2.3修改the-header代码
三、🚗SpringBoot后端Ebook模块改造
3.1增加电子书增/改接口
3.1.1新增EbookSaveParam
3.1.2添加Controller代码
3.1.3在Ebook实体类上增加一个注解
3.2 增加电子书删除接口
四、🔨测试 4.1添加功能测试
4.2修改功能测试。
4.3删除功能测试
一、🔥今日内容 【wiki知识库】03.前后端的初步交互(展现所有的电子书)-CSDN博客
上一次带领大家把前端的首页部分实现了一下,成功的从数据库当中取出了我们的信息并且展示在前端页面,到了下图的部分。
今天主要是把这个网页的界面初步优化一下,修改一下导航栏以及增加电子书管理模块。包含电子书的查询功能、新增功能、编辑功能和删除功能(不包括文档管理)。
二、🌏前端页面的改造 2.1新增电子书管理页面 我在src下新建了admin文件夹,这个文件夹中的内容是给网站管理员看到的,所以放到了admin目录,名字为admin-ebook.vue。
admin-ebook.vue的具体内容如下。这个文件里我注释掉了一些信息,而且这个文件中的内容包含了页面需要的功能很多,有的一些并不是今天要讲解的内容,所以并没有使用到。今天主要就是想带着大家做出一个电子书管理的模块来。
<template> <a-layout> <a-layout-content :style="{ background: '#fff', padding: '24px', margin: 0, minHeight: '280px' }" > <p> <a-form layout="inline" :model="param"> <a-form-item> <a-input v-model:value="param.name" placeholder="名称"> </a-input> </a-form-item> <a-form-item> <a-button type="primary" @click="handleQuery({page: 1, size: pagination.pageSize})"> 查询 </a-button> </a-form-item> <a-form-item> <a-button type="primary" @click="add()"> 新增 </a-button> </a-form-item> </a-form> </p> <a-table :columns="
在Oracle中,正则表达式(Regular Expressions)是通过正则表达式函数(如REGEXP_LIKE, REGEXP_INSTR, REGEXP_SUBSTR, REGEXP_REPLACE, 和 REGEXP_COUNT)来使用的。这些函数允许你执行复杂的模式匹配和字符串操作。
下面是一些常用的Oracle正则表达式函数及其示例:
1. REGEXP_LIKE 用于检查字符串是否与指定的正则表达式模式匹配。
示例:检查字符串是否包含数字。
sql复制代码
SELECT column_name FROM table_name WHERE REGEXP_LIKE(column_name, '[0-9]'); 2. REGEXP_INSTR 返回子字符串在字符串中第一次出现的位置(从1开始计数)。
示例:查找字符串中"oracle"第一次出现的位置。
sql复制代码
SELECT REGEXP_INSTR('Hello Oracle World', 'oracle') FROM DUAL; 3. REGEXP_SUBSTR 返回与正则表达式匹配的子字符串。
示例:从字符串中提取第一个数字。
sql复制代码
SELECT REGEXP_SUBSTR('abc123def456', '[0-9]+') FROM DUAL; 4. REGEXP_REPLACE 使用指定的替换字符串替换与正则表达式匹配的子字符串。
示例:将所有数字替换为"*"。
sql复制代码
SELECT REGEXP_REPLACE('abc123def456', '[0-9]', '*') FROM DUAL; 5. REGEXP_COUNT 返回与正则表达式匹配的子字符串的数量。
示例:计算字符串中数字的出现次数。
sql复制代码
SELECT REGEXP_COUNT('abc123def456', '[0-9]') FROM DUAL; 正则表达式模式 Oracle的正则表达式模式与许多其他编程语言中的正则表达式类似,但有一些细微的差别。以下是一些常用的模式元素:
.:匹配任何单个字符(除了换行符)。^:匹配字符串的开始。$:匹配字符串的结束。[...]:匹配括号中的任何单个字符。[^...]:匹配不在括号中的任何单个字符。p1|p2|p3:匹配任何指定的模式。{n}:恰好匹配前面的子模式n次。{n,}:匹配前面的子模式n次或更多次。{n,m}:匹配前面的子模式至少n次,但不超过m次。*:匹配前面的子模式零次或多次。+:匹配前面的子模式一次或多次。?:匹配前面的子模式零次或一次。\d:匹配任何数字(等价于[0-9])。\D:匹配任何非数字字符。\s:匹配任何空白字符(包括空格、制表符、换页符等)。\S:匹配任何非空白字符。\w:匹配任何单词字符(等价于[a-zA-Z0-9_])。\W:匹配任何非单词字符。 请注意,在Oracle的正则表达式中,通常不需要转义特殊字符(如.、*、+、?、|、{}、[]、()和^),但在某些情况下(如字符串文字中的反斜杠),可能需要使用两个反斜杠(\\)进行转义。
为了编写有效的正则表达式模式,你可能需要查阅Oracle的官方文档或参考其他正则表达式教程和文档。
目录
一、概述
二、 举例
一、概述 LDO(低压差线性稳压器)的LINE REGULATION(线路调整或线性调整)参数是一个衡量稳压器输出稳定性的重要指标。它反映了LDO输出电压对输入电压变化的响应程度。 当输入电压在其规定的工作范围内变化时,理想的LDO应该提供一个恒定的输出电压,但实际上,输出电压可能会有所波动。LINE REGULATION就是用来量化这种波动的。 通常,LINE REGULATION以毫伏每伏特(mV/V)或百分比(%)来表示。例如,一个LDO的LINE REGULATION如果是0.01%或者10mV/V,这意味着每当输入电压变化1V时,输出电压会变化0.01%,或者10mV。具体来说: 如果LINE REGULATION是10mV/V,当输入电压增加1V时,输出电压最多增加10mV。 如果LINE REGULATION是0.01%,并且输出电压是5V,那么当输入电压增加1V时,输出电压最多增加0.0001*5V = 0.0005V = 0.5mV。 理想情况下,LINE REGULATION值越低,说明LDO的性能越好,能够在输入电压波动的情况下维持一个较为稳定的输出电压。这对于那些需要精确电压的应用非常重要,比如精密模拟电路或敏感的数字电路。在选择LDO时,需要根据应用对稳压器的要求考虑LINE REGULATION参数,确保它能够满足系统的稳定性需求。
二、 举例 分析REF5050手册中红色框标出来的一栏如下:
参数如下:
LINE REGULATION参数给出为“0.1ppm/V”
输入电压VIN的范围是从“VOUT + 0.2”到“18 V”
分析两个参数:
LINE REGULATION(线路调整):
这个参数告诉我们,对于输入电压的每变化1伏特,输出电压变化的程度。在这个例子中,它是0.1ppm/V。ppm代表“每百万分之一”,所以0.1ppm表示每变化1伏特,输出电压将变化0.1微伏特(μV)乘以输出电压VOUT的数值。
输入电压范围(VIN):
这个范围定义了稳压器可以接受的输入电压,确保它能够正常工作并提供稳定的输出电压。在这个案例中,稳压器可以接受的最低输入电压是输出电压VOUT加上0.2伏特,最高可达18伏特。
计算:
将ppm转换为百分比:0.1ppm等于0.1 / 1,000,000,或0.0000001(百分比)。
计算对于输出电压的影响:如果VOUT是5伏特(举例),则每1伏特输入电压变化导致的输出电压变化为5伏特 * 0.0000001 = 0.0000005伏特,或者0.0005毫伏特(mV)。
总结:在实践中,这样一个低的LINE REGULATION值(0.1ppm/V)意味着即使输入电压在较宽的范围内变化,该LDO稳压器也能够维持一个极其稳定的输出电压,这对于需要高精度电压的应用来说是非常理想的。
【数据结构】复杂度的重要性—–决定程序运行的效率
前言 在我们写算法的时候,常常会需要考虑一个问题:这个算法好不好?而这个“好”实际上就取决于是算法的复杂度。
算法复杂度(Algorithmic Complexity)是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。应用于数学和计算机导论。
我们知道,同一个问题可以使用不同的算法来解决,而这里的不同一般来说也是可以从复杂度来看出的,当然,也不排除有相同复杂度但不同写法的算法,这里只作参考。
一个算法的好坏影响到了很多实际性的问题,在程序中效率是极其重要的,一个算法的评价主要从时间复杂度和空间复杂度来考虑。
在介绍这两个复杂度之前,我们需要了解一个概念:复杂度并不是具体的数值或者是大小表示,它实际上是一个量级的概念。
比如O(n)和O(n+1)。很明显,它们是同一个量级,只差了1,那么它们实际上可以写成同一个,也就是O(n),甚至像O(2n),它和上面两者也是同一个量级;但是,像O(n)和O(n^2),这俩实际上并不属于同一个量级。它们之间隔了一个次方,那么就有可能存在大小的很大差距,所以这两个复杂度是两个不同的个体。
接下来对这两个复杂度进行具体介绍。
时间复杂度 基本定义和理解 时间复杂度衡量的是算法运行时间随输入规模的增长情况。
对于算法的运行时间,在实际中,由于每台计算机的硬件和软件环境的不同,往往不能精确计算执行所需时间。所以我们在讨论时间复杂度的时候,仅仅从理论角度,也就是视作计算机的环境不变,来进行讨论。
影响算法时间代价的具体有两个方面:问题规模和语句频度。
A.问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。
B.语句频度是一条语句的重复执行次数。一般来说,这个次数会用一个函数来表示,而这个函数代表着算法执行时间的增长率,算法执行时间的增长率称作渐进时间复杂度,也就简称为时间复杂度。
时间复杂度通常使用O(n)来表示,算法的复杂度存在最好、最坏等情况,那么在这里我们取算法的最坏运行情况作为O(n)。
在我们进行时间复杂度的解答时,实际上不需要这么复杂的解释。我们可以将其总结为一句话:
只分析算法中最耗时的操作。
由于我们考虑的是算法的最坏运行情况,并且是以量级来计算,那么我们实际上只需要分析算法中最耗时的操作即可。
分析步骤 1.确定输入规模 (n):输入规模通常是算法中主要变量的数量,例如数组的长度。
2.识别基本操作:确定算法中最耗时的操作,其他比较繁琐、或者特殊的语句忽视。
3.分析每部分的操作次数:计算基本操作在不同结构中的次数,例如循环、递归。
4.累加所有部分的操作次数:将各部分的操作次数加起来,得到总操作次数。
5.用大O符号表示:忽略常数和低阶项,提取时间复杂度的主要部分。这里的目的实际上就是统一量级。
使用这样的步骤,我们就可以较好地解决时间复杂度的分析了。
举例 示例1:简单循环
def sum_array(arr): total = 0 for i in range(len(arr)): total += arr[i] return total 步骤1:确定输入规模
输入是数组 arr,其长度为 n。
步骤2:识别基本操作
基本操作是加法 total += arr[i]。
步骤3:分析每部分的操作次数
total = 0:1 次for i in range(len(arr)):循环执行 n 次total += arr[i]:循环体内执行 n 次 步骤4:累加所有部分的操作次数
基于ThinkPHP+FastAdmin的CMS内容管理系统,自定义内容模型、自定义单页、自定义表单、专题、统计报表、会员发布等
提供全部前后台无加密源代码和数据库私有化部署,UniAPP版本提供全部无加密UniAPP源码
🔍 解锁内容管理新境界:CMS内容管理系统全攻略 🚀
📚 什么是CMS内容管理系统? 当我们谈到CMS时,很多小伙伴可能会觉得陌生,但其实它在我们日常生活中无处不在。CMS,全称Content Management System,即内容管理系统,是一个用于创建、编辑、管理和发布数字内容的软件平台。无论是企业网站、博客、新闻网站还是电子商务平台,CMS都能帮助你高效管理内容,让你的工作变得更加轻松和高效。
🚀 CMS内容管理系统的优势 易用性:CMS提供了直观的用户界面和强大的编辑工具,即使是非专业人士也能轻松上手,快速创建和编辑内容。
灵活性:CMS支持各种内容类型,包括文字、图片、视频、音频等,你可以根据自己的需求进行自定义设置。
可扩展性:通过安装插件和扩展程序,你可以为CMS添加更多功能,满足你不断变化的业务需求。
团队协作:CMS支持多用户同时在线编辑和协作,团队成员可以实时查看和修改内容,提高工作效率。
🔧 如何选择适合自己的CMS? 明确需求:在选择CMS之前,首先要明确自己的需求,包括内容类型、用户数量、安全性等方面的要求。
了解市场:了解市场上主流的CMS产品,包括WordPress、Drupal、Joomla等,对比它们的优缺点,选择最适合自己的产品。
试用体验:在选择CMS之前,最好先试用一下,了解它的操作界面、编辑工具和功能模块是否满足自己的需求。
技术支持:选择有良好技术支持和社区支持的CMS产品,以便在使用过程中遇到问题时能够及时得到帮助。
💡 CMS内容管理系统的应用场景 企业网站:企业可以利用CMS快速搭建自己的官方网站,发布企业新闻、产品介绍、招聘信息等内容。
博客平台:个人博主可以利用CMS创建自己的博客平台,分享生活感悟、专业知识等内容。
新闻网站:新闻机构可以利用CMS发布新闻稿件、专题报道等内容,为读者提供及时、准确的新闻资讯。
电子商务平台:电商企业可以利用CMS搭建自己的电商平台,发布商品信息、促销活动等内容,提高销售额和客户满意度。
📌 总结 CMS内容管理系统是一个强大的工具,它可以帮助我们高效管理数字内容,提升工作效率。在选择CMS时,我们要明确自己的需求,了解市场上的主流产品,并试用体验后再做决定。同时,我们也要关注CMS的易用性、灵活性、可扩展性和团队协作等方面的特点,以确保它能够满足我们的业务需求。
tsconfig.json
{ "files": [], "references": [ { "path": "./tsconfig.node.json" }, { "path": "./tsconfig.app.json" } ] } https://www.typescriptlang.org/tsconfig/#files
files: 在这个例子中,files 数组是空的。这意味着此配置文件本身不直接包含任何 TypeScript 文件。这是因为它作为一个顶层项目配置,用于引用其他的 TypeScript 配置文件,而不是直接处理文件。
https://www.typescriptlang.org/tsconfig/#references
references: 这个属性包含了一个对象数组,每个对象指向一个不同的 tsconfig 文件。这表明当前项目依赖于这些子项目或配置。每个引用都通过 path 属性指定,指向一个子项目的 tsconfig.json 文件。
tsconfig.app.json:
{ "extends": "@vue/tsconfig/tsconfig.dom.json", "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], "exclude": ["src/**/__tests__/*"], "compilerOptions": { "experimentalDecorators": true, "composite": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "baseUrl": ".", "paths": { "@/*": ["./src/*"] } } } https://www.typescriptlang.org/tsconfig/#extends
"extends": "@vue/tsconfig/tsconfig.dom.json": 这表明该配置继承自一个预设的 TypeScript 配置,专为在 DOM 环境中运行的 Vue 应用程序设计。这个预设可能包含了一套推荐的编译器选项,适用于大多数 Vue 项目,如适当的 lib 选项(比如包含 dom 和其他浏览器环境的类型定义),以及为 Vue 文件和 DOM API 使用的最佳实践
📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹
机器学习与AI大数据的融合 📒1. 引言📕2. 机器学习与大数据🎩机器学习与大数据的特征🎈大数据如何赋能机器学习 📜3. 机器学习与AI大数据的融合应用🌞数据分类与聚类🌈预测与决策支持⭐自然语言处理(NLP) 📖 4. 总结与展望🌊未来面对的挑战🔥总结💧展望 📒1. 引言 在当今信息爆炸的时代,大数据和人工智能(AI)已经渗透到我们生活的每一个角落。机器学习作为AI的核心技术之一,与大数据的结合为我们提供了前所未有的机会,从海量数据中挖掘出有价值的信息,进而推动科技的进步和社会的进步。
机器学习(Machine Learning, ML)与人工智能(Artificial Intelligence, AI)大数据的深度融合,正引领着一场前所未有的科技革命。这不仅深刻改变了我们的生活、工作方式,还为解决复杂问题提供了新的视角和工具。机器学习作为AI的核心技术之一,在大数据处理中发挥着至关重要的作用,本文将探讨机器学习与AI大数据的融合,并通过代码示例来展示其实际应用。
📕2. 机器学习与大数据 机器学习是一种通过数据驱动的自动化分析方法,使计算机具有自我学习和改进的能力。在大数据背景下,机器学习可以帮助我们从海量数据中提取有价值的信息,为决策提供支持。
🎩机器学习与大数据的特征 机器学习与大数据的互补性
机器学习是一种通过数据驱动的自动化分析方法,它能够从数据中学习并自动改进其性能。而大数据则提供了丰富的数据源,使得机器学习模型能够基于大规模数据进行训练和优化。因此,机器学习与大数据之间存在着天然的互补性。 机器学习与大数据的共生关系
机器学习,作为AI的一个重要分支,其核心在于让计算机系统通过数据“学习”,自动改进和优化算法,而无需显式编程。这一过程高度依赖于数据——尤其是大规模、高质量的数据。大数据技术则为机器学习提供了丰富的素材库,使得模型训练成为可能,从而提升预测、分类、聚类等任务的准确性和效率。 🎈大数据如何赋能机器学习 丰富的数据资源:
大数据提供了海量的数据资源,这些数据资源是机器学习算法训练和改进的基础。机器学习算法通过不断学习和分析大数据,可以自动发现数据中的模式和规律,从而提高预测和决策的准确性。 提高模型精确性:
-更多的数据往往能提升机器学习模型的精确性。大数据中包含的丰富信息使得模型能够更全面地理解问题,从而做出更准确的预测和决策。
处理大规模数据:
-在大数据时代,机器学习算法需要适应处理大规模数据的特点。这包括算法的可扩展性、并行性和实时性等方面的优化,以确保能够高效地处理和分析大数据。
支持实时处理:
-大数据中的数据产生和传输速度非常快,需要实时处理。机器学习算法也需要适应这种快速变化的数据环境,支持实时学习和预测。通过结合流式计算等技术,可以实现对大数据的实时分析和处理,以满足实时应用的需求。
促进创新应用:
-大数据为机器学习提供了更多的应用场景和机会。例如,在医疗、金融、商业等领域,大数据和机器学习的结合可以推动创新应用的发展,提高服务质量和效率。
📜3. 机器学习与AI大数据的融合应用 🌞数据分类与聚类 机器学习中的分类算法可以将数据划分为不同的类别,而聚类算法则可以将相似的数据聚集在一起。这些算法在推荐系统、图像识别等领域具有广泛应用。
示例代码(伪代码)(使用Python的scikit-learn库):
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.
C++蓝桥杯等级考试真题--第5级
背景 随着互联网服务的广泛普及与技术应用的深入发展,日志数据作为记录系统活动、用户行为和业务操作的宝贵资源,其价值愈发凸显。然而,当前海量日志数据的产生速度已经远远超出了传统数据分析工具的处理能力,这不仅要求我们具备高效的数据收集和存储机制,更呼唤着强大、灵活且易用的数据分析平台的诞生。在此背景下,Apache Spark,这一专为大规模数据处理而设计的计算引擎,成为了构建高性能日志分析应用的理想选择。阿里云 EMR Serverless Spark 版是一款全托管、一站式的数据处理平台,基于Spark Native Engine构建,专为大规模数据处理和分析设计,提供弹性、高效的服务,让用户无需关注基础设施管理,100%兼容Spark,简化从开发到运维的全链路工作流程。本文将以 OSS 日志处理场景为例,演示使用 EMR Serverless Spark 产品快速搭建日志分析应用。
OSS-HDFS 审计日志简介 阿里云的 OSS-HDFS 服务,是专为大数据处理和云原生数据湖存储设计的产品。该服务由阿里云的JindoFS提供技术支持,旨在无缝桥接阿里云对象存储(OSS)与 HDFS 生态系统,为 Apache Hadoop、Hive、Spark、Flink 等大数据处理框架提供高性能、高兼容性的存储解决方案。在阿里云 OSS 控制台创建一个新的 OSS Bucket 时可以选择开通 HDFS 服务,创建完成后新的 OSS Bucket 即可支持 HDFS 接口访问:
HDFS审计日志(Audit Log)是Hadoop分布式文件系统(HDFS)的一个重要组成部分,它详尽地记录了所有用户对 HDFS 执行的操作信息。这些日志对于系统管理员监控、安全审计以及故障排查至关重要。每当用户通过 HDFS 的 NameNode 执行操作(如读取、写入、删除文件或目录等),NameNode 就会生成一条审计日志记录。类似于开源版 HDFS,OSS-HDFS 默认就支持 auditlog 日志,在根目录下的 /.sysinfo/auditlog 目录下保存了近一个月的审计日志,并且按照日期目录进行切分。
审计日志条目通常包含一些关键信息,比如操作时间、操作人、操作成功与否、来源IP、操作命令、操作目标文件等。下面三条日志分别记录了delete、getfileinfo和mkdir操作详情:
2024-05-14 00:12:37.746 allowed=true ugi=hadoop (auth:UNKNOWN) ip=172.16.0.99 cmd=delete src=/tmp/hive/hadoop/c7e1564c-7f3f-4fe9-b993-1d56e1ddcd47 dst=<null> perm=<null> proto=rest 2024-05-14 00:07:36.652 allowed=true ugi=hadoop (auth:UNKNOWN) ip=172.
声明 声明:本教程基于modelscope.cn的演示站进行本地搭建,环境为Windows
作者GitHub地址:https://github.com/2noise/ChatTTS
Webui体验地址:https://modelscope.cn/studios/AI-ModelScope/ChatTTS-demo/summary
第一步 克隆代码 先在终端输入以下内容,克隆modelscope的文件到本地
git clone https://www.modelscope.cn/studios/AI-ModelScope/ChatTTS-demo.git 克隆好之后进入文件目录
到了目录之后直接执行安装txt中的内容太慢了,换成国内源很快就能下好
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 第二步 安装库 下好之后也不能立马执行,需要在手动安装一些库
依此执行以下命令
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple 上面安装没有问题,执行以下代码
python app.py 启动等待程序下载完成(白条可能会卡住不动,因为他是一次显示很多的,看一下网络宽带有占用就行了,不要暂停程序!)
错误解决 我就遇到一个错误,说什么Windows不支持,然后我根据错误修改了一些代码我就能运行了,由于我第一次搭建是拿物理电脑搭建的,解决运行之后想着写一篇文章,然后用虚拟机继续搭建,遇到的错误又不一样了,烦死了,于是我直接把我物理机的core.py中的内容复制到虚拟机中的core.py就能运行了,直接复制以下代码覆盖克隆下来的core.py
core.py在ChatTTS目录下面
import os import logging from omegaconf import OmegaConf import platform import torch from vocos import Vocos from .model.dvae import DVAE from .model.gpt import GPT_warpper from .utils.gpu_utils import select_device from .utils.infer_utils import count_invalid_characters, detect_language from .
前言 上一篇文章我们了解了 QiuDN 有不少读者想要了解详细的接入流程,这期就来向大家展示一下如何快速接入 QiuDN 实现全站加速。
正如官网所说的,QiuDN 是一款稳定、安全、可信的产品,他们的免费套餐配置如下图所示:
如果是为自己的个人博客加速,可以选用公益套餐,套餐的详情如下图所示:
另外 6.1-6.9 有特殊活动,可以低价获取高速CDN。
接入前的准备 易混淆的一些概念:
CDN加速通过域名进行接入,因此你需要准备一个可用的域名接入 CDN(加速域名,用户实际访问的地址),CNAME 域名不可以作为您的业务访问直接使用(应当使用加速域名)。加速域名接入后,系统会自动分配一个 CNAME 域名,需要您在域名解析商那里进行解析。CDN 节点没有缓存用户请求内容时,CDN 节点将会向 11.4.5.14 请求内容,11.4.5.14 即为源站地址。CDN 节点在请求 11.4.5.14 时,实际请求的地址为 “114514.com”,则 “114514.com” 即为回源 HOST,通常情况下,加速域名与回源HOST域名保持一致,您可以根据您的业务需求进行调整。 正式接入丘盾 进入正题,让我们接入 QiuDN
添加站点 首先,确认你的站点通过加速域名是否正常运转,检查端口是否开放正确,如果正常,前往丘盾控制台注册账户。官网地址
注册完成后,请先获取订单/套餐,否则无法进行操作,如果是博客等非盈利个人站点可申请专属永久免费(或试用套餐 0元/月)。
添加网站 来到 站点 > 站点列表 点击左上角的 添加站点 进入网站快速接入页面。
点击选择订单 选择套餐,填写加速域名(用户访问的域名)
添加源站,填写服务器IP即可完成初步创建!
管理站点 找到自己的站点,点击右侧的 管理 进入管理面板
找到CNAME 域名,到域名DNS服务器添加解析,这里不展开操作过程。
配置WAF 创建好站点后,同时还需要调整 WAF策略,否则你套了CDN源站依旧可能被打死或超载。
在站点的管理页面,我们点击WAF配置,进入配置,这里贴上官网的配置详情供大家参考:
配置 HTTPS 进入 SSL 管理界面
点击右侧的 SSL 申请即可自动申请证书
注意事项:必须先接入域名才可以申请证书(别问我怎么知道的)
贴上我的配置:
一、Connector / C 使用 要使用 C 语言连接 MySQL,需要使用 MySQL 官网提供的库,可以去官网进行下载:MySQL :: MySQL Community Downloads
我们使用 C 接口库来进行连接,要正确使用,还需要做一些准备工作: 保证 MySQL 服务有效。在官网上下载合适自己平台的 MySQL Connect 库,以备后用。 现在可以不需要像上面这样做了,因为我们在安装数据库时,系统就已经帮我们安装好了。
二、准备工作 1、验证库是否引入成功 编译并运行:
可以查看到当前 mysql 客户端的版本号。
三、MySQL 接口介绍 MySQL :: Developer Zone
可以自行选择:
1、初始化 mysql_init() 要使用库,就必须先进行初始化。
2、链接数据库 mysql_real_connect 初始化完毕之后,必须先链接数据库,在进行后续操作(MySQL 网络部分是基于 TCP/IP的)。
第一个参数 MYSQL 是 C api 中一个非常重要的变量(mysql_init 的返回值),里面内存非常丰富,有 port,dbname,charset 等连接基本参数。它也包含了一个叫 st_mysql_methods 的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。
建立好链接之后,获取英文没有问题,如果获取中文是乱码:需要设置链接的默认字符集为 utf-8,原始默认是 latin1。
3、下发 MySQL 命令 mysql_query 第二个参数是要执行的 sql 语句,如 select * from table。 4、获取执行结果 mysql_store_result sql 执行完以后,如果是查询语句,当然还要读取数据。如果 update,insert 等语句,那么就看下操作成功与否即可。
文章目录 1. 架构设计2. 应用场景3. 实现步骤3.1 步骤1:数据预处理3.2 步骤2:边缘计算初步分析3.3 步骤3:数据上传到云端3.4 步骤4:云端复杂分析3.5 步骤5:深度学习模型训练与部署 4. 云端API设计4.1 安装Flask4.2 API代码示例 5. 前端用户界面设计5.1 安装React Native CLI5.2 创建React Native项目5.3 界面代码示例 6. 整体系统工作流程7. 深度融合与优化策略8. 深度融合优化代码示例8.1 模型量化8.2 剪枝和蒸馏 9. 进一步优化与扩展10. 多模态数据融合示例11. 实时反馈与交互示例11.1 即时警报11.2 个性化建议 12. 总结 将AI大模型深度融合应用于穿戴设备的心率监测,可以显著提升设备的智能化水平和用户体验。以下是实现这一目标的详细架构和步骤: 1. 架构设计 硬件层
传感器:高精度心率传感器(如PPG传感器),用于实时采集心率数据。处理器:支持AI运算的嵌入式处理器(如ARM Cortex系列)。通信模块:支持蓝牙、Wi-Fi的模块,用于数据传输。 边缘计算层
数据预处理:对传感器采集的数据进行预处理,如滤波、去噪等。初步分析:使用轻量级的AI模型进行初步心率分析,提供即时反馈。 云计算层
大模型部署:部署复杂的AI大模型(如深度学习模型),进行高级分析和预测。数据存储与管理:采用云存储来管理和存储大量的用户心率数据,确保数据安全性和隐私性。个性化分析:利用大数据和AI模型,进行个性化的心率健康分析和建议。 应用层
移动应用:提供用户友好的移动应用界面,展示实时心率、历史数据和健康建议。用户交互:通过可穿戴设备和移动应用与用户进行交互,提供反馈和建议。 2. 应用场景 运动健康监测
实时监测用户的心率变化,提供运动强度建议。记录和分析运动数据,帮助用户优化锻炼计划。 心脏健康监护
实时监测心率,及时发现异常情况并发出警报。提供个性化的心脏健康建议,帮助用户管理心脏健康。 长期健康管理
通过长期数据分析,提供全面的健康趋势和报告。帮助用户识别潜在健康风险,提供预防措施建议。 通过将AI大模型深度融合于穿戴设备心率监测,可以显著提升设备的智能化和用户体验,为用户提供更精准、更个性化的健康管理服务。
为了将AI大模型深度融合应用于穿戴设备的心率监测,下面是一个简单的代码案例分析。这个示例展示了如何在嵌入式设备上进行数据预处理、边缘计算的初步分析,并将数据上传到云端进行复杂分析。
3. 实现步骤 3.1 步骤1:数据预处理 首先,我们从心率传感器采集数据,并进行预处理。预处理包括滤波和去噪。
import numpy as np from scipy.signal import butter, filtfilt # 模拟从传感器获取的心率数据 heart_rate_data = np.
目录 1. 页面加载事件(load、DOMContentLoaded)2. 元素滚动事件(scroll)3. 页面尺寸事件3.1 resize3.2 获取元素宽高3.3 获取元素位置(offsetLeft和offsetTop、getBoundingClientRect) 4. M端事件 1. 页面加载事件(load、DOMContentLoaded) load事件:
使用场景: 等外部资源(如图片、外部CSS和JavaScript等)加载完毕时才触发事件;或将javascript写在head中,等window加载完毕才触发事件,避免dom元素找不到绑定对象:window或img等 示例如下。javascript在head中,直接获取btn,添加监听事件是无效的,因为btn为null。所以给window添加load事件,等window的资源加载完毕,再去执行回调函数就可以点击按钮了
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0"> <title>Title</title> <script> // 等待页面所有资源加载完毕,就去执行回调函数 window.addEventListener('load', function () { const btn = document.querySelector('button') btn.addEventListener('click', function () { alert('我可以点击了') }) }) </script> </head> <body> <button>点我</button> </body> </html> DOMContentLoaded事件:
使用场景:当初始的HTML文档被完全加载和解析完成之后,无需等待样式表、图像等完全加载,就触发事件。比load事件触发时间更早绑定对象:docment 示例如下。给docment添加DOMContentLoaded事件,等docment的html加载完毕,就去执行回调函数就可以点击按钮了
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0"> <title>Title</title> <script> document.
前言 这是2024年第一场CCF初赛的题, 其实整场比赛,感觉不是特别难,就是码量大,偏模拟和数学。
对于A题,摩斯密码,很容易抄错,我一直在想有什么好办法可以规避它,是真的苦涩。
真题 摩斯密码 思路: 模拟题
真的太容易错了
from collections import defaultdict mp = defaultdict(str) mp['.-'] = 'A' mp['-...'] = 'B' mp['-.-.'] = 'C' mp['-..'] = 'D' mp['.'] = 'E' mp['..-.'] = 'F' mp['--.'] = 'G' mp['....'] = 'H' mp['..'] = 'I' mp['.---'] = 'J' mp['-.-'] = 'K' mp['.-..'] = 'L' mp['--'] = 'M' mp['-.'] = 'N' mp['---'] = 'O' mp['.--.'] = 'P' mp['--.-'] = 'Q' mp['.-.'] = 'R' mp['.
文章目录 ⛄1.RDB持久化🪂🪂1.1.执行时机🪂🪂1.2.RDB原理🪂🪂1.3.小结 ⛄2.AOF持久化🪂🪂2.1.AOF原理🪂🪂2.2.AOF配置🪂🪂2.3.AOF文件重写 ⛄3.RDB与AOF对比⛄4. 总结 Redis有两种持久化方案:
RDB持久化AOF持久化 ⛄1.RDB持久化 RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB文件,默认是保存在当前运行目录。
🪂🪂1.1.执行时机 RDB持久化在四种情况下会执行:
执行save命令执行bgsave命令Redis停机时触发RDB条件时 1)save命令 (不推荐)
执行下面的命令,可以立即执行一次RDB:
save命令会导致主进程执行 RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。
2)bgsave命令 (推荐)
下面的命令可以异步执行 RDB:
这个命令执行后会开启独立进程完成 RDB,主进程可以持续处理用户请求,不受影响。
3)停机时
Redis 停机时会执行一次 save 命令,实现 RDB 持久化。
4)触发RDB条件
Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:
# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB save 900 1 save 300 10 save 60 10000 RDB的其它配置也可以在redis.conf文件中设置:
# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱 rdbcompression yes # RDB文件名称 dbfilename dump.rdb # 文件保存的路径目录 dir .