自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 问答 (2)
  • 收藏
  • 关注

原创 openssl 生成自签名证书

1、openssl。

2023-09-01 18:20:17 1462 2

原创 Init、break、continue等语法的使用

init函数:每个包中可以包涵任意多个init函数,这些函数会在程序执行开始的时候被调用,init函数会在main函数、设置包、初始化变量或者其它要在程序运行前优先完成的引导工作。程序编译时,优先执行导入包里的所有init函数,再执行本包内的init函数。for循环:go的for循环中不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化变量。init初始赋值表达式只执行一遍,循环控制条件、post(给控制变量增量或者减量)每循环一次,都要执行一次。...

2021-06-09 16:31:48 513

原创 Go语言中的interface

Go 语言中的 interface 是一种抽象类型,它定义了一组方法签名,但不包含方法的实现。任何类型只要实现了 interface 中定义的所有方法,就被认为实现了该 interface。1、接口底层接口是引用类型。接口底层包含两个指针,一个指向具体类型信息另一个指向具体的值(或者是指向值的指针)。当你把一个实现了接口的值赋值给接口变量时,实际上是在复制这两个指针,而不是复制底层的值。空接口是一种特殊的接口类型,它不包含任何方法签名。

2025-03-28 06:30:00 347

原创 Redis数据持久化机制 + Go语言读写Redis各种类型值

持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

2025-03-27 06:30:00 1796

原创 k8s 基础知识:Service + 负载均衡(下)

例如,若有一个 ClusterIP 服务关联了 3 个 Pod(Pod A、Pod B、Pod C),第一个请求会被导向 Pod A,第二个请求会被导向 Pod B,第三个请求会被导向 Pod C,之后的请求再按照这个顺序循环分配。将服务映射到一个外部的 DNS 名称,而不是一个集群内部的 IP 地址,主要用于访问集群外部的服务。LoadBalancer:用于向外部暴露服务,通常会创建一个外部负载均衡器,将流量分发到后端的 Pod 上,适用于需要对外提供服务的场景。提供一个统一的访问入口。

2025-03-26 02:07:48 884

原创 K8S基础知识:DaemonSet、Deployment、StatefulSet的用法区别

DaemonSet 的主要目的是确保在集群中的每个节点(或满足特定条件的节点)上都运行一个且仅运行一个 Pod 副本。当节点从集群中移除时,对应的 Pod 也会被自动删除。StatefulSet 用于管理有状态应用的 Pod,它为每个 Pod 提供了稳定的网络标识和持久存储。StatefulSet 中的 Pod 有固定的名称和顺序,并且在删除和重新创建时会保留其状态。的多个 Pod 副本,它提供了声明式的方式来创建、更新和删除 Pod。即在不中断服务的情况下逐步替换旧版本的 Pod 为新版本。

2025-03-26 01:35:10 1171

原创 k8s基础知识总结node+pod(上)

k8s(Kubernetes )是一个开源的容器编排平台,用于容器化应用程序的部署、扩展和管理。使运维人员能够轻松地管理容器化应用的整个生命周期,包括容器的调度、资源分配、服务发现、负载均衡、自动伸缩以及故障恢复等功能。

2025-03-24 07:00:00 944

原创 Go语言中的切片、数组有什么区别?

数组作为参数传递时是值传递,会复制整个数组;切片作为参数传递时是引用传递,只复制切片的头信息。:数组的长度是固定的,在定义时需要指定长度;而切片是动态的,不需要指定长度。:数组是值类型,在栈上分配内存;切片是引用类型,在堆上分配内存。

2025-03-23 22:56:27 187

原创 Go的并发模型?其和线程区别?

1、Go的并发模型Go的并发模型,通过 goroutine 和 channel 来实现并发:goroutine:协程,是 Go 语言轻量级的线程,由 Go 运行时管理,其栈内存可以动态伸缩,初始时仅需 2KB,创建和销毁的开销极小。:用于在 goroutine 之间进行通信和同步,保证数据的安全传递。‌Goroutine‌:由Go语言的运行时系统创建和销毁,创建开销小,可以在Go应用程序中创建大量的Goroutine而不会显著影响性能‌。‌线程。

2025-03-22 07:45:00 224

原创 浅谈Go垃圾回收机制-面试笔记

全局变量在程序运行期间通常不会被回收,因为它们在整个程序的生命周期内都处于可达状态。代表已被垃圾回收器访问过,但它引用的其他对象尚未全部被访问完的对象。表示已被垃圾回收器访问过,并且其引用的所有对象也都已被访问过的对象。的所有对象,将那些仍然是白色的对象回收,释放它们占用的内存空间。表示尚未被垃圾回收器访问过的对象。初始时,所有对象默认都是白色。

2025-03-21 07:00:00 781

