第11章:Neo4j实际应用案例

理论知识和技术细节固然重要,但真正理解Neo4j的价值在于了解它如何解决实际业务问题。本章将探讨Neo4j在各个领域的实际应用案例,包括社交网络分析、推荐系统、知识图谱以及欺诈检测与安全分析。通过这些案例,读者可以了解如何将前面章节学到的知识应用到实际项目中,以及如何解决特定领域的挑战。

11.1 社交网络分析

社交网络是图数据库最自然的应用场景之一,因为社交关系本质上就是一个图结构。Neo4j在社交网络分析中有着广泛的应用。

社交关系建模

社交网络的核心是人与人之间的关系,这与图数据库的节点和关系模型完美契合。

基本数据模型

// 创建用户节点
CREATE (alice:Person {name: 'Alice', age: 32, gender: 'Female'})
CREATE (bob:Person {name: 'Bob', age: 35, gender: 'Male'})
CREATE (charlie:Person {name: 'Charlie', age: 28, gender: 'Male'})// 创建社交关系
CREATE (alice)-[:FRIEND {since: '2018-05-15'}]->(bob)
CREATE (bob)-[:FRIEND {since: '2018-05-15'}]->(alice)
CREATE (alice)-[:FOLLOWS]->(charlie)
CREATE (bob)-[:COLLEAGUE]->(charlie)

关系类型

  • 双向关系:如朋友关系(FRIEND),通常需要两条关系表示互为朋友。
  • 单向关系:如关注关系(FOLLOWS),表示单向的社交连接。
  • 带属性关系:如关系建立时间、关系强度、互动频率等。
  • 多重关系:两个人之间可能同时存在多种关系(朋友、同事、家人)。

扩展模型

  • 兴趣和群组:用户可以对内容感兴趣或加入群组。
    CREATE (tech:Interest {name: 'Technology'})
    CREATE (alice)-[:INTERESTED_IN {level: 'High'}]->(tech)
    CREATE (devGroup:Group {name: 'Developers Community'})
    CREATE (alice)-[:MEMBER_OF {joinDate: '2019-01-10'}]->(devGroup)
    
  • 内容和互动:用户创建内容并与之互动。
    CREATE (post:Content {id: 'p1', text: 'Neo4j is amazing!', timestamp: '2023-05-20T14:30:00'})
    CREATE (alice)-[:POSTED]->(post)
    CREATE (bob)-[:LIKED {timestamp: '2023-05-20T15:10:00'}]->(post)
    CREATE (charlie)-[:COMMENTED {text: 'Totally agree!', timestamp: '2023-05-20T16:05:00'}]->(post)
    

社交网络分析查询

Neo4j的Cypher查询语言使得复杂的社交网络分析变得直观和高效。

好友推荐(朋友的朋友)

// 查找Alice的朋友的朋友,但不是Alice自己,也不是Alice已有的朋友
MATCH (alice:Person {name: 'Alice'})-[:FRIEND]->(friend)-[:FRIEND]->(foaf)
WHERE foaf <> alice AND NOT (alice)-[:FRIEND]->(foaf)
RETURN foaf.name AS recommendedFriend, COUNT(friend) AS mutualFriends
ORDER BY mutualFriends DESC

影响力分析

// 使用PageRank算法计算用户影响力
CALL gds.pageRank.stream('socialGraph')
YIELD nodeId, score
MATCH (p:Person) WHERE id(p) = nodeId
RETURN p.name AS person, score AS influenceScore
ORDER BY influenceScore DESC
LIMIT 10

社区检测

// 使用Louvain算法检测社交网络中的社区
CALL gds.louvain.stream('socialGraph')
YIELD nodeId, communityId
MATCH (p:Person) WHERE id(p) = nodeId
RETURN communityId, COLLECT(p.name) AS communityMembers, COUNT(*) AS communitySize
ORDER BY communitySize DESC

路径分析

// 查找两个人之间的最短路径(六度分隔理论)
MATCH path = shortestPath((alice:Person {name: 'Alice'})-[:FRIEND*..6]-(target:Person {name: 'David'}))
RETURN [node IN nodes(path) | node.name] AS connectionChain,length(path) AS degrees

实际应用案例

LinkedIn的人脉网络

