当前位置: 首页 > news >正文

图数据库 - Neo4j简介

深入理解 Neo4j 与 Cypher 语法

什么是 Neo4j

Neo4j 是一个基于图的数据库管理系统,它使用图形理论来表示数据关系。这种数据库与传统的关系型数据库不同,它更适合处理高度互联的数据结构。

基本概念
  1. :在 Neo4j 中,数据以图的形式存储。图由节点(Nodes)、关系(Relationships)和属性(Properties)组成。

    • 节点(Nodes):图中的实体,例如人、地点或事件。
    • 关系(Relationships):节点之间的连接,表示节点之间的关联。
    • 属性(Properties):存储在节点或关系中的键值对,用于描述节点或关系的详细信息。
  2. 标签(Labels):用于将节点分类,例如一个“Person”标签可以应用于所有代表人的节点。

  3. 类型(Types):关系的类型,例如“FRIENDS_WITH”表示两个节点之间是朋友关系。

特点和优势
  1. 灵活的数据模型:与传统关系型数据库的表结构不同,Neo4j 允许灵活地定义数据模型,更适合处理复杂和变化的数据结构。

  2. 高效的关系处理:Neo4j 专为处理大量关系而设计,查询关系数据非常高效。例如,查找一个人所有的朋友和朋友的朋友在 Neo4j 中比在关系型数据库中更快。

  3. 查询语言 Cypher:Neo4j 使用一种称为 Cypher 的声明性查询语言。Cypher 类似于 SQL,但更适合处理图形数据。它使用 ASCII 艺术风格的符号来表示图形结构。

Cypher 语法

Cypher 是 Neo4j 的查询语言,用于对图数据库进行创建、读取、更新和删除操作。Cypher 语言设计直观,类似于 SQL,但专门针对图数据库进行了优化。

基本元素
  1. 节点(Nodes)

    • 圆括号 () 表示一个节点。
    • 例子:
      (n:Person {name: 'Alice', age: 30})
      
      上述例子创建了一个节点 n,它的标签为 Person,并且有两个属性 nameage
  2. 关系(Relationships)

    • 方括号 [] 表示一个关系。
    • 通常与箭头符号一起使用来表示关系的方向。
    • 例子:
      (a)-[r:FRIENDS_WITH]->(b)
      
      上述例子表示节点 a 和节点 b 之间有一个 FRIENDS_WITH 关系,关系变量为 r
  3. 箭头 --><--

    • --> 表示从左向右的方向。
    • <-- 表示从右向左的方向。
    • 例子:
      (a)-[:KNOWS]->(b)
      (b)<-[:LOVES]-(c)
      
标签和属性
  1. 冒号 :

    • 用于表示节点的标签或关系的类型。
    • 例子:
      (n:Person)
      [r:FRIENDS_WITH]
      
  2. 大括号 {}

    • 用于表示节点或关系的属性。
    • 属性以键值对的形式存在。
    • 例子:
      (n:Person {name: 'Alice', age: 30})
      
变量
  1. 变量
    • 可以为节点、关系和路径命名,以便在查询中引用。
    • 例子:
      MATCH (a:Person)-[r:FRIENDS_WITH]->(b:Person)
      RETURN a, r, b
      
      上述例子中,arb 分别是节点 Person 和关系 FRIENDS_WITH 的变量。
匹配和返回
  1. MATCH

    • 用于模式匹配。
    • 例子:
      MATCH (n:Person {name: 'Alice'})
      
  2. RETURN

    • 用于指定查询结果的返回内容。
    • 例子:
      RETURN n
      
