Elasticsearch 面试备战指南
Elasticsearch 面试备战指南
一、基础概念
-
什么是Elasticsearch?
Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,提供近实时搜索、高可用性和水平扩展能力。常用于日志分析(ELK)、全文检索、商业智能等场景。 -
Elasticsearch与Lucene的关系?
Lucene是单机搜索引擎库,Elasticsearch在Lucene基础上封装了分布式架构(如分片、副本、集群管理),使其能处理海量数据。 -
Elasticsearch的典型应用场景?
- 电商商品搜索(支持关键词、过滤、排序)
- 日志分析(ELK Stack)
- 指标监控(APM数据聚合)
- 地理位置搜索(如附近的人)
二、核心概念
-
什么是索引(Index)?
类似数据库的"表",是文档的集合(如user_index
存储用户数据)。索引定义字段类型(Mapping)和分片策略。 -
文档(Document)和类型(Type)的区别?
- 文档是JSON格式的最小数据单元(如一条用户记录)
- Type在7.x后被废弃,现在一个索引只能有一个
_doc
类型。
-
分片(Shard)的作用是什么?
- 主分片:数据水平拆分的基本单元(如5个分片将数据分成5份)
- 副本分片:每个主分片的拷贝,提供高可用和读负载均衡。
-
倒排索引(Inverted Index)是什么?
类似书籍的目录:通过关键词快速定位文档。例如:"学习" -> [文档1, 文档3] "Elasticsearch" -> [文档2, 文档5]
三、数据操作
-
如何创建索引?
PUT /my_index {"settings": { "number_of_shards": 3,"number_of_replicas": 1 } }
-
写入文档的流程?
- 客户端请求发送到协调节点
- 根据文档ID哈希选择主分片(如
shard = hash(id) % num_shards
) - 主分片写入后同步到副本分片
- 返回响应给客户端。
-
GET和Search的区别?
GET /index/_doc/1
:通过ID直接检索(实时)POST /index/_search
:执行复杂查询(可能延迟1秒,因refresh间隔)。
四、查询与聚合
-
Match查询和Term查询的区别?
match
:对文本分词后搜索(如"Hello World"拆分为"hello"和"world")term
:精确匹配未经分词的字段(如状态字段status: "published"
)。
-
如何实现分页查询?
使用from
和size
参数:{"from": 10,"size": 5,"query": { "match_all": {} } }
深分页问题:避免
from
超过10,000,改用search_after
或滚动查询(Scroll)。 -
聚合(Aggregation)的常见类型?
- Metric:统计指标(如
avg
、sum
) - Bucket:分组统计(如按年龄段分组)
- Pipeline:对聚合结果再计算。
- Metric:统计指标(如
五、集群与性能
- 如何确定分片数量?
经验法则:
- 单个分片不超过50GB
- 考虑未来增长(分片数一旦创建不可修改)
- 测试环境压测后调整。
- 什么是脑裂(Split-brain)问题?如何避免?
多个主节点争夺控制权导致数据不一致。解决方案:
discovery.zen.minimum_master_nodes: (master_eligible_nodes / 2) + 1
- 如何优化写入性能?
- 增大
refresh_interval
(减少段合并) - 使用批量API(Bulk API)
- 禁用副本(写入完成后再启用)
- 使用SSD硬盘。
六、实战问题
-
如何处理数据不一致?
检查_seq_no
和_primary_term
字段,使用版本控制(version_type=external
)。 -
如何同步MySQL数据到ES?
- 工具:Logstash JDBC、Canal(binlog同步)
- 代码层面:双写(先写DB,再写ES)。
-
搜索时提示"circuit_breaking_exception"怎么办?
内存熔断机制触发,解决方案:- 增加JVM堆内存
- 优化查询(避免深度分页、大聚合)
- 调整熔断阈值
indices.breaker.fielddata.limit
。
七、高级特性
- 什么是向量搜索(Vector Search)?
通过嵌入向量(Embedding)实现相似性搜索(如图片搜索、推荐系统),使用dense_vector
字段和knn
查询。
八、索引管理
-
如何动态更新索引的Mapping?
- 新增字段:ES会自动推断类型并添加。
- 修改已有字段:需新建索引并通过
Reindex API
迁移数据(ES不允许直接修改字段类型)。
-
索引别名(Alias)的作用?
类似数据库视图,指向一个或多个索引,常用于:- 无缝切换索引(如
logs_current
指向logs_2023
) - 实现索引分区(按时间滚动)
- 隐藏真实索引名,提升灵活性。
- 无缝切换索引(如
-
如何安全删除大索引?
# 先关闭索引,减少资源占用 POST /big_index/_close # 确认后删除 DELETE /big_index
九、性能优化
-
如何避免深分页的性能问题?
- Scroll API:适合大批量导出(快照式游标,非实时)。
- Search After:实时分页,基于上一页最后一条的排序值。
- 业务优化:限制最大分页深度(如只允许查看前100页)。
-
什么是热点线程(Hot Threads)?如何分析?
ES节点CPU过载时,通过GET /_nodes/hot_threads
查看占用资源最多的线程,常见于复杂查询或频繁GC。 -
字段过多导致Mapping爆炸怎么办?
- 关闭动态Mapping(
"dynamic": false
) - 使用
flattened
类型存储JSON对象(避免嵌套字段爆炸) - 限制字段数量(如日志中的动态字段)。
- 关闭动态Mapping(
十、集群运维
-
节点类型有哪些?
- Master-eligible:参与选主,管理集群状态。
- Data:存储数据分片。
- Ingest:预处理文档(如Pipeline处理)。
- Coordinating(默认):路由请求,聚合结果(不存储数据)。
-
如何扩展集群容量?
- 垂直扩展:升级节点配置(CPU、内存、磁盘)。
- 水平扩展:增加Data节点,ES会自动平衡分片。
-
如何备份和恢复数据?
- 创建仓库:
PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mnt/backup" } }
- 备份索引:
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
- 恢复:
POST /_snapshot/my_backup/snapshot_1/_restore
.
- 创建仓库:
十一、分词与文本处理
-
分词器(Analyzer)的组成?
- Character Filter:预处理文本(如去HTML标签)。
- Tokenizer:按规则切分文本(如
standard
按空格分词)。 - Token Filter:处理分词结果(如转小写、去停用词)。
-
如何实现中文分词?
安装插件:- IK分词器:支持词典扩展(如
ik_smart
、ik_max_word
)。 - jieba分词器:Python风格分词。
- 配置自定义词典:
config/ik/custom.dic
。
- IK分词器:支持词典扩展(如
-
为什么搜索“Quick Fox”匹配不到“quick fox”?
默认分词器会将文本转为小写,但若字段是keyword
类型(不分词),需改用match
查询或设置text
字段。
十二、实战场景
-
如何设计商品搜索功能?
- 字段类型:标题用
text
(分词),价格用float
,分类用keyword
。 - 查询组合:
bool
查询结合must
(匹配关键词)、filter
(按分类/价格过滤)、should
(提升品牌权重)。 - 排序:按相关性评分、销量、价格综合排序。
- 字段类型:标题用
-
如何实现自动补全(Suggest)?
使用Completion Suggester:PUT /products {"mappings": {"properties": {"name_suggest": { "type": "completion" }}} }
插入数据时提供上下文(如输入前缀返回建议词)。
-
如何处理高并发写入场景?
- 使用Bulk API批量写入,减少网络开销。
- 客户端侧实现队列缓冲,合并请求。
- 调整线程池:
thread_pool.write.queue_size
(避免拒绝)。
十三、故障排查
-
集群状态为Red/Yellow是什么意思?
- Red:至少一个主分片不可用(数据丢失)。
- Yellow:所有主分片正常,但副本分片未分配(通常节点不足)。
-
如何快速定位慢查询?
-
启用慢日志:
PUT /my_index/_settings {"index.search.slowlog.threshold.query.warn": "10s" }
-
查看日志:
logs/elasticsearch_index_search_slowlog.log
。
-
-
节点频繁GC导致性能下降怎么办?
- 调整JVM堆内存(不超过物理内存的50%,且不超过32GB)。
- 减少内存消耗:避免大聚合、关闭
_source
(按需)。 - 升级到JDK 11+,利用G1 GC优化。
十四、高级功能
-
跨集群搜索(Cross-Cluster Search)如何配置?
-
在
elasticsearch.yml
中设置集群别名:cluster.remote.cluster1.seeds: 192.168.1.1:9300
-
查询时指定集群:
GET /cluster1:index/_search
.
-
-
Elasticsearch SQL如何使用?
-
执行SQL查询:
POST /_sql?format=json { "query": "SELECT name FROM users WHERE age > 20" }
-
转换为DSL:
EXPLAIN
关键字查看底层查询逻辑。
-
十五、安全与权限
-
如何启用Elasticsearch的安全功能(如认证和授权)?
-
在
elasticsearch.yml
中开启安全配置(8.x默认开启):xpack.security.enabled: true
-
使用内置工具设置用户密码:
bin/elasticsearch-setup-passwords auto
-
角色权限分配:通过Kibana或API定义角色(如
read_only
、admin
)。
-
-
什么是基于角色的访问控制(RBAC)?
将权限分配给角色,再将角色绑定到用户。例如:- 角色
logs_reader
:允许读取logs-*
索引 - 用户
alice
:分配角色logs_reader
和monitoring_user
。
- 角色
-
如何加密集群节点间的通信?
-
生成证书:
bin/elasticsearch-certutil ca
-
配置
elasticsearch.yml
:xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
-
十六、监控与日志
-
如何监控Elasticsearch集群的健康状态?
- 使用API:
GET /_cluster/health
(查看status
、分片数、节点数) - Kibana监控面板:实时显示CPU、内存、磁盘、索引速率等
- 集成Prometheus:通过
elasticsearch-exporter
导出指标。
- 使用API:
-
常见的性能指标有哪些?如何分析?
- 写入延迟:检查
bulk
队列、磁盘IO - 搜索延迟:优化查询复杂度、分片数
- GC时间:JVM堆内存不足时频繁GC,需调整堆大小。
- 写入延迟:检查
-
如何设置Elasticsearch的日志级别?
修改log4j2.properties
文件:logger.cluster.name = org.elasticsearch.cluster logger.cluster.level = debug
十七、索引生命周期管理(ILM)
-
什么是索引生命周期管理(ILM)?
自动管理索引的生命周期阶段:- Hot:频繁写入和查询
- Warm:只读,偶尔查询
- Cold:归档存储,极少查询
- Delete:删除数据。
-
如何配置ILM策略?
PUT /_ilm/policy/my_policy {"policy": {"phases": {"hot": {"actions": {"rollover": { "max_size": "50GB" }}},"delete": { "min_age": "30d", "actions": { "delete": {} } }}} }
-
如何将ILM策略绑定到索引?
创建索引模板时指定策略:PUT /_index_template/logs_template {"index_patterns": ["logs-*"],"template": {"settings": {"index.lifecycle.name": "my_policy"}} }
十八、跨集群操作
-
如何实现跨集群复制(CCR)?
-
主集群启用CCR:
xpack.ccr.enabled: true
-
创建追随者索引:
PUT /follower_index/_ccr/follow?wait_for_active_shards=1 { "remote_cluster": "main_cluster", "leader_index": "leader_index" }
-
-
跨集群搜索的延迟问题如何优化?
- 减少网络延迟:部署集群在相近地域
- 限制查询范围:按时间过滤数据
- 启用缓存:缓存频繁访问的远程数据。
十九、底层原理
-
Lucene的段(Segment)合并机制是什么?
- 写入数据时生成不可变的小段,后台合并成更大段以提高查询效率
- 合并过程消耗IO和CPU,可通过
index.merge.scheduler.max_thread_count
调整线程数。
-
Elasticsearch如何保证近实时搜索?
- 写入数据后,默认1秒(
refresh_interval
)生成新的可搜索段 - 手动刷新:
POST /index/_refresh
。
- 写入数据后,默认1秒(
-
为什么Elasticsearch的文档更新是“标记删除+新增”?
Lucene的段不可修改,更新操作会:- 标记旧文档为删除
- 写入新文档
- 删除标记在段合并时清理。
二十、版本升级与兼容性
-
如何从6.x升级到8.x?
- 滚动升级:逐节点重启,通过
/v1/rolling_upgrade
API管理 - 检查弃用日志:解决不兼容的API或Mapping
- 重建索引:若分片策略或类型(如
string
改为text
)变更。
- 滚动升级:逐节点重启,通过
-
7.x和8.x的主要区别是什么?
- 默认启用安全功能(TLS、RBAC)
- 移除Type(所有文档为
_doc
) - 新增向量搜索、优化kNN查询性能
- 简化集群配置(如
discovery.seed_hosts
替代旧配置)。
二十一、高级查询技巧
-
如何提升搜索相关性评分?
-
使用
boost
参数增加关键字段权重:"should": [{ "match": { "title": { "query": "手机", "boost": 2 } } },{ "match": { "description": "手机" } } ]
-
自定义评分脚本:基于业务逻辑调整分数。
-
-
什么是父子文档?适用场景?
- 父文档与子文档通过
join
字段关联(如博客文章与评论) - 适用场景:需频繁查询父子关系的场景,但性能较低,建议用嵌套(Nested)或反范式化替代。
- 父文档与子文档通过
-
Nested类型和Object类型的区别?
- Object:字段值作为扁平结构存储,无法独立查询子字段
- Nested:子文档作为独立隐藏文档存储,支持精确查询(如
nested
查询)。
二十二、实战优化案例
-
日志索引每天增长100GB,如何设计架构?
- 索引按天滚动:
logs-2023-10-01
- ILM策略:Hot阶段7天,Cold阶段30天后删除
- 使用冻结索引:减少内存占用
- 压缩存储:启用
best_compression
编解码。
- 索引按天滚动:
-
如何实现零停机索引迁移?
-
创建新索引并更新别名:
POST /_aliases {"actions": [{ "remove": { "index": "old_index", "alias": "my_alias" } },{ "add": { "index": "new_index", "alias": "my_alias" } }] }
-
-
聚合查询导致内存溢出(OOM)怎么办?
- 分桶去重:设置
size
限制返回的桶数量 - 使用
composite
聚合分批查询 - 增加JVM堆内存或优化分片数量。
- 分桶去重:设置
二十三、故障场景处理
-
节点宕机后如何恢复分片?
- 新节点加入后,集群自动重新分配分片
- 手动分配分片:
POST /_cluster/reroute
- 优先恢复主分片,副本分片从主分片复制。
-
发现数据写入丢失怎么办?
- 检查写入确认策略:
wait_for_active_shards=all
(确保所有副本写入) - 启用持久化日志:
index.translog.durability: request
- 恢复未提交的数据:基于translog重放。
- 检查写入确认策略:
-
索引变为只读(read-only)如何处理?
通常因磁盘空间不足触发保护机制:-
清理磁盘或扩容
-
手动解除只读:
PUT /_settings { "index.blocks.read_only_allow_delete": false }
-
二十四、扩展性与架构设计
-
什么是Hot-Warm架构?如何配置?
-
Hot节点:高性能硬件处理写入和频繁查询
-
Warm节点:大容量磁盘存储历史数据
-
配置方式:通过节点属性标记角色:
node.attr.temperature: hot
-
-
如何设计高可用的Elasticsearch集群?
- 至少3个Master节点防止脑裂
- 每个索引设置
number_of_replicas ≥ 1
- 跨机架或可用区部署节点
- 定期快照备份。
-
Elasticsearch是否适合作为主数据库?
- 不推荐,因为:
- 非事务性(无ACID)
- 数据更新延迟(近实时)
- 建议作为搜索和分析的辅助存储。
- 不推荐,因为:
二十五、其他高级话题
-
Elasticsearch中的向量搜索如何实现?
使用dense_vector
字段存储向量,通过knn
查询或脚本计算相似度:"knn": {"field": "embedding","query_vector": [0.1, 0.2, ...],"k": 10,"num_candidates": 100 }
-
如何处理时区问题?
-
存储时间戳时指定时区:
"timestamp": "2023-10-01T12:00:00+08:00"
-
查询时转换时区:
"script": { "source": "doc['timestamp'].value.withZone(ZoneId.of('Asia/Shanghai'))" }
-
-
Elasticsearch支持事务吗?
不支持传统ACID事务,但可通过以下方式保证部分一致性:- 单文档操作是原子性的
- 使用版本号(
_version
)实现乐观锁 - Bulk API批量操作部分成功时需手动处理。
二十六、索引设计与优化
- 如何选择合适的数据类型(如
keyword
vstext
)?
keyword
:精确匹配(如ID、状态码、标签),不支持分词,适合聚合和过滤。text
:全文搜索(如文章内容),会被分词,支持相关性评分。- 特殊类型:
date
:时间类型,支持范围查询geo_point
:经纬度坐标ip
:IP地址
示例:商品索引的Mapping设计:
{
"properties": {"product_id": { "type": "keyword" },"name": { "type": "text", "analyzer": "ik_max_word" },"price": { "type": "float" },"tags": { "type": "keyword" }
}
}
二十七、查询性能优化
- 如何避免大查询导致OOM?
- 分页限制:禁止
from + size > 10,000
,改用search_after
- 聚合优化:
- 使用
composite
聚合分批查询 - 限制
size
(如"terms": { "size": 100 }
)
- 使用
- 超时设置:
"timeout": "30s"
- 为什么查询结果不准确?如何解决?
- 原因:
- 分片数据未刷新(
refresh_interval
默认1秒) - 分词器不一致(如查询时用
standard
,索引时用ik
)
- 分片数据未刷新(
- 解决:
- 手动刷新:
POST /index/_refresh
- 检查分词器:
GET /index/_analyze { "field": "text", "text": "样例" }
- 手动刷新:
- 如何强制合并段(Segment Merge)?
POST /index/_forcemerge?max_num_segments=1 # 合并为1个段
注意:合并期间性能下降,建议在低峰期操作。
二十八、集群扩展与负载均衡
- 如何实现读写分离?
- 写入:直接请求主分片
- 读取:通过副本分片负载均衡(协调节点自动轮询)
- 强制读主分片:
"preference": "_primary"
- 如何动态调整副本数量?
PUT /index/_settings
{
"index.number_of_replicas": 2 # 增加副本数提升读取吞吐量
}
- 节点负载不均怎么办?
-
调整分片分配策略:
PUT /_cluster/settings {"persistent": {"cluster.routing.rebalance.enable": "all"} }
-
手动迁移分片:
POST /_cluster/reroute
二十九、数据建模
- 如何处理一对多关系(如订单和订单项)?
-
方案1:嵌套文档(Nested)
{"order_id": "123","items": [{ "product": "手机", "quantity": 1 },{ "product": "耳机", "quantity": 2 }] }
查询:使用
nested
查询:{"query": {"nested": {"path": "items","query": { "match": { "items.product": "手机" } }}} }
-
方案2:父子文档(Parent-Child):适合频繁更新子文档的场景,但性能较低。
- 何时应该数据反范式化?
-
场景:多表关联查询频繁(如商品+商家信息)
-
示例:将商家名称直接冗余到商品文档:
{"product_id": "1001","product_name": "手机","shop_name": "官方旗舰店" # 反范式化字段 }
三十、监控与报警
- 如何监控集群健康状态?
-
API:
GET /_cluster/health?pretty # 集群状态 GET /_nodes/stats?pretty # 节点资源使用 GET /_cat/indices?v # 索引状态
-
Kibana:
Stack Monitoring
面板
- 如何设置磁盘使用率报警?
-
Kibana Alerting:创建规则,当磁盘超过85%时触发报警
-
Elasticsearch SQL:
SELECT node_name, disk_used_percent FROM monitoring WHERE disk_used_percent > 85
三十一、故障恢复
- 如何从快照(Snapshot)恢复部分索引?
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "index1,index2", # 指定索引
"ignore_unavailable": true,
"include_global_state": false
}
- 节点重启后分片未分配怎么办?
-
检查原因:
GET /_cluster/allocation/explain
-
手动分配:
POST /_cluster/reroute {"commands": [{ "allocate_stale_primary": { "index": "index1", "shard": 0, "node": "node1" } }] }
三十二、高级配置
- 如何优化JVM堆内存?
-
推荐值:不超过物理内存的50%,且不超过32GB(避免指针压缩失效)
-
配置:
jvm.options
中设置:-Xms16g -Xmx16g
-
监控GC:
GET /_nodes/stats/jvm
- 如何调整线程池大小?
- 写入线程池:
thread_pool.write.size
(默认=CPU核心数
) - 搜索线程池:
thread_pool.search.size
- 队列调整:
thread_pool.write.queue_size
(避免任务拒绝)
三十三、安全实践
- 如何实现字段级别的权限控制?
-
定义角色:限制用户只能访问特定字段
POST /_security/role/logs_reader {"indices": [{"names": ["logs-*"],"privileges": ["read"],"field_security": { "grant": ["message", "@timestamp"] } # 仅允许访问这两个字段}] }
- 如何审计用户操作?
-
启用审计日志:
xpack.security.audit.enabled: true
-
查看日志:
<cluster_name>_audit.json
三十四、与其他系统集成
- 如何将Kafka数据导入Elasticsearch?
-
方案1:Logstash
input { kafka { topics => ["logs"] } } output { elasticsearch { hosts => ["es:9200"] } }
-
方案2:Kafka Connect:使用Elasticsearch Sink Connector
- Elasticsearch和关系型数据库(如MySQL)如何配合?
- 同步工具:
- Logstash JDBC
- Debezium(CDC模式)
- 双写模式:应用同时写入MySQL和ES,需处理一致性问题。
三十五、性能测试与调优
- 如何用
esrally
进行基准测试?
# 测试官方日志数据集
esrally --track=logging --target-hosts=es:9200
- 关键指标:QPS、延迟、错误率
- 写入性能测试时要注意什么?
- 禁用副本:
"number_of_replicas": 0
- 关闭刷新:
"refresh_interval": "-1"
- 批量大小:
bulk_size = 5MB~15MB
(根据网络调整)
三十六、未来趋势
- Elasticsearch与AI结合的案例?
- 向量搜索:结合BERT模型生成文本向量
- 异常检测:
ML Job
自动识别日志异常模式 - 推荐系统:用户行为向量相似度匹配
- Serverless Elasticsearch的发展?
- 托管服务:AWS OpenSearch Serverless、Elastic Cloud
- 自动扩缩容:根据负载动态调整资源
三十七、经典面试题
- Elasticsearch的优缺点?
- 优点:
- 分布式横向扩展
- 近实时搜索
- 丰富的聚合分析
- 缺点:
- 不支持事务
- 深分页问题
- 资源消耗较高
- 如果你来设计一个搜索引擎,会考虑哪些方面?
- 数据建模:字段类型、分词器
- 查询优化:缓存、分片策略
- 高可用:副本、集群容灾
- 扩展性:Hot-Warm架构
三十八、实际案例
- 如何解决“查询结果不符合预期”?
- 步骤1:检查分词器(
_analyze
API) - 步骤2:验证查询DSL(
explain=true
) - 步骤3:确认数据是否存在(
GET /index/_doc/id
)
- 日志集群突然变慢,如何排查?
- 检查队列:
GET /_cat/thread_pool?v
- 查看热点线程:
GET /_nodes/hot_threads
- 磁盘IO:
iostat -x 1
三十九、开放性问题
- Elasticsearch在大数据生态中的定位?
- 搜索层:替代Solr
- 分析层:替代部分Hadoop场景(如日志分析)
- 实时层:与Flink/Kafka配合处理流数据
- 如果你负责一个日均TB级日志的系统,如何设计架构?
- **采集层**:Filebeat + Kafka
- **处理层**:Logstash或Flink
- **存储层**:ES集群(Hot-Warm架构 + ILM)
- **查询层**:Caching + 异步聚合
相关文章:
Elasticsearch 面试备战指南
Elasticsearch 面试备战指南 一、基础概念 什么是Elasticsearch? Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,提供近实时搜索、高可用性和水平扩展能力。常用于日志分析(ELK)、全文检索、商业智能等场景。 Elasticsea…...
新手村:逻辑回归-理解04:熵是什么?
新手村:逻辑回归04:熵是什么? 熵是什么? 前置条件 在开始学习逻辑回归中的熵理论之前,需要掌握以下基础知识: 概率论与统计学: 概率分布(如伯努利分布、正态分布)。条件概率和贝叶斯定理。期…...
Javaweb后端登录会话技术jwt令牌
jwt生成与校验 是base4补位的 最后面是签名,签名不是base64,是通过签名算法加密后来的 令牌长度不是固定的,长度取决于原始内容,载荷,大小 头有,类型,签名算法 base64可以对任意的二进制数据进…...
图像对比分析并生成报告
pip install pyautogui """ 图像对比分析工具 功能:实现像素级差异、结构相似性(SSIM)、直方图相似度和特征匹配率四种对比方法 作者:智能助手 版本:1.2 日期:2025-02-27""" import os import cv2 …...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vue 基础行拖拽排序示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vu…...
vue-如何将组件内容作为图片生成-html2canvas
1.引入必要的库 这里呢我们使用 html2canvas 库来将 HTML 元素转换为画布(canvas),然后再将其导出为图片。首先,确保在项目中安装了 html2canvas: npm install html2canvas 2. 组件结构 然后在我们的vue文件里面&a…...
单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结
RAM 与 内存 RAM(Random Access Memory,随机存取存储器) 和 内存 这两个术语通常是 同义词,即 内存 常常指的就是 RAM。 1. RAM(内存) 定义:RAM 是计算机中的 主存储器,用于临时存…...
Linux 练习一 NFS和DNS
练习四 任务需求:客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步&#…...
aab 转 apk
googleplay发布的游戏对外前,测试同学要安装到手机上先行测试,所以就有了这个需求。网上找了一篇文章讲的很详细了,文档是英语的,这里摘抄重要的部分做下记录: https://www.geekdashboard.com/extract-apk-files-from…...
JAVA开发:实例成员与静态成员
判断Java中的实例成员与静态成员 在Java中,可以通过以下几种方式判断一个成员是实例成员还是静态成员: 1. 通过声明方式判断 静态成员使用static关键字修饰,实例成员不使用: public class MyClass {// 实例成员int instanceVa…...
DeepSeek面试——模型架构和主要创新点
本文将介绍DeepSeek的模型架构多头潜在注意力(MLA)技术,混合专家(MoE)架构, 无辅助损失负载均衡技术,多Token 预测(MTP)策略。 一、模型架构 DeepSeek-R1的基本架构沿用…...
[项目]基于FreeRTOS的STM32四轴飞行器: 十二.角速度加速度滤波
基于FreeRTOS的STM32四轴飞行器: 十二.滤波 一.滤波介绍二.对角速度进行一阶低通滤波三.对加速度进行卡尔曼滤波 一.滤波介绍 模拟信号滤波: 最常用的滤波方法可以在信号和地之间并联一个电容,因为电容通交隔直,信号突变会给电容充电&#x…...
《基于SpringBoot的图书网购平台的设计与实现》开题报告
个人主页:大数据蟒行探索者 一、选题的依据及意义 1.1选题来源 市场需求驱动:如今,互联网深度融入人们生活,阅读场景愈发多元化,线上购书成为主流趋势之一。读者期望随时随地浏览海量图书资源,对比价格…...
Python 非异步函数执行异步函数的方案
import asyncio import sys from your_module import browser_main # 替换为你的实际模块名 async def _keep_alive(): """保持程序持续运行""" while True: await asyncio.sleep(1) def run_browser(index: int None): """ 执…...
计算机期刊推荐 | 工程技术-电子与电气, 计算机
IET Microwaves Antennas & Propagation的新特刊:《天线与超材料的设计、合成、仿真与实验》 学科领域: 工程技术-电子与电气, 计算机 期刊类型: SCI/SSCI/AHCI 收录数据库: SCI(SCIE) ISSN: 1751-8725 中科院…...
【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画
以下是一份逐步拆解教程,带你从零理解并复刻这个牛顿摆(Pendulum of Newton)动画效果,这是一个经典的物理演示模型,现在通过纯 HTML 和 CSS 实现出来,视觉效果炫酷、结构简洁。 🎯 动画效果说明…...
对三维物体模型的阈值操作
对三维物体模型的阈值操作 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头2. point_normal_x、point_normal_y、point_normal_z有什么区别?3. 去除离群点 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头 dev_open_win…...
【Unity网络编程知识】使用Socket实现简单TCP通讯
1、Socket的常用属性和方法 创建Socket TCP流套接字 Socket socketTcp new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 1.1 常用属性 1)套接字的连接状态 socketTcp.Connected 2)获取套接字的类型 socketTcp.So…...
简记_单片机硬件最小系统设计
以STM32为例: 一、电源 1.1、数字电源 IO电源:VDD、VSS:1.8~3.6V,常用3.3V,去耦电容1 x 10u N x 100n ; 内核电源:内嵌的稳压器输出:1.2V,给内核、存储器、数字外设…...
Android Launcher实战:完美复刻iOS风格Hotseat布局优化
一、需求背景与效果呈现 在Android 13系统深度定制过程中,原生Launcher的Hotseat布局因视觉效果平庸需要进行UI重构。产品团队要求仿照iOS系统设计,实现以下核心特性: 取消传统横屏铺满效果 采用居中显示布局方案 支持圆角背景与智能边距调…...
2025-3-25算法打卡
一,走迷宫 1.题目描述: 给定一个 NMNM 的网格迷宫 GG。GG 的每个格子要么是道路,要么是障碍物(道路用 11 表示,障碍物用 00 表示)。 已知迷宫的入口位置为 (x1,y1)(x1,y1),出口位置为 (x…...
Python:进程的常用方法,注意细节,进程线程对比
进程常用方法: start():启动进程实例 is_alive():判断子进程的存活状态,返回True或False,子进程执行完后的状态为False join([timeout]):是否等待子进程执行结束(在当前位置阻塞主进程)主进程等子进程多长…...
北京交通大学第三届C语言积分赛
作者有言在先: 题解的作用是交流思路,不是抄作业的。可以把重点放在思路分析上而不是代码上,毕竟每个人的代码风格是不一样的,看别人的代码就跟做程序填空题一样。先看明白思路再看代码。 还有就是,deepseek真的很好用…...
架构设计之自定义延迟双删缓存注解(下)
架构设计之自定义延迟双删缓存注解(下) 小薛博客官方架构设计之自定义延迟双删缓存注解(下)地址 为了保证Cache和ClearAndReloadCache的灵活性,特意加入EL表达式解析 1、Cache package com.xx.cache;import java.lang.annotation.*; import java.util.concurren…...
SingleMod
SingleMod SingleMod是一种深度学习模型,专为利用纳米孔直接RNA测序(DRS)数据在单RNA分子中精确检测m6A修饰而设计。该模型通过深度多实例回归框架进行训练,能够充分利用广泛的甲基化率标签。SingleMod是一个通用框架,可轻松适配其他核酸修饰的检测模型训练。 注意: Si…...
SQL-查询漏洞
一、查询注入的数据类型 //list.php<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatiable" content"IEedge"><meta name"viewport" content&…...
Maven 多模块项目(如微服务架构)中,父 POM(最外层) 和 子模块 POM(具体业务模块)的区别和联系
文章目录 **1. 父 POM 的核心职责****1.1 依赖管理 (dependencyManagement)****1.2 插件管理 (pluginManagement)****1.3 其他公共配置** **2. 子模块 POM 的核心职责****2.1 依赖声明 (dependencies)****2.2 插件启用与覆盖 (plugins)** **3. 核心对比表****4. 使用场景示例**…...
【AIGC】图片变视频 - SD ComfyUI视频生成
效果图 完整过程 SD ComfyUI 下载 下载 https://pan.quark.cn/s/64b808baa960 解压密码:bilibili-秋葉aaaki 完整 https://www.bilibili.com/video/BV1Ew411776J/ SD ComfyUI 安装 1.解压 2.将controlnet内部文件复制到 ComfyUI-aki-v1.6\ComfyUI\models\control…...
思考我的未来职业
李升伟 编译 关于我 我是一名专注于后端开发的软件工程师,拥有十年专业编程经验。从学生时代起,编程就是我的热情所在,并一直保持着这个长期爱好。此外,我也热爱动漫和电影。 然而过去几年,婚姻、家庭责任和育儿让生…...
StarRocks数据导入
文章目录 StarRocks数据导入Broker LoadETL 集群导数非 ETL 集群导数Broker Load 任务查看BrokerLoad⼤数据量导⼊优化参数推荐配置BrokerLoad 排查思路 Insert IntoInsert Into大数据量导入优化参数 Stream LoadStreamLoad⼤数据量导⼊优化参数推荐配置Stream Load 排查思路 R…...
mmdetection安装
链接: link...
光学像差的类型与消除方法
### **光学像差的类型、理解与消除方法** 光学像差是指实际光学系统成像时,由于透镜或反射镜的非理想特性导致的光线偏离理想路径,从而影响成像质量的现象。像差可分为**单色像差**(与波长无关)和**色差**(与波长相关…...
Manus AI 破局多语言手写识别,解锁智能新天地
Manus AI 破局多语言手写识别,解锁智能新天地 前言 在人工智能技术不断渗透各行各业的背景下,手写识别领域长期面临多语言适配难、复杂场景泛化能力弱等挑战。ManusAI凭借其创新的算法架构和多模态融合技术,成功突破传统OCR(光学…...
文字颜色的渐变(svg实现)
一 上下渐变(有底部阴影) 效果如图: svg代码如下: <svg width"300" height"100" xmlns"http://www.w3.org/2000/svg"><defs><linearGradient id"textGradient" x1"…...
Java-设计模式
Java-设计模式 ⓪设计模式基础 ❶设计模式分类 创建型模式 用于描述对象实例化(创建对象)的模式,即用于解耦对象的实例化过程 GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 …...
“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验
“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验 哈喽小伙伴们好,我是Stark-C~ 曾几何时,哪怕是现在,估计依然有很多小伙伴沉迷于开放性和自由度极高的《我的世界》这种沙盒游戏吧~。 我个人到现在手机上还有这款游戏…...
K8S学习之基础五十:k8s中pod时区问题并通过kibana查看日志
k8s中pod默认时区不是中国的,挂载一个时区可以解决 vi pod.yaml apiVersion: v1 kind: Pod metadata:name: counter spec:containers:- name: countimage: 172.16.80.140/busybox/busybox:latestimagePullPolicy: IfNotPresentargs: [/bin/sh,-c,i0;while true;do …...
光电效应及普朗克常数的测定数据处理 Python实现
内容仅供参考,如有错误,欢迎指正,如有疑问,欢迎交流。 因为我不会Excel所以只能用Python来处理 祝大家早日摆脱物理实验的苦海 用到的一些方法 PCHIP (分段三次埃尔米特插值多项式) 因为实验时记录的数…...
hyperf中关于时间的设定
下面我来总结这三者的用法和它们之间的关系: 1. protected ?string $dateFormat U; 作用: 定义数据库日期字段的存储格式‘U’ 表示使用 Unix 时间戳格式(秒级,10位数字) 影响范围: 决定了模型从数据…...
编程实现自我指涉(self-reference)
从计算机的组成原理出发,编程实现自我指涉(self-reference)本质上是通过代码操纵代码,形成逻辑上的闭环。这种能力不仅是编程语言设计中的一个奇妙现象,更是计算理论、计算机架构、乃至哲学层面的一种深刻映射。让我们…...
数据类设计_图片类设计_矩阵图类型和像素图类型设计的补充
前言 以矩阵图类型和像素图类型作为图像类数据的基础,但在使用过程中有个问题:矩阵图形和像素图形的尺寸---长和高没有表现出来,本贴对此做出分析. 引入 原帖数据类设计_图片类设计之7_矩阵图形类设计更新_实战之页面简单设计(前端架构)-CSDN博客里有对…...
php写入\查询influxdb数据
namespace app\index\controller;use InfluxDB2\Client; use InfluxDB2\Model\WritePrecision; use InfluxDB2\Point;class Demo {/*** 显示资源列表** return \think\Response*/public function index(){$token 你的TOKEN;$org zzlichi;$bucket initdb;$client new Client…...
新手村:逻辑回归-理解02:逻辑回归中的伯努利分布
新手村:逻辑回归-理解02:逻辑回归中的伯努利分布 伯努利分布在逻辑回归中的潜在含义及其与后续推导的因果关系 1. 伯努利分布作为逻辑回归的理论基础 ⭐️ 逻辑回归的核心目标是: 建模二分类问题中 目标变量 y y y 的概率分布。 伯努利分布(…...
Python正则表达式(一)
目录 一、正则表达式的基本概念 1、基本概念 2、正则表达式的特殊字符 二、范围符号和量词 1、范围符号 2、匹配汉字 3、量词 三、正则表达式函数 1、使用正则表达式: 2、re.match()函数 3、re.search()函数 4、findall()函数 5、re.finditer()函数 6…...
JavaScript基础-事件委托(代理、委派)
在Web开发中,处理用户交互时经常需要监听DOM元素上的事件。然而,当页面上存在大量的动态生成的元素时,直接给每个元素绑定事件处理器可能会导致性能问题和代码管理复杂度增加。这时,事件委托提供了一种更加高效且易于维护的解决方…...
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…...
【区块链安全 | 第二篇】区块链概念详解
文章目录 概述1. 区块链类型2 区块链五层架构3 账本模型4. 节点(Node)5. 区块(Block)6. 区块链(Blockchain)7. 区块链工作流程 核心技术1. 共识机制2. 智能合约 主要组件1. 交易(Transaction&am…...
Android实践开发制作小猴子摘桃小游戏
Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取:Android可以存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…...
“11.9元“引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 ✨
💥 "11.9元"引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 🎯 🔍 用 Mermaid原生防御体系图 #mermaid-svg-XZtcYBnmHrF9bFjc {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…...
【C++】回调函数和回调对象
文章目录 回调可调用对象函数指针作回调函数对象作回调函数对象的使用std::function【C11】作回调使用 【C11】Lambda表达式作回调【C11】bind对象作回调std::bind的使用作回调使用 回调 当发生某种事件时需要调用或触发另一个事件即为回调,回调的核心即为将可调用…...