LinkedIn使用图数据库来存储和分析职业社交网络,实现:

  • "你可能认识的人"推荐
  • 职业路径分析
  • 行业连接和影响力分析
  • 求职者与招聘者匹配

Twitter的社交图

Twitter利用图数据库处理其庞大的社交关系网络:

  • 实时推文流的个性化
  • 话题传播分析
  • 影响者识别
  • 广告定向投放

实现考量

  1. 扩展性:社交网络通常规模庞大,需要考虑分片或集群部署(参见第9章)。
  2. 实时性:社交应用通常需要实时响应,索引策略和查询优化至关重要(参见第7章和第8章)。
  3. 数据隐私:社交数据通常包含敏感信息,需要实施适当的访问控制和数据保护措施。
  4. 图算法:利用Neo4j的图数据科学库(GDS)进行高级分析,如中心度计算、社区检测、路径分析等。

社交网络分析是Neo4j的强项,通过图模型可以直观地表达和分析复杂的社交关系,发现传统关系数据库难以揭示的模式和洞察。

11.2 推荐系统

推荐系统是现代应用的重要组成部分,帮助用户在海量信息中找到感兴趣的内容。Neo4j的图结构非常适合构建基于关系的推荐引擎。

推荐系统的图模型

推荐系统的核心是捕捉用户、物品和交互之间的关系,形成一个多维图模型。

基本数据模型

// 创建用户节点
CREATE (u1:User {id: 'user1', name: 'Alice'})
CREATE (u2:User {id: 'user2', name: 'Bob'})// 创建物品节点
CREATE (p1:Product {id: 'prod1', name: 'Smartphone X', category: 'Electronics'})
CREATE (p2:Product {id: 'prod2', name: 'Laptop Pro', category: 'Electronics'})
CREATE (p3:Product {id: 'prod3', name: 'Running Shoes', category: 'Sports'})// 创建用户-物品交互
CREATE (u1)-[:PURCHASED {date: '2023-01-15', rating: 4.5}]->(p1)
CREATE (u1)-[:VIEWED {date: '2023-02-10', duration: 120}]->(p2)
CREATE (u2)-[:PURCHASED {date: '2023-01-20', rating: 5.0}]->(p1)
CREATE (u2)-[:PURCHASED {date: '2023-02-05', rating: 4.0}]->(p2)// 创建物品之间的关系
CREATE (p1)-[:SIMILAR_TO {score: 0.85}]->(p2)
CREATE (p1)-[:OFTEN_BOUGHT_WITH {frequency: 120}]->(p2)

扩展模型

  • 用户属性和分组:年龄、性别、位置、兴趣等。
  • 物品属性和分类:类别、标签、价格、特性等。
  • 上下文信息:时间、位置、设备、心情等。
  • 多种交互类型:购买、评分、点击、收藏、评论等。

推荐算法实现

Neo4j支持多种推荐算法,从简单的基于规则的方法到复杂的协同过滤和图算法。

基于内容的推荐

// 为用户推荐与其已购买物品类似的产品
MATCH (u:User {id: 'user1'})-[:PURCHASED]->(bought),(bought)-[:SIMILAR_TO]->(recommended)
WHERE NOT (u)-[:PURCHASED]->(recommended)
RETURN recommended.name AS recommendation,recommended.category AS category,COUNT(bought) AS relevanceScore
ORDER BY relevanceScore DESC
LIMIT 5

协同过滤(用户-物品)

// 基于相似用户的购买行为推荐产品
MATCH (u1:User {id: 'user1'})-[:PURCHASED]->(bought),(u2:User)-[:PURCHASED]->(bought),(u2)-[:PURCHASED]->(recommended)
WHERE u1 <> u2 AND NOT (u1)-[:PURCHASED]->(recommended)
RETURN recommended.name AS recommendation,COUNT(DISTINCT u2) AS userOverlap,COUNT(DISTINCT bought) AS productOverlap
ORDER BY userOverlap DESC, productOverlap DESC
LIMIT 5

基于路径的推荐

// 通过多种关系路径发现推荐
MATCH path = (u:User {id: 'user1'})-[:PURCHASED|VIEWED|RATED*2..3]->(recommended:Product)
WHERE NOT (u)-[:PURCHASED]->(recommended)
RETURN recommended.name AS recommendation,COUNT(DISTINCT path) AS pathCount
ORDER BY pathCount DESC
LIMIT 5

