sql的使用

MySQL、PostgreSQL关系型和MongoDB 和 Redis非关系型数据库

一、前期准备

在安装和使用数据库之前,确保你的 CentOS 7 系统具备以下条件:

  • 系统安装了基本的开发工具:如 gcc、make 等。
  • 有权限使用 sudo 命令。
  • 有良好的网络环境以下载软件包。

你可以通过以下命令确保系统软件包是最新的:

sudo yum update -y

二、关系型数据库

1. MySQL

MySQL 是最流行的开源关系型数据库之一,广泛应用于Web应用、ERP系统等场景。接下来详细讲解如何在 CentOS 7上安装、配置、使用以及开发中的 SQL 示例。

1.1 CentOS 7 安装 MySQL
  1. 安装 MySQL 官方源:
    CentOS 7 默认的 yum 源中没有 MySQL,因此需要先下载安装 MySQL 官方源。

    sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
    
  2. 安装 MySQL:

    sudo yum install mysql-server -y
    
  3. 启动 MySQL 并设置为开机自启:

    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    
  4. 设置初始 root 密码:
    MySQL 安装完成后会生成一个初始密码,使用以下命令查看:

    sudo grep 'temporary password' /var/log/mysqld.log
    

    使用这个密码登录并强制修改:

    mysql -u root -p
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
    
1.2 MySQL 开发使用
  1. 创建数据库:

    CREATE DATABASE testdb;
    
  2. 创建表:

    USE testdb;
    CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50),email VARCHAR(50),password VARCHAR(255)
    );
    
  3. 插入数据:

    INSERT INTO users (username, email, password) VALUES ('user1', 'user1@example.com', 'pass123');
    
  4. 查询数据:

    SELECT * FROM users;
    
  5. 高级操作:复杂查询与事务:

    • 联合查询:
      SELECT u.username, o.order_id FROM users u JOIN orders o ON u.id = o.user_id;
      
    • 事务操作:
      START TRANSACTION;
      UPDATE users SET password='newpass' WHERE username='user1';
      COMMIT;
      

MySQL 多表查询

MySQL 多表查询是关系型数据库中一个非常重要的功能,它允许开发者从多个相关表中获取数据。MySQL 提供了多种方式来进行多表查询,常见的有 连接查询(JOIN) 和 子查询(Subquery)。掌握这些技巧是数据库设计与查询优化中的核心技能。

以下是 MySQL 多表查询的总结,涵盖了常用的连接类型、子查询以及实际应用中的查询示例。


一、连接查询(JOIN)

1.1 INNER JOIN(内连接)

内连接是最常见的连接查询,它只返回两个表中匹配条件的数据。如果某一行在其中一个表中不存在对应的匹配行,那么该行将不会出现在结果集中。

语法:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

示例:
假设有两个表:

  • orders 表(存储订单信息)
  • customers 表(存储客户信息)

我们希望查询每个订单对应的客户信息:

SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

此查询返回订单和客户的匹配结果,仅显示那些在 orders 表中有订单,并且在 customers 表中有对应客户的记录。


1.2 LEFT JOIN(左连接)

左连接返回左表中的所有行,即使右表中没有匹配的数据,右表中的数据为空(NULL)。

语法:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

示例:
我们希望查询所有订单,包括那些没有匹配到客户的订单:

SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

此查询会显示所有订单,即使某些订单的客户信息缺失。


1.3 RIGHT JOIN(右连接)

右连接与左连接相反,它返回右表中的所有行,即使左表中没有匹配的数据。

语法:

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

示例:
我们希望查询所有客户,包括那些没有下订单的客户:

SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

此查询会显示所有客户信息,包含那些没有订单的客户。


1.4 FULL JOIN(全连接)

全连接返回两个表中的所有行,不论是否匹配。MySQL 本身不直接支持 FULL JOIN,但可以通过使用 UNION 结合 LEFT JOIN 和 RIGHT JOIN 来实现全连接。

语法:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column
UNION
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

示例:
返回所有客户和订单,不论是否有匹配关系:

SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
UNION
SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

1.5 CROSS JOIN(交叉连接)

交叉连接会返回两个表的笛卡尔积,即每一个表中的行都和另一个表中的每一行进行组合,不考虑是否有匹配条件。