其他符号和关键词
  1. CREATE

    • 用于创建节点和关系。
    • 例子:
      CREATE (n:Person {name: 'Alice', age: 30})
      
  2. SET

    • 用于更新节点或关系的属性。
    • 例子:
      MATCH (n:Person {name: 'Alice'})
      SET n.age = 31
      
  3. DELETE

    • 用于删除节点或关系。
    • 例子:
      MATCH (n:Person {name: 'Alice'})
      DELETE n
      
  4. REMOVE

    • 用于删除节点或关系的属性或标签。
    • 例子:
      MATCH (n:Person {name: 'Alice'})
      REMOVE n.age
      
  5. WHERE

    • 用于添加条件过滤。
    • 例子:
      MATCH (n:Person)
      WHERE n.age > 30
      RETURN n
      
  6. AND、OR、NOT

    • 用于逻辑运算。
    • 例子:
      MATCH (n:Person)
      WHERE n.age > 30 AND n.city = 'New York'
      RETURN n
      
  7. ORDER BY

    • 用于排序结果。
    • 例子:
      MATCH (n:Person)
      RETURN n
      ORDER BY n.age DESC
      
  8. LIMIT

    • 用于限制返回结果的数量。
    • 例子:
      MATCH (n:Person)
      RETURN n
      LIMIT 10
      

Neo4j 的进阶使用

Neo4j 是一个功能强大且灵活的图数据库管理系统,除了基本的节点和关系操作,还提供了许多高级功能,使其在复杂数据分析和应用场景中得以广泛应用。以下是一些 Neo4j 的进阶使用方法:

1. 图算法

Neo4j 提供了一套丰富的图算法库,用于处理图数据的分析和计算。常用的图算法包括:

  • PageRank:用于计算节点的重要性,常用于网页排名和社交网络分析。
    CALL algo.pageRank.stream('Person', 'FRIENDS_WITH', {})
    YIELD nodeId, score
    RETURN algo.getNodeById(nodeId).name AS name, score
    ORDER BY score DESC
    
  • 最短路径:用于查找两个节点之间的最短路径。
    MATCH (start:Person {name: 'Alice'}), (end:Person {name: 'Bob'})
    CALL algo.shortestPath.stream(start, end, 'FRIENDS_WITH')
    YIELD nodeId, cost
    RETURN algo.getNodeById(nodeId).name AS name, cost
    
  • 社区检测:用于发现图中的社区结构。
    CALL algo.louvain.stream('Person', 'FRIENDS_WITH', {})
    YIELD nodeId, community
    RETURN algo.getNodeById(nodeId).name AS name, community
    ORDER BY community
    
2. 高级查询

使用 Cypher 进行复杂查询时,可以利用以下高级功能:

  • WITH 子句:用于将查询结果临时存储,以便在后续查询中使用。

    MATCH (a:Person)-[:FRIENDS_WITH]->(b:Person)
    WITH a, count(b) AS friendsCount
    WHERE friendsCount > 5
    RETURN a.name, friendsCount
    
  • UNION:用于合并多个查询的结果。

    MATCH (n:Person {name: 'Alice'}) RETURN n.name AS name, 'Alice' AS type
    UNION
    MATCH (n:Person {name: 'Bob'}) RETURN n.name AS name, 'Bob' AS type
    
  • 子查询:在 Cypher 4.0 及以上版本中,支持在查询中嵌套子查询。

    CALL {MATCH (a:Person)-[:FRIENDS_WITH]->(b:Person)RETURN a.name AS name, count(b) AS friendsCount
    }
    RETURN name, friendsCount
    
3. 数据建模和优化
  • 模式建模:根据应用需求设计合适的图数据模式。

    CREATE (alice:Person {name: 'Alice', age: 30})
    CREATE (company:Company {name: 'Neo4j'})
    CREATE (alice)-[:WORKS_AT]->(company)
    
  • 使用索引和约束:创建索引和约束来提高查询性能和保证数据完整性。

    CREATE INDEX ON :Person(name)
    CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
    
  • 批量导入数据:使用 Neo4j 的批量导入工具(如 neo4j-admin import)来导入大量数据,提高导入效率。

    neo4j-admin import --nodes=import/persons.csv --relationships=import/friends.csv
    