使用图算法的推荐

// 使用个性化PageRank为用户生成推荐
CALL gds.pageRank.stream('productGraph',{sourceNodes: [userNodeId], dampingFactor: 0.85})
YIELD nodeId, score
MATCH (p:Product) WHERE id(p) = nodeId AND NOT (user)-[:PURCHASED]->(p)
RETURN p.name AS recommendation, score
ORDER BY score DESC
LIMIT 10

实际应用案例

电子商务推荐

Amazon等电商平台使用图数据库实现:

  • "购买了这个商品的用户也购买了"推荐
  • 基于浏览历史的个性化推荐
  • 捆绑销售和交叉销售建议
  • 闪购和限时优惠的个性化推送

内容平台推荐

Netflix、Spotify等内容平台使用图数据库来:

  • 推荐相似电影、音乐或文章
  • 基于用户观看/收听历史的个性化推荐
  • 发现新兴趋势和用户兴趣变化
  • 内容分类和标签系统

实现考量

  1. 冷启动问题:对于新用户或新物品,可以结合基于内容的方法和图结构中的间接关系。
  2. 实时性能:推荐通常需要毫秒级响应,需要优化查询和使用适当的索引。
  3. 数据稀疏性:用户-物品交互通常是稀疏的,图算法可以利用间接关系缓解这一问题。
  4. 混合方法:结合多种推荐策略,如协同过滤、基于内容和基于知识的方法。
  5. 评估与优化:使用A/B测试和离线评估指标(如准确率、召回率、多样性)持续优化推荐系统。

Neo4j的图模型使得复杂的推荐逻辑可以通过直观的查询表达,同时图算法可以发现传统方法难以捕捉的隐含关系,提高推荐质量和多样性。

11.3 知识图谱

知识图谱是一种结构化的知识表示形式,通过实体、关系和属性来描述现实世界的概念和它们之间的联系。Neo4j是构建和查询知识图谱的理想平台。

知识图谱建模

知识图谱的核心是实体(概念、对象)和它们之间的语义关系。

基本数据模型

// 创建实体节点
CREATE (einstein:Person {name: 'Albert Einstein', birth: 1879, death: 1955})
CREATE (physics:Field {name: 'Physics'})
CREATE (relativity:Theory {name: 'Theory of Relativity', year: 1915})
CREATE (nobel:Award {name: 'Nobel Prize in Physics', year: 1921})
CREATE (princeton:Organization {name: 'Princeton University'})// 创建实体间的关系
CREATE (einstein)-[:DEVELOPED]->(relativity)
CREATE (einstein)-[:WORKED_IN]->(physics)
CREATE (einstein)-[:RECEIVED]->(nobel)
CREATE (einstein)-[:AFFILIATED_WITH {from: 1933, to: 1955}]->(princeton)
CREATE (relativity)-[:BELONGS_TO]->(physics)

知识图谱特性

  • 本体层:定义概念类型、关系类型和属性的模式。
  • 实例层:包含具体实体和它们之间的关系实例。
  • 多源集成:整合来自不同来源的知识。
  • 时间维度:捕捉知识的时间演变。
  • 不确定性:表示知识的可信度或概率。

知识图谱查询与推理

Neo4j的Cypher查询语言和APOC库使得复杂的知识查询和推理变得可能。

复杂关系查询

// 查找与爱因斯坦有直接或间接关联的所有实体
MATCH (einstein:Person {name: 'Albert Einstein'})-[r*1..2]-(entity)
RETURN entity.name AS relatedEntity, [rel IN r | type(rel)] AS relationshipTypes,[rel IN r | startNode(rel).name + '->' + endNode(rel).name] AS path

路径推理

// 查找两个科学家之间的所有连接路径
MATCH path = shortestPath((scientist1:Person {name: 'Albert Einstein'})-[*..5]-(scientist2:Person {name: 'Niels Bohr'})
)
RETURN [node IN nodes(path) | node.name] AS connectionPath,[rel IN relationships(path) | type(rel)] AS relationshipTypes

语义推理