语法:

SELECT columns
FROM table1
CROSS JOIN table2;

示例:
查询所有产品与所有订单的组合:

SELECT products.product_name, orders.order_id
FROM products
CROSS JOIN orders;

此查询返回所有产品和订单的每一种组合。


二、子查询(Subquery)

2.1 单行子查询

单行子查询返回一行数据,常用于条件判断。

语法:

SELECT columns
FROM table
WHERE column = (SELECT value FROM other_table WHERE condition);

示例:
查询下单次数最多的客户信息:

SELECT * 
FROM customers 
WHERE customer_id = (SELECT customer_id FROM orders GROUP BY customer_id ORDER BY COUNT(*) DESC LIMIT 1);

2.2 多行子查询

多行子查询返回多行数据,常与 IN、ANY、ALL 等关键字一起使用。

语法:

SELECT columns
FROM table
WHERE column IN (SELECT column FROM other_table WHERE condition);

示例:
查询下过订单的所有客户信息:

SELECT * 
FROM customers 
WHERE customer_id IN (SELECT customer_id FROM orders);

2.3 相关子查询

相关子查询是指子查询依赖于外部查询的值。与普通子查询不同,它在外部查询的每一行执行一次。

语法:

SELECT columns
FROM table1 AS t1
WHERE column = (SELECT value FROM table2 AS t2 WHERE t1.column = t2.column);

示例:
查询订单金额大于所有该客户历史订单平均金额的订单:

SELECT order_id, order_total
FROM orders AS o1
WHERE order_total > (SELECT AVG(order_total)FROM orders AS o2WHERE o1.customer_id = o2.customer_id);

三、联合查询(UNION)

UNION 用于合并两个或多个 SELECT 查询的结果。每个查询的列数和数据类型必须匹配。

语法:

SELECT columns FROM table1
UNION
SELECT columns FROM table2;

示例:
查询所有客户和供应商的名称(假设有 customers 和 suppliers 表):

SELECT customer_name AS name FROM customers
UNION
SELECT supplier_name AS name FROM suppliers;

注意:

  • UNION 默认去重,可以使用 UNION ALL 显示所有结果,包括重复项。

四、总结

  1. 内连接(INNER JOIN) 是最常用的多表查询方式,只返回两个表之间匹配的数据。用于查找共有信息。
  2. 左连接(LEFT JOIN) 和 右连接(RIGHT JOIN) 用于在查询中保留一方表的所有数据,即使另一方没有匹配数据。
  3. 全连接(FULL JOIN) 可以通过 UNION 来模拟,它返回两个表中的所有数据,不论是否有匹配项。
  4. 交叉连接(CROSS JOIN) 用于生成笛卡尔积,慎用。
  5. 子查询(Subquery) 用于嵌套查询,单行子查询和多行子查询在复杂查询中非常有用。
  6. 联合查询(UNION) 合并多个查询的结果集,但需要保证各查询的列数和类型相同。

通过理解这些查询方式,开发者能够轻松地处理多表数据操作,实现复杂业务逻辑。

1.3 PC 上的 MySQL 安装

在 PC(Windows 或 macOS)上安装 MySQL,可以通过 MySQL 官网下载合适版本:

  • MySQL 官方下载页面

下载完成后按照安装向导安装,并根据需求设置用户名和密码。


2. PostgreSQL

PostgreSQL 是一个高扩展性和标准化的关系型数据库,支持复杂的数据类型和查询,常用于金融、GIS等高要求的数据处理场景。

2.1 CentOS 7 安装 PostgreSQL
  1. 添加 PostgreSQL 仓库:

    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-centos10-10-2.noarch.rpm
    
  2. 安装 PostgreSQL:

    sudo yum install -y postgresql10-server postgresql10
    
  3. 初始化数据库并启动:

    sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
    sudo systemctl start postgresql-10
    sudo systemctl enable postgresql-10
    
