知识图谱项目实践

news2025/1/20 11:00:30

目录

步骤

SpaCy

Textacy——Text Analysis for Cybersecurity

Networkx

Dateparser

导入库

写出页面的名称

​编辑

自然语言处理

 词性标注

可能标记的完整列表

依存句法分析(Dependency Parsing,DEP)

可能的标签完整列表

实例理解POS与DEP

可视化注释 

Spacy还可执行命名实体识别

可能的所有标签的完整列表

Spacy图形工具

实体和关系抽取 

构建图表

网络图


使用Python和自然语言处理构建知识图谱。

知识图谱被视为自然语言处理领域的一部分,因为要构建“知识”,需要进行“语义增强”过程。由于没有人想要手动执行此任务,因此我们需要使用机器和自然语言处理算法来完成此任务。

我们将解析维基百科并提取一个页面,用作本数据集。

俄乌战争-维基百科

步骤

  • 设置:使用维基百科API进行网页爬取以读取包和数据。
  • NLP使用SpaCy:对文本进行分句、词性标注、依存句法分析和命名实体识别。
  • 提取实体及其关系:使用Textacy库来识别实体并建立它们之间的关系。
  • 网络图构建:使用NetworkX库来创建和操作图形结构。
  • 时间轴图:使用DateParser库来解析日期信息并生成时间轴图。

SpaCy

"spaCy" 这个名称是从 "Space"(空间) 这个词汇中来的,它代表了 spaCy 设计的初衷,即为了提供一个轻量级、高性能的自然语言处理(NLP)库。

SpaCy是一个自然语言处理(NLP)库和工具包,用于处理和分析文本数据。它被设计成高效、快速且易用的工具,具有许多功能,包括分词、命名实体识别、依存关系分析、文本分类等。SpaCy支持多种语言,并提供了预训练的词向量模型。它广泛用于文本挖掘、信息检索、自动化文本分类、情感分析、实体识别、机器翻译等领域。

Textacy——Text Analysis for Cybersecurity

Textacy的名称来源于"Text Analysis for Cybersecurity"(网络安全文本分析),这个名称强调了该库最初的用途,即在网络安全领域中对文本数据进行分析。然而,随着时间的推移,Textacy的功能扩展到了更广泛的自然语言处理和文本挖掘任务,包括情感分析、实体识别、主题建模等,因此它的名称也逐渐演化成了更通用的文本分析工具。

Networkx

NetworkX是一个用于创建、操作和研究复杂网络(图)的Python库。它提供了丰富的功能和工具,使用户能够轻松地构建、分析和可视化各种类型的网络,包括社交网络、网络拓扑、生物网络、交通网络等。

Dateparser

"dateparser" 是一个Python库,用于解析日期和时间字符串。它的主要功能是将各种格式的日期和时间字符串转换成Python的datetime对象,以便在程序中进行日期和时间的处理和计算。

导入库

## for data
import pandas as pd  #1.1.5
import numpy as np  #1.21.0

## for plotting
import matplotlib.pyplot as plt  #3.3.2

## for text
import wikipediaapi  #0.5.8
import nltk  #3.8.1
import re

## for nlp
import spacy  #3.5.0
from spacy import displacy
import textacy  #0.12.0

## for graph
import networkx as nx  #3.0 (also pygraphviz==1.10)

## for timeline
import dateparser #1.1.7

Wikipedia-api是一个Python库,可轻松解析Wikipedia页面。我们将使用这个库来提取所需的页面,但会排除页面底部的所有“注释”和“参考文献”内容。

写出页面的名称

topic = "Russo-Ukrainian War"

wiki = wikipediaapi.Wikipedia('en')
page = wiki.page(topic)
txt = page.text[:page.text.find("See also")]
txt[0:500] + " ..."

  • topic = "Russo-Ukrainian War":在这一行中,定义了一个名为 topic 的变量,其中存储了要查询的维基百科主题,即 "Russo-Ukrainian War"(俄乌战争)。
  • wiki = wikipediaapi.Wikipedia('en'):在这一行中,创建了一个名为 wiki维基百科API的实例,使用了英语语言版('en'表示英语)。
  • page = wiki.page(topic):这一行使用 wiki 实例的 page 方法来获取与主题 topic 相关的维基百科页面。这将返回一个包含页面内容的对象,存储在名为 page 的变量中。
  • txt = page.text[:page.text.find("See also")]:这一行代码从获取的维基百科页面文本中提取了感兴趣的部分。它使用了字符串切片和 .find() 方法,首先查找文本中 "See also"(通常表示相关链接的部分)的位置,然后将文本截断到这个位置之前,从而得到了页面的一部分文本。这部分文本存储在名为 txt 的变量中。
  • txt[0:500] + " ...":最后一行代码将前500个字符的文本内容提取出来,然后附加了 " ...",以表示文本的截断。这个结果存储在 txt 变量中,它包含了从维基百科页面提取的前500个字符的内容。