// 使用传递关系进行推理
// 如果A是B的一部分,B是C的一部分,则A也是C的一部分
MATCH (a)-[:PART_OF]->(b)-[:PART_OF]->(c)
WHERE NOT (a)-[:PART_OF]->(c)
CREATE (a)-[:PART_OF {inferred: true}]->(c)

属性继承

// 类别层次结构中的属性继承
MATCH (subclass)-[:IS_A]->(superclass)
WHERE superclass.property IS NOT NULL AND subclass.property IS NULL
SET subclass.property = superclass.property

实际应用案例

企业知识图谱

大型企业使用知识图谱来:

  • 整合内部数据(产品、客户、员工、文档)
  • 提供智能搜索和问答系统
  • 支持决策制定和业务智能
  • 发现隐藏的业务洞察和关系

医疗知识图谱

医疗机构和制药公司使用知识图谱来:

  • 整合医学知识(疾病、药物、治疗、基因)
  • 支持临床决策和个性化医疗
  • 发现新的药物相互作用和副作用
  • 加速药物研发和临床试验

学术知识图谱

研究机构和出版商使用知识图谱来:

  • 连接研究论文、作者、机构和主题
  • 发现研究趋势和合作机会
  • 跟踪引用和影响力
  • 推荐相关文献和研究者

实现考量

  1. 数据集成:知识图谱通常需要整合多个异构数据源,需要设计ETL流程和数据清洗策略。
  2. 本体设计:需要定义清晰的概念层次和关系类型,可能需要参考或采用现有的本体标准(如Schema.org, FOAF)。
  3. 知识提取:从非结构化文本中提取实体和关系,可能需要结合NLP技术。
  4. 知识验证:确保知识的准确性和一致性,可能需要实施约束和验证规则。
  5. 知识演化:设计支持知识更新和版本控制的机制。

Neo4j的灵活模型和强大查询能力使其成为构建和查询知识图谱的理想选择,能够处理复杂的语义关系和推理任务。

11.4 欺诈检测与安全分析

图数据库在欺诈检测和安全分析领域有着独特的优势,因为欺诈和安全威胁通常涉及复杂的关系模式和隐藏连接。

欺诈检测模型

欺诈检测的核心是识别异常的关系模式和行为。

基本数据模型

// 创建账户和交易节点
CREATE (a1:Account {id: 'acc1', owner: 'John Doe', riskScore: 0.2})
CREATE (a2:Account {id: 'acc2', owner: 'Jane Smith', riskScore: 0.1})
CREATE (a3:Account {id: 'acc3', owner: 'Anonymous', riskScore: 0.7})
CREATE (a4:Account {id: 'acc4', owner: 'Anonymous', riskScore: 0.8})// 创建设备和IP节点
CREATE (d1:Device {id: 'dev1', fingerprint: 'abcd1234'})
CREATE (d2:Device {id: 'dev2', fingerprint: 'efgh5678'})
CREATE (ip1:IP {address: '192.168.1.1', country: 'US'})
CREATE (ip2:IP {address: '203.0.113.1', country: 'RU'})// 创建关系
CREATE (a1)-[:USED]->(d1)
CREATE (a2)-[:USED]->(d1)  // 共享设备
CREATE (a3)-[:USED]->(d2)
CREATE (a4)-[:USED]->(d2)  // 共享设备
CREATE (d1)-[:CONNECTED_FROM]->(ip1)
CREATE (d2)-[:CONNECTED_FROM]->(ip2)// 创建交易
CREATE (t1:Transaction {id: 'tx1', amount: 1000, timestamp: '2023-05-01T10:30:00'})
CREATE (t2:Transaction {id: 'tx2', amount: 900, timestamp: '2023-05-01T10:35:00'})
CREATE (t3:Transaction {id: 'tx3', amount: 800, timestamp: '2023-05-01T10:40:00'})// 交易关系
CREATE (a1)-[:SENT]->(t1)-[:RECEIVED]->(a3)
CREATE (a3)-[:SENT]->(t2)-[:RECEIVED]->(a4)
CREATE (a4)-[:SENT]->(t3)-[:RECEIVED]->(a2)

扩展模型

  • 时间维度:捕捉行为随时间的变化。
  • 地理位置:IP地址、物理位置、时区。
  • 行为模式:登录时间、交易频率、浏览模式。
  • 社交关系:账户之间的联系、推荐关系。
  • 风险指标:各种风险分数和标志。