4. 安全和权限管理
  • 角色和权限:使用 Neo4j 的角色和权限管理功能来控制用户对数据的访问。

    CREATE USER myUser SET PASSWORD 'password' CHANGE NOT REQUIRED
    CREATE ROLE myRole
    GRANT ROLE myRole TO myUser
    GRANT MATCH {name} ON GRAPH neo4j ELEMENTS WHERE (n:Person) TO myRole
    
  • 数据加密:启用 TLS 加密来保护数据传输的安全性。

    dbms.ssl.policy.bolt.enabled=true
    dbms.ssl.policy.bolt.base_directory=certificates/bolt
    dbms.ssl.policy.bolt.private_key=private.key
    dbms.ssl.policy.bolt.public_certificate=public.crt
    
5. 可视化和集成
  • 数据可视化:使用 Neo4j Bloom 或 Neo4j Browser 等工具进行数据可视化和分析。

    • Neo4j Bloom:提供直观的图数据探索和可视化工具,支持通过自然语言查询图数据。
    • Neo4j Browser:内置的图数据库管理和查询工具,支持 Cypher 查询和图数据可视化。
  • 集成其他工具:集成 Spark、Kafka、Elasticsearch 等工具进行实时数据处理和分析。

    • Neo4j 与 Spark 集成
      val graph = Neo4jGraph.loadGraph(sc, "Person", "FRIENDS_WITH")
      graph.vertices.collect.foreach(println)
      
    • Neo4j 与 Kafka 集成
      kafka-console-producer.sh --broker-list localhost:9092 --topic neo4j
      

综合实例

以下是一个综合示例,展示如何使用上述符号和关键词来进行复杂查询:

// 创建节点和关系
CREATE (alice:Person {name: 'Alice', age: 30}),(bob:Person {name: 'Bob', age: 32}),(carol:Person {name: 'Carol', age: 25}),(dave:Person {name: 'Dave', age: 29}),(alice)-[:FRIENDS_WITH]->(bob),(bob)-[:FRIENDS_WITH]->(carol),(alice)-[:FRIENDS_WITH]->(carol),(carol)-[:FRIENDS_WITH]->(dave)// 查询 Alice 的朋友
MATCH (alice:Person {name: 'Alice'})-[:FRIENDS_WITH]->(friend)
RETURN friend.name// 查询 Alice 的朋友的朋友,排除 Alice 本人
MATCH (alice:Person {name: 'Alice'})-[:FRIENDS_WITH]->()-[:FRIENDS_WITH]->(fof)
WHERE fof.name <> 'Alice'
RETURN fof.name// 统计每个人的朋友数,按朋友数量降序排序
MATCH (person:Person)-[:FRIENDS_WITH]->(friend)
RETURN person.name, count(friend) AS friendsCount
ORDER BY friendsCount DESC// 更新 Bob 的年龄
MATCH (bob:Person {name: 'Bob'})
SET bob.age = 33// 删除 Dave 节点及其所有关系
MATCH (dave:Person {name: 'Dave'})
DETACH DELETE dave

实际应用案例:社交网络分析

假设我们有一个社交网络的图数据库,其中包含用户及其好友关系。我们需要分析这个社交网络,找出每个用户的朋友数,并推荐可能感兴趣的新朋友。

  1. 创建社交网络数据

    CREATE (alice:Person {name: 'Alice', age: 30}),(bob:Person {name: 'Bob', age: 32}),(carol:Person {name: 'Carol', age: 25}),(dave:Person {name: 'Dave', age: 29}),(alice)-[:FRIENDS_WITH]->(bob),(bob)-[:FRIENDS_WITH]->(carol),(alice)-[:FRIENDS_WITH]->(carol),(carol)-[:FRIENDS_WITH]->(dave)
    
  2. 查询每个用户的朋友数

    MATCH (person:Person)-[:FRIENDS_WITH]->(friend)
    RETURN person.name, count(friend) AS friendsCount
    ORDER BY friendsCount DESC
    
  3. 推荐新朋友

    • 查找用户的朋友的朋友,但排除直接朋友和自己
    MATCH (alice:Person {name: 'Alice'})-[:FRIENDS_WITH]->()-[:FRIENDS_WITH]->(fof)
    WHERE NOT (alice)-[:FRIENDS_WITH]-(fof) AND fof <> alice
    RETURN fof.name
    

