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

ES相关面试问题整理

索引模板了解么

索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。

模板定义,看似复杂,拆分来看,主要为如下几个部分:

{ "order": 0,                     // 模板优先级 "template": "sample_info*",     // 模板匹配的名称方式 "settings": {...},              // 索引设置 "mappings": {...},              // 索引中各字段的映射定义 "aliases": {...}                // 索引的别名
}

模板优先级

一个模板可能绝大部分符合新建索引的需求,但是局部需要微调,此时,如果复制旧的模板,修改该模板后,成为一个新的索引模板即可达到我们的需求,但是这操作略显重复。此时,可以采用模板叠加与覆盖来操作。模板的优先级是通过模板中的 order 字段定义的,数字越大,优先级越高。

索引模板的匹配

索引模板中的 "template" 字段定义的是该索引模板所应用的索引情况。如 "template": "tete*" 所表示的含义是,当新建索引时,所有以 tete 开头的索引都会自动匹配到该索引模板。利用该模板进行相应的设置和字段添加等。

setting 部分

索引模板中的 setting 部分一般定义的是索引的主分片、拷贝分片、刷新时间、自定义分析器等。

Elasticsearch 是如何实现 master 选举的

前提条件

只有候选主节点(master:true)的节点才能成为主节点。

最小候选主节点数(min_master_nodes)的目的是防止脑裂。

实现步骤

  • 第一步:确认候选主节点数达标,elasticsearch.yml 设置的值discovery.zen.minimum_master_nodes:作用是只有足够的master候选节点时,才可以选举出一个master。该参数必须设置为集群中master候选节点的quorum数量。quorum的算法=master候选节点数量/2+1(就是必须超过所有候选主节点一般以上,可以思考redis cluster、zk集群的脑裂问题,也有类似的参数设置)
  • 第二步:对所有候选主节点根据nodeId字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。
  • 第三步:如果对某个节点的投票数达到一定的值(候选主节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举一直到满足上述条件。

【补充】master 节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data 节点可以关闭 http 功能。

如何解决ES集群的脑裂问题

【原因】

所谓集群脑裂,是指 Elasticsearch 集群中的节点(比如共 20 个),可能因为网络问题,其中的 10 个选了一个 master,另外 10 个选了另一个 master 的情况。

【解决】

当集群 master 候选数量不小于 3 个时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes:最小候选主节点数)超过所有候选节点一半以上来解决脑裂问题;

对公司ES集群了解,ES集群架构,索引数据大小,分片数量

想了解应聘者之前公司接触的ES使用场景、规模,有没有做过比较大规模的索引设计、规划、调优

解答:

查看es集群状态:

curl -XGET http://localhost:9200/_cat/health?v返回结果:
{"cluster": "es-9pu872sa", #集群名称"status": "green", #集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据"node.data": "8", #代表在线的数据节点的数量"node.total": "11", #代表在线的节点总数量"init": "0", #initializing_shards 初始化中的分片数量 正常情况为 0"relo": "0", #relocating_shards 迁移中的分片数量,正常情况为 0"pending_tasks": "0", #准备中的任务,任务指迁移分片等 正常情况为 0"unassign": "0", #unassigned_shards 未分配的分片 正常情况为 0"pri": "3699", #active_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍"shards": "4343", #active_shards 存活的分片数量"active_shards_percent": "100.0%", #正常分片百分比 正常情况为 100%"max_task_wait_time": "-", #任务最长等待时间"epoch": "1696748727","timestamp": "07:05:27"
}

模块运营ES集群11个节点,6个hot节点16C64G配置,5个warm节点4C16G。集群因为有部门内其他项目也在用,跟我们业务相关主要索引在8+个以上,例如模块运营,

主要业务索引

菜单访问记录按天 mcs_menu_user_access-yyyyMMdd,

菜单访问统计按月 mcs_menu_user_access_aggregation-yyyyMM,

菜单访问小时统计按月 mcs_menu_user_access_aggregation_hour-yyyyMM,

事件访问明细索引 mcs_menu_user_access_action-yyyyMM