自然语言处理

#python -m spacy download en_core_web_sm

nlp = spacy.load("en_core_web_sm")
doc = nlp(txt)
  • #python -m spacy download en_core_web_sm:这是一个注释行,用于表示在终端或命令行中执行的操作。它指示用户下载spaCy的英语语言模型"en_core_web_sm"。这个模型包括了一些用于处理英语文本的语言数据和算法。
  • nlp = spacy.load("en_core_web_sm"):在这一行代码中,首先导入了spaCy库(前提是已经安装了spaCy库)。然后,使用spacy.load()函数加载了之前下载的英语语言模型"en_core_web_sm"。加载后的模型被存储在名为nlp的变量中,以便后续对文本数据进行处理。
  • doc = nlp(txt):在这一行代码中,使用已加载的模型nlp对文本数据txt进行处理。nlp(txt)将文本数据传递给已加载的模型,返回一个Doc对象,其中包含了对文本进行了分词、词性标注、命名实体识别等自然语言处理任务的结果。这个Doc对象存储了文本的各种信息,可以用于进一步的文本分析和处理。

看SpaCy将文本分成了多少个句子:

lst_docs = [sent for sent in doc.sents]
print("tot sentences:", len(lst_docs))

lst_docs = [sent for sent in doc.sents]:这一行代码使用了列表推导式(List Comprehension)来遍历doc对象中的每个句子,并将它们存储在一个名为lst_docs的列表中。列表推导式的语法是[expression for item in iterable],在这里,expression是用于生成列表元素的表达式,item是迭代的每个元素,iterable是要迭代的对象。因此,这行代码遍历doc.sents,它是doc对象中句子的一个生成器(generator),并将每个句子添加到lst_docs列表中。

 词性标注

即用适当的语法标签标记句子中的每个单词的过程

可能标记的完整列表

  • ADJ: 形容词,例如big,old,green,incomprehensible,first
  • ADP: 介词,例如in,to,during
  • ADV: 副词,例如very,tomorrow,down,where,there
  • AUX: 助动词,例如is,has(done),will(do),should(do)
  • CONJ: 连词,例如and,or,but
  • CCONJ: 并列连词,例如and,or,but
  • DET: 限定词,例如a,an,the
  • INTJ: 感叹词,例如psst,ouch,bravo,hello
  • NOUN: 名词,例如girl,cat,tree,air,beauty
  • NUM: 数词,例如1,2017,one,seventy-seven,IV,MMXIV
  • PART: 助词,例如's,not
  • PRON: 代词,例如I,you,he,she,myself,themselves,somebody
  • PROPN: 专有名词,例如Mary,John,London,NATO,HBO
  • PUNCT: 标点符号,例如.,(,),?
  • SCONJ: 从属连词,例如if,while,that
  • SYM: 符号,例如$,%,§,©,+,-,×,÷,=,:),表情符号
  • VERB: 动词,例如run,runs,running,eat,ate,eating
  • X: 其他,例如sfpksdpsxmsa
  • SPACE: 空格

依存句法分析(Dependency Parsing,DEP)

模型还会尝试理解单词对之间的关系。

