【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
文章目录
- 1、Rocky8介绍
- 2、Go与GoLand安装
- 3、Go多版本管理(gvm)
- 4、go微服务框架介绍(含rpc测试工具,proto协议介绍)
- 5、go-zero安装(web,rpc)
- 6、环境变量,brew,git,kubectl,ssh等
文章目录
1、Rocky8介绍
2、Go与GoLand安装
3、Go多版本管理(gvm)
4、go微服务框架介绍(含rpc测试工具,proto协议介绍)
5、go-zero安装(web,rpc)
6、环境变量,brew,git,kubectl,ssh等
1、Rocky8介绍
Rocky Linux与CentOS一样,提供了适用于服务器的稳定版本,旨在作为CentOS的完全兼容替代版本。
Rocky Linux 是一个 Linux 发行版,由 Rocky Enterprise Software Foundation 开发,这是一家自称”自我约束的非营利性”的私营公益公司。Rocky Linux 的目标是成为一个开放的企业操作系统,100% 兼容 Enterprise Linux,即与 Red Hat Enterprise Linux 完全兼容。总之,Rocky Linux 是一个免费开源、兼容 RHEL 的 Linux 发行版,由社区驱动开发,可以用于服务器、工作站等企业级应用场景。
Rocky Linux 与 CentOS 有着密切的关系。CentOS 原本是 RHEL 的一个免费开源再发行版,由社区维护,广泛用于服务器领域。但 2020 年底,Red Hat 宣布 CentOS 项目重心转移,CentOS 8 提前 EOL。
Rocky Linux 的创始人 Gregory Kurtzer 也是 CentOS 的创始人之一。CentOS 的变故直接促使他创建了 Rocky Linux 项目,目标是代替 CentOS,给用户提供一个免费、稳定、可预测的生产环境。因此,从定位上说,Rocky Linux 是 CentOS 的接替者,很多原 CentOS 用户也转向了 Rocky。从技术上说,Rocky Linux 是 RHEL 源代码的再编译版,而 RHEL 之前就是 CentOS 的上游。
Rocky 8(代号 “Green Obsidian” )的一般支持直到2024年5月1日为止,安全支持直到2029年5月01日为止。 支持的架构是 x86_64 和 aarch64 。
Rocky 9(代号 “Blue Onyx” )的一般支持直到2027年5月31日为止,安全支持直到2032年5月31日为止。 支持的架构是 x86_64-v2、aarch64、ppc64le 和 s390x。
参考资料:1 , 2
2、Go与GoLand安装
可以从 Go 官方页面 下载一个相对较新的 Go 二进制版本,然后解压并安装。注意配置环境变量和GOPATH。
使用下面的命令安装:
curl -O https://dl.google.com/go/go1.18.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz
将 Go 添加到系统路径中:
export PATH=$PATH:/usr/local/go/bin
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.profile
source ~/.profile
验证 Go 是否安装成功:
go version
查看go的配置(注意修改)
go env
go env -w GOPROXY=“xxxx"
go env -w GONOSUMDB=“xxxx"
go构建服务
本地运行:
go run xxx.go
go build xxx.go指定系统:
cat /etc/os-release
GOOS=linux GOARCH=amd64 go build -o xxx-servers
Jetbrains GoLand安装
本地有环境的情况下
使用远程开发-ssh,服务端会自动安装(配置要求,最低4H8G)
3、Go多版本管理(gvm)
因为 GVM 需要一个现有的 Go 版本来引导编译另一个 Go 版本,建议先安装一个二进制版本的 Go 来引导 GVM 的工作。
官方开源项目:github地址
1、gvm安装要先有go
否则会出现以下报错
gvm install go1.18
Installing go1.18...
* Compiling...
/root/.gvm/scripts/install: line 93: go: command not found
ERROR: Failed to compile. Check the logs at /root/.gvm/logs/go-go1.17.7-compile.log
ERROR: Failed to use installed version
2、其他依赖安装(Redhat/Centos)
其他系统的依赖可以参考gvm官方项目
sudo yum install curl
sudo yum install git
sudo yum install make
sudo yum install bison
sudo yum install gcc
sudo yum install glibc-devel
3、安装gvm
安装命令:
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)更新配置:
Please restart your terminal session or to get started right away run
source /root/.gvm/scripts/gvm
4、使用不同版本的go
gvm listall
gvm install go1.21
gvm list
gvm use go1.21
5、卸载gvm:
gvm implode
4、go微服务框架介绍(含rpc测试工具,proto协议介绍)
Go:十大主流微服务框架
- Istio(31.7K),地址
由Google、IBM和Lyft开源的微服务管理、保护和监控框架。使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。 - Go-kit(24.1K),地址
分布式开发包,用于开发微服务。 - Go-zero(24.1K)地址
集成了各种工程实践的 web 和 rpc 框架。 - Go-micro(19.6K),地址
icro是一个专注于简化分布式系统开发的微服务生态系统。 - Kratos(19.2K),地址
哔哩哔哩(B站)开源的一套Go微服务框架 - CloudWeGo-Kitex(5.2K),地址
KiteX 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。 - Dubbo-go(4.2K) ,地址
阿里,由Apache 软件基金会官方发布Go 语言加入 Dubbo 生态. - Tars-go(3.1K), 地址
腾讯,Tarsgo是基于Golang编程语言使用Tars协议的高性能RPC框架 - 北极星-polaris-go,地址
北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。 - Go:十大主流微服务框架
微服务是什么?
- 微服务(Microservices)是一种软件开发架构风格,它将一个大型的应用程序分解为一组小型、松散耦合的服务,每个服务都围绕特定的业务功能构建,并可以独立部署、扩展和维护。这些服务通常通过轻量级的通信机制(如HTTP RESTful API)进行交互。
- 微服务架构的优势在于提高了系统的灵活性和可维护性,使得开发团队可以更快地迭代和部署新功能。然而,它也带来了一些挑战,如服务之间的协调、数据一致性、分布式系统的复杂性等。
- 微服务架构,微服务的核心要素在于服务的发现、注册、路由、熔断、降级、分布式配置。
- 服务分解:将应用程序分解为一组小型服务,每个服务都封装了特定的业务功能。
- 独立部署:每个微服务可以独立于其他服务进行部署、更新和扩展。
- 技术多样性:不同的微服务可以使用不同的编程语言、数据库和存储技术。
- 业务对齐:每个服务都围绕特定的业务能力构建,使得服务更加专注和易于理解。
- 松散耦合:服务之间的耦合度较低,一个服务的更改不会直接影响到其他服务。
- 服务发现:服务实例需要能够发现并动态地找到其他服务的实例,通常通过服务注册中心实现。
- 负载均衡:在多个服务实例之间分配请求,以提高系统的可用性和伸缩性。
- 容错性:系统设计能够处理单个服务的故障,通过熔断机制和降级策略来保护系统。
- 服务注册中心:服务实例在启动时向注册中心注册自己,并定期发送心跳以表明存活状态。
- API网关:作为所有服务请求的入口点,提供路由、认证、监控和限流等功能。
- 配置管理:集中管理服务配置,支持动态更新,以适应不同环境的需求。
- 日志和监控:集中记录和管理服务日志,实施监控和警报机制,以便于问题诊断和性能优化。
- 数据管理:每个服务可以有自己的数据库,或者共享数据库,但需要设计数据一致性的策略。
- 安全:确保服务之间的通信安全,实施认证和授权机制。
- DevOps实践:微服务架构通常与持续集成/持续部署(CI/CD)、容器化(如Docker)和基础设施自动化等DevOps实践相结合。
rpc是什么?对比rpc和http
- RPC(Remote Procedure Call)即远程过程调用,它允许程序调用另一个地址空间(通常是另一个机器上的)程序的函数或方法,就像调用本地函数一样简单。RPC 隐藏了网络编程的复杂性,让开发者可以像调用本地方法一样调用远程方法。
- RPC 可以使用各种底层传输协议,如 TCP、HTTP、UDP 等。常见实现: gRPC、Thrift、Protobuf-RPC。
HTTP: 基于 TCP 协议。常见实现: REST API、GraphQL。 - 协议层
RPC: 是一个更高层的抽象,用于封装复杂的分布式系统的调用细节。它并不关心具体的传输协议,底层可以是 HTTP、TCP、UDP 等。
HTTP: 是一个具体的传输协议,规定了客户端和服务器之间如何通信及通信的格式。 - 通信模式
RPC: 典型的是同步调用(类似函数调用),客户端发送一个请求并等待响应。许多 RPC 框架也支持异步调用。
HTTP: 基于请求-响应模式,客户端发送请求,服务器处理并返回响应。这是典型的无状态通信。 - 使用场景
RPC: 适合需要严格定义接口和高性能通信的内部服务调用,如微服务架构中的服务之间调用。它通常使用二进制协议(如 Protobuf)来提高效率。
HTTP: 更通用,适合范围更广的应用场景,包括网页浏览、RESTful API 服务等。由于其高度普及性,适用于与外部系统或前端进行交互。 - 数据格式
RPC: 通常使用紧凑的二进制格式(如 Protobuf、Thrift、Avro)进行序列化和反序列化,以提升性能和效率。
HTTP: 数据格式通常是人类可读的文本格式(如 JSON、XML),这使调试和开发更加直观。 - 性能
RPC: 基于二进制协议的 RPC(如 gRPC)通常比 HTTP 更高效,因为二进制格式比文本格式(如 JSON)更紧凑,序列化/反序列化速度更快。
HTTP: HTTP 本身并不关注性能优化,因此在序列化和数据传输上通常不如基于二进制协议的 RPC 高效。 - 互操作性
RPC: 不同的 RPC 框架之间通常不兼容(如 gRPC 的客户端无法直接调用 Thrift 的服务)。需要特定的客户端和服务器库支持。
HTTP: HTTP 基于开放标准,几乎所有系统和语言都支持 HTTP 请求,因此具有良好的互操作性。 - 结论
RPC 更适合于高性能、内部服务的通信,需要严格控制的接口和较高的序列化/反序列化效率。
HTTP 更适合于开放、通用的应用场景,尤其是需要与外部系统交互的情况,并且由于其简易性和普及性,在 Web 开发中占有重要地位。
有哪些rpc接口测试工具?
- Postman:这是一个广泛使用的 API 开发工具,支持 HTTP、HTTPS、SOAP、REST 等多种协议,可以发送请求、组织请求、使用环境变量,并具有测试与验证、数据驱动测试和 API 文档生成等高级功能
- Apifox:Apifox 是一个一体化 API 协作平台,提供了 API 文档、API 调试、API Mock、API 自动化测试等功能。它支持 gRPC 接口的调试和管理,允许用户直接导入 .proto 文件,自动解析文件中的服务定义和消息结构,生成相应的测试用例模板。
- BloomRPC: BloomRPC 是一个专门为 gRPC 服务设计的测试工具,提供了直观的用户界面,便于发现和调用 gRPC 方法。
- rpc接口测试工具BloomRPC和Grpc UI, bloomrpc-github
- grpcurl:grpcurl 是一个常用的命令行工具,用于与 gRPC 服务器交互。它类似于 cURL,但专门用于 gRPC 服务器。它支持直接使用 Protocol Buffers 文件(.proto)来描述接口和消息格式。
1、grpcurl
brew install grpcurl
grpcurl -plaintext -d '{"name": "World"}' localhost:50051 helloworld.Greeter/SayHello
这里 -plaintext 表示使用明文通信,-d 选项指定请求的 JSON 数据。2、BloomRPC CLI
虽然 BloomRPC 本身是一个 GUI 工具,但其也提供了一个命令行版本,可以用于非图形环境中进行测试。
npm install -g @bloomrpc/cli
bloomrpc-cli --host localhost:50051 --proto ./path/to/your/service.proto --service ServiceName --call MethodName --data '{"field1": "value1", "field2": "value2"}'
数据序列化协议proto是什么?
- Protocol Buffers(简称Proto)是一种由Google开发的数据序列化协议,用于数据存储或通信协议。它类似于XML或JSON,但更小、更快、更简单。
- proto的特点:
- 语言无关性:Proto定义了一种中立的数据描述语言,可以用于多种编程语言,如Java、C++、Python等。
- 平台无关性:由于其语言无关性,Proto可以在不同的操作系统和平台上使用。
- 版本控制:Proto支持版本控制,允许向后兼容,即新版本的数据结构可以兼容旧版本的数据。
- 性能高效:Proto生成的序列化数据通常比XML或JSON更小,解析速度也更快。
- 自动生成代码:通过Proto编译器,可以从
.proto
文件自动生成数据访问代码,减少手动编写和维护代码的工作量。 - 自描述性:
.proto
文件中定义的数据结构是自描述的,可以用于生成API文档。
-
Proto的使用场景非常广泛,包括但不限于:
网络服务:用于定义RPC(远程过程调用)协议。
数据存储:用于存储结构化数据到数据库。
配置文件:用于定义配置数据结构。
消息系统:用于定义消息格式,用于消息传递。 -
使用Proto的步骤:
1、.proto文件定义数据结构syntax = "proto3";
message Person {string name = 1;int32 id = 2;string email = 3;
}2、编译生成特定编程语言的数据访问类,
例如,使用以下命令生成Java代码:
protoc --java_out=. --proto_path=. your_file.proto3、 使用生成的类,在程序中使用编译生成的类来序列化和反序列化数据。例如,在Java中:
Person person = Person.newBuilder().setName("John Doe").setId(1234).setEmail("john.doe@example.com").build();
// 序列化
byte[] data = person.toByteArray();
// 反序列化
Person newPerson = Person.parseFrom(data);
参考资料:
- gRpc框架,
- Google Grpc框架文档
- gRPC 和 RPC 区别-apifox
- proto是什么
5、go-zero安装(web,rpc)
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。其中web是基于RESTful API的,rpc是基于gRPC服务的。
官方文档:地址
web服务(goctl安装)
go版本:go mod tidy -go=1.xx && go mod tidy -go=1.xx
go-zero版本:goctl需要与go-zero版本一致,比如当前go.mod中的zero是1.3.2,那么ctl就是1.3.2查看所有的ctl版本
go list -m -versions github.com/zeromicro/go-zero/tools/goctl安装,注意这里的v很重要(漏了就找不到了)
go install github.com/zeromicro/go-zero/tools/goctl@latest
go install github.com/zeromicro/go-zero/tools/goctlv1.3.2验证:
goctl —version 使用:
生成API服务模板:goctl api new myproject
你可以在 myproject.api 文件中定义你的 API 接口。例如,默认情况下可能会有一个简单的 Ping 接口。
修改代码:goctl api go -api myproject.api -dir .
启动服务:go run myproject.go -f etc/myproject-api.yaml
rpc服务(protoc安装),手动下载地址
注意:
需要提前将添加 Go 的 bin 目录到系统 PATH:安装:
通过 goctl 可以一键安装 protoc,protoc-gen-go,protoc-gen-go-grpc 相关组件,你可以执行如下命令
goctl env check --install --verbose —force手动安装:
解压下载的压缩包,并将其移动到 $GOBIN 目录,查看 $GOBIN 目录:
go env GOPATH
GOBIN 为 $GOPATH/bin,如果你的 $GOPATH 不在 $PATH 中,你需要将其添加到 $PATH 中。使用:
生成rpc项目模板:goctl rpc new myrpcservice
打开 myrpcservice.proto 文件,根据需要定义你的 RPC 接口。例如,默认可能包含一个简单的服务。
生成代码:goctl rpc protoc myrpcservice.proto --go_out=. --go-grpc_out=. --zrpc_out=.
启动服务:go run myrpcservice.go -f etc/myrpcservice.yaml
6、环境变量,brew,git,kubectl,ssh等
linux内核系统环境变量介绍
常见的配置文件及其用途:1.全局配置文件(对系统中所有用户生效):
/etc/profile:系统范围内的环境变量和启动脚本。
/etc/bashrc:系统范围内的bash shell设置。
/etc/environment:用于设置全局环境变量,但不会解析shell语法(例如变量替换)。2.用户特定的配置文件(只对特定用户生效):
~/.bash_profile:对某个用户生效的登录shell配置。用于用户级别的登录shell配置。
~/.bashrc:对某个用户生效的非登录shell配置。用于用户级别的非登录shell配置,通常在启动一个新的终端时执行。
~/.profile:对某个用户生效的登录shell配置,适用于多种shell。3.配置过程
nano ~/.bash_profile
export MY_VARIABLE="my_value"
source ~/.bash_profile
echo $MY_VARIABLE XS
mac 环境变量
export PATH=$PATH:$(go env GOPATH)/bin
export PATH=$PATH:/Users/user/go/bin
source ~/.bashrc # 或者 source ~/.bash_profile, source ~/.zshrc
mac安装homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"环境变量:
ls /opt/homebrew/bin/brew
nano ~/.bash_profile
export PATH="/opt/homebrew/bin:$PATH”
保存并退出文件(按 Ctrl + X,然后按 Y,再按 Enter)
source ~/.bash_profile
brew —version
K8S相关
- kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。
- Kubernetes(也称K8s 或“kube”)是一个开源容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。
有效的 Kubernetes 部署称为集群,也就是一组运行 Linux 容器的主机。您可以将 Kubernetes 集群可视化为两个部分:控制平面与计算设备(或称为节点) - kubectl安装,官方
安装相关:
下载本体:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
下载验证:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
验证:echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
安装:sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
版本:kubectl version --client配置相关
mkdir .kube
scp ~/.kube/config root@xxx:xxx/xxx
git安装,官方,
ssh相关(服务器同理)
生成ssh秘钥:ssh-keygen -t rsa -C “xxx.com”
公钥(远程配置):cat ~/.ssh/id_rsa.pub
私钥(本地使用):cat ~/.ssh/id_rsagit配置
git config --global user.name "John Doe”
git config --global user.email johndoe@example.comgit命令
git pull
git fetch
git checkout -b feat-xxx-xxx
git add .
git commit -m feat: xxx"
git push origin
git branch -d branch_name 删除本地
git push origin --delete branch_name 删除远程git报错(配置本机ssh服务)
Enter passphrase for key '/Users/user/.ssh/id_rsa’: 系统pwd
eval "$(ssh-agent -s)”
ssh-add ~/.ssh/id_rsassh服务管理
# 检查sshd服务状态 sudo systemctl status sshd
# 启动sshd服务 sudo systemctl start sshd
# 停止sshd服务 sudo systemctl stop sshd
# 重启sshd服务 sudo systemctl restart sshd
# 使sshd服务在系统启动时自动启动 sudo systemctl enable sshd
# 禁止sshd服务在系统启动时自动启动 sudo systemctl disable sshd
相关文章:
【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero) 文章目录 1、Rocky8介绍2、Go与GoLand安装3、Go多版本管理(gvm)4、go微服务框架介绍(含rpc测试工具,proto协议介绍)5、go-zer…...
大数据Flink(一百零七):阿里云Flink的应用场景
文章目录 阿里云Flink的应用场景 一、背景信息 二、部门场景 三、技术领域 1、实时ETL和数据流 2、实时数据分析 3、事…...
如何在 Debian 上安装运行极狐GitLab Runner?【一】
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...
Git -- git stash 暂存
使用 git 或多或少都会了解到 git stash 命令,但是可能未曾经常使用,下面简单介绍两种使用场景。 场景一:分支A开发,分支B解决bug 我们遇到最常见的例子就是,在当前分支 A 上开发写需求,但是 B 分支上有…...
记录|LabVIEW从0开始
目录 前言一、表达式节点和公式节点二、脚本与公式2.1 公式 三、Excel表格3.1 位置3.2 案例:波形值存入Excel表中3.3 案例:行写入,列写入3.4 添加序列号 四、时间格式化4.1 获取当前时间4.2 对当前时间进行格式化 五、创建项目、创建子VI5.1S…...
来点八股文(五) 分布式和一致性
Raft raft 会进入脑裂状态吗?描述下场景,怎么解决? 不会。raft通过选举安全性解决了这个问题: 一个任期内,follower 只会投票一次票,且先来先得;Candidate 存储的日志至少要和 follower 一样新…...
基于Spring boot + Vue的灾难救援系统
作者的B站地址:程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址:程序员云翼-CSDN博客 1.项目技术栈: 前后端分离的项目 后端:Springboot MybatisPlus 前端:Vue ElementUI 数据库: …...
Java码农人生使用手册——类和对象
一、类的定义和使用 类是用来对一个实体(对象)来进行描述的。 注意: 类名采用大驼峰定义 二、类的实例化 定义了一个类,就相当于在计算机中定义了一个新的类型,用类的类型创建对象的过程,称为类的实例化。 …...
掌握SEO站外推广优化的五大绝招
对于网站运营者和数字营销人员来说,SEO站外推广是提升网站流量和排名的重要手段。以下是五个有效的SEO站外推广优化方法,希望对大家有所帮助。 1. 高质量的外链建设 高质量的外部链接(Backlinks)是搜索引擎排名的重要因素之一。…...
Github Benefits 学生认证/学生包 新版申请指南
本教程适用于2024年之后的Github学生认证申请,因为现在的认证流程改变了很多,所以重新进行了总结这方面的指南。 目录 验证教育邮箱修改个人资料制作认证文件图片转换Base64提交验证 验证教育邮箱 进入Email settings,找到Add email address…...
lua学习(1)
vscode打开c或者lua文件 插件显示禁用,怎么开启插件。 1. lua 字符串 单个引号和双引号都可变量的定义默认是全局的删除一个变量将其赋值为nil即可 如: bnilnil还可以对表中的数据进行删除,也可删除一个表只要变量不是nil,变…...
深入JVM:类加载器和双亲委派模型
目录 1. 什么是类加载器2. 类加载器的类型3. 双亲委派模型4. 类装载的过程加载验证准备解析初始化使用卸载 1. 什么是类加载器 如果想要了解什么是类加载器就需要清楚一个Java文件是如何运行的。我们可以看下图: 首先要知道操作系统是不能直接运行Java文件的&#…...
JS+H5打字练习器
实现功能 1.导入.TXT文件到打字练习内容(部分浏览器可能出于安全问题限制了这一步操作) 2.输入文本到打字练习内(弹出输入框,将要练习的内容输入至输入框) 3. 开始练习,并根据正误在打字练习内容文本上修…...
python常用库
目录 tqdm库介绍用法 argparse库介绍用法 tqdm库 介绍 封装一个可视化,可拓展的进度条,以了解项目运行的时长,了解项目进展情况。 传入第 用法 安装 pip install tqdm1直接使用 for i in tqdm(range(1000)):time.sleep(0.01)等价 for i…...
LeetCode-二叉树
1、判断单值二叉树. - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool _isUnivalTree(struct TreeNode* root,int data) {if(rootNUL…...
接口测试学习笔记2
一、复习和扩展: 1、金字塔测试模型 UI测试 -- 黑盒 Service 服务层--函数之间的调用 灰盒 接口测试 Unit单元层--白盒测试 趋势:逐步向下发展 测试优先、测试驱动 -- 先考虑怎么测,再考虑怎么开发 满足软件测试的可控范围 2、…...
【时时三省】(C语言基础)函数递归
山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 什么是递归 程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂…...
Debezium系列之:采集PostgreSQL数据库常用知识点汇总
Debezium系列之:采集PostgreSQL数据库常用知识点汇总 一、账号权限校验二、表的REPLICA IDENTITY校验三、添加表到发布中四、WAL日志信息五、查看数据样式六、查看发布中的表七、查看复制槽一、账号权限校验 user debeziumcdc connected to database tsdb on PostgreSQL 14.9…...
C#:通用方法总结—第12集
大家好,今天继续分享我们的通用方法系列。 下面是今天要分享的通用方法: (1)这个通用方法为替换文本: /// <summary> /// 替换文本 /// </summary> /// <param name"sender"></param> /// &l…...
Fast-DDS的依赖 foonathan_memory_vendor编译
要编译 foonathan_memory_vendor,你可以按照以下步骤进行: 克隆仓库: git clone https://github.com/eProsima/foonathan_memory_vendor.git cd foonathan_memory_vendor创建构建目录并运行 CMake: mkdir build && cd bui…...
ubuntu中禁止使用鼠标拖动来移动文件
windows和ubuntu中都可以拖动文件到其他路径,然后达到移动文件的目的。 这种方式有好处也有坏处,好处是移动文件方便了,坏处是误操作后会造成故障,尤其是ubuntu中,本身鼠标就特别灵敏并且操作不便,拖动一个…...
喝酒天然能喝程度分布图
参考视频:【毕导】五一撒欢!聚餐中的科学挡酒指南_哔哩哔哩_bilibili...
数学建模评价类模型—层次分析法(无数据情况下)
目录 文章目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 算术平均法 前言 本文将讲解解决评价类问题的第一种模型层次分析法(AHP法),首先我们会具体讲解评价类问题解答的具体流程再对A…...
科普文:微服务之Spring Cloud 组件API网关Gateway
API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响…...
使用visual studio code远程连接虚拟机
1. 安装Remote-SSH插件 打开vscode,在“扩展商店”中搜索“Remote-SSH”,然后点击“安装”即可,如图所示。 2. 配置SSH 如图所示,点击“远程资源管理器”,点击“新建远程”,然后在输入框中输入如下指令。…...
算法刷题之链表
// 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };ListNode* head new ListNode(5); 重要方法:虚拟头节点 个人方法:指针转为数组…...
html笔记:刨析一个实验室主页模板(index.html)
1 index.html...
Professional Scrum Master (PSM) 官方认证培训班:掌握Scrum,提升项目管理能力
在快速变化的商业环境中,高效的项目管理和团队协作是企业成功的关键。作为一种广泛认可的敏捷框架,Scrum已成为推动项目成功和提高团队效率的重要工具。为了帮助专业人士掌握Scrum方法和实践,Scrum.org推出了Professional Scrum Master (PSM)…...
git pull 时每次都要输入用户名和密码
当我们操作git pull/push到远程的时候,总是提示我们输入账号和密码才能操作成功,频繁的输入账号和密码会很麻烦 git config --global credential.helper store...
BootStrap前端面试常见问题
在前端面试中,关于Bootstrap的问题通常围绕其基本概念、使用方式、特性以及实际应用等方面展开。以下是一些常见的问题及其详细解答: 1. Bootstrap是哪家公司研发的? 回答:Bootstrap是由Twitter的Mark Otto和Jacob Thornton合作…...
图欧学习资源网创站以来的更新日志(截止至2022.5.6)不完全统计
一、网站创立和初步发展 2021年10月28日创建【TUO图欧视频备份站】,当时只有【单词视频】文件夹. 小学、初中、高中、大学、四六级、专四、专八、专升本、考研、考博、托福、雅思、托业、GRE、SAT、GMAT、MBA、新概念等 数量:500个文件,60个…...
食堂窗口自助点餐小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,店铺信息管理,菜品分类管理,菜品信息管理,订单管理,系统管理 微信端账号功能包括:系统首页&#…...
计算机毕业设计选题推荐-智慧物业服务系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
Js改变this指向的三种方法以及区别
目录 call()方法 apply()方法 bind() 方法:预设this指向 三者的区别 call()方法 格式: 函数名.call(修改的this,参数1,参数2....); 参数: 第一个参数:传入该函数this指向的对象,传入什么强制指向什么 第二个参数:将…...
Spring Boot 实现异步处理多个并行任务
在现代Web应用开发中,异步处理和多任务并行处理对于提高系统的响应性和吞吐量至关重要。Spring Boot 提供了多种机制来实现异步任务处理,本文将介绍如何利用这些机制来优化您的应用程序性能。 1. 引言 在高负载情况下,如果所有的请求都采用…...
HTML,CSS,JavaScript实现——井字棋游戏
这里只提供实现井字棋游戏的核心HTML和CSS代码。具体的JavaScript逻辑(如处理玩家移动、判断胜负等)需要根据实际情况编写。 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta…...
Python面试宝典第26题:最长公共子序列
题目 一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。比如:"ace" 是 "abcde" 的子序列,但 "…...
嵌入式Linux:获取系统信息
目录 1、uname函数 2、sysinfo函数 3、gethostname函数 4、sysconf函数 在Linux系统中,有多个函数可以用于获取系统信息,包括系统标识、系统配置、主机名等。这些函数包括uname、sysinfo、gethostname和sysconf。 uname:获取系统标识信息…...
mysql 内存一直增长(memory/sql/thd::main_mem_root)
mysql版本 8.0.14 发现过程 查询总内存 SELECT t.EVENT_NAME, t.CURRENT_NUMBER_OF_BYTES_USED FROM performance_schema.memory_summary_global_by_event_name t ORDER BY t.CURRENT_NUMBER_OF_BYTES_USED DESC;前: memory/sql/thd::main_mem_root 1…...
QGIS根据经纬度生成点Lat Lon Tools(经纬度工具)插件
Lat Lon Tools(经纬度工具)插件,可根据经纬度进行跳转位置, 插件介绍: 用十进制,DMS,WKT,GeoJSON,MGRS,UTM,UPS,Geohash,…...
算法【N皇后问题位运算实现】
N皇后问题是一个经典的回溯算法问题,解决N皇后问题的时间复杂度是O(n!),好的方法可以大量剪枝,大量优化常数时间。 用数组表示路径的方法(经典、常数时间慢,不推荐) 1.记录之前每一行的皇后放在了什么列 …...
arduino程序-MC猜数字5、6(基础知识)
arduino程序-MC猜数字5、6(基础知识) 1-23 MC猜数字-5 自定义函数自定义函数自定义清理显示内容函数displayClear()带参数函数displayNumber带参数、返回值的函数 1-24 MC猜数字-6 完成制作显示0~9数字函数改造产生随机数字函数改…...
Jeecgboot仪表盘设计器使用https时访问报错
问题 仪表盘设计器设计好后,Nginx配置域名发送https请求时,/drag/page/queryById、/drag/page/addVisitsNumber仍发送http请求。导致发送下面错误: 原因 仪表盘设计器里设计的页面是由后端生成返回给前端的,后端是根据后端服…...
大语言模型时代的挑战与机遇:青年发展、教育变革与就业前景
摘要: 当前,大语言模型技术的崛起正在对多个领域带来深远影响,其中教育与就业便是重点受影响领域之一。本文旨在深入探究大语言模型对青年群体发展、教育体系变革以及就业前景的影响,并提出相应的应对措施与建议。 通过运用社会认知理论、建构主义教育理论、技能匹配理论等学…...
详解Vue中nextTick的原理与作用
Vue中的nextTick是一个非常重要的API,它允许开发者延迟回调函数的执行直到下次DOM更新循环之后。这一机制在Vue开发中非常有用,特别是在处理DOM更新和异步操作时。下面将详细解释nextTick的原理与作用。 原理 Vue的DOM更新是异步进行的。当数据发生变化…...
全球汽车用MEMS加速度计市场规划预测:未来六年CAGR为2.8%
随着汽车行业的持续发展和消费者对安全性能的需求增加,汽车用MEMS加速度计作为提升车辆安全性和稳定性的关键组件,正逐渐受到市场的广泛关注。本文旨在通过深度分析汽车用MEMS加速度计行业的各个维度,揭示行业发展趋势和潜在机会。 【市场趋…...
用Babylon.js 滑动屏幕画图形,签字等
介绍 在上篇文章中我们已经了解到了该游戏引擎的基本搭建过程。比如灯光,摄像头,场景、事件监听等。这里我就不做多介绍。运用以上知识点。我们此时做一个小游戏画图。 效果图 源代码 1.先监听事件是否碰撞到了画板 2.然后判断动作,手指按住屏幕,松开屏幕,滑动屏幕。 …...
力扣刷题28. 找出字符串中第一个匹配项的下标
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack &qu…...
C#网络连接:TCP/IP模式下的网络连接与同步
1,目的 为了测试局域网的消息同步,简单写了下TCP/IP模式的同步,参考这个帖子。 2,核心库部分 using System; using System.Net; using System.Net.Sockets; using System.Text;namespace Coldairarrow.Util.Sockets {/// <s…...
vue项目上线打包后出现的问题
1、出现空白页 1.1 打包路径: module.exports {publicPath:./, //修改为绝对路径 } 修改完打包路径后build可以展示页面 1.2 路由模式: 项目上线要求是history模式,需要后端做重定向 前端自测可以使用h…...