欺诈检测查询

Neo4j的图查询能力使得复杂的欺诈模式检测变得直观和高效。

环形转账检测

// 检测资金在账户之间形成环路的情况
MATCH path = (a:Account)-[:SENT]->(:Transaction)-[:RECEIVED]->(:Account)-[:SENT]->(:Transaction)-[:RECEIVED]->(:Account)-[:SENT]->(:Transaction)-[:RECEIVED]->(a)
WHERE a.riskScore > 0.5
RETURN a.id AS startAccount, [node IN nodes(path) | CASE WHEN node:Account THEN node.id ELSE node.id END] AS transferPath,SUM(CASE WHEN node:Transaction THEN node.amount ELSE 0 END) AS totalAmount

设备共享检测

// 检测多个高风险账户共享同一设备
MATCH (a1:Account)-[:USED]->(d:Device)<-[:USED]-(a2:Account)
WHERE a1 <> a2 AND a1.riskScore > 0.6 AND a2.riskScore > 0.6
RETURN d.id AS sharedDevice, COLLECT(DISTINCT a1.id) + COLLECT(DISTINCT a2.id) AS accounts,COUNT(DISTINCT a1) + COUNT(DISTINCT a2) AS accountCount
ORDER BY accountCount DESC

快速资金流动检测

// 检测短时间内的连续交易
MATCH (a1:Account)-[:SENT]->(t1:Transaction)-[:RECEIVED]->(a2:Account)-[:SENT]->(t2:Transaction)-[:RECEIVED]->(a3:Account)
WHERE duration.between(datetime(t1.timestamp), datetime(t2.timestamp)).minutes < 30AND a1 <> a3 AND t1.amount > 500 AND t2.amount > 500
RETURN a1.id AS sourceAccount, a2.id AS intermediaryAccount, a3.id AS destinationAccount,t1.amount AS firstAmount,t2.amount AS secondAmount,duration.between(datetime(t1.timestamp), datetime(t2.timestamp)).minutes AS minutesBetween

异常行为检测

// 检测账户的异常登录位置
MATCH (a:Account)-[:USED]->(d:Device)-[:CONNECTED_FROM]->(ip:IP)
WHERE ip.country <> a.country  // 账户所在国家与IP国家不符
RETURN a.id AS account, a.country AS accountCountry,COLLECT(DISTINCT ip.address) AS ipAddresses,COLLECT(DISTINCT ip.country) AS ipCountries

实际应用案例

金融欺诈检测

银行和支付公司使用图数据库来:

  • 检测信用卡欺诈和账户盗用
  • 识别洗钱网络和可疑交易模式
  • 评估新账户和交易的风险
  • 实时阻止可疑交易

网络安全分析

安全团队使用图数据库来:

  • 分析网络流量和攻击模式
  • 检测入侵和异常访问
  • 识别潜在的内部威胁
  • 追踪攻击路径和影响范围

身份欺诈检测

电子商务和服务提供商使用图数据库来:

  • 检测虚假账户和身份盗用
  • 识别账户接管尝试
  • 防止促销和优惠券滥用
  • 检测评论刷单和虚假活动

实现考量

  1. 实时处理:欺诈检测通常需要实时或近实时响应,需要优化查询性能和使用高效索引。
  2. 误报管理:平衡检测率和误报率,可能需要结合规则引擎和机器学习模型。
  3. 模式演化:欺诈模式不断变化,系统需要灵活适应新的欺诈手段。
  4. 数据隐私:处理敏感财务和个人数据,需要实施严格的安全措施和合规控制。
  5. 可解释性:欺诈检测结果通常需要向监管机构或客户解释,图可视化提供了直观的解释方式。

Neo4j的图模型和查询能力使其成为欺诈检测和安全分析的强大工具,能够发现传统方法难以检测的复杂关系模式和隐藏连接。

11.5 小结