可能的标签完整列表

  • ACL:作为名词从句的修饰语
  • ACOMP:形容词补语
  • ADVCL:状语从句修饰语
  • ADVMOD:状语修饰语
  • AGENT:主语中的动作执行者
  • AMOD:形容词修饰语
  • APPOS:同位语
  • ATTR:主谓结构中的谓语部分
  • AUX:助动词
  • AUXPASS:被动语态中的助动词
  • CASE:格标记
  • CC:并列连词
  • CCOMP:从句补足语
  • COMPOUND:复合修饰语
  • CONJ:连接词
  • CSUBJ:主语从句
  • CSUBJPASS:被动语态中的主语从句
  • DATIVE:与双宾语动词相关的间接宾语
  • DEP:未分类的依赖
  • DET:限定词
  • DOBJ:直接宾语
  • EXPL:人称代词
  • INTJ:感叹词
  • MARK:标记
  • META:元素修饰语
  • NEG:否定修饰语
  • NOUNMOD:名词修饰语
  • NPMOD:名词短语修饰语
  • NSUBJ:名词从句主语
  • NSUBJPASS:被动语态中的名词从句主语
  • NUMMOD:数字修饰语
  • OPRD:宾语补足语
  • PARATAXIS:并列结构
  • PCOMP:介词的补足语
  • POBJ:介词宾语
  • POSS:所有格修饰语
  • PRECONJ:前置连词
  • PREDET:前置限定词
  • PREP:介词修饰语
  • PRT:小品词
  • PUNCT:标点符号
  • QUANTMOD:量词修饰语
  • RELCL:关系从句修饰语
  • ROOT:句子主干
  • XCOMP:开放性从句补足语

实例理解POS与DEP

i = 3
list_docs[3]

检查 NLP 模型预测的 POS 和 DEP 标签

for token in lst_docs[i]:
    print(token.text, "-->", "pos: "+token.pos_, "|", "dep: "+token.dep_, "")
  • token.texttoken对象的text属性表示词汇的原始文本内容,即单词或标点符号的字符串。
  • "-->":这部分代码只是一个字符串,用于分隔词汇信息的不同部分,以便输出更易读。
  • "pos: "+token.pos_token对象的pos_属性表示词汇的词性(Part-of-Speech,POS)。该部分将词汇的词性标签添加到输出中,例如:"pos: NOUN" 表示名词。
  • "|":这部分代码只是一个字符串,用于分隔不同词汇信息。
  • "dep: "+token.dep_token对象的dep_属性表示词汇与句子中其他词汇的依存关系。该部分将词汇的依存关系标签添加到输出中,例如:"dep: nsubj" 表示名词主语。

可视化注释 

SpaCy提供了一个图形工具来可视化这些注释

from spacy import displacy

displacy.render(lst_docs[i], style="dep", options={"distance":100})

displacy.render(lst_docs[i], style="dep", options={"distance":100})这是用于渲染句子依存关系图的函数调用。它包括以下参数:

  • lst_docs[i]:这是要可视化的文本数据,通常是一个Doc对象,或者在这里是句子的Doc对象,表示要可视化的句子。

  • style="dep":这个参数指定了可视化的样式。在这里,我们选择了"dep",表示依存关系图。

  • options={"distance":100}:这是一个字典参数,用于配置可视化选项。在这里,我们设置了"distance"参数,以控制词汇之间的水平距离。较大的距离可以使图更易于阅读。您可以根据需要自定义其他可视化选项。

  • 最重要的标记是动词 ( POS=VERB ),因为它是句子中含义的词根 ( DEP=ROOT )。
  • 助词,如副词和副词 ( POS=ADV/ADP ),通常作为修饰语 ( *DEP=mod ) 与动词相关联,因为它们可以修饰动词的含义。例如,“ travel to ”和“ travel from ”具有不同的含义,即使词根相同(“ travel ”)。
  • 在与动词相连的单词中,必须有一些名词(POS=PROPN/NOUN)作为句子的主语和宾语( *DEP=nsubj/obj )。
  • 名词通常位于形容词 ( POS=ADJ ) 附近,作为其含义的修饰语 ( DEP=amod )。例如,在“好人”和“坏人”中,形容词赋予名词_“人”相反的含义。 

Spacy还可执行命名实体识别

可能的所有标签的完整列表
  • 人名: 包括虚构人物。
  • 国家、宗教或政治团体:民族、宗教或政治团体。
  • 地点:建筑、机场、高速公路、桥梁等。
  • 公司、机构等:公司、机构等。
  • 地理位置:国家、城市、州。
  • 地点:非国家地理位置,山脉、水域等。
  • 产品:物体、车辆、食品等(不包括服务)。
  • 事件:命名飓风、战斗、战争、体育赛事等。
  • 艺术作品:书籍、歌曲等的标题。
  • 法律:成为法律的指定文件。
  • 语言:任何命名的语言。
  • 日期:绝对或相对日期或期间。
  • 时间:小于一天的时间。
  • 百分比:百分比,包括“%”。
  • 货币:货币价值,包括单位。
  • 数量:衡量重量或距离等。
  • 序数: “第一”,“第二”等。
  • 基数:不属于其他类型的数字。