实际应用案例:欺诈检测

假设我们有一个金融交易网络的数据,需要通过图分析检测潜在的欺诈行为。

  1. 创建交易数据

    CREATE (alice:Person {name: 'Alice'}),(bob:Person {name: 'Bob'}),(carol:Person {name: 'Carol'}),(dave:Person {name: 'Dave'}),(alice)-[:TRANSFERRED {amount: 500}]->(bob),(bob)-[:TRANSFERRED {amount: 300}]->(carol),(carol)-[:TRANSFERRED {amount: 200}]->(dave),(dave)-[:TRANSFERRED {amount: 700}]->(alice)
    
  2. 查询环形交易路径

    MATCH (a:Person)-[r:TRANSFERRED]->(b:Person)
    WHERE a <> b
    WITH a, b, collect(r.amount) AS amounts, count(*) AS count
    WHERE count > 1
    RETURN a.name, b.name, amounts
    
  3. 计算 PageRank

    CALL algo.pageRank.stream('Person', 'TRANSFERRED', {iterations: 20, dampingFactor: 0.85})
    YIELD nodeId, score
    RETURN algo.getNodeById(nodeId).name AS name, score
    ORDER BY score DESC
    

Neo4j 和 MySQL 的区别

特性Neo4jMySQL
数据库类型图数据库关系型数据库
数据模型图数据模型(节点和关系)关系数据模型(表和行)
查询语言CypherSQL
适用场景高度互联的数据,如社交网络、推荐系统、欺诈检测等结构化数据,如客户管理、订单管理、财务记录等
数据表示使用节点和关系表示实体及其关系使用表、行和列表示实体及其属性
关系处理擅长处理复杂关系和路径查询,查询关系数据高效处理多表关联时较复杂,性能较低
事务处理支持 ACID 特性支持 ACID 特性
扩展性适合处理大型图数据,水平扩展性好适合处理结构化数据,水平和垂直扩展性好
索引支持节点和关系的索引支持表的索引
社区和支持拥有活跃的社区和专业支持,提供丰富的文档和示例拥有广泛的社区支持和丰富的文档,提供各种开源和商业支持选项
性能优化针对图遍历和路径查询进行了优化,适合处理复杂图数据的查询针对多表查询和大数据量处理进行了优化,适合处理复杂的关系型数据查询
数据一致性强一致性强一致性
灵活性数据模型灵活,适合动态变化的数据结构数据模型相对固定,适合预定义结构的数据
数据复杂性能够高效处理复杂的多对多关系,适用于社交网络、供应链管理等复杂场景适用于层次结构明确的场景,复杂多对多关系处理较繁琐
数据关联数据通过关系直接关联,查询时无需多表连接,查询速度快数据通过外键关联,复杂查询需要多表连接,查询速度相对较慢
数据查询复杂查询简单直观,适用于深度数据关系分析简单查询方便高效,复杂查询需要通过多表连接实现
存储方式使用面向关系的存储方式,适合关系密集型数据使用面向行的存储方式,适合结构化的关系型数据
数据更新更新操作灵活,能够高效处理频繁变化的数据更新操作需要考虑表结构,适合数据结构相对稳定的场景
架构面向关系的架构,适合需要高效处理关系数据的应用面向表的架构,适合传统的业务应用
数据分析提供强大的图分析能力,支持复杂图算法,如路径查询、中心性分析等提供基础的数据分析功能,适合传统的统计和报表分析
安全性提供基于角色的访问控制,支持细粒度的权限管理提供基于用户和角色的访问控制,支持细粒度的权限管理
可视化工具提供丰富的图数据可视化工具,支持图形化展示和分析提供多种数据可视化工具,支持图表和报表展示
开发语言支持支持多种编程语言,包括 Java、Python、JavaScript 等支持多种编程语言,包括 Java、Python、PHP 等
备份与恢复提供完善的备份与恢复机制,支持在线备份和恢复提供完善的备份与恢复机制,支持多种备份方式
集成性支持与多种外部系统和工具集成,如 Spark、Kafka、Elasticsearch 等支持与多种外部系统和工具集成,如 Hadoop、Kafka、Elasticsearch 等
数据迁移提供灵活的数据迁移工具,支持从其他数据库迁移数据提供多种数据迁移工具,支持数据在不同数据库之间迁移
安装与配置提供简单的安装和配置流程,支持多种部署方式,包括本地部署、云部署等提供简单的安装和配置流程,支持多种部署方式,包括本地部署、云部署等
文档与支持提供详尽的文档和支持,拥有活跃的社区和专业的技术支持提供详尽的文档和支持,拥有广泛的社区和多种商业支持选项
学习曲线需要学习图数据库和 Cypher 语言,适合处理复杂关系的场景SQL 是标准化语言,学习成本低,适合处理结构化数据的场景
实际应用案例社交网络分析、推荐系统、欺诈检测、供应链管理、知识图谱等客户管理、订单管理、财务记录、内容管理系统、电子商务平台等