数据量计算:前提:公司菜单总数在2300个左右,公司员工访问总人数在5-6w左右

  • 菜单访问记录索引mcs_menu_user_access,6个分片,没有副本。每日数据增量在600w左右,一个月30天数据量在2亿左右。单索引大概4G,一个月所有该索引大概120G
  • 菜单访问统计按天索引mcs_menu_user_access_aggregation,6个分片,没有副本。一个月也在1300w左右,单索引一个月大概15G的数据量
  • 菜单访问小时统计按月索引mcs_menu_user_access_aggregation_hour ,6个分片,没有副本。一个月40002左右的数据。一个月所有该索引大概30G
  • 事件访问明细按月索引 mcs_menu_user_access_action ,12个分片,没有副本。一个月数据量大概在5亿作业,占用磁盘大概在400G

索引增量:根据日期,有的按月有的按天递增,每月递增33+索引以上。

菜单访问相关的数据量没那么大,索引分片在6个分片,为节省磁盘和性能没有副本

事件访问明细索引数据量笔记打,索引分片在12个,一样没有副本

保存近1年的数据,1年以前的数据删除。

这一年的数据做采取了冷热分离机制,热数据存储到SSD,提高检索效率;冷数据定期进行shrink操作,以缩减存储;近6个月的数据在hot节点,前6个月的数据移到warm节点

冷热数据分离了解么

ES集群的索引写入及查询速度主要依赖于磁盘的IO速度,冷热数据分离的关键为使用SSD磁盘存储数据。若全部使用SSD,成本过高,且存放冷数据较为浪费,因而使用普通SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。为了解决控制成本的前提下读写性能问题,Elasticsearch冷热分离架构应运而生。

冷数据索引:查询频率低,基本无写入,一般为当天或最近2天以前的数据索引

热数据索引:查询频率高,写入压力大,一般为当天数据索引

实现原理

Hot节点设置:索引节点(写节点),同时保持近期频繁使用的索引。 属于IO和CPU密集型操作,建议使用SSD的磁盘类型,保持良好的写性能;节点的数量设置一般是大于等于3个。将节点设置为hot类型:node.attr.box_type: hot

Warm节点设置: 用于不经常访问的read-only索引。由于不经常访问,一般使用普通的磁盘即可。内存、CPU的配置跟Hot节点保持一致即可;节点数量一般也是大于等于3个。将节点设置为warm类型:node.attr.box_type: warm

可以通过两种方式对数据进行冷热的那种处理

1、针对索引设置冷热属性:指定某个索引为热索引,另一个索引为冷索引。通过索引的分布来实现控制数据分布的目的。业务上根据实际情况对索引设置冷热属性,如果按照时间定期处理。

  • index.routing.allocation.include.{attribute}表示索引可以分配在包含多个值中其中一个的节点上。
  • index.routing.allocation.require.{attribute}表示索引要分配在包含索引指定值的节点上(通常一般设置一个值)。
  • index.routing.allocation.exclude.{attribute}表示索引只能分配在不包含所有指定值的节点上。

2、通过索引生命周期管理,ES (版本>=6.6) 提供了索引生命周期管理功能。索引生命周期管理可以通过 API 或者 kibana 界面配置,详情可参考 index-lifecycle-management。使用索引生命周期管理,可以实现索引数据的自动滚动跟过期,并结合冷热分离架构进行数据的降冷跟删除。 一般通过kibana界面去创建代理任务进行配置,实现索引的动态管理,索引的生命周期被分为:Hot phrase,Warm phase, Cold phase,Delete phrase四个阶段

  • Hot phrase: 该阶段可以根据索引的文档数,大小,时长决定是否调用rollover API来滚动索引
  • Warm phrase: 当一个索引在Hot phrase被roll over后便会进入Warm phrase,进入该阶段的索引会被设置为read-only, 用户可以为这个索引设置要使用的attribute, 如对于冷热分离策略,这里可以选择temperature: warm属性。另外还可以对索引进行forceMerge, shrink等操作
  • Cold phrase: 可以设置当索引rollover一段时间后进入cold阶段,这个阶段也可以设置一个属性。从冷热分离架构可以看出冷热属性是具备扩展性的,不仅可以指定hot, warm, 也可以扩展增加hot, warm, cold, freeze等多个冷热属性。如果想使用三层的冷热分离的话这里可以指定为temperature: cold, 此处还支持对索引的freeze操作
  • Delete phrase: 可以设置索引rollover一段时间后进入delete阶段,进入该阶段的索引会自动被删除。

分片不均衡原因&解决方案

