自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 git的日常操作

显示本地分支与远端分支的跟踪关系。

2025-11-22 16:36:28 170

原创 golang-时间戳生成16位uuid

【代码】golang-时间戳生成16位uuid。

2025-08-15 17:02:51 174

原创 golang语法进阶-并发

Go 语言对于并发的支持是纯天然的,这是这门语言的核心所在,其上手难度相对较小,开发人员不太需要关注底层实现就能做出一个相当不错的并发应用,提高了开发人员的下限。协程(coroutine)是一种轻量级的线程,或者说是用户态的线程,不受操作系统直接调度,由 Go 语言自身的调度器进行运行时调度,因此上下文切换开销非常小,这也是为什么 Go 的并发性能很不错的原因之一。协程这一概念并非 Go 首次提出,Go 也不是第一个支持协程的语言,但 Go 是第一个能够将协程和并发支持的相当简洁和优雅的语言。在 Go 中,

2025-08-14 18:01:36 884

原创 golang语法进阶-反射

首先 Go 语言是一个百分之百的静态类型语言,静态这一词是体现在对外表现的抽象的接口类型是不变的,而动态表示是接口底层存储的具体实现的类型是可以变化的。在 Go 中,接口本质上是结构体,Go 在运行时将接口分为了两大类,一类是没有方法集的接口,另一个类则是有方法集的接口。倘若通过反射来修改反射值,那么其值必须是可取址的,这时应该通过指针来修改其元素值,而不是直接尝试修改元素的值。的数据结构所存储的元素类型,可接收的底层参数类型必须是指针,切片,数组,通道,映射表其中之一,否则会。出现的地方,就会有反射。

2025-08-14 17:48:50 816

原创 golang语法进阶-文件操作

打开关闭文件的方法它都封装好了,只需要一句话就可以读取。ReadString读取文件。创建reader对象。

2025-08-14 17:41:36 417

原创 golang语法进阶-文件

会递归遍历整个文件夹,在过程中,遇到文件夹就创建文件夹,遇到文件就创建新文件并复制,代码相比复制文件有点多但算不上复杂。对于复制文件而言,需要同时打开两个文件,第一种方法是将原文件中的数据读取出来,然后写入目标文件中,代码示例如下。函数,它则是一边读一边写,先将内容读到缓冲区中,再写入到目标文件中,缓冲区默认大小为 32KB。函数可以控制更多细节,例如修改文件描述符和文件权限,关于文件描述符,当成功的打开文件后,便可以进行读取操作了,关于读取文件的操作,下面是一个以读写模式打开一个文件的代码例子,权限为。

2025-08-14 17:40:53 624

原创 golang语法进阶-错误

在一些情况中,调用者调用的函数返回了一个错误,但是调用者本身不负责处理错误,于是也将错误作为返回值返回,抛给上一层调用者,这个过程叫传递,错误在传递的过程中可能会层层包装,当上层调用者想要判断错误的类型来做出不同的处理时,可能会无法判别错误的类别或者误判,而链式错误正是为了解决这种情况而出现的。类型的错误转换为具体的错误实现类型,以获得更详细的错误细节,而对一个错误链使用类型断言是无效的,因为原始错误是被结构体包裹起来的,这也是为什么需要。通过格式化输出,就可以看到堆栈信息了,默认情况下是不会输出堆栈的。

2025-08-14 17:37:11 863

原创 golang语法进阶-类型

Go 是一个静态强类型语言,静态指的是 Go 所有变量的类型早在编译期间就已经确定了,在程序的生命周期都不会再发生改变,尽管 Go 中的短变量声明有点类似动态语言的写法,但其变量类型是由编译器自行推断的,最根本的区别在于它的类型一旦推断出来后不会再发生变化,动态语言则完全相反。Go 是一个典型的静态类型语言,所有变量的类型都会在编译期确定好,并且在整个程序的生命周期都不会再改变,这一小节会简单的介绍下 Go 的类型系统和基本使用。通过类型声明的类型都是新类型,不同的类型无法进行运算,即便基础类型是相同的。

2025-08-14 17:33:59 741