for ent in lst_docs[i].ents:
    print(tag.text, f"({tag.label_})")

print(tag.text, f"({tag.label_})"):在每次迭代中,使用 print() 函数打印每个实体的文本内容和实体类型标签。

  • tag.text:这是实体对象的 text 属性,表示实体的原始文本内容。

  • f"({tag.label_})":这是一个格式化字符串,用于将实体的类型标签添加到输出中。在字符串中使用了f开头的字符串字面值,它允许在字符串中插入表达式,这里插入了实体的类型标签,标签位于括号中。

  • 花括号 {} 在格式化字符串中用于表示占位符,可以在运行时将变量或表达式的值插入到字符串中。

在spaCy中,实体(命名实体)对象通常包含两个重要的属性:ent.textent.label_,它们分别表示实体的文本内容和实体类型标签。

Spacy图形工具

displacy.render(lst_docs[i], style="ent")

实体和关系抽取 

对于每个句子,我们将提取主语和宾语以及它们的修饰语、复合词和它们之间的标点符号。

## extract entities and relations
dic = {"id":[], "text":[], "entity":[], "relation":[], "object":[]}

for n,sentence in enumerate(lst_docs):
    lst_generators = list(textacy.extract.subject_verb_object_triples(sentence))  
    for sent in lst_generators:
        subj = "_".join(map(str, sent.subject))
        obj  = "_".join(map(str, sent.object))
        relation = "_".join(map(str, sent.verb))
        dic["id"].append(n)
        dic["text"].append(sentence.text)
        dic["entity"].append(subj)
        dic["object"].append(obj)
        dic["relation"].append(relation)


## create dataframe
dtf = pd.DataFrame(dic)

## example
dtf[dtf["id"]==i]

构建图表

网络图

Python标准库中用于创建和操作图网络的是NetworkX。我们可以从整个数据集开始创建图形,但如果节点太多,可视化将变得混乱:

## create full graph
G = nx.from_pandas_edgelist(dtf, source="entity", target="object", 
                            edge_attr="relation", 
                            create_using=nx.DiGraph())


## plot
plt.figure(figsize=(15,10))

pos = nx.spring_layout(G, k=1)
node_color = "skyblue"
edge_color = "black"

nx.draw(G, pos=pos, with_labels=True, node_color=node_color, 
        edge_color=edge_color, cmap=plt.cm.Dark2, 
        node_size=2000, connectionstyle='arc3,rad=0.1')

nx.draw_networkx_edge_labels(G, pos=pos, label_pos=0.5, 
                         edge_labels=nx.get_edge_attributes(G,'relation'),
                         font_size=12, font_color='black', alpha=0.6)
plt.show()
  • G = nx.from_pandas_edgelist(dtf, source="entity", target="object", edge_attr="relation", create_using=nx.DiGraph()):这行代码使用 NetworkX 库创建了一个有向图(DiGraph)。具体解释如下:
  • nx.from_pandas_edgelist(dtf, source="entity", target="object", edge_attr="relation", create_using=nx.DiGraph()):这个函数将 Pandas 数据帧 dtf 转换为一个有向图。在有向图中,实体作为节点,关系作为有向边,而 "entity" 列和 "object" 列包含了节点之间的连接,"relation" 列包含了边的属性(关系)。
  • plt.figure(figsize=(15,10)):这行代码创建一个新的图形画布,指定了画布的大小为 15x10 像素。
  • pos = nx.spring_layout(G, k=1):这行代码使用 NetworkX 的 spring_layout 函数布局图形中的节点位置,其中 G 是创建的有向图。k=1 控制了节点之间的相互排斥力,影响图形的布局。
  • node_coloredge_color:这两行代码定义了节点和边的颜色。
  • nx.draw(...):这个函数用于绘制图形。以下是参数的含义:
  • G:要绘制的图形。
  • pos=pos:节点位置的布局。
  • with_labels=True:是否显示节点的标签。
  • node_color=node_color:节点的颜色。
  • edge_color=edge_color:边的颜色。
  • cmap=plt.cm.Dark2:用于定义节点颜色映射的颜色映射。
  • nx.draw_networkx_edge_labels(...):这个函数用于在图形上绘制边的标签。以下是参数的含义:
  • pos=pos:节点位置的布局。
  • label_pos=0.5:标签相对于边的位置。
  • edge_labels=nx.get_edge_attributes(G,'relation'):从图中获取边的属性(关系)作为标签。
  • font_size=12:标签的字体大小。
  • font_color='black':标签的字体颜色。
  • alpha=0.6:标签的透明度。
  • plt.show():这行代码用于显示绘制好的图形。