可能存在的部分原因有以下几种:

  • Shard设置不合理:大多数负载不均问题是由于shard设置不合理导致,建议优先排查。
  • Segment大小不均
  • 存在典型的冷热数据需求场景。说明:例如查询中添加了routing或查询频率较高的热点数据,则必然导致数据出现负载不均。
  • 没有释放长连接,导致流量不均。说明:该问题时常暴露于采用负载均衡及多可用区架构部署时。

解决方案

  • 方案一:手动移动分片

例如移动node-1的分片0到node-4

curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{"commands":[{"move":{"index":"indexName",  # 索引名"shard": 0,           # 需要移动的分片"from_node":"node-1", # 从哪个节点移出来"to_node":"node-4"    # 需要移到哪个节点
}}]}'

优点:操作简单,恢复时间短;不必修改master node的配置,master node长期负载后高

缺点:索引大,移动时有很高的IO,索引容易损坏,需要做备份,不能解决master node既是数据节点又是负载均衡转发器的问题

【注意】分片和副本无法移动到同一个节点

  • 方案二:重建索引,从另外一个集群导入

删除原来的索引,重新建立索引,;利用elasticsearch dump等工具从另一个集群中把数据导入到新的索引中

优点:可以重新配置master node和data node,主从负载均匀

缺点:费时间,容易数据丢失,需要验证数据的一致性

  • 方案三:配置平衡参数

使用命令恢复平衡

PUT_cluster/settings
{"persistent": {"cluster.routing.rebalance.enable": "all"}
}

解决Elasticsearch分片未分配的问题

原因

出现这个问题的原因是原有分片未正常关闭和清理,所以当分片要重新分配回出问题节点的时候没有办法获得分片锁。

这不会造成分片数据丢失,只需要重新触发一下分配。

unassigned 分片问题可能的原因如下:

  • INDEX_CREATED: 由于创建索引的API导致未分配。
  • CLUSTER_RECOVERED: 由于完全集群恢复导致未分配。
  • INDEX_REOPENED: 由于打开open或关闭close一个索引导致未分配。
  • DANGLING_INDEX_IMPORTED: 由于导入dangling索引的结果导致未分配。
  • NEW_INDEX_RESTORED: 由于恢复到新索引导致未分配。
  • EXISTING_INDEX_RESTORED: 由于恢复到已关闭的索引导致未分配。
  • REPLICA_ADDED: 由于显式添加副本分片导致未分配。
  • ALLOCATION_FAILED: 由于分片分配失败导致未分配。
  • NODE_LEFT: 由于承载该分片的节点离开集群导致未分配。
  • REINITIALIZED: 由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。
  • REROUTE_CANCELLED: 作为显式取消重新路由命令的结果取消分配。
  • REALLOCATED_REPLICA: 确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。

解决方案如下:

执行修复命令: POST /_cluster/reroute?retry_failed

Elasticsearch 索引文档的过程

想了解ES的底层原理,不只是关注业务本身。

这里的索引文档应该理解为文档写入ES,创建索引的过程。这里说下单文档索引的过程

  1. 客户发送请求,向ES集群某节点写入数据。如果没有指定路由/协调节点,请求的节点作为协调节点
  2. 第1个节点(协调节点)接受到请求后,使用文档_id 来确定文档属于哪个分片,计算分片的算法是:shard = hash(routing) % number_of_primary_shards,routing默认是文档_id,也可以自定义routing。确定分片之后,请求会被转到另外的节点,假定节点 3。因此分片 0 的主分片分配到节点3上面
  3. 节点 3 在主分片上执行写操作,如果成功,则将请求并行转发到节点 1和节点 2 的副本分片上,等待结果返回。所有的副本分片都报告成功,节点 3 将向协调节点(节点 1)报告成功,节点 1 向请求客户端报告写入成功。

Elasticsearch 写入数据的过程

es的写入过程还是很复杂的,整个过程中还涉及到refresh刷新、强制flush一些操作,画个图可能更好理解一些

添加doc的流程

  1. 将数据写入buffer缓冲区域,同步会将记录写入到translog日志文件中,之后返回结果。写到buffer缓冲区中的数据是还不能被search到的,可以通过get得到数据
  2. 之后buffer缓冲区中的数据,在空间被占用或者通过refresh近实时性的刷新操作,将数据刷到segment段中之后,这个时候才能被search
  3. 之后通过fsync操作将segment中的数据写入到磁盘
  4. 还会清空buffer缓冲区,等待接收新的数据

translog 和 flush操作的作用