原创 golang语法进阶-迭代器

而存在的,也就是为了将推送式迭代器转换成拉取式迭代器的而存在的,如果你仅仅只是想要一个拉取式迭代器,还专门为此去实现一个推送式迭代器来进行转换,要这样做的话不妨考虑下自己实现的复杂度和性能,就像这个斐波那契数列的例子一样,绕了一圈又回到原点,唯一的好处可能就是符合官方的迭代器规范。与泛型的情况相似,Go 的迭代器同样饱受争议,部分人的观点是迭代器引入了过多的复杂度,违背了 Go 的简洁哲学,像这种迭代器的闭包代码多了以后,调试起来怕是都有点困难,阅读起来就就更加恼火了。函数来手动控制迭代的逻辑了。

2025-08-14 17:31:56 1047

原创 golang语法进阶-泛型

泛型,或者更学术化的名称 —— 参数化多态(Parameterized Polymorphism),是指通过类型参数化来实现代码的复用与灵活性。在许多编程语言中,参数化多态是一个重要的概念,它使得函数或数据结构可以处理不同类型的数据,而无需为每种类型编写单独的代码。最初的 Go 是没有泛型这一说法的,但自从诞生以来,社区关于 Go 呼声最高的事情就是希望加入泛型,终于 Go 语言于 2022 年在 1.18 版本加入了对泛型的支持。Go 语言当初在设计泛型时,考虑过了以下的方案上面两个方法代表着两种极端,G

2025-08-14 14:15:29 1016

原创 Markdown编辑器使用

来自官方文档,仅为了自己方便查看

2025-08-14 11:55:55 818

原创 golang语法进阶-接口

过了一段时间,绝世起重机出故障了,公司 A 也跑路了,于是公司 B 依据规范造了一台更厉害的巨无霸起重机,由于同样具有起重和吊货的功能,可以与绝世起重机无缝衔接,并不影响建筑进度,建筑得以顺利完成,并且还给出了如下的额外定义。上面例子中,可以观察到接口的实现是隐式的,也对应了官方对于基本接口实现的定义:方法集是接口方法集的超集,所以在 Go 中,实现一个接口不需要。翻译过来就是,当一个类型的方法集是一个接口的方法集的超集时,且该类型的值可以由该接口类型的变量存储,那么称该类型实现了该接口。

2025-08-14 11:51:13 737

原创 golang-方法

函数的参数传递过程中,是值拷贝的,如果传递的是一个整型,那就拷贝这个整型,如果是一个切片,那就拷贝这个切片,但如果是一个指针,就只需要拷贝这个指针,显然传递一个指针比起传递一个切片所消耗的资源更小,接收者也不例外,值接收者和指针接收者也是同样的道理。方法在被调用时,会将接收者的值传入方法中,上例的接收者就是一个值接收者,可以简单的看成一个形参,而修改一个形参的值,并不会对方法外的值造成任何影响,那么如果通过指针调用会如何呢?方法的使用就类似于调用一个类的成员方法,先声明,再初始化,再调用。

2025-08-13 16:40:56 507

原创 golang-结构体

不过实际编码过程中,并没有必要的理由去这样做,它不一定能在减少内存占用这方面带来实质性的提升,但一定会提高开发人员的血压和心智负担,尤其是在业务中一些结构体的字段数可能多大几十个或者数百个,所以仅做了解即可。整个结构体的内存占用似乎是 8+4+2+1+4=19 个字节吗,当然不是这样,根据内存对齐规则而言,结构体的内存占用长度至少是最大字段的整数倍,不足的则补齐。Go 结构体字段的内存分布遵循内存对齐的规则,这么做可以减少 CPU 访问内存的次数,相应的占用的内存要多一些,属于空间换时间的一种手段。

2025-08-13 16:35:53 581

原创 golang-函数