总结

通过理解和使用 Neo4j 与 Cypher 语法,我们可以高效地处理和分析图数据,解决复杂的关系问题。无论是社交网络分析、推荐系统还是欺诈检测,Neo4j 都能提供强大的解决方案,使得数据处理更加直观和高效。

更多问题可咨询

CosAI

相关文章:

图数据库 - Neo4j简介

深入理解 Neo4j 与 Cypher 语法 什么是 Neo4j Neo4j 是一个基于图的数据库管理系统&#xff0c;它使用图形理论来表示数据关系。这种数据库与传统的关系型数据库不同&#xff0c;它更适合处理高度互联的数据结构。 基本概念 图&#xff1a;在 Neo4j 中&#xff0c;数据以图的…...

C#环境与数据类型

文章目录 C#环境.NET 框架集成开发环境 创建一个C#项目数据类型值类型引用类型对象类型object动态类型dynamic字符串类型string 指针类型 类型转换隐式转换显示转换&#xff08;强制转换&#xff09;C#提供的类型转换方法Convert类Parse方法TryParse方法 C#环境 .NET 框架 C#是…...

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网&#xff1a;https://goharbor.io/ 点击 Download now 链接&#xff0c;会自动跳转到上述github页面&am…...

kotlin get set

在 Kotlin 中&#xff0c;如果想实现一个类的属性可以从外部读取但不能修改&#xff0c;可以使用自定义的 getter 和 private setter。以下是一个示例代码&#xff1a; class MyClass {var myProperty: Stringprivate set // 使 setter 私有化&#xff0c;外部无法修改get // …...

Flask包算法服务

常规包算法服务,就是比较简单,直接起一个fastapi就可以了。 import time import asyncio from aidraw import engineer_log as eng from fastapi import FastAPI from pydantic import BaseModel from typing import Optional from aidraw.ardraw import run_aidraw_api# 起…...

Flowable(一个开源的工作流和业务流程管理引擎)中与事件相关的一些核心概念

Flowable&#xff08;一个开源的工作流和业务流程管理引擎&#xff09;中与事件相关的一些核心概念 Flowable&#xff08;一个开源的工作流和业务流程管理引擎&#xff09;中与事件相关的一些核心概念&#xff0c;包括它们的作用和触发场景。以下是对这些内容的简要说明&#x…...

深度解析:景区客服系统如何助力旅游业可持续发展

一、引言 在全球化与信息化交织的时代背景下&#xff0c;旅游业正以前所未有的速度发展&#xff0c;成为推动经济增长、文化交流与环境保护的重要力量。景区作为旅游业的核心组成部分&#xff0c;其服务质量和管理水平直接影响到游客的满意度和行业的可持续发展。景区客服系统…...