2.2 PostgreSQL 开发使用
  1. 创建用户和数据库:

    sudo -u postgres psql
    

    在 psql 中:

    CREATE USER devuser WITH PASSWORD 'devpassword';
    CREATE DATABASE devdb OWNER devuser;
    GRANT ALL PRIVILEGES ON DATABASE devdb TO devuser;
    
  2. 表和数据操作:

    \c devdb;
    CREATE TABLE products (id SERIAL PRIMARY KEY,name VARCHAR(100),price NUMERIC(12, 2)
    );
    INSERT INTO products (name, price) VALUES ('Laptop', 999.99);
    SELECT * FROM products;
    
  3. 高级操作:复杂查询与函数:

    • 窗口函数:
      SELECT name, price, RANK() OVER (ORDER BY price DESC) FROM products;
      
    • 自定义函数:
      CREATE FUNCTION calculate_discount(price NUMERIC) RETURNS NUMERIC AS $$
      BEGINRETURN price * 0.9;
      END;
      $$ LANGUAGE plpgsql;
      

  1. MySQL 和 PostgreSQL 是关系型数据库,适合复杂事务和查询的场景。MySQL 更加简便,PostgreSQL 更加标准化和强大

三、非关系型数据库

1. MongoDB

MongoDB 是一种文档型的 NoSQL 数据库,使用 JSON 风格的 BSON 文档存储数据,常用于海量数据存储和实时分析场景。