假设在上面例子中不是简单的 for n 循环,而是一个较为复杂的数据处理流程,当外部请求数突然激增时,那么在短时间内就会创建大量的 defer,在循环次数很大或次数不确定时,就可能会导致内存占用突然暴涨,这种我们一般称之为内存泄漏。直接作用的函数而言,它的参数是会被预计算的,这也就导致了第一个例子中的奇怪现象,对于这种情况,尤其是在延迟调用中将函数返回值作为参数的情况尤其需要注意。在调用一个函数时,当它的参数是一个函数类型时,这时名称不再重要,就可以直接传递一个匿名函数,如下所示。

2025-08-13 16:35:19 750

原创 golang-指针

类型的指针,不过指针不能光声明,还得初始化,需要为其分配内存,否则就是一个空指针,无法正常使用。可以看出数组的地址与数字第一个元素的地址一致,并且对指针加一运算后,其指向的元素为数组第二个元素。Go 中的数组也是如此,不过区别在于指针无法偏移,例如。Go 保留了指针,在一定程度上保证了性能,同时为了更好的 GC 和安全考虑,又限制了指针的使用。是一个指针,对指针类型解引用就能访问到指针所指向的元素。解引用符则有两个用途,第一个是访问指针所指向的元素,也就是解引用,例如。这样的程序将无法通过编译,报错如下。

2025-08-13 16:34:28 359

原创 golang-映射表

map 并不是一个并发安全的数据结构,Go 团队认为大多数情况下 map 的使用并不涉及高并发的场景,引入互斥锁会极大的降低性能,map 内部有读写检测机制,如果冲突会触发。Set 是一种无序的,不包含重复元素的集合,Go 中并没有提供类似的数据结构实现,但是 map 的键正是无序且不能重复的,所以也可以使用 map 来替代 set。的实现是基于哈希桶(也是一种哈希表),所以也是无序的,本篇不会对实现原理做过多的讲解,这超出了基础的范围,后续会进行深入分析。是不可比较的,也就无法作为 map 的键。

2025-08-13 16:33:18 298

原创 golang-字符串

将字符串转换成字节切片以后,两者之间毫无关联,因为 Go 会新分配一片内存空间给字节切片,再将字符串的内存复制过去,对字节切片进行修改不会对原字符串产生任何影响,这么做是为了内存安全。在本文开头就已经提到过,Go 中的字符串就是一个只读的字节切片,也就是说字符串的组成单位是字节而不是字符。原生字符串由反引号表示,不支持转义,支持多行书写,原生字符串里面所有的字符都会原封不动的输出,包括换行和缩进。字符串的内容是只读的不可变的,无法修改,但是字节切片是可以修改的。

2025-08-13 16:32:39 433

原创 golang-切片

举个例子解释一下长度与容量的区别,假设有一桶水,水并不是满的,桶的高度就是桶的容量,代表着总共能装多少高度的水,而桶中水的高度就是代表着长度,水的高度一定小于等于桶的高度,否则水就溢出来了。所以,切片的长度代表着切片中元素的个数,切片的容量代表着切片总共能装多少个元素,切片与数组最大的区别在于切片的容量会自动扩张,而数组不会,更多细节前往。数组在初始化时,其一维和二维的长度早已固定,而切片的长度是不固定的,切片中的每一个切片长度都可能是不相同的,所以必须要单独初始化,切片初始化部分修改为如下代码即可。

2025-08-13 16:32:02 509

原创 golang-循环控制

关键字会跳过最内层循环的本次迭代,直接进入下一次迭代,结合标签使用可以达到跳过外层循环的效果,例子如下。可以更加方便的遍历一些可迭代的数据结构,如数组,切片,字符串,映射表,通道。循环,结合标签一起使用可以达到终止外层循环的效果,例子如下:这是一个双循环。也可以迭代一个整型值,字面量,常量,变量都是有效的。双循环打印九九乘法表,这是一个很经典的循环案例。的实现都有所不同,后续也会讲到,你可以前往。这是一个死循环,永远也不会退出。则是对应索引下的值,例如使用。为可迭代数据结构的索引,对于每一个种数据结构,

2025-08-13 16:30:06 241

原创 golang-条件控制