知识图谱可以让我们从大局的角度看到所有事物的相关性,但是如果直接看整张图就没有什么用处。因此,最好根据我们所需的信息应用一些过滤器。对于这个例子,我将只选择涉及最常见实体的部分(基本上是最多连接的节点):

先找出最多连接的节点

dtf["entity"].value_counts().head()

然后进行过滤操作并进行可视化

## filter
f = "Russia"
tmp = dtf[(dtf["entity"]==f) | (dtf["object"]==f)]


## create small graph
G = nx.from_pandas_edgelist(tmp, source="entity", target="object", 
                            edge_attr="relation", 
                            create_using=nx.DiGraph())


## plot
plt.figure(figsize=(15,10))

pos = nx.spring_layout(G, k=0.5)
node_color = ["red" if node==f else "skyblue" for node in G.nodes]
edge_color = ["red" if edge[0]==f else "black" for edge in G.edges]

nx.draw(G, pos=pos, with_labels=True, node_color=node_color, 
        edge_color=edge_color, cmap=plt.cm.Dark2, 
        node_size=800, node_shape="o", width=1.0, connectionstyle='arc3,rad=0.1', font_size=8)

nx.draw_networkx_edge_labels(G, pos=pos, label_pos=0.5, 
                        edge_labels=nx.get_edge_attributes(G,'relation'),
                        font_size=8, font_color='black', alpha=0.6)
plt.show()

 

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

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

相关文章

SEAN代码(1)

代码地址 首先定义一个trainer。 trainer Pix2PixTrainer(opt)在Pix2PixTrainer内部,首先定义Pix2PixModel模型。 self.pix2pix_model Pix2PixModel(opt)在Pix2PixModel内部定义生成器,判别器。 self.netG, self.netD, self.netE self.initialize_…

11.Redis的慢操作之rehash

Redis为什么快 它接收到一个键值对操作后,能以微秒级别的速度找到数据,并快速完成操作。 数据库这么多,为啥 Redis 能有这么突出的表现呢? 内存数据结构 一方面,这是因为它是内存数据库,所有操作都在内存上…

Redis—常用数据结构

Redis—常用数据结构 🔎数据结构与内部编码 Redis 中常用的数据结构包括 Strings—字符串Hashes—哈希表Lists—列表Sets—集合Sorted sets—有序集合 Redis 底层在实现上述数据结构时, 会在源码层面针对上述实现进行特定优化, 以达到节省时间 / 节省空间的效果 …

卡片介绍、EMV卡组织、金融认证---安全行业基础篇2

一、卡片介绍 卡片是一种用于存储和传输数据的可携带式物品,通常由塑料或纸质材料制成。卡片通常具有特定的尺寸和形状,以适应各类读写设备。不同类型的卡片可以用于不同的应用,如身份验证、支付、门禁控制等。 接触卡 接触卡是一种需要与读…

量化策略:CTA,市场中性,指数增强

CTA 策略 commodity Trading Advisor Strategy,即“商品交易顾问策略”,也被称作管理期货策略。 期货T0,股票T1双向交易:就单向交易而言的,不仅能先买入再卖出(做多),而且可以先卖…

Java异常(Error与Exception)与常见异常处理——第八讲

前言 前面我们讲解了Java的基础语法以及面向对象的思想,相信大家已经基本掌握了Java的基本编程。在之前代码中,我们也看到代码写错了编译器会提示报错,或者编译器没有提示,但是运行的时候报错了,比如前面的数组查询下标超过数组的长度。所以在使用计算机语言进行项目开发的…

CLIP:连接文本-图像

Contrastive Language-Image Pre-Training CLIP的主要目标是通过对比学习,学习匹配图像和文本。CLIP最主要的作用:可以将文本和图像表征映射到同一个表示空间 这是通过训练模型来预测哪个图像属于给定的文本,反之亦然。在训练过程中&#…