1.1 CentOS 7 安装 MongoDB
  1. 添加 MongoDB 仓库:

    cat <<EOF | sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo
    [mongodb-org-4.4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
    EOF
    
  2. 安装 MongoDB:

    sudo yum install -y mongodb-org
    
  3. 启动 MongoDB:

    sudo systemctl start mongod
    sudo systemctl enable mongod
    
1.2 MongoDB 开发使用
  1. 连接 MongoDB:

    mongo
    
  2. 创建数据库与集合:

    use mydb;
    db.createCollection("users");
    db.users.insert({ name: "Alice", age: 25, email: "alice@example.com" });
    
  3. 查询数据:

    db.users.find();
    
  4. 高级操作:索引与聚合:

    • 创建索引:
      db.users.createIndex({ email: 1 });
      
    • 聚合操作:
      db.users.aggregate([{ $match: { age: { $gt: 20 } } },{ $group: { _id: null, avgAge: { $avg: "$age" } } }
      ]);
      

2. Redis

Redis 是一种基于内存的键值存储数据库,广泛用于缓存、消息队列等需要高性能的场景。

2.1 CentOS 7 安装 Redis
  1. 安装 EPEL 仓库:

    sudo yum install epel-release -y
    
  2. 安装 Redis:

    sudo yum install redis -y
    
  3. 启动 Redis:

    sudo systemctl start redis
    sudo systemctl enable redis
    
2.2 Redis 开发使用
  1. 连接 Redis:

    redis-cli
    
  2. 基本操作:

    SET user:1 "Alice"
    GET user:1
    
  3. 高级操作:集合与发布订阅:

    • 集合操作:
      SADD myset "item1" "item2" "item3"
      SMEMBERS myset
      
    • 发布订阅:
      SUBSCRIBE mychannel
      PUBLISH mychannel "Hello, Redis!"
      

连接工具

在 CentOS 7 环境中,安装好 MySQL、PostgreSQL、MongoDB 和 Redis 后,可以使用图形化界面工具和命令行工具连接和管理数据库。以下是常用的数据库连接工具介绍,以及它们在不同操作系统下的安装方式。

1. MySQL

常用连接工具
  • MySQL Workbench: 官方提供的图形化管理工具,支持查询、设计和管理 MySQL 数据库。
  • DBeaver: 一款跨平台数据库管理工具,支持多种数据库,包括 MySQL。
  • HeidiSQL: 轻量级的 MySQL 图形化管理工具。
安装和使用
  • MySQL Workbench:

    • Windows 和 macOS 可以直接从 MySQL Workbench 官方网站 下载并安装。
    • CentOS 安装:
      sudo yum install mysql-workbench
      
  • DBeaver:

    • DBeaver 在 官方页面 提供下载包,支持多平台。
    • CentOS 安装:
      1. 下载 DBeaver 的 RPM 包:
        wget https://dbeaver.io/files/dbeaver-ce-latest-stable.x86_64.rpm
        
      2. 安装 DBeaver:
        sudo yum install -y ./dbeaver-ce-latest-stable.x86_64.rpm
        
  • HeidiSQL(仅支持 Windows):

    • HeidiSQL 官方网站 提供下载,Windows 用户可以直接安装并连接 MySQL。
连接示例
  1. 打开 MySQL Workbench 或 DBeaver。
  2. 选择 “New Connection”。
  3. 输入以下连接信息:
    • Host: localhost(或远程服务器的 IP 地址)
    • Port: 3306
    • Username: root
    • Password: 你设置的密码
    • Database: mydb(可选)

2. PostgreSQL

常用连接工具
  • pgAdmin: 官方提供的图形化管理工具,支持查询、设计和管理 PostgreSQL 数据库。
  • DBeaver: 同样支持 PostgreSQL。
安装和使用
  • pgAdmin:

    • Windows 和 macOS 用户可以从 pgAdmin 官方网站 下载。
    • CentOS 安装:
      1. 安装 EPEL 仓库:
        sudo yum install -y epel-release
        
      2. 安装 pgAdmin 4:
        sudo yum install -y pgadmin4
        
  • DBeaver:如上所述,DBeaver 支持 PostgreSQL。

连接示例
  1. 打开 pgAdmin 或 DBeaver。
  2. 创建一个新连接,输入以下信息:
    • Host: localhost(或远程服务器的 IP 地址)
    • Port: 5432
    • Username: postgres(或创建的用户)
    • Password: 对应用户密码
    • Database: mydb(可选)

3. MongoDB

常用连接工具
  • MongoDB Compass: MongoDB 官方提供的图形化工具,支持管理和查询 MongoDB 数据。
  • Robo 3T: 轻量级的 MongoDB 管理工具。
安装和使用
  • MongoDB Compass:

    • 从 MongoDB 官方网站 下载适用于你的系统的 Compass 版本。
    • CentOS 安装:
      1. 下载 MongoDB Compass:
        wget https://downloads.mongodb.com/compass/mongodb-compass-1.33.1.x86_64.rpm
        
      2. 安装 Compass:
        sudo yum install -y ./mongodb-compass-1.33.1.x86_64.rpm
        
  • Robo 3T:

    • 可以从 Robo 3T 官方网站 下载适合平台的版本。
连接示例
  1. 打开 MongoDB Compass 或 Robo 3T。
  2. 输入以下连接信息:
    • Host: localhost
    • Port: 27017
    • Authentication: 使用你设置的用户名和密码(如果启用了身份验证)
    • Database: mydb(可选)

4. Redis

常用连接工具
  • RedisInsight: Redis 官方提供的图形化管理工具,支持 Redis 查询和数据管理。
  • Another Redis Desktop Manager (RDM): 跨平台的 Redis 管理工具。
安装和使用
  • RedisInsight:

    • 从 RedisInsight 官方网站 下载并安装适合平台的版本。
  • Another Redis Desktop Manager (RDM):

    • 从 RDM 官方网站 下载适合的平台安装包。
连接示例
  1. 打开 RedisInsight 或 RDM。
  2. 新建一个 Redis 连接,输入以下信息:
    • Host: localhost(或远程 Redis 服务器的 IP 地址)
    • Port: 6379
    • Password: 如果 Redis 设置了密码,请填写,否则留空。

总结

  • MySQL:可使用 MySQL Workbench、DBeaver、HeidiSQL 等工具。
  • PostgreSQL:可使用 pgAdmin、DBeaver 等工具。
  • MongoDB:可使用 MongoDB Compass、Robo 3T 等工具。
  • Redis:可使用 RedisInsight、RDM 等工具。

这些工具提供了方便的图形界面,帮助开发者可视化管理数据库,执行查询,并进行调试和优化。

Elasticsearch

Elasticsearch 是一款开源的分布式搜索引擎,专为全文搜索、结构化数据搜索和分析而设计。它属于 NoSQL 数据库范畴,但其主要用途是搜索和分析大规模的文本和数据。Elasticsearch 具有高扩展性、实时搜索和分布式架构等特点,被广泛应用于日志分析、搜索引擎、推荐系统等场景。

以下是 Elasticsearch 从安装到开发的全流程总结,适用于 CentOS 7 服务器和本地开发环境。


一、Elasticsearch 概述

1. 特性:

  • 全文搜索:能够在海量文档中进行快速的全文搜索。
  • 分布式架构:内置分片和副本机制,可以轻松扩展到数千个节点。
  • 实时分析:通过 Kibana、Logstash 等工具进行实时的数据分析。
  • 多租户支持:可以处理多种类型的数据,并针对不同的数据类型进行索引和查询。

2. 典型使用场景:

  • 日志分析:通过 Elasticsearch、Logstash 和 Kibana(即 ELK Stack)构建实时日志分析平台。
  • 全文检索:在大型文档集内进行关键词搜索,如电子商务网站的产品搜索。
  • 监控与报警:与 Beats 或其他数据采集工具结合,用于监控系统的各类指标数据并触发报警。

二、Elasticsearch 安装(CentOS 7)

1. 添加 Elasticsearch 仓库

首先,确保 CentOS 7 已经安装 wget,并添加 Elasticsearch 的 yum 源。

sudo yum install -y wget
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-x86_64.rpm
sudo rpm --install elasticsearch-7.10.0-x86_64.rpm

2. 配置 Elasticsearch

Elasticsearch 的配置文件位于 /etc/elasticsearch/elasticsearch.yml,你可以通过编辑该文件进行设置:

sudo vi /etc/elasticsearch/elasticsearch.yml

一些重要的配置项:

  • 集群名称:定义集群的名字,如 cluster.name: my-cluster。
  • 节点名称:配置节点的名称,如 node.name: node-1。
  • 网络绑定:配置 Elasticsearch 可以监听的地址,如 network.host: 0.0.0.0 以允许外部访问。

3. 启动和设置自启

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

4. 验证 Elasticsearch 运行状态

你可以通过 HTTP 请求验证 Elasticsearch 是否成功启动:

curl -X GET "localhost:9200/"

若一切正常,将返回 Elasticsearch 的基本信息,如版本号等。


三、Elasticsearch 核心概念

1. 索引(Index)

  • Elasticsearch 中的数据存储在索引(类似于关系型数据库中的数据库)中。
  • 每个索引都有多个文档,并且每个文档都有一组字段,类似于关系型数据库的表和行。

2. 文档(Document)

  • 文档是 Elasticsearch 中最基本的数据单位,每个文档可以理解为一条 JSON 格式的数据。

3. 分片与副本(Shard & Replica)

  • 分片:数据被水平切分到多个分片中,使得 Elasticsearch 能够水平扩展。
  • 副本:每个分片有多个副本,以确保数据的高可用性。

四、Elasticsearch 开发使用

1. 插入数据(Indexing)

可以通过 POST 请求将文档插入 Elasticsearch 索引。

curl -X POST "localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'
{"name": "Alice","age": 30,"city": "New York"
}'

该命令会在 my_index 索引中插入一条文档,ID 为 1。

2. 查询数据(Searching)

使用 GET 请求来查询数据。

  • 简单查询:

    curl -X GET "localhost:9200/my_index/_search?q=name:Alice"
    
  • 复杂查询:
    使用 POST 请求可以进行更复杂的查询,如多字段匹配:

    curl -X POST "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
    {"query": {"bool": {"must": [{ "match": { "name": "Alice" } },{ "range": { "age": { "gte": 25 } } }]}}
    }'
    

3. 更新数据(Updating)

使用 POST 请求可以更新已有文档中的数据。

curl -X POST "localhost:9200/my_index/_update/1" -H 'Content-Type: application/json' -d'
{"doc": {"age": 31}
}'

4. 删除数据(Deleting)

使用 DELETE 请求可以删除索引或文档。

  • 删除文档:

    curl -X DELETE "localhost:9200/my_index/_doc/1"
    
  • 删除整个索引:

    curl -X DELETE "localhost:9200/my_index"
    

五、Elasticsearch 高级操作

1. 索引映射(Index Mapping)

在 Elasticsearch 中,映射(mapping)定义了字段的数据类型以及如何处理这些字段。例如,可以将 age 字段设置为整数类型。

curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{"mappings": {"properties": {"name": { "type": "text" },"age": { "type": "integer" },"city": { "type": "keyword" }}}
}'

2. 聚合查询(Aggregation)

Elasticsearch 强大的聚合功能允许对数据进行分组和统计。以下示例展示了按城市进行分组,并计算每个城市的用户数量。

curl -X POST "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{"size": 0,"aggs": {"group_by_city": {"terms": { "field": "city.keyword" }}}
}'

