【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略
👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路
附录-版本升级指南
- 3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南
- 1. 升级必要性分析
- 1.1 版本特性对比
- 1.2 兼容性评估矩阵
- 2. 预升级准备清单
- 2.1 环境检查表
- 2.2 数据备份策略
- 3. 分阶段升级流程
- 3.1 滚动升级步骤(零停机)
- 3.2 关键操作指令
- 4. 升级后验证体系
- 4.1 核心功能验证表
- 4.2 性能基准对比
- 5. 回退方案设计
- 5.1 快速回退流程
- 5.2 回退检查清单
- 6. 常见问题解决方案
- 6.1 典型问题处理矩阵
- 6.2 关键日志分析
- Elasticsearch 常用结构化查询参数
3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南
- Elasticsearch版本升级核心流程与关键节点
- 风险控制矩阵:
风险点 | 预防措施 | 应急方案 |
|---|---|---|
插件不兼容 | 提前测试所有插件 | 回滚到7.x并隔离问题插件 |
数据损坏 | 双重备份+校验 | 从快照恢复数据 |
性能下降 | 预留30%资源+预热 | 调整JVM参数+分片分配策略 |
配置错误 | 版本差异文档对照 | 使用默认配置重新初始化 |
- 升级验证清单:
-
- 集群健康状态(
GET /_cluster/health)
- 集群健康状态(
-
- 节点版本一致性(
GET /_nodes/stats)
- 节点版本一致性(
-
- 索引元数据校验(
GET /_cat/indices)
- 索引元数据校验(
-
- 搜索功能测试(
GET /_search)
- 搜索功能测试(
-
- 写入性能验证(
POST /_bulk)
- 写入性能验证(
-
- 安全插件验证(
GET /_security/_authenticate)
- 安全插件验证(
-
- 建议在升级过程中使用以下监控指标:
{// 定义一个包含多个监控指标的数组,用于在 Elasticsearch 集群升级过程中对集群的运行状态进行监控"metrics": [// 监控 JVM 堆内存的使用百分比// 该指标反映了 Elasticsearch 节点上 Java 虚拟机堆内存的使用情况// 过高的堆内存使用百分比可能会导致频繁的垃圾回收,甚至可能引发内存溢出错误,影响集群的性能和稳定性// 一般建议将该指标控制在 70% - 80% 以下,以便为系统预留足够的内存空间"jvm.mem.heap_used_percent",// 监控集群中正在初始化的分片数量// 在集群升级、节点重启或数据重新分配等操作过程中,会有分片进入初始化状态// 过多的初始化分片可能会导致集群资源被大量占用,影响集群的响应速度和可用性// 通过监控该指标,可以及时发现分片初始化过程中是否存在异常情况"cluster.routing.allocation.initializing_shards",// 监控索引搜索操作的执行时间(以毫秒为单位)// 该指标反映了搜索查询在 Elasticsearch 中的执行效率// 搜索查询时间过长可能意味着查询语句复杂、索引结构不合理或集群资源不足等问题// 对该指标进行监控有助于及时发现搜索性能瓶颈,并采取相应的优化措施"indices.search.query_time_in_millis",// 监控搜索线程池的活跃线程数量// 搜索线程池用于处理搜索请求,活跃线程数量反映了当前正在处理搜索请求的线程数量// 如果活跃线程数量持续过高,可能表示搜索请求过于频繁,导致线程池资源耗尽,影响搜索性能// 监控该指标可以帮助我们了解搜索线程池的使用情况,合理调整线程池配置或优化搜索请求负载"thread_pool.search.active"]
}
1. 升级必要性分析
1.1 版本特性对比
| 功能模块 | 7.x 版本能力 | 8.x 版本增强 | 业务影响评级 |
|---|---|---|---|
| 安全体系 | TLS可选 | TLS默认启用 + 新密码套件 | ⭐⭐⭐⭐⭐ |
| 搜索性能 | 传统BM25 | 支持ANN向量搜索 | ⭐⭐⭐⭐ |
| 存储效率 | 标准压缩 | 默认ZSTD压缩(提升20%) | ⭐⭐⭐⭐ |
| 运维监控 | X-Pack基础监控 | 集成APM+机器学习告警 | ⭐⭐⭐ |
- 什么是 ES ANN 向量搜索
- 在 Elasticsearch(ES)中,
ANN(Approximate Nearest Neighbor,近似最近邻)向量搜索是一种用于高效查找与给定查询向量最相似的向量数据的技术。在传统的基于关键词的搜索无法满足复杂的语义搜索需求时,向量搜索便发挥出重要作用。例如在图像、音频、文本等领域,通过将这些数据转换为向量表示,利用向量之间的相似度来进行搜索,能实现更精准、更智能的搜索结果。 - ANN 向量搜索的应用场景
图像搜索。用户上传一张图片,系统通过提取图片的向量特征,在 Elasticsearch 中搜索与之相似的图片。文本语义搜索。输入一段文本,系统可以找到语义相似的其他文本,而不仅仅是关键词匹配的文本。推荐系统。根据用户的历史行为或偏好生成向量,在商品、文章等数据的向量库中搜索相似的向量,为用户提供个性化推荐。
- 在 Elasticsearch(ES)中,
1.2 兼容性评估矩阵
| 组件 | 7.17兼容性 | 8.0兼容性 | 风险级别 | 处理方案 |
|---|---|---|---|---|
| JDK版本 | 8/11 | 17+ | 高 | 提前升级JDK |
| Logstash插件 | 部分兼容 | 需7.17+ | 中 | 插件版本升级 |
| Kibana仪表盘 | 兼容 | 需重建 | 中 | 导出/导入NDJSON |
| 自定义分词器 | 需要验证 | 需要验证 | 高 | 测试验证+备用方案 |
NDJSON(Newline-Delimited JSON)- 一种轻量级的数据交换格式,由多行独立的 JSON 对象组成,每行一个完整的 JSON 文档,通过换行符(\n)分隔。这种格式特
别适合处理日志、流式数据或需要批量处理的结构化数据。
- 一种轻量级的数据交换格式,由多行独立的 JSON 对象组成,每行一个完整的 JSON 文档,通过换行符(\n)分隔。这种格式特
NDJSON 核心特性- 轻量性:无需复杂的解析器,逐行读取即可处理。
- 流式处理:支持实时数据流处理,适合日志收集、消息队列等场景。
- 扩展性:每行独立,便于分布式处理。
- 兼容性:可通过工具轻松转换为 CSV、XML 等格式。
NDJSON 在 Elasticsearch 中的应用- 批量数据导入。通过 Elasticsearch 的 Bulk API 导入 NDJSON 格式数据:
curl -X POST "localhost:9200/_bulk" -H "Content-Type: application/x-ndjson" --data-binary @data.ndjson - 日志处理。在 Logstash 中使用
json_linescodec 处理 NDJSON 日志:input {file {path => "/var/log/app.log"codec => json_lines} }output {elasticsearch {hosts => ["localhost:9200"]index => "logs-%{+YYYY.MM.dd}"} } - 注意事项
- 特殊字符处理:确保每行是有效的 JSON,注意转义换行符
\n和反斜杠\\。 - 数据完整性:避免在传输过程中丢失换行符,导致解析错误。
- 性能优化:
对于大规模数据,建议分批次处理,避免内存溢出。
- 特殊字符处理:确保每行是有效的 JSON,注意转义换行符
- 与其他格式对比
格式 优点缺点 适用场景NDJSON 轻量、流式处理 不支持嵌套结构 日志、实时数据流JSON 结构灵活 解析复杂、不适合流式处理 API 响应、配置文件 CSV 易于表格处理 类型不明确 数据分析、报表生成
- 批量数据导入。通过 Elasticsearch 的 Bulk API 导入 NDJSON 格式数据:
2. 预升级准备清单
2.1 环境检查表
# 检查集群健康状态
GET _cluster/health?filter_path=status,*_active_shards# 验证索引兼容性
GET _index_template?filter_path=index_templates.name,index_templates.index_template.template# 检查废弃API使用情况
GET _nodes/usage?filter_path=.*.deprecations
2.2 数据备份策略
// 向 _snapshot/backup_repo/pre_upgrade_bk_2023 端点发送 PUT 请求,目的是在名为 backup_repo 的快照仓库中创建一个名为 pre_upgrade_bk_2023 的快照
PUT _snapshot/backup_repo/pre_upgrade_bk_2023
{// 指定要包含在快照中的索引// 使用 "*" 表示包含集群中的所有索引,这样会对集群内的所有数据进行备份"indices": "*",// 设置是否忽略不可用的索引// 当设置为 true 时,如果某些索引不可用(例如处于损坏或未分配状态),快照过程不会因为这些不可用的索引而失败,而是会跳过它们继续进行快照操作"ignore_unavailable": true,// 设置是否包含集群的全局状态// 全局状态包含了集群的配置信息、节点信息、索引模板等元数据// 设置为 true 表示在快照中会包含这些全局状态信息,以便在恢复快照时可以还原整个集群的配置"include_global_state": true,// 为快照添加元数据信息// 元数据可以用于记录关于快照的额外信息,方便后续的管理和识别// 这里添加了一个名为 "reason" 的元数据字段,其值为 "pre-upgrade-8.x",表明创建这个快照的原因是在升级到 8.x 版本之前进行备份"metadata": {"reason": "pre-upgrade-8.x"}
}
- 备份验证指标:
- 成功率:100%索引包含
- 耗时:≤数据总量/50MB/s
- 存储空间:原始数据大小×1.2
3. 分阶段升级流程
3.1 滚动升级步骤(零停机)
3.2 关键操作指令
# 停用分片分配
# 向 _cluster/settings 端点发送 PUT 请求,用于修改集群的持久化设置
# 持久化设置意味着即使集群重启,这些设置仍然会生效
PUT _cluster/settings
{# "persistent" 表示这是持久化设置"persistent": {# 设置集群路由分配的启用规则为 "primaries"# 这意味着只允许主分片进行分配,副本分片的分配将被暂停# 在进行节点升级等操作时,停用分片分配可以避免在升级过程中因分片重新分配而导致的性能问题和数据不一致问题"cluster.routing.allocation.enable": "primaries"}
}# 升级单个节点
# 使用 sudo 以管理员权限执行 systemctl 命令,停止 Elasticsearch 服务
# 停止服务是为了确保在升级过程中不会有新的请求进入,避免数据损坏或升级失败
sudo systemctl stop elasticsearch.service# 使用 sudo 以管理员权限执行 rpm 命令,进行软件包的升级操作
# -Uvh 是 rpm 命令的选项,其中 -U 表示升级,-v 表示显示详细的升级过程信息,-h 表示显示进度条
# elasticsearch-8.8.1.rpm 是 Elasticsearch 8.8.1 版本的 RPM 软件包,通过该命令将节点升级到 8.8.1 版本
sudo rpm -Uvh elasticsearch-8.8.1.rpm# 验证节点状态
# 向 _cat/nodes 端点发送 GET 请求,用于获取集群中节点的信息
# v 参数表示以表格形式输出详细信息,方便查看
# h 参数用于指定要显示的列,这里指定显示节点的名称(name)、版本(version)和角色(roles)
# 通过查看这些信息,可以确认节点是否成功升级到 8.8.1 版本以及节点的角色是否正常
GET _cat/nodes?v&h=name,version,roles
4. 升级后验证体系
4.1 核心功能验证表
| 测试类别 | 测试方法 | 预期结果 | 通过标准 |
|---|---|---|---|
| 数据完整性 | 随机采样文档对比哈希值 | 哈希值完全匹配 | 100%匹配 |
| 搜索相关性 | 相同查询对比7.x/8.x结果 | 前10结果重合≥90% | ≥95%重合 |
| 写入性能 | 批量写入压力测试 | 吞吐量差异≤15% | ≤10%差异 |
| 安全认证 | 多角色权限验证 | 权限控制精确生效 | 无越权访问 |
4.2 性能基准对比
| 测试场景 | 7.17 性能指标 | 8.8 性能指标 | 变化率 |
|---|---|---|---|
| 日志写入吞吐 | 12万条/秒 | 14万条/秒 | +16%↑ |
| 复杂聚合查询 | 2.3秒 | 1.8秒 | -22%↓ |
| 冷数据存储成本 | $0.023/GB/月 | $0.018/GB/月 | -22%↓ |
| 安全握手延迟 | 320ms | 180ms | -44%↓ |
5. 回退方案设计
5.1 快速回退流程
5.2 回退检查清单
-
- 确认快照版本与7.x集群版本一致
-
关闭8.x集群安全认证功能
-
清除8.x特定索引模板
-
- 回滚JDK到11版本
6. 常见问题解决方案
6.1 典型问题处理矩阵
| 问题现象 | 根本原因 | 解决方案 | 紧急程度 |
|---|---|---|---|
| 节点无法加入集群 | TLS配置不一致 | 同步安全证书到所有节点 | ⭐⭐⭐⭐⭐ |
| 聚合查询返回空结果 | 字段类型不兼容 | 重建索引并更新映射 | ⭐⭐⭐⭐ |
| Kibana仪表板加载失败 | 插件版本不匹配 | 升级Kibana到8.x配套版本 | ⭐⭐⭐ |
| 分词器报错 | 停用词列表格式变更 | 调整分词器配置文件 | ⭐⭐ |
6.2 关键日志分析
# 典型错误日志1:证书不兼容
[WARN][o.e.x.s.t.n.SecurityNetty4Transport] SSL/TLS connection error: handshake_failure# 解决方案:
使用elasticsearch-certutil重新生成统一CA证书# 典型错误日志2:字段类型冲突
java.lang.IllegalArgumentException: field [price] of type [scaled_float] conflicts with existing type [double]# 解决方案:
创建新索引并指定正确字段类型,使用reindex API迁移数据
- 附录:迁移工具包
| 工具类别 | 推荐工具 | 使用场景 |
|---|---|---|
| 数据迁移 | Elasticsearch Reindex API | 索引结构更新 |
| 配置检查 | ES Upgrade Assistant | 预检兼容性问题 |
| 性能对比 | Rally基准测试工具 | 版本性能对比 |
| 安全迁移 | Elastic Certutil | 证书管理 |
关键注意事项:
必须先在测试环境验证业务场景- 生产环境升级需选择业务低峰期
保留至少7天的旧版本快照- 监控系统需提前适配8.x指标格式
**注:实际升级耗时与数据规模成正比,每TB数据预计需要2-4小时迁移时间**
es - head是一个 Elasticsearch 的可视化管理插件,它本身并不定义查询参数,而是允许用户使用 Elasticsearch 的各种查询参数来执行搜索操作。以下为你详细介绍 Elasticsearch 中常见的查询参数及其含义:
彩蛋!!!
Elasticsearch 常用结构化查询参数
match查询。全文搜索查询,会对查询文本进行分词处理,然后在指定字段中查找匹配的分词。term查询。精确匹配查询,不会对查询词进行分词处理,直接查找字段中包含确切值的文档。prefix查询。查找字段中以指定前缀开头的文档。
wildcard查询。支持使用通配符*(匹配任意数量的任意字符)和?(匹配单个任意字符)进行模糊匹配。range查询。查找字段值在指定范围内的文档,支持gt(大于)、gte(大于等于)、lt(小于)、lte(小于等于)操作符。bool查询。用于组合多个查询条件,可使用must(必须匹配)、must_not(必须不匹配)、should(可以匹配,匹配越多得分越高)和filter(过滤文档,不影响得分)子句。
_source参数。控制返回文档中包含的字段,可以指定包含或排除某些字段。explain参数。当设置为true时,会在返回结果中包含每个匹配文档的得分解释信息,帮助理解文档得分的计算方式。timeout参数。指定查询的超时时间,若查询在指定时间内未完成,将返回已找到的部分结果。
相关文章:
【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-版本升级指南 3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南1. 升级必要性分析1.1 版本特性对比1.2 兼容性评估矩阵 2. 预升级准备清单2.1 环境检查表2.2 数据备份策略 3. 分阶段…...
go回调函数的使用
在Go语言中,回调函数可以有参数,也可以没有参数。它们的定义和使用方式略有不同,但本质上都是将函数作为参数传递给另一个函数,并在适当的时候调用它。以下是带参数和不带参数的回调函数的示例和说明。 1. 不带参数的回调函数 不…...
电脑内存不足怎么办?
常规解决方法盘点 关闭后台程序:按下【Ctrl Shift Esc】组合键打开任务管理器,在 “进程” 选项卡里,把当前不用的程序统统 “结束任务” ,像那些自动更新的软件、常驻后台的播放器,关了能释放不少内存。比如音乐软…...
如何上传文件到github
如何上传文件到github **方法 1:使用 Git 命令行(推荐)****步骤 1:初始化 Git 仓库(如果还没有)****步骤 2:添加远程仓库****步骤 3:添加整个文件夹并提交****步骤 4:推送…...
【RISCV LAB】0x01-安装实验仿真辅助工具
安装实验辅助工具 实验环境搭建安装 Verilator编译依赖下载源码编译安装测试安装 安装 RISC-V 交叉编译工具链编译依赖下载源码编译安装编译并安装添加环境变量并测试 安装 GTKWave其他模拟器推荐RARSemulsiV FAQ 实验环境搭建 Verilator 是一款开源的支持 Verilog 和 SystemV…...
Trae插件革命:用VSPlugin Helper实现VSCode市场插件全自动安装
之前有读者留言说trae都没有c的插件用,确实是这样,trae的插件源用的是open vsx,而c/c插件是vscode官方插件市场的,如果想直接在trae中安装c/c插件是不行的,只能先从vscode官方插件市场把vsix后缀文件先下载下来&#x…...
使用PHP进行自动化测试:工具与策略的全面分析
使用PHP进行自动化测试:工具与策略的全面分析 引言 随着软件开发的复杂性不断增加,自动化测试已成为确保软件质量的关键环节。PHP作为一种广泛使用的服务器端脚本语言,拥有丰富的生态系统和工具支持,使其成为自动化测试的理想选…...
Docker相关面试题
阅读前可以给我关注➕一下嘛 以下是150道Docker相关面试题: Docker基础概念 1.什么是Docker? Docker是一个开源的应用容器引擎,基于Go语言开发,遵循Apache2.0协议。它可以让开发者将应用及其依赖包打包成一个可移植的容器&#x…...
【量化策略】动量突破策略
【量化策略】动量突破策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 动量突破策略是一种基于市场趋势的量化交易策略,它通过识别和利用资产价格的持续上升或下降趋势来获取利润。这种策略特别适用于那些价格波动较大、趋势明显…...
RK3588 openssl-3.4.1 编译安装
安装依赖 sudo apt update && sudo apt install build-essential perl libtext-template-perl -y 下载并解压源码 wget https://www.openssl.org/source/openssl-3.4.1.tar.gz tar -xzf openssl-3.4.1.tar.gz && cd openssl-3.4.1 配置编译选项 ./config --…...
EB-Cable许可管理在云计算环境中的应用
随着云计算技术的飞速发展,越来越多的企业选择将业务迁移到云端,以享受其灵活性、可扩展性和成本效益。然而,在云计算环境中管理软件许可成为了一个新的挑战。幸运的是,EB-Cable许可管理以其卓越的功能和适应性,为企业…...
字符串函数和结构题内存对齐
图下为函数使用: #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }...
5.编译链接和宏**
1. 宏(考察很多)-要求轻松实现宏,很容易出错 #define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或定义宏。 下面是宏的声明方式: #define name(参数列表) 内容 参数列表的左括号必…...
《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS)
《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的阴阳镜湖,湖面上倒映着一片由二维网格构成的岛屿世界。湖边有一块巨大的石碑,上面刻着一行文字:“欲破此湖…...
Odoo18 Http鉴权+调用后端接口
最近在调研Odoo18,包括它的前后端原理、源码等。发现官方的开发文档并不十分实用,比如标题这种简单的实用需求,竟然浪费了一点时间,特此记录。 官方文档:External API — Odoo 18.0 documentation 前提:首…...
TSN CB:恢复算法与潜在错误检测
1.概述 基础恢复功能位于排序功能中。它评估从较低层向上传递的一个或多个成员流的数据包的sequence_number子参数,以丢弃重复的数据包。基本恢复功能的给定实例化可以作为序列恢复功能或单个恢复功能。 序列恢复功能有两种序列恢复算法,因此它既可用于间…...
【sql靶场】第11、12关-post提交注入
目录 【sql靶场】第11、12关-post提交注入 POST 一、URL 二、核心组成部分 三、数据编码规范 四、应用场景与请求方法 第十一关 方法一 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 方法二 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 第…...
框架、云原生、微服务的基本概念
架构 互联网应用的架构设计随着业务需求的增长和技术的发展经历了从单一架构到垂直架构,再到分布式架构的演变。以下是这三种架构的定义、特点以及具体的例子: 1. 单一架构(Monolithic Architecture) 定义 单一架构是一种将所有…...
Discuz建站教程之论坛头部logo跳转链接怎么修改?
在修改头部logo跳转链接前,我们需要知道对应代码在哪个文件目录,进入宝塔或是服务器,找到文件:\template\default\common\header.htm,编辑器打开,搜索以下代码,大概在135行 <a href"{i…...
AI重构SEO关键词布局
内容概要 在搜索引擎优化(SEO)领域,AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型,智能系统能够实时解析海量搜索数据,构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…...
贪心算法简介(greed)
前言: 贪心算法(Greedy Algorithm)是一种在每个决策阶段都选择当前最优解的算法策略,通过局部最优的累积来寻求全局最优解。其本质是"短视"策略,不回溯已做选择。 什么是贪心、如何来理解贪心(个人对贪心的…...
OpnenHarmony 开源鸿蒙北向开发——1.开发环境搭建(DevEco Studio 5.03)
我这边是基于window下对OpenHarmony开源鸿蒙进行北向开发。 一、安装DevEco Studio 1、下载 下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生态 2、安装 下载完成之后进行解压 双击进行安装 按照我的步骤进行 选择安装目录,全部配置完成后…...
钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛
在钉钉在线表格中,虽然功能相对Excel有所简化,但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤: 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉,进入“钉钉在线表格”应用。 打开你需要操作…...
【工具】ReConPlot一个可视化和解释基因组重排的R包
文章目录 介绍代码案例加载R包导入数据 参考 介绍 人类肿瘤的全基因组测序研究表明,复杂形式的结构变异,统称为复杂基因组重排(cgr),在不同类型的癌症中普遍存在。cgr的检测、分类和机制解释需要对体细胞拷贝数畸变&a…...
OSPF-2 邻接建立关系
上一期我们说了OSPF的邻居建立关系以及OSPF邻居关系建立中建立失败的因素以及相关实验案例 这一期我们来说说OSPF的邻接关系建立时需要交互哪些报文以及失败因素及原因和相关实验案例 一、概述 在运行了OSPF的网络当中为了交互链路状态信息和路由信息,互相之间需要建立邻接关…...
最完美的WPF无边框设计!
常规的无边框方法设计 常规的WPF无边框设计方法都是通过AllowsTransparency="True"和WindowStyle=“None”,并且使用WindowChrome样式来实现,但是这样会有问题就是,窗体最大化的时候将底部任务栏给挡住了,另外最大化的时候不能拖动窗体。参考这个大佬的设计@ 若…...
无限使用Typora
下载 Typora https://www.typora.net/#home 安装 找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist/static/js/LicenseIndex.180dd4c7.5b0f7af9.chunk.js 文件 打开文件 搜索 e.hasActivated"true"e.hasActivated,修改成 e.hasActivated&…...
工作记录 2017-01-12
序号 工作 相关人员 1 协助BPO进行Billing的工作。 处理Amazing Charts的数据查询。 修改BillingJobPoster,处理CCDA 的自动导入,预计还需一天才能完成。 修改录入Code的界面(code 移动到指定位置),预计明天更新。…...
【Linux】从互斥原理到C++ RAII封装实践
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...
爬虫案例十三js逆向模拟登录中大网校
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示:这里可以添加本文要记录的大概内容: js 逆向模拟登录中大网校 提示:以下是本篇文章正文内…...