也可以把表达式写的更复杂些,必要时为了提高可读性,应当使用括号来显式的表示谁应该优先计算。语句的判断是从上到下。一个根据成绩打分的例子如下,第一种写法。单纯的使用标签是没有任何意义的,需要结合其他关键字来进行使用。用的很少,跳来跳去的很降低代码可读性,性能消耗也是一个问题。在执行的过程中每一个表达式的判断是从左到右,整个。语句是从上到下的判断的前提,所以代码要更简洁些。标签语句,给一个代码块打上标签,可以是。关键字来继续执行相邻的下一个分支。至多两个判断分支,语句格式如下。语句也可以没有入口处的表达式。

2025-08-13 16:29:25 345

原创 golang-输入输出

方法来获取其字符串表现形式,所以它输出的内容可读性比较高,适用于大部分情况,不过由于内部用到了反射,在性能敏感的场景不建议大量使用。本站的第一个入门的案例就是输出一个字符串,这一节就来讲一下在 Go 中如何进行输入输出。提供了可缓冲的输出方法,它会先将数据写入到内存中,积累到了一定阈值再输出到指定的。函数提供,如果你学过 C 系语言,一定会觉得很熟悉,下面是一个简单的例子。,他们会将参数输出到标准错误中,仅做调试用,一般不推荐使用。函数,该函数默认会将参数输出到标准输出中。在使用数字时,还可以自动补零。

2025-08-13 16:26:26 626

原创 golang-变量

变量之间的比较有一个大前提,那就是它们之间的类型必须相同,go 语言中不存在隐式类型转换,像下面这样的代码是无法通过编译的。在 Go 中,如果想要交换两个变量的值,不需要使用指针,可以使用赋值运算符直接进行交换,语法上看起来非常直观,例子如下。在 go 语言中,有一个规则,那就是所有在函数中的变量都必须要被使用,比如下面的代码只是声明了变量,但没有使用它。这个规则仅适用于函数内的变量,对于函数外的包级变量则没有这个限制,下面这个代码就可以通过编译。它们的参数支持所有的可比较类型,go 中的可比较类型有。

2025-08-13 16:24:55 729

原创 golang-常量

这些枚举实际上就是数字,Go 也不支持直接将其转换为字符串,但我们可以通过给自定义类型添加方法来返回其字符串表现形式,实现。是一个内置的常量标识符,通常用于表示一个常量声明中的无类型整数序数,一般都是在括号中使用。在同一个常量分组中,在已经赋值的常量后面的常量可以不用赋值,其值默认就是前一个的值,比如。关键字,常量在声明时就必须初始化一个值,并且常量的类型可以省略,例如。值的表达式,根据序号值的变化会自动的赋值给后续的常量,直到用新的。,是相对于当前分组的起始行号,看下面的例子。是递增的,第一个常量使用。

2025-08-13 16:24:24 248

原创 golang-基础数据类型

在 Go 中,整数 0 并不代表假值,非零整数也不能代表真值,即数字无法代替布尔值进行逻辑判断,两者是完全不同的类型。Go 中为不同位数的整数分配了不同的类型,主要分为无符号整型与有符号整型。,零值并不仅仅只是字面上的数字零,而是一个类型的空值或者说默认值更为准确。仅仅只是一些引用类型的零值,并且不属于任何类型,从源代码中的。浮点数,主要分为单精度浮点数与双精度浮点数。go 语言字符串完全兼容 UTF-8。可以看出它仅仅只是一个变量。这样的语句是无法通过编译的。布尔类型只有真值和假值。

2025-08-13 16:23:42 350

原创 golang-语法基础

在 Go 中,整数 0 并不代表假值,非零整数也不能代表真值,即数字无法代替布尔值进行逻辑判断,两者是完全不同的类型。Go 中为不同位数的整数分配了不同的类型,主要分为无符号整型与有符号整型。,零值并不仅仅只是字面上的数字零,而是一个类型的空值或者说默认值更为准确。仅仅只是一些引用类型的零值,并且不属于任何类型,从源代码中的。浮点数,主要分为单精度浮点数与双精度浮点数。go 语言字符串完全兼容 UTF-8。可以看出它仅仅只是一个变量。这样的语句是无法通过编译的。布尔类型只有真值和假值。

2025-08-13 16:22:28 300