3. 分片与集群管理

在生产环境中,Elasticsearch 通常运行在集群模式下,多个节点组成集群。通过分片和副本配置,可以管理和扩展集群容量。

  • 查看分片状态:

    curl -X GET "localhost:9200/_cat/shards"
    
  • 动态调整副本数:

    curl -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d'
    {"index": {"number_of_replicas": 2}
    }'
    

六、Elasticsearch 可视化工具:Kibana

为了更方便地管理和分析 Elasticsearch 中的数据,可以使用 Kibana,它是 Elastic Stack 的一部分,主要用于数据可视化。

1. 安装 Kibana

sudo yum install kibana -y
sudo systemctl start kibana
sudo systemctl enable kibana

Kibana 启动后,默认通过 http://localhost:5601 访问。你可以通过 Kibana 的图形界面来进行数据分析和可视化。


七、总结

  1. Elasticsearch 是一种非常适合全文搜索和实时数据分析的分布式搜索引擎,特别适合处理大规模的非结构化数据。
  2. 它支持分布式架构、实时搜索、高扩展性等特点,是构建搜索引擎和日志分析系统的理想选择。
  3. 通过结合 Kibana 和 Logstash 等工具,能够轻松构建一个功能强大的数据处理与分析平台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/bicheng/56634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3 和 Vue 2区别