本章探讨了Neo4j在实际应用中的多种场景,包括社交网络分析、推荐系统、知识图谱以及欺诈检测与安全分析。通过这些案例,读者可以看到图数据库如何解决复杂的关系数据问题,并提供传统关系数据库难以实现的洞察和功能。
在社交网络分析中,Neo4j能够直观地表达人与人之间的关系,并通过图算法发现潜在的社交模式和影响力。在推荐系统中,图模型使得基于用户行为和物品关系的个性化推荐变得高效和准确。知识图谱则通过实体和关系的结构化表示,支持复杂的语义查询和推理。而在欺诈检测与安全分析中,图数据库能够识别异常模式和隐藏连接,有效地防范金融欺诈和网络攻击。
通过这些实际应用案例,读者可以更深入地理解Neo4j的价值和应用场景,并能够将前面章节学到的理论知识和技术细节应用到实际项目中。无论是在社交网络、电子商务、医疗健康还是金融安全领域,Neo4j都展现了其强大的图数据处理能力和灵活性,为解决复杂的关系数据问题提供了有力的支持。

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

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

相关文章

数字图像处理与OpenCV初探

什么是数字图像处理&#xff1f; 当今时代&#xff0c;数字图像无处不在。手机拍照、安防监控、医疗检查、地图导航、工业质检……我们每天都在接收、分析和处理大量图像信息。对于计算机而言&#xff0c;图像并不是一张“看得懂”的照片&#xff0c;而是由数值组成的矩阵。如何…

ubuntu网络连接失败 + mobaxterm拖拽文件出错等问题解决方法

网络连接问题&#xff0c;表现在不能通过源下载以及更新 终端问题显示【通过 ip a 命令获得】 kejiubuntu:~/Desktop$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00…

C# CS_Prj01 串口通信控制台程序

一直以来&#xff0c;玩8088单板机&#xff0c;上位机都是使用的绿色现成的串口软件。 今天&#xff0c;感觉8088单板机的各部分测试都基本完成了。 本着玩的精神&#xff0c;自己写一个上位机的简单串口程序&#xff0c;与自己的8088单板机通讯。 功能&#xff1a;一个完整…

40套精品大气黑金系列行业PPT模版分享

黑金系列PPT模版&#xff0c;优秀员工颁奖典礼PPT模版&#xff0c;消费订货会PPT模版&#xff0c;共赢未来PPT模版&#xff0c;投资类PPT模版&#xff0c;双12年终盛典PPT模版&#xff0c;商业计划书PPT模版&#xff0c;高端通用企业文化PPT模版&#xff0c;公司喜报企业捷报PP…

SAP学习笔记 - 开发31 - 前端Fiori开发 Device Adaptation(设备自适应)

上一章讲了Fiori开发中的 Responsiveness&#xff08;响应式设计&#xff09;。 SAP学习笔记 - 开发30 - 前端Fiori开发 Responsiveness&#xff08;响应式设计&#xff09;-CSDN博客 本章继续学习Fiori 开发中的知识。 目录 1&#xff0c;Device Adaptation&#xff08;设备…

网络的那些事——初级——OSPF(2)

前面说了OSPF的状态机和一起简单的OSPF配合&#xff0c;接下这章继续写OSPFV2 IP frr和OSPFV3. 什么是OSPF IP FRR? OSPF IP FRR&#xff08;Fast Reroute&#xff09;利用全网链路状态数据库&#xff0c;预先计算出备份路径保存在转发表中&#xff0c;以备在故障时提供流量保…

C++(初阶)(二十一)——unordered_set和unordered_map

二十二&#xff0c;unordered_set和unordered_map的使用 1.unordered_set 1.1介绍 c11 template<class Key,class Hash std::hash<Key>,class KeyEqual std::equal_to<Key>,class Allocator std::allocator<Key> > class unordered_set;c17 na…

Java面试题:分布式ID时钟回拨怎么处理?序列号耗尽了怎么办?

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 引言1 分布式ID2 问题2.1 时钟回拨2.1.1 毫秒级时…

影视剧学经典系列-梁祝-陶渊明《感士不遇赋并序》

1、背景 《感士不遇赋并序》是东晋诗人陶渊明创作的一篇抒发怀才不遇之慨的辞赋作品。受董仲舒《士不遇赋》和司马迁《悲士不遇赋》启发&#xff0c;陶渊明借古喻今&#xff0c;批判“真风告逝&#xff0c;大伪斯兴”的乱世。社会批判‌以“密网裁而鱼骇&#xff0c;宏罗制而鸟…

Spring Cloud Gateway 全面学习指南

