- 博客(209)
- 收藏
- 关注
原创 【Go-补充】实现动态数组:深入理解 slice 与自定义实现
在 Go 语言中,我们经常使用内置的slice(切片) 来处理可变长度的序列数据。slice是 Go 语言中一个强大且灵活的数据结构,它在底层是对数组的抽象,提供了动态增长的能力。本文将通过一个实际的例子,带你深入理解slice的工作原理,并展示如何基于slice自行实现一个具有动态扩容能力的数组结构。虽然 Go 语言的slice已经足够强大,但在某些场景下,例如为了更好地理解slice的工作机制,或者需要添加一些特定的并发控制或业务逻辑时,我们可能需要自行实现一个类似可变长数组的数据结构。
2025-06-12 13:59:50
1017
原创 临时抱佛脚v2
Scala 中用于代码复用和接口定义的机制,类似于 Java 8 的接口,可以包含抽象方法和具体方法,支持多重继承的混合。指数据在生成后立即进行处理和分析,并在极短的时间内给出结果,通常用于需要即时响应的场景,如实时推荐、欺诈检测、监控预警。Spark 中的核心数据结构,一个可容错的、并行操作的分布式元素集合,是所有 Spark 操作的基础。有向无环图,Spark 任务调度中的核心概念,表示一系列计算阶段的依赖关系,优化了任务执行流程。Scala 中一种特殊类型的类,主要用于不可变数据的建模,自动提供。
2025-06-11 19:10:36
1057
原创 临时抱佛脚
主要方法 1.凝聚的层次聚类是一种自底向上的策略:首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有的对象都在一个簇中,或者某个终结条件被满足,绝大多数层次聚类方法属于这一类,它们只是在簇间相似度的定义上有所不同。从广义的观点上,数据挖掘是从大型数据集(可能是不完全的、有噪声的、不确定性的、各种存储形式的)中,挖掘隐含在其中的、人们事先不知道的、对决策有用的知识的过程。从这些核心点出发,不断向周围密度足够高或者可以“连接”到的点扩展,把它们也吸纳进来,逐渐形成完整的簇。
2025-06-05 17:12:06
975
原创 【Go-补充】ioReader + ioWriter + bufio
在 Go 语言中,ioio.Reader和io.Writer。它们是 Go 语言中进行输入/输出操作的核心抽象,实现了极大的灵活性和可组合性。io.Readerbufio包是 Go 语言中进行高效 I/O 操作的重要组成部分。使用可以提高读取效率,并提供方便的文本读取方法(如ReadStringReadLine使用可以提高写入效率,减少系统调用。切记在使用Writer后调用Flush()将缓冲区内容强制写入底层。提供了一种非常方便且高效的方式来逐行、逐词或按自定义规则处理输入流,特别适合处理文本数据。
2025-06-02 11:04:16
1204
原创 【Go-补充】Sync包
像这种场景下就需要为map加锁来保证并发的安全性了,Go语言的sync包中提供了一个开箱即用的并发安全版map–sync.Map。通过调用Wait()来等待并发任务执行完,当计数器值为0时,表示所有并发任务已经完成。Range(f func(key, value interface{}) bool): 遍历 Map 中的所有 key-value 对,对每个对调用提供的函数 f。在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。
2025-06-01 21:36:23
1032
原创 从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用
这意味着您需要手动配置您的 shell 环境,以便程序能够找到 Homebrew 安装的 OpenSSL。这样,您的 macOS 系统就成功安装了 OpenSSL,并且您的开发环境也配置好了,以便在编译需要 OpenSSL 的其他软件时能够找到它。安装完成后,它会告诉您 OpenSSL 的安装路径,通常是。首先,确定 Homebrew 安装的 OpenSSL 的具体路径。然而,在 macOS 上,使用 Homebrew 安装的 OpenSSL (例如。在 Windows 上,当您安装 OpenSSL 时,
2025-05-29 23:46:01
875
原创 如何用Go创建一个 deployment 到容器拉起来的全流程
创建Deployment后,Kubernetes Controller Manager会负责创建Pod并确保它们运行起来。我们需要监控Deployment的状态,直到所有预期的Pod都已启动并准备就绪。这是一个Go语言结构体,定义了Deployment的各种属性,包括Pod的模板、副本数量等。整个过程是异步的,Go程序通过轮询Deployment的状态来判断容器是否成功拉起并运行。方法向Kubernetes API服务器发送创建Deployment的请求。
2025-05-29 15:04:31
762
原创 【Go-5】Go 的内置库
bufio包提供了带缓冲的I/O操作,允许你以更高效的方式读取和写入数据,尤其适合处理大量数据或需要频繁I/O操作的场景。
2025-05-29 11:17:29
935
原创 【Go-4】函数
在Go语言中,函数使用func关键字定义。函数可以包含参数和返回值,也可以没有。func 函数名(参数列表) (返回值列表) {// 函数体func: 函数定义的关键字。函数名: 函数的名称,遵循标识符命名规则。参数列表: 函数接受的参数,可以有多个,每个参数需要指定类型。返回值列表: 函数返回的值,可以有多个,需指定类型。函数体: 包含函数执行的代码。// 定义一个简单的函数,不接受参数,也不返回值")sayHello() // 调用函数Hello, Go!
2025-05-24 00:00:00
781
1
原创 【Go-3】控制结构
在Go语言中,控制结构包括条件语句、循环语句和跳转语句。这些结构使得程序能够根据不同的条件执行不同的代码块,或者重复执行某些操作。range`关键字用于遍历数组、切片、Map、字符串等数据结构,提供了一种简洁的方式来访问集合中的元素。遍历切片时,返回的是元素的副本,直接修改不会影响原切片。跳转语句用于在循环或条件语句中控制程序的执行流程。Go语言中常用的跳转语句包括。循环是Go语言中唯一的循环语句,可以实现传统的计数循环、条件循环和无限循环。语句是最基本的条件语句,用于在满足特定条件时执行某段代码。
2025-05-22 09:00:00
1027
1
原创 【Go-2】基本语法与数据类型
Map是键值对的无序集合,键和值可以是不同的类型。本章将深入介绍Go的基本语法和数据类型,帮助你建立扎实的编程基础。切片由指向数组的指针、长度和容量组成。在Go中,不同类型之间的转换需要显式进行,称为类型转换。Go中使用指针可以提高程序的性能,避免大量数据的复制。复合类型是由多个基本类型组成的类型,包括数组、切片、Map、结构体和指针。Go支持多种整型,包括有符号和无符号类型,以及不同位数的类型。结构体是由多个字段组成的复合数据类型,可以包含不同类型的数据。函数是程序的入口点,定义了程序启动时执行的代码。
2025-05-20 20:45:02
1123
原创 Go 语言简介
Go语言,通常被称为Golang,是由Google在2007年开始开发,并在2009年正式发布的一种开源编程语言。Go语言的设计初衷是解决大型软件开发中的效率和可维护性问题,特别是在多核处理器和网络化系统的背景下。
2025-05-20 16:30:52
895
原创 深入探索 Apache Spark:从初识到集群运行原理
Apache Spark 凭借其强大的功能和灵活的架构,已经成为大数据处理领域不可或缺的一部分。本文从初识 Spark 开始,深入探讨了其主要组件、集群搭建、运行架构与原理、应用程序提交以及 Spark Shell 的使用。希望通过本文的介绍,您能对 Spark 有一个全面而深入的了解,并能够开始利用 Spark 的强大能力来处理和分析您的数据。随着大数据技术的不断发展,Spark 也在持续演进,不断引入新的特性和优化,以应对日益复杂的数据处理需求。
2025-05-05 22:20:08
1346
原创 【Docker-17】Docker NetWork网络
Docker 容器网络是为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP路由表、防火墙等等与网络相关的模块。Docker 为实现容器网络,主要采用的架构由三部分组成:CNM、Libnetwork 和驱动。Docker Bridge 网络采用内置的 bridge 驱动,bridge 驱动底层采用的是 Linux 内核中Linux bridge 技术。
2025-04-22 15:56:46
1113
原创 【Docker-16】Docker Volume存储卷
存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。卷的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。
2025-04-21 19:49:53
901
原创 【Docker-15】容器综合实战
Redis镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。常见的镜像文件格式有 ISO、BIN、IMG、TAO、DAO、CIF、FCD。所谓镜像文件其实和 ZIP 压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例如一个测试版的操作系统、游戏等。(安装过操作系统的人应该对 xxx.iso 不陌生)
2025-04-21 19:49:10
633
原创 【Docker-14】容器操作案例
当创建好一个容器之后,可能需要去容器内部获取一些信息或执行一些命令,就需要进入到交互式模式。可以直接借助 docker 的容器环境执行一些命令,比如容器中有某个命令而宿主机上没有这个时候借助容器可以完成某些任务。-p 8106:80 表示端口映射,第一个端口表示映射到宿主机的端口,第二个端口表示映射到 Docker 容器的端口。可以看到 nginx 主页已经展现在浏览器上,当我们刷新访问后发现在标准输出上会打印一些相关的 log 出来。可以查看一个容器的详细信息,比如我们可以查看所有设置的环境变量。
2025-04-19 11:01:27
707
原创 【Docker-13】Docker Container容器
通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。
2025-04-15 21:13:39
913
原创 【Docker-12】镜像操作案例+镜像综合实战
这里失败了,原因是主机架构不一样,mac是linux/arm64/v8,而linux是linux/amd64/v4 ,,,,这里我先欠着,等我到了公司用公司linux机器做。如果有相同的对象,就直接挂个新tag在上面,实际不占用磁盘空间,所以这几个对象其实共享一个空间,类似于C++中的引用计数。镜像的删除:可以根据 id 和名字删除,对于使用的镜像需要先清理容器再删除镜像。如果本地没有,镜像是从仓库拉取,如果有会提示镜像已经存在,并且是最新的。列出特定的某个镜像,也就是说指定仓库名和标签。
2025-04-03 08:55:02
1031
原创 【Docker-11】Docker Image(镜像)
docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开。
2025-04-03 08:54:24
1188
原创 【Docker-10】镜像仓库实战
A:一般大型公司有自己专门的镜像制作组织,他们会选取对应的系统版本作为基础镜像,例如华为某部门选取欧拉来制作基础镜像,腾讯选择自己的 TLinux 制作基础镜像,不会因为出现 CentOS 不维护了无法使用的情况,而且这些镜像一般都会经过严格的安全扫描,然后作为基础组件提供给各个部门。当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。Q:我入职了一个公司,开发一个镜像,我怎么选择用哪个作为基础镜像啊?
2025-04-03 08:53:03
680
原创 【Docker-9】Docker Registry
镜像仓库(Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。整体视图如下:镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com;
2025-04-03 08:52:29
1707
原创 【Docker-8】Docker安装
10.执行 hello-world 可以看到 Hello from Docker,表面 docker 服务正常。2.确定 CPU,可以看到我们的是 X86_64,是支持的,如果是 arm 一般会显示aarch64。3.卸载旧版本,如果是新购买的云服务器是没有的,比如输入 docker 并没有这个命令,就不需要卸载。1.确定操作系统版本,本次我们使用的是 Ubuntu 22.04。我们服务器是没有的,如果有,卸载指令。7.验证docker是否安装成功。5.配置 docker 下载源。
2025-04-03 08:50:52
359
原创 【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
早期 Docker 利用 LXC 做容器管理引擎,但是在创建容器时,不再使用模板去安装生成,而是通过镜像技术(把一个操作系统用户空间所需要使用到的组件事先编排好,并整体打包成一个文件,image 文件),镜像文件集中放在一个仓库中。我们办理完入住了一个豪华大床房,然后把行李,个人物品带到了一个具体的房间号,比如 9527,那么这个房间我们可以使用了,朋友也开了一间豪华大床房,虽然豪华大床房一样,当时我们携带的物品,我们的洗漱时间,睡觉时间都不一样,这个就是容器 Docker Container。
2025-04-03 08:49:58
1166
原创 【Docker-6】LXC容器实战
自docker 0.9 版本起,docker 除了继续支持 LXC 外,还开始引入自家的 libcontainer,试图打造更通用的底层容器虚拟化库。CentOS 安装 LXC,如果已经安装,可以检查下是否需要卸载,如果需要卸载执行Centos 卸载 LXC。安装前执行检查看下是否需要卸载,如果需要卸载,执行下面的命令完成卸载,不需要直接到第 2 步。安装前执行检查看下是否需要卸载,如果需要卸载,执行下面的命令完成卸载,不需要直接到第 2 步。没有安装的话,执行下面的命令完成安装。
2025-04-03 08:49:09
609
原创 【Docker-4】空间隔离实战
ext3 是第三代扩展文件系统(The Third Extended Filesystem)的缩写,是 ext2 文件系统的升级版本,它在 ext2 的基础上加入了日志功能,以提高文件系统的可靠性和数据恢复能力。
2025-03-31 14:03:35
596
原创 【Docker-3】什么是虚拟化、容器化
物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。容器化。
2025-03-31 14:02:50
341
原创 【Linux加餐-connect的短线重连】
客户端会面临服务器崩溃的情况,我们可以试着写一个客户端重连的代码,模拟并理解一些客户端行为,比如游戏客户端等。
2025-03-27 02:20:25
505
原创 【Linux加餐-验证UDP:TCP】-windows作为client访问Linux
成功调用该函数后,Winsock 库的状态会被初始化,应用程序就可以使用 Winsock 提供的一系列套接字服务,如地址家族识别、地址转换、名字查询和连接控制等。在调用 WSAStartup 函数后,如果应用程序完成了对请求的 Socket 库的使用,应调用 WSACleanup 函数来解除与 Socket 库的绑定并释放所占用的系统资源。accept ():接受客户端的连接请求,并返回一个新的套接字描述符,用于与客户端进行通信。listen ():将套接字设置为监听模式,等待客户端的连接请求。
2025-03-27 02:19:40
910
原创 【Linux加餐-网络命令】
是一个用于定期执行命令并全屏显示其输出的工具。它非常适合用来实时监控命令的输出变化,比如监控系统状态、网络连接、日志文件等。• a (all)显示所有选项,默认不显示 LISTEN 相关。是一种网络工具,用于测试主机之间的连通性。报文,从而判断网络是否通畅以及测量往返时间(RTT)。• n 拒绝显示别名,能显示数字的全部转化成数字。• t (tcp)仅显示 tcp 相关选项。• u (udp)仅显示 udp 相关选项。,表示延迟非常稳定,波动很小。:通过进程名, 查看进程 id。:往返时间的标准差,为。
2025-03-27 02:18:23
880
原创 【Linux网络-poll与epoll】epollserver设计(两个版本 Reactor)+epoll理论补充(LT ET)
总结一下,epoll的使用过程就是三部曲:调用epoll_create 创建一个epoll句柄调用epoll_ctl,将要监控的文件描述符进行注册调用epoll_wait,等待文件描述符就绪。
2025-03-27 02:16:53
1259
原创 【Linux网络-poll与epoll】poll作用和定位+poll接口+epoll介绍等
int fd;A. 参数说明fd: 要监视的文件描述符。若设置为负值则忽略 events 字段并且 revents 字段返回 0。events: 指定要监视的文件描述符上的事件。poll返回时告知用户该文件描述符上的哪些事件已经就绪B. events 和 revents 的取值事件描述是否可作为输入是否可作为输出POLLIN数据(包括普通数据和优先数据)可读是是POLLRDNORM普通数据可读是是POLLRDBAND优先级带数据可读(Linux不支持)是是POLLPRI。
2025-03-27 02:16:38
968
原创 【Linux网络-多路转接select】
select要正常工作,需要借助一个辅助数组,来保存所有合法fd每次使用都要重置就绪了,循环检测处理所有事件缺点每次调用 select,都需手动设置 fd 集合,从接口使用角度来说也非常不便。每次调用 select,都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大。同时每次调用 select 都需要在内核遍历传递进来的所有 fd,这个开销在 fd 很多时也很大。select 可监控的文件描述符数量太少。
2025-03-26 00:00:00
789
原创 【Linux网络-五种IO模型与阻塞IO】
一旦数据准备好,内核会将数据拷贝到用户空间缓冲区中)当数据被成功拷贝到用户空间时,内核通知应用程序数据已经可用,应用程序可以继续执行其他任务,而不需要等待I/O操作的完成,当I/O操作完成后,内核通过信号或回调函数通知应用程序。【例子】在之前的echo例子中,键盘向OS输入,实际将键盘输入的数据放入到OS内部的输入缓冲区,当进程需要这个数据的时候,将输入缓冲区的内容拷贝到进程,进程执行结果后将数据拷贝到OS内部的输出缓冲区,显示器从输出缓冲区拷贝内容,最终就把结果回显给我们。
2025-03-24 00:00:00
709
原创 【Linux网络-NAT、代理服务、内网穿透】
后来找张三表姐买尿不湿的人太多了,他表姐觉得天天去超市太麻烦,干脆去超市买了一大批尿不湿屯在家里,如果有人来找她代购,就直接把屯在家里的货发出去,而不必再去超市,此时张三表姐就是 “反向代理”。,是一种让位于不同内网中的设备可以直接建立连接的技术,主要应用于需要点对点(P2P)通信的场景,如文件传输、视频通话、游戏联机等。内网打洞技术在 P2P 通信中起到了重要作用,通过与中继服务器配合,使内网中的设备能够直接建立连接,降低了对中继的依赖,提高了通信效率。,是一种NAT(网络地址转换)技术的扩展。
2025-03-22 00:00:00
1138
原创 【Linux网络-数据链路层】以太网(以太网帧格式|MAC地址+模拟一次性局域网通信+MTU)+ARP协议
标准以太网帧格式分为多个字段,用于确保数据的完整性和有效传输。
2025-03-20 00:00:00
770
原创 【Linux网络-网络层】TCP与IP的关系+IP协议基本概念+网段划分+路由+IP分片与组装
链路状态算法通过收集、传播链路状态信息,使每台路由器构建出网络拓扑图,并基于最短路径算法生成路由表。这种算法能提供全局最优的路由选择,适合需要快速收敛和高可靠性的中大型网络。
2025-03-18 00:00:00
681
原创 【Docker-2】容器技术发展史+编排与容器的技术演进之路
Docker 在初期与 Warden 类似,使用的也是 LXC,之后才开始采用自己开发的 libcontainer 来替代 LXC,它是将应用程序及其依赖打包到几乎可以在任何服务器上运行的容器的工具。与其他只做容器的项目不同的是,Docker 引入了一整套管理容器的生态系统,这包括高效、分层的容器镜像模型、全局和本地的容器注册库、清晰的 REST API、命令行等等。技术革命带来新的市场机遇,CoreOS 也是其中的一员,在容器生态圈中贴有标签:专为容器设计的操作系统 CoreOS。
2025-03-17 22:26:03
1059
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人