原创 CCNA学习笔记

因为集线器属于物理层设备,无法判断数据链路层的MAC地址以及网络层IP地址,所以在这个集线器相连的网络里,假设PC0封装数据发送给PC1,集线器接收到PC0发来的数据后,直接将它转发到除接收端口以外的所有端口,这时候PC1/3/4都能收到这个数据,只不过根据包头部的MAC地址信息,只有PC1会处理它,PC3/4将丢弃这个数据包,而如果PC3/4上面运行了数据包分析软件,就可以捕获并分析PC0发出的数据,这种网络拓扑设计将非常不安全。数据链路层设备(二层交换机)也不改变帧格式,但可根据帧的目的地址进行转发;

2025-08-13 16:11:51 1029

原创 头歌大数据作业七Spark SQL数据分析实验保姆级教学

输入密码:输入密码时,命令行窗口不会显示密码,输完之后直接回车;提供了临时视图的创建,创建完临时视图后就可以像操作表一样使用。进入【实验操作桌面】,打开浏览器进入华为云登录页面。同样,可以查询每门课程的最高分数和平均分数。要求查询出相同课程中每个人分数的排名。按钮,进行基础的华为云服务预置。点击实验桌面左上角,账号下方的。查询每门课程最高分数和平均分数。,执行如下命令(使用弹性公网。在【实验操作桌面】,双击。回车,密码获取方式如图;后回车,退出文件编辑;操作前提:登录华为云。后的名字替换为自己的。

2023-12-12 20:59:47 1692 3

原创 大数据--搭建Hadoop和HBASE环境

启动成功后,执行以下命令,查看已成功启动的进程。如果返回以下信息,则表示安装成功。如果返回以下信息,则表示安装成功。执行以下命令开始进入编辑页面。执行以下命令开始进入编辑页面。执行以下命令,创建公钥和私钥。执行以下命令,移动并重命名。执行以下命令,修改配置文件。执行以下命令,将公钥添加到。执行以下命令,解压下载的。依次执行以下命令,启动。伪分布式环境搭建完成。节点内插入如下内容。键退出编辑模式,输入。节点内插入如下内容。键退出编辑模式,输入。执行以下命令,初始化。,显示如下界面则表示。

2023-11-15 20:27:39 274 1

原创 头歌大数据作业八:流计算Flink

Spark最初是为批处理开发的,但现在已经支持流处理,可以在内存中处理大型数据集和流数据,它支持的编程语言包括Java、Python和Scala等。: Flink是一种基于内存的流处理框架,被认为是Storm的替代方案,它支持批处理和流处理,具有比Storm更好的容错性和更好的性能,支持Java和Scala编程语言。综上所述,Spark适合处理大规模数据集和流数据,可以提供全面的功能,Flink是一个灵活的框架,可以在不同场景下进行高度定制,Storm则适合于实时数据流处理。实验中怎么导入数据的?

2023-06-17 15:39:17 1215 1

原创 头歌大数据作业七:Spart

(4)更简洁的API:Spark提供了Scala、Java和Python等多种编程语言的API,而且相对于Hadoop MapReduce,Spark的API更加简洁易用,开发人员可以更快速地开发出复杂的分布式应用程序。、试述如下Spark的几个概念:RDD,DAG,阶段,分区,窄依赖,宽依赖 RDD(弹性分布式数据集,Resilient Distributed Dataset):是Spark中最基本的抽象,它是一个不可变的分布式集合,可以被并行地处理。、创建一个数据表,从表里导入数据,程序应该怎么修改?

2023-06-17 15:38:37 1761 2

原创 头歌大数据作业六:Hive

答:HiveQL是类似于SQL的查询语言,它的语法与SQL相似,但是有一些不同之处。Hive与Hadoop生态系统的组件之间的相互关系:Hive与Hadoop生态系统中的其他组件(如HDFS、YARN、MapReduce等)紧密集成,Hive底层使用HDFS存储数据,使用YARN管理作业,使用MapReduce进行计算。Hive与传统数据库的区别:Hive是一种基于Hadoop生态系统的数据仓库,与传统的关系型数据库相比,Hive更适合处理大数据,支持数据的延迟插入和大规模的批处理,而且并不支持事务处理。

2023-06-17 15:37:19 1780 1

原创 头歌大数据作业五:NoSQL和云数据库

课外作业五:NoSQL和云数据库作业详情内容一、SQL云数据库实验 1.《10分钟快速入门RDS》 KooLabs云实验_在线实验_上云实践_云计算实验_AI实验_华为云官方实验平台-华为云 创建数据库名为RDS接自己姓名全拼,创建数据表名为table接自己姓名全拼 公网连通性测试 2.《如何快速连接云数据库RDS MySQL》 如何快速连接云数据库RDS MySQL - 云起实验室-在线实验-上云实践-阿里云开发者社区-阿里云官方实验平台-阿里云 创建数据库名为RDS接自己姓名全拼,创建数

2023-06-17 15:29:49 815

原创 头歌大数据作业四:HBase

 优点: 多个Region对象的更新操作所发生的日志修改,只需要不断把日志记录追加到单个日志文件中,不需要同时打开、写入到多个日志文件中  缺点:如果一个Region服务器发生故障,为了恢复其上次的Region对象,需要将Region服务器上的对象,需要将Region服务器上的HLog按照其所属的Region对象进行拆分,然后分发到其他Region服务器上执行恢复操作。每个Store对应了表中的一个列族的存储。每个Region对象又是由多个Store组成的,每个Store对象了表中的一个列族的存储。

2023-06-17 15:27:11 3524 4

原创 头歌大数据作业三:MapReduced与执行wordcount

答: Map函数和Reduce函数各自的输入、输出以及处理过程: Map函数的输入是一对(key, value),输出是一组中间结果,通常以(key', value')的形式表示,其中key'为中间结果的键,value'为中间结果的值。Reduce函数的输入是一组中间结果,输出是一组最终结果,通常以(key'', value'')的形式表示,其中key''为最终结果的键,value''为最终结果的值。答:优点: 减少了HDFS中存储块的数量,从而减少了HDFS元数据的开销,提高了整体的读写性能。

2023-06-17 15:22:50 1914 1

原创 头歌大数据作业一:开通ECS及使用Linux命令

答:大数据对思维方式的重要影响是,它推动了从粗放式的静态推理和分析到实时动态的推理和分析的转变,从单一的数据源和独立的数据管理模式转变为真正的大数据环境和多视角数据管理模式,从理性决策模型转变为不确定性决策模型,从被动观察者转变为主动发现者,有助于拓展数据分析和决策分析的视野、深入研究面向,进而影响到预测决策,推动我们理解世界和管理世界的思维方式。另外,物联网也可以作为大数据的数据采集方式,将有形世界中的物体通过传感器和其他硬件连接起来,从而收集大量的有价值的数据,为大数据分析提供数据源。

2023-06-17 15:21:44 452 1

原创 头歌大数据作业二:搭建Hadoop环境及HDFS

HDFS的数据节点负责处理客户端的读写请求,并将客户端发来的文件分割成存储块,将每个存储块中的数据保存到本地,还会将这些存储块复制到名称节点指定的若干数据节点,以实现冗余存储。答:HDFS联邦中的“块池”,是指每个数据节点所能够存储的最大的数据块数量,它的功能是为了更好的管理数据块的存储空间,可以根据块池大小,为不同的DataNode分配不同的数据块存储空间,当某个NameNode失效时,它所相关的DataNode也可以继续为其他NameNode提供服务,使得整个系统更加高可用性。

2023-06-17 15:21:28 6720 1

原创 python快速编程入门第二版 飞机大战

飞机大战游戏以太空主题的画面为背景,由玩家通过键盘控制英雄,飞机向敌机总部发动进攻,在进攻的过程中既可以让英雄飞机发射子弹或引爆炸弹炸毁敌机获得分数,也可以拾取道具增强英雄的战斗力,一旦被敌机撞毁且生命值为0则游戏结束。

2022-12-22 21:26:34 2829 6

空空如也

空空如也

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

TA关注的人

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