Vue 3 是 Vue 2 的全新升级版本&#xff0c;引入了诸多新的特性&#xff0c;并在性能、开发体验、响应式系统等多个方面进行了改进。以下是 Vue 2 和 Vue 3 的详细对比&#xff1a; 1. 生命周期钩子差异 Vue 3 保留了大部分 Vue 2 的生命周期钩子&#xff0c;但部分名称有所调…

力扣 3.无重复字符的最长子串——Java

题目要求&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb&quo…

洛谷P3478 [POI2008] STA-Station(换根dp)

题目链接 https://www.luogu.com.cn/problem/P3478 思路 对于 n 1 e 6 n1e6 n1e6&#xff0c;我们考虑换根dp。 定义 f [ u ] f[u] f[u]表示以 u u u为根的子树中&#xff0c;所有节点的深度之和。定义 d p [ u ] dp[u] dp[u]表示整棵树以 u u u为根时&#xff0c;所有节点…

Clip模型详解

CLIP(Contrastive Language-Image Pre-training)是由OpenAI在2021年推出的一种基于对比学习的多模态预训练模型,它通过大规模的图像和文本数据进行训练,使得模型能够理解图像内容和相关文本之间的语义关系。这种模型能够同时理解文本和图像,可以看作是一个连接语言和视觉两…

制药企业MES与TMS的数据库改造如何兼顾安全与效率双提升

*本图由AI生成 在全球制造业加速数字化转型的浪潮中&#xff0c;一家来自中国的、年营业额超过200亿元的制药企业以其前瞻性的视角和果断的行动&#xff0c;成为该行业里进行国产化改造的先锋。通过实施数据库改造试点项目&#xff0c;该企业实现了其关键业务系统MES&#xff0…

python的多线程和多进程

首先需要明确的是&#xff0c;多进程和其他语言的一样&#xff0c;能够利用多核cpu&#xff0c;但是python由于GIL的存在&#xff0c;多线程在执行的时候&#xff0c;实际上&#xff0c;每一时刻只有一个线程在执行。相当于是单线程。然而多线程在某些情况下&#xff0c;还是能…

使用 python 下载 bilibili 视频

本文想要达成的目标为&#xff1a;运行 python 代码之后&#xff0c;在终端输入视频链接&#xff0c;可自动下载高清 1080P 视频并保存到相应文件夹。 具体可分为两大步&#xff1a;首先&#xff0c;使用浏览器开发者工具 F12 获取请求链接相关信息&#xff08;根据 api 接口下…

Leetcode 1514. 概率最大的路径

1.题目基本信息 1.1.题目描述 给你一个由 n 个节点&#xff08;下标从 0 开始&#xff09;组成的无向加权图&#xff0c;该图由一个描述边的列表组成&#xff0c;其中 edges[i] [a, b] 表示连接节点 a 和 b 的一条无向边&#xff0c;且该边遍历成功的概率为 succProb[i] 。 …