translog文件:为了保证数据安全而存在的机制,因为文档doc刚开始是写到内存中的,还没有入到磁盘。如果此时服务器宕机那么数据就丢失了。引入translog,文档写入buffer时是同时写入到translog文件中的,这个是落盘的。这样就能防止数据丢失,并且translog是追加的方式,因此性能比较好

flush操作:每隔30分钟或者translog日志文件达到一定大小(默认512M)的时候,就会触发一次flush操作,此时ES会执行一次flush操作先将segment刷到磁盘。原有translog文件已经落盘,会生成一份新的translog日志文件

近实时性-refresh操作

es接收数据请求时先存入buffer缓冲区中,默认每隔一秒会从buffer中将数据写入segment中,这个过程叫做refresh;

当一个文档写入Lucene后是不能被立即查询到的,Elasticsearch提供了一个refresh操作,会定时地为内存中新写入的数据生成一个新的segment,此时被处理的文档均可以被检索到。refresh操作的时间间隔由refresh_interval参数控制,默认为1s, 当然还可以在写入请求中带上refresh表示写入后立即refresh,另外还可以调用refresh API显式refresh。

产生的问题

于是这个过程中就产生了大量的segment,数量越多就会占用更多的内存,并且还会影响查询的效率,因为查询数据是要具体到分片上去的,其实就是遍历segment文件进行查询,segment越多就会影响性能

merge操作

由于refresh操作1秒钟执行一次,每次都会产生一个segment段,会产生大量的segment段。这对于查询性能来说影响很大,并且占用空间。因此ES会运行一个任务检测segment,对符合要求的segment段进行合并操作,提高查询速度。用户也可以手动调用_forcemerge API强制合并merge

常用基本调优思路有哪些

设计阶段调优

  • 根据业务增量需求,采取基于日期模板创建索引,常用的方式就是基于索引模板在索引数据的时候动态创建索引。获取也可以通过rollover API动态滚动创建索引。rollover API翻滚索引指的就是 对满足特定条件的拥有别名的索引,进行采用旧索引的配置创建新索引,并对将新索引别名下的is_write_index设为true
  • 使用别名进行索引管理;
  • 每天定时在业务量低的时间点,对索引做force_merge强制合并segment段操作,手动释放磁盘空间;force_merge强制合并是指ES索引文档会产生很多个小segment段,每一个段都会占用cpu资源、句柄、内存等,并且查询的时候要到段上面进行搜索,段越多效率越慢,所以需要进行合并段操作,对这些segment进行合并减少磁盘空间,优化查询效率
  • 采取冷热分离机制,热数据存储到SSD,提高检索效率;冷数据定期进行shrink压缩操作,以缩减存储;
  • 采取curator进行索引的生命周期管理;
  • 仅针对需要分词的字段,合理的设置分词器;
  • Mapping阶段充分结合各个字段的属性,是否需要检索、是否需要存储等

写入调优思路

  • 写入前副本数设置为 0,设置副本数 number_of_replicas = 0;
  • 写入前关闭 refresh_interval 设置为-1,禁用刷新机制;
  • 写入过程中:采取 bulk 批量写入;
  • 写入后恢复副本数和刷新间隔;
  • 尽量使用自动生成的 id。

查询调优思路

  • 禁用 wildcard(wildcard 检索可以定义为:支持通配符的模糊检索。类似于mysql的like);
  • 禁用批量 terms(成百上千的场景);
  • 充分利用倒排索引机制,能 keyword 类型尽量 keyword;
  • 数据量大时候,可以先基于时间敲定索引再检索;
  • 设置合理的路由机制。

相关文章:

ES相关面试问题整理

索引模板了解么 索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。 模板定义&#xf…...

MytatisP详解

MP详解 一、基础使用1.引入2.Entry中的常用注解3.BaseMapper 、IService、ServiceImpl3.1BaseMapper 3.2IService、ServiceImpl 4.常用配置4.1 application.yml配置4.2 configuration 配置 5.Wrapper6.分页6.1使用分页方式一 7.自定义分页:查询指定列7.1 先用MP的分…...

设计符合REST原则的API可以遵循以下步骤

设计符合REST原则的API可以遵循以下步骤: 定义资源:首先需要将需要交换的数据抽象成资源,即可以将数据看作是一种资源,并且为每种资源定义一个唯一的标识符。 设计URL:使用短的、有意义的方式来表示资源的状态。例如&…...

编程助手成为编程高手,帮您正则调试