原创 常用的数据结构有哪些?在Go语言中如何定义其实例?

常见的数据结构有:数组、链表、栈、队列、图、哈希表;

2025-03-20 08:00:00 1071

原创 阿里ECS启动docker报错`open /usr/local/aegis/cgroup/cpuset/docker/cpuset.cpus: no such file or directory`

阿里云安骑士(Aegis)的安装目录,该安全软件可能会对系统的 cgroup 配置产生影响,进而干扰 Docker 的正常运行。/usr/local/aegis/cgroup/cpu的挂载,

2025-03-18 23:31:29 257

原创 map底层实现 + 空结构体 struct{}

由于空结构体不占用任何内存空间,在一些需要大量创建实例的场景中,使用空结构体可以显著减少内存的使用。例如,在实现一个状态机时,每个状态可能只需要一个标识,而不需要存储具体的数据,此时可以使用空结构体来表示状态。当嵌入的结构体不包含任何字段时,它可以作为一种元数据或标记,为外层结构体提供额外的语义。类型是一个空结构体,通过定义不同的状态实例来表示不同的状态,这些实例不占用额外的内存空间。扩容会创建一个新的更大的哈希表,将原哈希表中的键值对重新哈希并迁移到新的哈希表中。通道发送一个空结构体,表示工作已经完成。

2025-03-18 00:41:21 1024

原创 Go string 字符串底层逻辑

在这个例子中,Go 语言会重新分配一块大小为 11 字节的内存区域,并将原来的字符串 "hello" 的内容复制到新区域中,再追加上 " world" 字符串的字节序列。在这个例子中,Go 语言会分配一块大小为 5 字节的内存区域,用来存放字符串 "hello" 的字节序列。当你创建一个字符串时,Go 语言会在内存里分配一块连续的区域,用来存放字符串的字节序列。在 Go 语言中,string 类型的底层结构是一个结构体,包含两个字段:一个指向字节数组的指针和该字节数组的长度。

2025-03-14 16:55:25 311

原创 Docker Compose 使用笔记

这样做可以让容器访问宿主机上的文件和目录,或者反过来,让宿主机访问容器内的文件和目录。文件中,可以定义应用程序的各个服务(service)。:可以明确指定服务之间的依赖关系,确保在启动某个服务之前,其依赖的服务已经正确启动。例如,Web 应用服务可能依赖于数据库服务,那么可以在配置中指定这种依赖,保证数据库先启动。:能够为每个服务配置资源,如 CPU、内存限制,端口映射,文件或目录的挂载映射,环境变量等,使服务在不同环境中都能稳定运行。:指定服务之间的依赖关系,确保在启动当前服务之前,依赖的服务已经启动。

2025-03-13 02:03:03 379

原创 Go语言里面的堆跟栈 + new 和 make + 内存逃逸 + 闭包

栈主要用于存储函数调用的上下文信息,具有自动分配和释放、内存空间连续、操作效率高但大小有限的特点;堆主要用于动态内存分配,具有动态分配和释放、内存空间不连续、大小灵活但访问速度相对较慢的特点。在 Go 语言中,编译器会根据变量的类型和使用场景自动决定将变量分配到栈上还是堆上。new:主要用于为任意类型分配零值内存并返回指针,通常用于需要显式管理指针的场景。make:专门用于创建并初始化slicemap和channel这三种引用类型,会完成必要的初始化操作,不能用于其他类型。

2025-03-07 00:15:54 785 1

原创 Java学习笔记-文件命名

在一个 Java 文件中不能有多个 public 类。Java 语言规定一个 Java 源文件中最多只能有一个 public 类,并且源文件的名称必须与这个 public 类的名称完全一致(包括大小写)。等,但通常约定取第一个类的名称作为文件名,即。可以将这个文件命名为。

2025-03-06 22:34:35 185

原创 Go 语言里中的堆与栈

在 Go 语言中,编译器会进行逃逸分析,来决定一个变量是分配在栈上还是堆上。变量会分配在栈上,而。

2025-02-12 18:32:52 785

原创 Go 语言泛型

Go 语言在 1.18 版本中引入了泛型(Generics),这是 Go 语言自发布以来最重要的特性之一。泛型允许开发者编写更加通用和灵活的代码,减少重复代码的编写。

2025-02-11 01:20:24 369

原创 JAVA笔记—类名与文件名

在一个 Java 文件中不能有多个 public 类。Java 语言规定一个 Java 源文件中最多只能有一个 public 类,并且源文件的名称必须与这个 public 类的名称完全一致(包括大小写)。等,但通常约定取第一个类的名称作为文件名,即。可以将这个文件命名为。

2025-02-11 01:17:18 149

原创 Java学习笔记1:在 Java 中,super关键字和this关键字的区别