风险评估:IIS的安全配置,IIS安全基线检查加固

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…...

uniapp 截取两条数据 进行页面翻页滚动

// 轮播信息 <view class"sales_list" ><view class"sales_item" v-for"(item,index) in sellDisplayList" :key"index" click"salesFn(item)"><image :src"item.goodsImg"></image><…...

python笔记(转存ipynb)------1

list1 ["tom","cat","Lili"] print(list1[0].title())Tom#append()列表方法在列表末尾添加新元素 list1.append(233) print(list1) #可以先创建空列表&#xff0c;再进行追加append(..)以添加[tom, cat, Lili, 233]#insert()列表方法插入元素 l…...

excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 apache poi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款优秀的 excel 工具库&#xff1a;easypoi。 二、easypoi 以前的以前&#xff0c;有个大佬程序员&#xff0c;跳到一家公司之后就和业务人员聊上了&…...

邀请函|2024第八届中国太阳能电池浆料与金属化技术展

2024第八届中国国际太阳能电池浆料与金属化技术展览会 地点:深圳国际会展中心 时间:2025年06-月25日-27日 地点:上海新国际博览中心 时间:2024年12月18日-20日 主办单位&#xff1a;上海氟伦展览有限公司 指导单位&#xff1a;中国新材料技术协会 中国电子学会 耐…...

图像边缘检测:技术原理与算法解析

图像边缘检测是计算机视觉和图像处理中的一个核心任务&#xff0c;它旨在识别图像中亮度变化明显的点&#xff0c;从而识别出图像的边缘。边缘是图像中的重要特征&#xff0c;对于后续的图像分析、物体识别和图像分割等任务具有至关重要的作用。本文将深入探讨图像边缘检测的技…...

【Python星启航】少儿编程精英启蒙之旅 - 大纲

1. 计算机基础与编程环境 计算机的基本构成 编程语言与编程环境介绍 Python语言的特点与优势 安装与配置Python环境 2. 计算机历史与发展 计算机的起源与早期发展 个人电脑的普及与影响 当代计算机技术的前沿动态 计算机在未来教育中的角色 3. 编程基础概念 变量的定义与作…...

MATLAB的mat文件转换成json文件

内参矩阵 (K)&#xff1a;相机的内在参数矩阵&#xff0c;通常是一个3x3的矩阵&#xff0c;包含了相机的焦距&#xff08;fxfx​和fyfy​&#xff09;和主点&#xff08;光学中心&#xff09;的坐标&#xff08;cxcx​和cycy​&#xff09;。这个矩阵将图像坐标转换为归一化相机…...

STM32第九课:STM32-基于标准库的42步进电机的简单I/O控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正比…...

文件安全传输系统,如何保障信创环境下数据的安全传输?

文件安全传输系统是一套旨在保护数据在传输过程中的安全性和完整性的技术或解决方案。通常包括以下几个关键组件&#xff1a; 加密&#xff1a;使用强加密算法来确保文件在传输过程中不被未授权访问。 身份验证&#xff1a;确保只有授权用户才能访问或传输文件。 完整性校验…...

论文分享|AAAI2024‘北航|用大语言模型缩小有监督和无监督句子表示学习的差距

先说结论&#xff0c;大语言模型除了作为聊天的Agent&#xff0c;也可以为检索模型生成优质的文本对训练数据&#xff0c;从而做到无监督场景下也能够适用。这里分享一篇AAAI2024的工作&#xff0c;重点探讨如何生成比评估集更困难的训练数据来提升无监督句子表示学习质量&…...

vue3相比于vue2有哪些新特性?

Composition API&#xff1a; 组合式 API 提供了更灵活和可组合的方式来组织代码。它允许将逻辑功能集中在一起&#xff0c;而不是分散在生命周期钩子中。 import { ref, reactive, computed, watch } from vue;export default {setup() {const count ref(0);const state r…...

Gooxi受邀参加第三届中国数据中心服务器与设备峰会