官方下载地址:安果移动 视频演示地址:编程助手-正则调试与面试题,升职加薪不是梦_哔哩哔哩_bilibili 编程助手成为编程高手,帮您正则调试 软件介绍版本号 1.0.2更新日期 2023-10-11 找工作不敢谈薪资?总觉得公司欠我…...

opencv 双目立体视觉

单目标定 1.先单目标定每个相机,获得单个相机内参,外参,畸变参数。 双目标定 2.然后双面标定 2.1 stereoCalibrate (标定函数): double stereoCalibrate(InputArrayOfArrays objectPoints, //世界坐标系 InputArrayOfArrays imagePoints1, //左图像点 InputArrayOfA…...

如何将jpg转化为png?

如何将jpg转化为png?可能有的小伙伴就会疑惑了,jpg和png都是图片常用的一种格式,为什么要进行格式的更改呢?那是因为PNG格式具有更好的图片质量和更少的失真。JPG(或JPEG)格式的图片通常是压缩过的&#xf…...

查看 SSH 登录失败日志

查看日志文件 cat /var/log/auth.log查看 SSH 登录失败的记录 grep "Failed password\|authentication failure" /var/log/auth.log...

竞赛选题 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &am…...

MR混合现实模拟消防安全演练场景实训

混合现实(MR)是一种将虚拟世界与真实世界相结合的技术。它允许教师将数字元素融入实际场景,使学生在亲身体验中学习消防安全知识。这种方式不仅可以激发学生的学习兴趣,还能增强学生的记忆效果。 在MR的助力下,消防安全…...

geecg-uniapp 同源策略 数据请求 获取后台数据 进行页面渲染 ui库安装 冲突解决(3)

一,同源策略 (1)首先找到env 要是没有env 需要创建一个替换成后端接口 (2)因为他封装了 先找到 http 请求位置一级一级找 然后进行接口修改 (3)appUpdata 修改接口 运行即可 &#x…...

Krypton控件组使用之KryptonRibbon

1.去掉File按钮 2.去掉 Cutomize 菜单...

低压配电系统中浪涌保护器的作用,安装位置和接线方法

低压配电系统是指在变压器低压侧或用户侧的电气装置,主要用于向用户提供安全、可靠和经济的电能。低压配电系统中常见的电气设备有低压配电柜、分支箱、开关箱、插座、照明等。这些设备都需要防止因外部或内部原因产生的过电压对其造成损坏或影响其正常工作。过电压…...

OpenCV实现答题卡自动打分!

目录 1,主要原理以及函数介绍 全部代码,以 2 , 实现过程 3,结果展示 1,主要原理以及函数介绍 ap argparse.ArgumentParser() 创建一个ArgumentParser对象,并将其赋值给变量ap。这个对象可以接受我们的脚…...

Python编程必备:掌握列表遍历的6种神级技巧!

更多资料获取 📚 个人网站:涛哥聊Python 遍历列表是Python中最常见的任务之一,因为列表是一种非常常用的数据结构,它用于存储一组项目。 在编程中,经常需要对这些项目进行操作,例如查找特定元素&#xff…...

nodejs+vue校园失物招领平台

失物人可以在该平台中发布自己的拾物信息,本毕业设计题目将设计与实现一个基于校园的非商业行为的网上校园失物招领平台。并给出自己附加的各项条件, 失物招领管理系统主要分为两个部分,涉及前台和后台,然后由失主通过校园失物招…...

leetcode做题笔记171. Excel 表列序号

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: columnTitle "A" 输出: 1示例 2: 输入: colu…...

SW曲面实体导出工程图

...

Docker的私有仓库部署——Harbor

Harbor 简介 一、什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 Harbor以 Docker 公司开源的 Registry 为基础, 提供了图形管理 UI 、基于角色的访问控制(Role…...

JavaScript反爬虫技巧详细攻略

在互联网时代,网站采取了各种手段来防止被爬虫抓取数据,其中最常见的就是JavaScript反爬虫技巧。本文将揭示一些常用的JavaScript反爬虫技巧,并提供一些实际操作建议,帮助您保护自己的爬虫免受检测和封禁。 1、为什么网站使用Java…...

C++基础入门学习笔记

问题1:什么是 C 中的多态?如何实现多态? 回答1:C 中的多态是指同一种类型的实体,可以在不同的情况下表现出不同的行为。实现多态的方式有两种:虚函数和模板函数。虚函数是在基类中声明为虚函数的函数&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...