在 Java 中,super关键字的区别如下 :当子类和父类有同名成员变量时,可以使用来访问父类的成员变量。例如:2.2 调用方法: :可以使用来调用当前类的其他方法。例如: :可以使用来调用父类被重写的方法。例如:2.3 调用构造方法: :在构造方法中,用于调用同一类中的其他构造方法,且必须放在构造方法的第一行。例如: :在子类的构造方法中,用于调用父类的构造方法,且也必须放在构造方法的第一行。例如:三、使用场景不同

2024-09-18 17:07:51 426

原创 sed 命令的基本语法:sed -i s/.../.../g

sed 命令是一个在 Linux 和 Unix 系统中常用的命令,用于对文件进行查找和替换操作。: Stream Editor,用于对文本文件中的内容进行搜索、替换、删除等操作。就能正确识别它为普通字符,而不是正则表达式中的任意字符的意思。就能正确识别它为普通字符,而不是正则表达式中的特殊字符。),也就是对文件的内容进行实际的修改,而不是输出到终端。然而,如果你要替换的文本中包含了特殊字符,比如。在正则表达式中表示为匹配到的整个字符串。等,那么你需要对这些特殊字符进行转义。选项表示对文件进行原地编辑,

2024-08-27 11:17:51 7612

原创 Go语言 获取服务器资源磁盘Disk情况

查询跟目录的空间大小、剩余空间、使用空间、使用绿。

2024-06-20 23:54:42 782

原创 centos环境上:k8s 简单安装教程

本次演示安装的k8s版本为 1.22.15。calico 版本是否支持当前k8s版本,calico v3.24版本支持k8s 1.22~1.25.Calico 是一个纯三层的数据中心网络方案,是目前 Kubernetes 主流的网络方案。注意:3个服务器IP都要设置为静态IP,主要此操作只需在master节点执行。注意:apiserver-advertise-address 除填写master节点IP地址;

2024-06-15 23:59:24 2720 1

原创 docker 简单在线安装教程

安装 docker 版本为:19.03.14-3.el7

2024-06-15 23:25:38 833

原创 快速安装mysql 5.7 服务步骤(包含clinet)及常见问题

1.2.进入yum.repos.d目录,安装mysql-server1.3.出现mysql-community-common-5.7.42-1.el7.x86_64.rpm的公钥尚未安装的错误例如:"Public key for mysql-community-server-5.7.44-1.el7.x86_64.rpm is not installed"1.4.启动MySQL并获取登录密码1.5.登录MySQL1.6.修改mysql的用户root的密码并配置mysql。

2024-03-13 00:00:15 465

原创 在Linux操作系统上安装 kafka