7月2-3日&#xff0c;第三届中国数据中心服务器与设备峰会在上海召开&#xff0c;作为国内最聚焦在服务器领域的专业峰会&#xff0c;吸引了来自全国的行业专家、服务器与机房设备厂家&#xff0c;企业IT用户&#xff0c;数据中心业主共同探讨AIGC时代下智算中心设备的设计之道…...

3个实现前端节流的方法,附代码。

一、什么是前端节流 前端节流&#xff08;Throttling&#xff09;是一种优化前端性能的技术&#xff0c;它可以限制某些函数的执行频率&#xff0c;以提高性能和用户体验。节流可以用于控制一些高频事件的触发频率&#xff0c;比如滚动事件、鼠标移动事件、窗口大小改变事件等…...

uniapp 微信小程序根据后端返回的文件链接打开并保存到手机文件夹中【支持doc、docx、txt、xlsx等类型的文件】

项目场景&#xff1a; 我们在使用uniapp官方提供的uni.downloadFile以及uni.saveFile时&#xff0c;会发现这个文件下载的默认保存位置和我们预想的不太一样&#xff0c;容易找不到&#xff0c;而且没有提示&#xff0c;那么我们就需要把文件打开自己保存并且有提示保存到哪个…...

一群追星星的人,对AI的盼与怕

面对AI&#xff0c;有人害怕&#xff0c;有人期盼。 “AI和画画的、开网约车的、写东西的人有仇吗&#xff1f;”近来成了很多从业者的心声。大模型技术驱动了AI的能力进化过临界点&#xff0c;我们普通人根本就跟不上&#xff0c;或快或慢被淘汰。看起来&#xff0c;AI正在给人…...

同步IO、异步IO以及五种网络IO模式

目录 一、同步IO和异步IO 二、五种网络IO模式 1、阻塞IO 2、非阻塞IO 3、IO多路复用 3.1、SELECT 3.2、POLL 3.3、EPOLL 一、同步IO和异步IO 场景1&#xff1a; 小明去打开水&#xff0c;而开水塔此时没有水&#xff0c;小明在现场一直等待开水到来&#xff0c;或者不断…...

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中&#xff0c;添加工具启动配置&#xff0c;配置五分钟内生效。 Path&#xff1a;设置移交目录路径&#xff0c;IPG 服务器会把收集完成的…...

线程安全(二)synchronized 的底层实现原理、锁升级、对象的内存结构

目录 一、基础使用1.1 不加锁的代码实现1.2 加锁的代码实现二、实现原理2.1 synchronized 简介2.2 对象监控器(Monitor)2.3 加锁过程第一步:判断 Owner 指向第二步:进入 EntryList 阻塞第三步:主动进入 WaitSet 等待三、锁升级3.1 对象的内存结构3.2 Mark Word 对象头3.3 …...

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十四)-无人机操控关键绩效指标(KPI)框架

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…...

数电基础 - 半导体存储

目录 一. 简介 一. 只读存储器 二. 可编程只读存储器 三. 可擦除的可编程只读存储器 四. 随机存储器 五. 存储器容量的扩展 六. 总结 一. 简介 半导体存储是数字电路中用于存储数据的重要组成部分。 半导体存储器主要分为两大类&#xff1a;随机存取存储器&#xff0…...

校园工会体育报名小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;赛事公告管理&#xff0c;球员管理&#xff0c;球队信息管理&#xff0c;比赛信息&#xff0c;比赛报名管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;比赛信息&#xff0c;比赛报名&#…...

2024Datawhale AI夏令营---基于术语词典干预的机器翻译挑战赛--学习笔记

#Datawhale #NLP 1.背景介绍&#xff1a; 机器翻译&#xff08;Machine Translation&#xff0c;简称MT&#xff09;是自然语言处理领域的一个重要分支&#xff0c;其目标是将一种语言的文本自动转换为另一种语言的文本。机器翻译的发展可以追溯到20世纪50年代&#xff0c;经历…...