Python知识点:基于Python工具,如何使用Scikit-Image进行图像处理与分析

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 基于Python的Scikit-Image图像处理与分析指南 在Python的科学计算生态系统中&am…

3万字66道Java基础面试题总结(2024版本)

本文合计三万字&#xff0c;整合了66道当前Java面试中比较热门的面试题&#xff0c;希望对大家有所帮助。 文章目录 一、Java概念1. JDK和JRE和JVM的区别2. Java语言有哪些特点3. 什么是字节码&#xff1f;采用字节码的最大好处是什么&#xff1f;4. Oracle JDK 和 OpenJDK 的对…

【3dgs】Gaussian-SLAM发展关键历程梳理

【3dgs】Gaussian-SLAM 0. 写在前面1. 3D Splatting与SLAM流程2. Splatting SLAM&#xff1a;单目/RGB-D(2024年新作&#xff09;2.1 相机跟踪精度2.2 新视图渲染性能2.3 消融实验 3. Gaussian-SLAM&#xff08;Photo-SLAM&#xff09; Photo-SLAM技术原理详解 ORBSLAM3dGS&am…

OKG Research:如何衡量链上数据的开放价值?

在新加坡Token2049期间&#xff0c;欧科云链研究院受邀参加Bloomberg主办的企业另类资产投资峰会2024&#xff0c;与多位专家围绕未来数据形态与前景进行了深入交流。 活动后&#xff0c;欧科云链研究院负责人Lola Wang与资深研究员Jason Jiang在大公网发表署名文章《如何衡量…

faust,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - faust。 Github地址&#xff1a;https://github.com/robinhood/faust 在分布式系统和实时数据处理的世界里&#xff0c;消息流处理&#xff08;Stream Processing&#xff09;变得越来越重要。Faust 是一个 Python 库…

【工具变量】上市公司企业广告支出数据(2007-2023年)

一、测算方式&#xff1a;具体而言&#xff0c;参照 Lu 等&#xff08;2022&#xff09;的研究&#xff0c;本文通过上市公司财务报表附注获取每家上市公司每年销售费用明细项目&#xff0c;筛选出广告费、广告宣传费、广告推广费、广告策划费、广告展览费等与广告支出相关的项…

Python入门笔记(二)

文章目录 第六章 列表list6.1 创建列表&#xff1a;[]、list()、列表生成式6.2 索引访问元素、元素返回索引index()6.3 列表增加元素:append()、extend()、insert()6.4 列表删除元素&#xff1a;remove()、del()、pop()、clear()6.5 列表修改元素6.6 排序&#xff1a;.sort()、…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

自定义函数查看OS的file cache

简介 在OS中使用cache机制&#xff0c;主要为了提高磁盘的读取效率&#xff0c;避免高频的IO交换。将频繁访问的数据存放在file cache中&#xff0c;下一次在获取的时候就可以直接读取&#xff0c;缓存高命中率对于数据高速检索十分有利。 smem smem 是一个可以显示 Linux 系…

Spring Boot比Spring多哪些注解

Spring Boot相对于Spring框架而言&#xff0c;引入了一些特有的注解来简化配置、自动装配组件和实现声明式服务。以下是一些Spring Boot相对于Spring框架特有的主要注解&#xff1a; SpringBootApplication&#xff1a; 作用&#xff1a;标注一个主程序类&#xff0c;表明这是一…

前端怎么实现电子签名

电子签名&#xff08;e-signature&#xff09;作为一种数字化的签署方式&#xff0c;广泛应用于合同、协议等文件的确认中。随着科技的发展&#xff0c;前端技术也为电子签名的实现提供了便利。本文将探讨在前端如何实现电子签名&#xff0c;包括技术选型、实现步骤及注意事项。…

【即见未来,为何不拜】聊聊分布式系统中的故障监测机制——Phi Accrual failure detector

前言 昨天在看tcp拥塞控制中的BBR(Bottleneck Bandwidth and Round-trip propagation time)算法时&#xff0c;发现了这一特点&#xff1a; 在BBR以前的拥塞控制算法中(如Reno、Cubic、Vegas)&#xff0c;都依赖于丢包事件的发生&#xff0c;在高并发时则会看到网络波动的现象…