Spring Cloud Gateway 全面学习指南 学习目录 第一部分&#xff1a;基础概念与核心架构 API网关概述与Spring Cloud Gateway简介Spring Cloud Gateway核心架构与工作原理Spring Cloud Gateway与Zuul的对比分析Spring Cloud Gateway核心组件详解 第二部分&#xff1a;基础配…

蛋白分析工具和数据库

UniProt&#xff08;Universal Protein Resource&#xff09;是一个综合性的蛋白质数据库&#xff0c;提供了全球范围内已知的蛋白质序列和功能信息。其中&#xff0c;UniProtKB&#xff08;UniProt Knowledgebase&#xff09;是最核心的组成部分&#xff0c;包含了经过注释和分…

Docker -- 快速入门

镜像与容器 当我们使用Docker安装应用时&#xff0c;Docker会自动搜索并下载应用镜像&#xff08;image&#xff09;。镜像不仅包含应用本身&#xff0c;还包含应用运行所需要的环境&#xff0c;配置、系统函数库。Docker会在运行镜像时创建一个隔离环境&#xff0c;称为容器&…

输入数量未知如何设置输入

在 C 的算法题中&#xff0c;如果你不知道输入数据有多少组&#xff08;即测试用例的数量未知&#xff09;&#xff0c;通常的处理方式是使用 循环读取输入直到文件结束 &#xff08;EOF&#xff09;。这类题目常见于在线评测系统&#xff08;如 LeetCode、牛客网、POJ 等&…

如何在Windows上使用qemu安装ubuntu24.04服务器?

2025年6月15日&#xff0c;周日晚上 在Windows上使用QEMU安装Ubuntu 24.04需要完成环境配置、镜像准备、虚拟机创建及系统安装等步骤。以下是综合多个搜索结果后的详细指南&#xff1a; 1. 安装QEMU环境 下载QEMU Windows版 从QEMU官网下载64位安装包&#xff08;如qemu-w64-s…

前端开发面试题总结-vue2框架篇(二)

Vue2高频问答 一、为什么 Vue 的 data 属性必须声明为返回一个初始数据的函数? 回答重点&#xff1a; Vue 的 data 属性声明成一个返回初始数据的函数&#xff0c;是为了确保每个组件实例都有独立的状态。通过这种方式&#xff0c;避免了组件使用相同的数据对象导致的状态共…

Web第二次方向考核复盘

一、简答题 1. &#xff08;1&#xff09;为什么要清除浮动&#xff1f; 答&#xff1a;当子元素浮动时会脱离文档流&#xff0c;父元素无法正确计算子元素高度导致高度、边框异常显示。同时会影响后续文档流布局。 <style>.box1 {border: solid 2px #000;}.child1 {fl…

Linux入门(十八)read函数

read 读取控制台输入 基本语法 read 选项 参数 选项 -p 指定读取值时的提示符 -t 指定读取值时等待的时间&#xff08;秒&#xff09;&#xff0c;如果没有在指定的时间内输入&#xff0c;就不再等待了 参数 变量&#xff1a;指定读取值的变量名 实例&#xff1a; 1、读取控制…

Python 文件操作详解

文章目录 Python 文件操作详解一、文件操作的基本流程二、文件打开模式详解1. 基本模式2. 扩展模式3. 模式组合示例 三、文件操作方法大全1. 打开和关闭文件2. 读取文件内容3. 写入文件内容4. 文件指针操作 四、文件编码处理五、二进制文件操作六、常见文件操作场景1. 文件内容…

用AI配合MCP快速生成n8n工作流

在数字化时代的浪潮中&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。从智能家居到智能办公&#xff0c;从数据分析到自动化流程&#xff0c;AI的应用场景无处不在。今天&#xff0c;我们将带你走进一个充满创新与效率的世界&#xff0c;探索如何通过AI大眼…

ArkUI-X框架LogInterface使用指南

ArkUI-X框架支持日志拦截能力&#xff0c;Android侧提供原生接口&#xff0c;用于注入LogInterface接口&#xff0c;框架日志及ts日志通过该接口输出&#xff0c;本文的核心内容是介绍如何在Android平台上有效利用ArkUI-X框架的LogInterface拦截日志。 Android平台创建ArkUI-X…