高频策略:抢盘口,做市,短期趋势

利润来源 价格短期趋势随机游走震荡 策略分类 抢盘口:盘口大单封堵,快速在盘口中双向下单,赚取价差做市:盘口买卖活跃,预测市价单击穿距离,在盘口外双向下单,赚取价差 挂单范围要小于市价击穿距…

十二、分组查询

1、分组查询 (1)基础语法: select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组之后的过滤条件] (2)注意事项: (3)理解: select后的“字段列表…

personalized image enhancement 调研

Personalized Image Enhancement Using Neural Spline Color Transforms 这是TIP期刊 2020年的一篇论文,首先提出了一个能预测曲线的网络,预测一些锚点,根据锚点插值出连续的曲线,然后用曲线对raw image进行retouching。然后提出了…

ODC现已开源:与开发者共创企业级的数据库协同开发工具

OceanBase 开发者中心(OceanBase Developer Center,以下简称 ODC)是一款开源的数据库开发和数据库管理协同工具,从首个版本上线距今已经发展了三年有余,ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…

第 361 场 LeetCode 周赛题解

A 统计对称整数的数目 枚举 x x x class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low; i < high; i) {string s to_string(i);if (s.size() & 1)continue;int s1 0, s2 0;for (int k 0; k < s.size(); k)if …

快速为RPG辅助工具MTool增加更多快捷键(一键保存等)

起源&#xff1a;MTool是个好工具&#xff0c;本身固然好用&#xff0c;但是它本身的快捷键功能很少&#xff0c;虽然内置了一个录制工具&#xff0c;但是一个个的录&#xff0c;又麻烦&#xff0c;一般人也难以掌握 本文用快速方法增加更多快捷键&#xff0c;可以做到一键保存…

利用非线性解码模型从人类听觉皮层的活动中重构音乐

音乐是人类体验的核心&#xff0c;但音乐感知背后的精确神经动力学仍然未知。本研究分析了29名患者的独特颅内脑电图(iEEG)数据集&#xff0c;这些患者听了Pink Floyd的歌曲&#xff0c;并应用了先前在语音领域使用的刺激重建方法。本研究成功地从直接神经录音中重建了可识别的…

【性能优化】聊聊性能优化那些事

针对于互联网应用来说&#xff0c;性能优化其实就是一直需要做的事情&#xff0c;因为系统响应慢&#xff0c;是非常影响用户的体验&#xff0c;可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求&#xff0c;需要对所负责的系统进行性能提升。目前接…

Python自动化小技巧22——获取中国高校排名数据

背景 【软科排名】2023年最新软科中国大学排名|中国最好大学排名 (shanghairanking.cn) 爬取这个网站所有的高校的数据&#xff0c;包括学习名称&#xff0c;层次&#xff0c;地区&#xff0c;分数等等信息&#xff1a;[办学层次,学科水平,办学资源,师资规模与结构,人才培养,…

红日靶场五(vulnstack5)渗透分析

环境搭建 win7 192.168.111.132&#xff08;仅主机&#xff09; 192.168.123.212&#xff08;桥接&#xff09; .\heart p-0p-0p-0win2008 ip: 192.168.111.131&#xff08;仅主机&#xff09; sun\admin 2020.comkali ip: 192.168.10.131&#xff08;nat&#xff09;vps&…

字节一面:说说地址栏输入 URL 敲下回车后发生了什么?

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;作为一名前端开发工程师&#xff0c;我们只有了解地址栏输入 URL 敲下回车后发生的事件&#xff0c;才知道性能优化如何下手&#xff0c;性能优化也是前端必备知识&#xf…

第一章_线程基础知识

先拜拜大神 Doug Lea&#xff08;道格.利&#xff09; java.util.concurrent在并发编程中使用的工具包 为什么学习并用好多线程极其重要 硬件方面 摩尔定律失效 摩尔定律&#xff1a;它是由英特尔创始人之一Gordon Moore&#xff08;戈登.摩尔&#xff09;提出来的。其内容为…

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早&#xff0c;使用的OS比较过时&#xff0c;还是centos6.5的系统&#xff0c;因国产化需要&#xff0c;需将该系统升级到BClinux 8.6&#xff0c;但官方显示不支持centos 6.x升级到8&#xff0c;需先将centos6.5升级到centos7的最新版&#xff0c…