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

TiDB 源码编译之 PD/TiDB Dashboard 篇

作者: ShawnYan 原文来源: https://tidb.net/blog/a16b1d46

no-alt

TiDB

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性,支持在本地和云上部署。

源码仓库

TiDB 数据库本身由众多组件构成,而周边生态也欣欣向荣,所以源码仓库很多,本文主要涉及 PD 和 TiDB Dashboard 两个源码库,目标地址如下:

  • https://github.com/tikv/pd/

PD 是 Placement Driver 的缩写。它管理和调度TiKV集群。PD 被称之为 TiDB 集群的“大脑”。 PD 通过嵌入etcd来支持容错。部署时,建议启动 3 个 PD 进程来构成 PD 集群,保证高可用。

  • https://github.com/pingcap/tidb-dashboard/

TiDB Dashboard 是一个 Web UI,用于监视、诊断和管理 TiDB 集群。可单独编译前后台资源包,也可以打包成二进制文件,一键启动。 关于 TiDB Dashboard 的更多介绍,可以参考官方文档: TiDB Dashboard 介绍

编译依赖

本文的编译使用的系统为 CentOS 7。

[shawnyan@centos7 ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[shawnyan@centos7 ~]$ uname -a
Linux centos7.shawnyan.com 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[shawnyan@centos7 ~]$ go version
go version go1.20.6 linux/amd64

PD 编译依赖 go 1.20,所以需要先安装 golang。但是,CentOS 7 默认提供的是 golang 1.19。

[shawnyan@centos7 ~]$ yum info golang
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager
Loading mirror speeds from cached hostfile
Installed Packages
Name        : golang
Arch        : x86_64
Version     : 1.19.10
Release     : 1.el7
Size        : 7.4 M
Repo        : installed
From repo   : epel-7-aliyun
Summary     : The Go Programming Language
URL         : http://golang.org/
License     : BSD and Public Domain
Description : The Go Programming Language.[shawnyan@centos7 pd]$ go version
go version go1.19.10 linux/amd64

所以,需要手动下载二进制包并更新环境变量。

wget https://go.dev/dl/go1.20.6.linux-amd64.tar.gz
tar zxvf go1.20.6.linux-amd64.tar.gz
sudo mv go /optvi ~/.bashrc
export GOl11MODULE=on
export GOROOT=/opt/go
export GOPATH=/home/shawnyan
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

TiDB Dashboard 包含前端 UI,所以依赖会多一些,需要安装 npm、pnpm,如果未安装 pnpm 会遇到报错。

cd ui &&\
pnpm i
/bin/sh: line 1: pnpm: command not found
make: *** [ui_deps] Error 127

这里,从 GitHub 下载 pnpm 二进制包。

wget https://github.com/pnpm/pnpm/releases/latest/download/pnpm-linuxstatic-x64
sudo mv pnpm-linuxstatic-x64 /bin/pnpm
sudo chmod +x /bin/pnpm
pnpm --version
8.6.11

编译示例 -- PD

PD 编译时会直接引用 TiDB Dashboard,PD 编译日志截取如下。

+ Fetch TiDB Dashboard Go module- TiDB Dashboard directory: /home/shawnyan/pkg/mod/github.com/pingcap/tidb-dashboard@v0.0.0-20230705095454-5e220f970f27
+ Create download cache directory: /home/shawnyan/pd/.dashboard_download_cache
+ Discover TiDB Dashboard release version- TiDB Dashboard release version: 2023.07.05.1
+ Check whether pre-built assets are available- Cached archive does not exist- Download pre-built embedded assets from GitHub release- Download https://github.com/pingcap/tidb-dashboard/releases/download/v2023.07.05.1/embedded-assets-golang.zip% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 14.7M  100 14.7M    0     0  4029k      0  0:00:03  0:00:03 --:--:-- 7105k- Save archive to cache: /home/shawnyan/pd/.dashboard_download_cache/embedded-assets-golang-2023.07.05.1.zip
+ Unpack embedded asset from archive
Archive:  /home/shawnyan/pd/.dashboard_download_cache/embedded-assets-golang-2023.07.05.1.zip

所以想修改 TiDB Dashboard 的 UI 见面并打包到 PD 中,则需先完成 TiDB Dashboard 的编译。 当然也可以跳过 TiDB Dashboard 的编译,在 PD 编译过程中会自动下载打包好的 Dashboard。 甚至,可以在 PD 编译过程中,使用参数 without_dashboard 来跳过 Dashboard。

PD 编译过程其实蛮顺畅。

git clone https://github.com/shawn0915/pd --depth=1
cd pd
make

稍等一会就可以看到二进制文件了。

[shawnyan@centos7 bin]$ ls
pd-ctl  pd-recover  pd-server
[shawnyan@centos7 bin]$ ./pd-server --version
Release Version: fe52361
Edition: Community
Git Commit Hash: fe52361cf48a7f5ed8c69bcd02db77e25162f207
Git Branch: master
UTC Build Time:  2023-07-31 05:49:54

编译示例 -- TiDB Dashboard

下载 TiDB Dashboard 源码,这里为了节省时间、空间,只克隆一份最新版本的源码:

git clone https://github.com/shawn0915/tidb-dashboard --depth=1

进入源码文件夹,并执行编译命令 make package ,然后进入漫长的等待。。。

[shawnyan@centos7 tidb-dashboard-master]$ make package
scripts/install_go_tools.sh
+ Install go tools
go install github.com/swaggo/swag/cmd/swag
go install github.com/vektra/mockery/v2
+ Clean up go mod
cd ui &&\
pnpm i
packages/tidb-dashboard-lib              |  WARN  The field "resolutions" was found in /home/shawnyan/tidb-dashboard-master/ui/packages/tidb-dashboard-lib/package.json. This will not take effect. You should configure "resoluti                                         ons" at the root of the workspace instead.
Scope: all 8 workspace projects
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated opn@6.0.0
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated chokidar@2.1.8
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated fsevents@1.2.13
packages/tidb-dashboard-lib              |  WARN  deprecated @babel/polyfill@7.12.1
packages/tidb-dashboard-lib              |  WARN  deprecated uuid@3.4.0
packages/tidb-dashboard-lib              |  WARN  deprecated querystring@0.2.0
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated core-js@1.2.7
packages/tidb-dashboard-lib              |  WARN  deprecated core-js@2.6.12
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated source-map-resolve@0.5.3
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated source-map-url@0.4.1
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated urix@0.1.0
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated resolve-url@0.2.1
packages/tidb-dashboard-for-op           |  WARN  deprecated source-map-resolve@0.6.0
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated sane@4.1.0
packages/tidb-dashboard-for-clinic-cloud |  WARN  deprecated w3c-hr-time@1.0.2
packages/tidb-dashboard-lib              |  WARN  deprecated uglify-es@3.3.9
Packages: +2384
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 2408, reused 2387, downloaded 0, added 0
Progress: resolved 2408, reused 2387, downloaded 0, added 0, done
node_modules/.pnpm/esbuild@0.14.49/node_modules/esbuild: Running postinstall script, done in 791ms
node_modules/.pnpm/cypress@8.5.0/node_modules/cypress: Running postinstall script, done in 1m 42.9s
node_modules/.pnpm/es5-ext@0.10.61/node_modules/es5-ext: Running postinstall script, done in 367ms
. prepare$ cd .. && husky install ui/.husky
│ fatal: not a git repository (or any of the parent directories): .git
└─ Done in 609msWARN  Issues with peer dependencies found
.
├─┬ @typescript-eslint/eslint-plugin 4.33.0
│ └── ✕ unmet peer eslint@"^5.0.0 || ^6.0.0 || ^7.0.0": found 8.20.0
└─┬ @typescript-eslint/parser 4.33.0└── ✕ unmet peer eslint@"^5.0.0 || ^6.0.0 || ^7.0.0": found 8.20.0packages/tidb-dashboard-for-clinic-cloud
├─┬ cypress-image-snapshot 4.0.1
│ └── ✕ unmet peer cypress@^4.5.0: found 8.5.0
└─┬ @g07cha/flexbox-react 5.0.0└─┬ styled-components 2.4.1└── ✕ unmet peer react@">= 0.14.0 < 17.0.0-0": found 17.0.2packages/tidb-dashboard-for-op
├─┬ cypress-image-snapshot 4.0.1
│ └── ✕ unmet peer cypress@^4.5.0: found 8.5.0
└─┬ @g07cha/flexbox-react 5.0.0└─┬ styled-components 2.4.1└── ✕ unmet peer react@">= 0.14.0 < 17.0.0-0": found 17.0.2packages/tidb-dashboard-lib
├─┬ @g07cha/flexbox-react 5.0.0
│ └─┬ styled-components 2.4.1
│   └── ✕ unmet peer react@">= 0.14.0 < 17.0.0-0": found 17.0.2
├─┬ react-konva 16.8.6
│ ├── ✕ unmet peer react@16.8.x: found 17.0.2
│ ├── ✕ unmet peer react-dom@16.8.x: found 17.0.2
│ └─┬ react-reconciler 0.20.4
│   └── ✕ unmet peer react@^16.0.0: found 17.0.2
├─┬ react-native 0.70.6
│ └── ✕ unmet peer react@18.1.0: found 17.0.2
└─┬ @react-three/fiber 8.9.1├── ✕ unmet peer react@>=18.0: found 17.0.2├── ✕ unmet peer react-dom@>=18.0: found 17.0.2├─┬ its-fine 1.0.6│ └── ✕ unmet peer react@>=18.0: found 17.0.2└─┬ react-reconciler 0.27.0└── ✕ unmet peer react@^18.0.0: found 17.0.2The integrity of 1189 files was checked. This might have caused installation to take longer.
Done in 6m 53.8s
cd ui &&\
pnpm build> tidb-dashboard-ui@1.0.0 build /home/shawnyan/tidb-dashboard-master/ui
> pnpm -r buildpackages/tidb-dashboard-lib              |  WARN  The field "resolutions" was found in /home/shawnyan/tidb-dashboard-master/ui/packages/tidb-dashboard-lib/package.json. This will not take effect. You should configure "resolutions" at the root of the workspace instead.
Scope: 7 of 8 workspace projects
packages/clinic-client build$ gulp build
[28 lines collapsed]
│ [main] INFO  o.o.codegen.TemplateManager - writing file /home/shawnyan/tidb-dashboard-master/ui/packages/clinic-client/src/client/api/.openapi-generator/FILES
│ ################################################################################
│ # Thanks for using OpenAPI Generator.                                          #
│ # Please consider donation to help us maintain this project 🙏                 ##
│ # https://opencollective.com/openapi_generator/donate                          #
│ ################################################################################
│ [17:37:00] Finished 'swagger:gen' after 45 min
│ [17:37:00] Starting 'tsc:build'...
│ [17:37:14] Finished 'tsc:build' after 14 s
│ [17:37:14] Finished 'build' after 45 min
└─ Done in 45m 36.6s
...

Finally, TiDB Dashboard 编译完成。这里演示的是直接将 TiDB Dashboard 直接编译为二进制文件,所以编译完成后,可以在 bin 目录下看到 tidb-dashboard 二进制包。

[shawnyan@centos7 bin]$ ./tidb-dashboard --help
Usage of ./tidb-dashboard:--cluster-allowed-names string   comma-delimited list of acceptable peer certificate SAN identities--cluster-ca string              (TLS between components of the TiDB cluster) path of file that contains list of trusted SSL CAs--cluster-cert string            (TLS between components of the TiDB cluster) path of file that contains X509 certificate in PEM format--cluster-key string             (TLS between components of the TiDB cluster) path of file that contains X509 key in PEM format--data-dir string                path to the Dashboard Server data directory (default "/tmp/dashboard-data")-d, --debug                          enable debug logs--experimental                   allow experimental features--feature-version string         target TiDB version for standalone mode (default "N/A")-h, --host string                    listen host of the Dashboard Server (default "127.0.0.1")--path-prefix string             public URL path prefix for reverse proxies (default "/dashboard")--pd string                      PD endpoint address that Dashboard Server connects to (default "http://127.0.0.1:2379")-p, --port int                       listen port of the Dashboard Server (default 12333)--telemetry                      allow telemetry--temp-dir string                path to the Dashboard Server temporary directory, used to store the searched logs--tidb-allowed-names string      comma-delimited list of acceptable peer certificate SAN identities--tidb-ca string                 (TLS for MySQL client) path of file that contains list of trusted SSL CAs--tidb-cert string               (TLS for MySQL client) path of file that contains X509 certificate in PEM format--tidb-key string                (TLS for MySQL client) path of file that contains X509 key in PEM format-v, --version                        print version information and exit
pflag: help requested

此时,可以单独启动面板,只需将其注册到 PD。

./bin/tidb-dashboard --pd x.x.x.x

新启动的面板默认端口为 12333 ,可以通过 URL http://127.0.0.1:12333/dashboard/ 来访问刚刚编译好的面板。

验证测试

为了验证编译效果,本例中对 TiDB Dashboard 做了小小改动,版本号增加了 -ShawnYan 后缀,在【概况】、【监控指标】页面有文档链接,实际产品中指向了 stable 版本,这里修改为 v7.2

no-alt

修改的代码位置为: https://github.com/pingcap/tidb-dashboard/blob/master/ui/packages/tidb-dashboard-for-op/src/apps/Overview/context.ts#L60 https://github.com/pingcap/tidb-dashboard/blob/master/ui/packages/tidb-dashboard-for-op/src/apps/Monitoring/context.ts#L36

修改完成后,再次打包。待打包完成后启动 TiDB Dashboard。可以看到如下效果:

no-alt

总结

在 CentOS 7 下就可以进行编译,并不需要高版本的 gcc,体验就很棒,但是还是对机器的性能是有要求的,“老破小”机器上编译就很痛苦。 在写本文过程中,发现 TiDB Dashboard 和 PD 的版本未对齐,于是在 AskTUG 上开了一个帖子 ( 1010558 ),从帖子提出到问题有人对应,产研在源码仓库提出 Issue #1566 仅过去了不到一小时,对应速度可谓飞快。 Surprise! 另发现一处文档选择 dev 版本的小问题,也提了帖子记录一下。( 1010580 ) anyway, TiDB 组件很多,而编译工作是定制化二次开发的一个必要条件,要想一个一个编译过来还需要花点时间和精力。

相关文章:

TiDB 源码编译之 PD/TiDB Dashboard 篇

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/a16b1d46 TiDB TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库&#xff0c;是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融…...

Vue3描述列表(Descriptions)

&#x1f601; 整体功能效果与 ant design vue 保持高度一致 &#x1f601; 包含两种组件&#xff1a;Descriptions 和 DescriptionsItem&#xff08;必须搭配使用&#xff01;&#xff09; 效果如下图&#xff1a;在线预览 APIs Descriptions 参数说明类型默认值必传title…...

【驱动开发day8作业】

作业1&#xff1a; 应用层代码 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h>int main(int…...

yxBUG记录

1、 原因&#xff1a;前端参数method方法名写错。 2、Field ‘REC_ID‘ doesn‘t have a default value 问题是id的生成问题。 项目的表不是自增。项目有封装好的方法。调用方法即可。 params.put("rec_id",getSequence("表名")) 3、sql语句有问题 检…...

uniapp引入inconfont自定义导航栏

app,h5端引入 uniapp本身的全局设置中有个iconfontsrc属性 所以只需要 1.iconfont将需要的icon添加至项目 2.下载到本地解压后,将其中的ttf文件,放在static静态目录下 3.在page.json中对全局文件进行配置tabBar(导航图标) “iconfontSrc”: “static/font/iconfont.ttf”, …...

OSLog与NSLog对比

NSLog: NSLog的文档&#xff0c;第一句话就说&#xff1a;Logs an error message to the Apple System Log facility.&#xff0c;所以首先&#xff0c;NSLog就不是设计作为普通的debug log的&#xff0c;而是error log&#xff1b;其次&#xff0c;NSLog也并非是printf的简单…...

全网最细,Fiddler修改接口返回数据详细步骤实战,辅助接口测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在测试的过程中&a…...

Mysql自动同步的详细设置步骤

以下步骤是真实的测试过程&#xff0c;将其记录下来&#xff0c;与大家共同学习。 一、环境说明&#xff1a; 1、主数据库&#xff1a; &#xff08;1&#xff09;操作系统&#xff1a;安装在虚拟机中的CentOS Linux release 7.4.1708 (Core) [rootlocalhost ~]# cat /etc/redh…...

opencv-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

闭运算是先膨胀、后腐蚀的运算&#xff0c;它有助于关闭前景物体内部的小孔&#xff0c;或去除物体上的小黑点&#xff0c;还可以将不同的前景图像进行连接。 例如&#xff0c;在图 8-17 中&#xff0c;通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔&#xff08;内部闭合的…...

jenkins gitlab多分支构建发布

内容背景介绍 这个是新手教程,普及概念为主 公司现在还使用单分支发布测试环境和生产,多人协同开发同一个项目导致测试环境占用等待等情况 测试环境占用等待问题 测试环境代码直接合并到 master,容易导致误发布到生产的情况 避免多版本同时发布测试不完善的情况出现 中间件…...

刷题笔记 day8

1004 最大连续1的个数 III 这道题要求将原数组中的0翻转成1&#xff0c;求出最大元素全是1的子数组长度&#xff0c;看这道题第一感觉还要将里面的0变成1&#xff0c;感觉这道题解决起来很麻烦&#xff0c;但是我们可以转变思路&#xff0c;找出其最大子数组&#xff0c;使得子…...

C 语言的表达式

表达式 expression 表达式由运算符和运算对象组成。 最简单的表达式是一个单独的运算对象&#xff0c;以此为基础可以建立复杂的表达式。 一些表达式由子表达式&#xff08;subexpression&#xff09;组成。子表达式即较小的表达式。 这些都是一些表达式&#xff1a; -4 a…...

C++设计模式创建型之单例模式

一、概述 单例模式也称单态模式&#xff0c;是一种创建型模式&#xff0c;用于创建只能产生一个对象实例的类。例如&#xff0c;项目中只存在一个声音管理系统、一个配置系统、一个文件管理系统、一个日志系统等&#xff0c;甚至如果吧整个Windows操作系统看成一个项目&#xf…...

杂记 | 记录一次使用Docker安装gitlab-ce的过程(含配置交换内存)

文章目录 01 准备工作02 &#xff08;可选&#xff09;配置交换内存03 编辑docker-compose.yml04 启动并修改配置05 nginx反向代理06 &#xff08;可选&#xff09;修改配置文件07 访问并登录 01 准备工作 最近想自建一个gitlab服务来保存自己的项目&#xff0c;于是找到gitla…...

MyBatis@Param注解的用法

一、前言 本人在学习mybatis的过程中遇到的一个让人不爽的bug&#xff0c;在查找了些相关的资料后得以解决&#xff0c;遂记录。 二、报错及解决 mapper中有一方法&#xff1a; Select("select * from emp " "where name like concat(%, #{name}, %) "…...

Shader 编程:GLSL 重要的内置函数

该原创文章首发于微信公众号&#xff1a;字节流动 未经作者&#xff08;微信ID&#xff1a;Byte-Flow&#xff09;允许&#xff0c;禁止转载 前面发了一些关于 Shader 编程的文章&#xff0c;有读者反馈太碎片化了&#xff0c;希望这里能整理出来一个系列&#xff0c;方便系统的…...

浏览器同源策略

浏览器同源策略 同源策略&#xff1a;是一个重要的浏览器的安全策略&#xff0c;用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互 它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介 例如&#xff1a;被钓鱼网站收集信息&#xff0c;使用ajax发起…...

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断&#xff0c;也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线&#xff1b; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器&#xff0c;所有的GPIO管脚都可以被选作EXTI的触发源…...

了解 spring MVC + 使用spring MVC - springboot

前言 本篇介绍什么是spring MVC &#xff0c;如何使用spring MVC&#xff0c;了解如何连接客户端与后端&#xff0c;如何从前端获取各种参数&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 什么…...

C#中的Invoke

在 C# 中&#xff0c;Invoke() 是一个用于调用方法的方法&#xff0c;它能够在运行时动态地调用一个方法。 Invoke() 方法的使用方式有两种&#xff1a; 通过 MethodInfo 对象调用&#xff1a; using System.Reflection;namespace ConsoleApp_Invoke {public class Program{…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...