在启动Kafka broker之前,您需要先启动Zookeeper实例。您可以从官方网站(https://kafka.apache.org/downloads)上下载最新版本的Kafka。其中,your_host_name是您计算机的主机名,这将是Kafka broker公开的地址。Kafka是一个分布式的流处理平台,它可以处理数据管道中的实时数据流。以下是在Linux操作系统上安装Kafka的步骤。注意:为了避免内存问题,不要在单个计算机上运行多个Kafka broker实例。在Kafka目录中,找到。

2023-09-07 16:20:44 899

原创 日志记录一

我们知道,当注释掉配置环境变量 export ……之后,需要source;之后,修改内容才能生效。例如:将export的Java环境变量注释掉或者删除掉后,source /etc/profile 使之生效;但是,执行env命令后依然发现JAVA_HOME。

2023-09-02 06:00:00 287

原创 程序员笔记:安装包类型、go语言编译约束

原文链接:https://blog.youkuaiyun.com/u012206617/article/details/97759325。二进制包,已编译好的可直接使用的程序,解压缩后,点击bin目录下的.sh或者.bat执行文件即可使用。如上标注:只能在unix下编译;windows系统则无法编译;源代码包,需要经过计算机编译才能执行安装。安装程序,执行exe文件即可以安装。

2023-06-22 00:15:00 129

翻译 ​.dockerignore 文件 怎么用?

在 docker CLI 将上下文发送到 docker 守护程序之前,它看起来 在上下文的根目录中命名的文件。如果此文件存在,CLI 将修改上下文以排除文件和 与其中的模式匹配的目录。例如,模式和两者都排除在 git 的子目录或根目录中命名的文件或目录 存储库位于。例如,将排除在所有目录中找到的所有以 结尾的文件,包括构建上下文的根目录。例外规则的放置会影响行为:最后一个 与特定文件匹配的行确定 是否包括或排除。如果文件中的一行以第 1 列开头,则此行为 被视为注释,在 CLI 解释之前被忽略。

2023-05-25 15:05:51 609

原创 linux 修改主机名称

命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名,和第一种方法一样,两种方法本质是一样的。把旧的主机名删除,替换为新的主机名,保存文件就行了。不过,修改配置文件的方法,需要重启后生效,即reboot。hostnamectl set-hostname 主机名。只需重新打开session终端,就能生效,重新开启终端就可以看到新的主机名了。重启计算机后会回到旧的主机名。

2023-04-14 15:36:35 2790

转载 MQTT协议解析之QoS Level

比如在同一个子网内部的服务间的消息交互往往选用QoS0;QoS2使用的场景相对少一些,能想到的如国防武器,医疗设备等应用场景。MQTT发布消息QoS保证不是端到端的,是客户端与服务器之间的。订阅者收到MQTT消息的QoS级别,最终取决于发布消息的QoS和主题订阅的QoS。QoS级别越高,流程越复杂,系统资源消耗越大。QoS1是中间级别,保证消息至少送达一次。模式,发送者发送完数据之后,不关心消息是否已经投递到了接收者那边。既然QoS是发送者和接收者之间的质量协定,在MQTT协议的。...

2022-07-28 14:02:22 1745 1

原创 linux ifconfig 命令安装

安装ifconfig1、发现没有ifconfig命令 [root@PC3 ~]# ifconfig bash: ifconfig: command not found...2、查找安装包 [root@PC3 ~]# yum list | grep net-tool* net-tools.x86_64 2.0-0.17.20131004git.el7 rhel73、安装 yum install -y net-tools.x86

2022-06-13 00:00:00 1733 1

原创 fatal error: librdkafka/rdkafka.h: No such file or directory

go build编译go项目时,报错:../github.com/confluentinc/confluent-kafka-go/kafka/config.go:28:32: fatal error: librdkafka/rdkafka.h: No such file or directory#include <librdkafka/rdkafka.h>解决:只需安装librdkafkayum install -y librdkafka依然报上面的错误,然后:..

2022-05-10 19:30:42 3811 2

原创 VMware上的linux虚拟机磁盘空间满了,如何扩充磁盘空间?

1、查看哪个磁盘空间不够了df -h如下图:由于测试虚拟机磁盘空间都够用,咱拿/var目录所在磁盘/dev/mapper/centos-var做扩充实验,目前该磁盘空间3G,使用了49%,还剩1.6G可以用;咱扩充1G,扩充到4G;也就是“/dev/mapper/centos-var磁盘空间不够了”,咱加1G,扩充至4G;2、在VMware上添加新硬盘2.1、先 ls /dev/sd* 查看虚拟机上原有的sd系统硬盘:(注:sda表示sd系列的第一块硬盘)...

2022-04-22 15:04:49 18867 3

原创 linux环境安装docker

1、检查内核版本检查内核版本,返回的值大于3.10即可,如:3.10.0-1160.el7.x86_64uname -r2、确保yum是最新的更新yum: yum update3、卸载旧的docker卸载linux系统中的docker(如果系统已经安装docker,但版本不对,或者需要重新安装时)sudo yum remove docker4、安装所需资源包sudo yum install -y yum-utilsyum-config-manager --add-

2022-04-21 06:00:00 315

原创 Go语言 linux安装

​​​​​1、下载go安装包载go的linux安装包,比如:go1.15.6.linux-amd64.tar.gz2、解压解压至/usr/local下,命令:tar -zxvf go1.15.6.linux-amd64.tar.gz解压之后,查看版本:/usr/local/go/bin/go version3、创建go工作目录在/home目录下新建go目录,在go目录下分别新建3个子目录: src—里面每一个子目录,就是一个包,包内是Go的源码文件...

2022-04-20 18:17:19 4273

原创 Go语言获取当天、昨天、明天、某天0点时间戳以及格式化时间

获取当前时间 到 明天0点整的时间差的秒级时间戳的字符串形式func GetTimeDifference() string { nowTime := time.Now() // 当天秒级时间戳 nowTimeStamp := nowTime.Unix() nowTimeStr := nowTime.Format("2006-01-02") //使用Parse 默认获取为UTC时区 需要获取本地时区 所以使用ParseInLocation t2, _ := time.ParseInLoc

2022-04-15 11:45:09 14215

原创 Go 语言 switch 语句 获取interface变量的实际Type类型

1、可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。x.(type)相当于变量x的Type类型,即:reflect.TypeOf(x).Name()注意区别x的Kind类型;type BaseController struct {}func main() { var x interface{} x = BaseController{} switch i := x.(type) { case nil: fmt.Printf(" x

2022-04-06 19:08:56 2767

转载 Go语言中的继承与组合

package main// 父结构体type BaseController struct {}// 父结构体的方法func (c *BaseController) ReturnJson() {}// 继承type UserController struct { BaseController}// 组合type OtherController struct { userController UserController}func main() { // 调用 user.

2022-04-06 13:44:23 314

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除