自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go中锁的入门到进阶使用

Mutex:适用于写多读少RWMutex:适用于读多写少sync.Once:保证代码执行一次sync.Map:适用于高并发 map 读写atomic:适用于简单计数操作,避免 Mutex 阻塞掌握这些锁机制,能让你的 Go 并发程序更稳定、更高效!

2025-03-31 10:09:45 814

原创 go中defer从入门到进阶

如果你刚接触 Go 语言,第一次看到defer乍一看,defer似乎在“搞延迟执行的把戏”,但它的作用远不止如此。在实际开发中,defer可以帮我们实现资源释放、错误处理等功能,写出更优雅的代码。今天,我们就来全面剖析defer,带你从入门到精通。

2025-03-31 09:31:22 824

原创 k8s调度机制:亲和性,污点,容忍

简单来说,节点亲和性就是让Pod 主动选择节点的机制。通过设置亲和性规则,你可以让 Pod 更倾向于调度到某些符合条件的节点。污点是节点主动设置的条件,表示节点不愿意接受 Pod。你可以给节点加上污点,防止其他 Pod 被调度到这个节点上。容忍就是Pod 声明“我能忍受污点”的机制。被污点标记的节点,不是所有的 Pod 都会被拒绝,只有那些声明了“容忍”这个污点的 Pod,才能顺利调度到这些节点上。机制定义主体控制方向结果节点亲和性 (Node Affinity)Pod主动选择节点。

2025-03-15 17:21:48 564

原创 公网连接另一台win上的wsl2教程

以购买的云服务器为例,在里边部署frp服务端(见之前的文章),我们需要在有wsl的win上部署frp客户端,将本机22端口穿透到远程随意的空闲端口,启动frp客户端,可以看到日志,无误的话应该是对接成功,此时在我们另一台win上输入ssh -p 22端口对应穿透的端口号 wsl用户名@公网ip,即可进行连接;然后可以在本机测试,输入ssh wsl用户名@172.29.140.159就能连接了,现在已经可以做到内网内访问wsl2了,我们要追求公网,那么就需要借助frp;输入以下,注意:将地址路径改成自己的;

2025-02-20 11:31:45 358

原创 go开发中interface和方法接收器的使用

接口就像是一个“规章制度”,规定了哪些方法你必须实现。只要你完成了任务,Go 就会自动接受你作为接口的实现者。

2024-12-12 18:15:10 744

原创 wsl的多种使用

当我们开发的时候总是因为本地环境是windows,而不得不再配置一套系统进行开发,可能是远程或虚拟机,这样子都麻烦的很,而wsl就可以避免这种问题,我们首先要下载win版的goland,然后在wsl中下载一个linux版本的go开发环境,并在wsl中配置好环境变量;由于我们使用的是linux环境,则项目也要在wsl中,可以将需要的项目在wsl指定文件中复制,然后通过goland打开,我们会发现,控制台也改变了,代码开发就像是在linux上一样。选择上述,进行linux中ubuntu的信息修改,然后点击。

2024-12-10 14:39:17 935

原创 入门级捡垃圾工作站记录

一直想着拥有有一台自己的多功能机子,一个笔记本很难事事包办,本来打算配一个台式机,后来研究了一下,索性捡垃圾拼装的工作站,性价比更高,稳定性也更强,而且还可以放在学校,电费也省了。当然,也是看了很多b站教程,从选机,配件到后期装机跑分,大概花了半个月时间,每天有空就研究,精力花费了不少,也没便宜多少钱,大概这就是垃圾佬的乐趣,233。

2024-12-09 17:01:16 747

原创 使用go实现流式输出

流式输出(Streaming Output)是 HTTP 响应中的一种模式,服务器可以在生成部分内容时立即将这些内容发送给客户端,而无需等待整个响应内容生成完成。这种方式常用于实时交互、高延迟操作或长时间任务中,比如 OpenAI 的 GPT 模型生成流式对话。import ("bufio""bytes""fmt""net/http""strings""time"// 定义必要的数据结构const (

2024-11-23 11:15:25 987

原创 go反射深入学习

reflect.ValueOf(&x) 将 x 的地址传递给 reflect.Value,这使得我们能够通过反射修改 x 的值。传递给 reflect.ValueOf() 的是 x 的值,而不是 x 的地址。由于 Go 语言的函数传参机制是值传递,反射修改 v 的值是无效的。反射第一定律:反射可以将 interface 类型变量转换成反射对象,利用 reflect.TypeOf() 和 reflect.ValueOf() 获取类型和值。了解反射的基本定律和用法,可以更好地掌握和使用 Go 的强大特性。

2024-11-16 00:05:23 1040

原创 麦克风实现语音转文字

本文就第一步进行探讨,题主平时是使用go语音进行开发的,所以在有这个想法后首先就想使用go实现,无奈发现,go想要实现麦克风录音,需要一系列复杂流程(关键最后也没有完成,呜呜呜)硬件机器人想要实现对话,首先要能听到,这个可以使用外置麦克风实现,将麦克风收到的音频存储为wav等格式,然后将wav通过asr技术转换成文字,再对接文本大模型就能实现对话了。这个包可以实现按找音频阈值决定是否对音频进行记录,并且可以通过该阈值实现音频分段,进而实现将分段的音频发送到转换接口。

2024-11-09 15:16:52 574

原创 DNS查询服务器的全流程解析

**服务器端设置响应头**:在服务端的响应中添加 `Access-Control-Allow-Origin` 头部,指定允许访问的源。- **递归查询中的缓存**:递归DNS服务器会缓存查询结果,这意味着后续相同的查询请求可以直接从缓存中获取,无需再次进行全程查询,显著减少查询时间和负载。3. **不同的端口**:比如从 `http://example.com:3000` 发送请求到 `http://example.com:4000`。- **安全性**:分层查询可以提高系统的安全性和抗攻击能力。

2024-11-02 09:10:54 973

原创 frp+windows+宝塔+域名使用

FRP (Fast Reverse Proxy) 是一款开源的反向代理工具,支持多种协议(如 TCP、UDP、HTTP 和 HTTPS)的内网穿透。它能够帮助你将位于内网或防火墙后面的服务映射到外网,方便外网用户访问。FRP 是由 Go 语言编写的,具有高性能、稳定性好、配置灵活等特点。常见的使用场景包括将内网的 Web 服务器、SSH 服务器或数据库服务器等资源公开到互联网上。

2024-10-10 15:04:00 1460 1

原创 5分钟精通Excel在go中的使用

包含了最基础的文件创建和写入功能,需要注意的是excel并不是只有文件名,一个excel中是包含了很多张工作表的,所以在创建和之后写入数据时,都要指定插入哪个工作表。这里贴一个中文版的链接(以excelize库为例,相对其他库来说,体验很不错),不过要注意该库是不支持.xls文件的,最好将要处理的文件从.xls复制到.xlsx中再进行处理。总结来说的go操作excel不是很难,易上手,在开发中可以将数据拉取后放到数据库中进行存储,也可以将数据库中数据进行处理后存到excel中。第二张表才是真正生成的数据。

2024-09-25 17:03:36 837

原创 5分钟熟练上手ES的具体使用

类似于关系型数据库中的“表结构”或“schema”,它告诉 Elasticsearch 每个字段是什么类型,应该如何处理和索引这些字段的数据。于是这一篇博客应运而生。的子级,它定义了文档中每个字段的名称和类型。每个字段的类型决定了 Elasticsearch 如何存储、索引和查询该字段的数据。(X的意思是指定HTTP请求的方法)如GET,POST,PUT,DELETE等。类型适合存储并查询复杂的嵌套数组数据,如订单中的商品列表或评论的回复。:类似于关系型数据库中的“行”,是 JSON 格式的数据单位。

2024-09-13 15:04:04 2943 1

原创 go切片的深入学习以及context库的使用

1.如果期望容量大于当前容量的两倍就会使用期望容量;2.如果当前切片的长度小于 1024 就会将容量翻倍;3.如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;

2024-09-07 07:42:12 1310 1

原创 两阶段提交进阶

**commit 阶段**:把 XID 写入到 binlog,然后将 binlog 持久化到磁盘(sync_binlog = 1 的作用),接着调用引擎的提交事务接口,将 redo log 状态设置为 commit,此时该状态并不需要持久化到磁盘,只需要 write 到文件系统的 page cache 中就够了,因为只要 binlog 写磁盘成功,就算 redo log 的状态还是 prepare 也没有关系,一样会被认为事务已经执行成功;称为**撤销日志**称为**重做日志**

2024-08-31 09:06:29 440

原创 “学会吊打面试官系列”8.12~8.24面试难点记录

一共面了三家小公司,以下为个人记录的比较重要的10道题目。

2024-08-24 20:42:23 501

原创 5分钟了解常见的互联网攻击方式,按照原理来分类

SQL注入攻击利用了Web应用程序对用户输入数据的信任,并且没有正确地过滤或转义输入的数据。攻击者利用这一点,向应用程序的输入字段中注入恶意的SQL代码片段,使得应用程序在构造SQL查询语句时误认为这些恶意代码是合法的查询语句的一部分,从而执行了攻击者意图中的数据库操作。如果这段话被显示到用户的个人主页,那么访问这个用户空间的其他用户就会被攻击,进而被黑客拿走Cookie中的关键信息。跨站脚本攻击, 跨站脚本攻击,攻击者通过注入恶意脚本到网页,获取用户信息或控制用户浏览器。以形式来分的话有这些大类;

2024-08-10 20:30:50 868

原创 Go切片深入学习

1.如果期望容量大于当前容量的两倍就会使用期望容量;2.如果当前切片的长度小于 1024 就会将容量翻倍;3.如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;

2024-08-03 15:51:23 570

原创 ipv4和ipv6间互相通信的原理

如果目标域名只有IPv4地址,DNS64服务器会查询该域名的A记录,然后将其转换为IPv6地址(通常以特定前缀,例如64:ff9b::/96 开头),并返回给客户端一个伪造的AAAA记录。:NAT64路由器识别出伪造的IPv6地址中的IPv4部分,将该地址转换为真实的IPv4地址,并将IPv6报文转换为IPv4报文。○当 IPv6 客户端向伪造的 IPv6 地址(例如 64:ff9b::c000:0221)发送请求时,NAT64 路由器会识别这个前缀(64:ff9b::/96)。

2024-08-01 20:56:26 2794

原创 go-zero中api和rpc的使用步骤

这个例子没有体现出数据库操作,具体的,当涉及到数据库时,将model层和rpc层与api层并列,让rpc调用到model层的方法,让api层调用rpc层的方法实现。由于我们要在api层调用rpc层的方法,肯定是要先声明userclient才能直接调用到里边的方法。至此,api和rpc的连接已经完成了,然后将api层的逻辑放入到rpc的logic中。具体的逻辑实现,解析token中的id和name,返回给api层的logic。通过调用rpc层的方法返回该方法的响应info,返回info中的参数。

2024-08-01 11:18:47 586

原创 go-zero中api从入门到大师

定义了请求和响应的数据结构。

2024-07-31 09:38:36 1225

原创 go-zero框架入门---认识微服务以及环境的安装

微服务是一种软件架构风格,它将一个大型应用程序拆分成多个小型的、独立部署的服务,每个服务实现单一业务功能。每个服务运行在自己的进程中,并通过轻量级的通信机制(通常是HTTP RESTful API)相互协作。

2024-07-31 09:05:04 1192

原创 计算机网络必会面经

第一次握手客户端请求建立连接,将首部的SYN标识位置为1,初始化序列号seq=x,发送给服务器,并进入SYN_SENT状态,等待服务器确认。第二次握手服务器接收到SYN后,将首部的SYN和ACK标识位置为1,回复确认ack的值为客户端发送的序列号x+1,同时自己也要初始化一个seq=y,ACK和SYN一起发送客户端,进入SYN_RECV状态。第三次握手。

2024-07-30 14:07:13 1074

原创 最简单的typora+gitee+picgo配置图床

你是否因为管理图片而感到头大?是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了,它们可以帮你轻松打造自己的图床,让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧!

2024-07-22 10:21:33 1503 3

原创 go-zero框架入门

使用 Raft 共识算法**,确保了在分布式环境中的强一致性**。再举个例子:正常项目中配置文件写在代码中,若配置文件修改,项目就该重新启动,但是若使用了etcd,每次去查看对应RPC的配置信息时都是从etcd中实时获取。并且etcd本身为分布式系统设计,提供了原生的服务发现和配置管理功能,支持 Watch 机制,可以。之后打开一个命令行窗口,输入:etcd就可以启动了,然后再打开一个黑窗口(上一个不要关)这就是go-zero使用前的前置工作了,下一步就是去写简单的项目。1.在根目录下创建一个user包。

2024-07-18 15:51:26 925 1

原创 计网ip层重要面经总结

跨域(Cross-Origin)指的是在浏览器中运行的脚本试图访问不同源(即不同的域、协议或端口)的资源时所遇到的安全限制问题。具体来说,浏览器出于安全考虑,限制了来自不同源的页面间的互操作性,防止恶意网站利用用户登录状态等进行跨站攻击。不同的协议:比如从发送请求到。不同的域名:比如从发送请求到。不同的端口:比如从发送请求到。CORS(跨域资源共享)服务器端设置响应头:在服务端的响应中添加头部,指定允许访问的源。表示允许所有源访问。JSONP 是一种通过动态创建

2024-07-12 09:40:43 1175 2

原创 内网、外网通信的底层实现

NAT(Network Address Translation,网络地址转换)是一种网络技术,主要用于解决IPv4地址短缺问题和增强网络安全性(所以nat并不是绝对需要使用的,它是为了解决ipv4短缺提出的方案)。就我总结来说:总结来说:nat设备就是局域网和公网沟通的一个。

2024-07-11 16:30:59 729

原创 ipv4和ipv6的兼容性问题

大家可能在阅读中唯一的疑问就是,当客户端先前往dns64进行目标ipv4转假ipv6的过程中,并未事先通知nat64,为什么nat64能直接从假ipv6中获取到真ipv4呢?整个过程的关键是DNS64和NAT64的协调工作,确保IPv6客户端能够通过伪造的AAAA记录访问仅有IPv4地址的服务器。这样,客户端对目标服务器的访问是透明的,无需知道其实际的IPv4地址。是不是很神奇,这个已经说的很清楚了,如果还是没有看懂,不妨下去再查一查相关的知识。封装后的 IPv4 报文通过 IPv4 网络传输到节点 B。

2024-07-11 15:05:58 3744

原创 elk在宝塔中的简单部署和使用

可以适用于大多数情况,也可根据实际情况可以选择不同的收集工具), 收集多种不同格式的数据,并转换成es可以分辨的格式(如json)存入es中指定的索引中,然后通过kibana就可以查看es中收到的数据。es中的文档:是 Elasticsearch 中存储的基本数据单元,表示一条记录或一项数据,类似于数据库中的一行。elastic中的索引:是一个逻辑命名空间,包含一组相关的文档,类似于传统关系型数据库中的数据库。每个工具都是单独存在的而不会互相影响,在实际使用中,需要将三者分别运行,并打通整个流程。

2024-07-08 14:32:55 1599

原创 im的逻辑入门讲解

WebSocket 是一种网络通信协议,提供了一种在单个TCP连接上进行全双工通信的方式。这意味着客户端和服务器可以同时发送和接收数据,而不需要等待对方的响应,这与传统的HTTP请求-响应模式不同。

2024-06-29 16:56:51 843

原创 面经训练No1

存储:Cookie是由客户端浏览器存储的小型文本文件。安全性:默认情况下,Cookie是明文传输的,可以通过设置属性来增强安全性(如HttpOnly、Secure)。生命周期:Cookie可以设置过期时间,过期后自动删除;也可以设置为会话Cookie,关闭浏览器时删除。大小限制:Cookie的大小通常限制在4KB左右。发送机制:每次HTTP请求都会携带Cookie,自动发送给服务器。

2024-06-02 08:07:01 1070

原创 消息队列入门-1

消息队列(Message Queue,MQ)是一种跨进程通信或应用程序通信的机制,用于在分布式系统中传递消息。消息队列系统通常包含一个或多个生产者(producers)和一个或多个消费者(consumers),消息由生产者发送到队列中,并由消费者从队列中读取和处理。消息队列功能其实很容易理解,甚至通过名字就可以猜出他的功能;

2024-05-26 08:24:37 779

原创 消息队列入门讲解

消息队列(Message Queue,MQ)是一种跨进程通信或应用程序通信的机制,用于在分布式系统中传递消息。消息队列系统通常包含一个或多个生产者(producers)和一个或多个消费者(consumers),消息由生产者发送到队列中,并由消费者从队列中读取和处理。消息队列功能其实很容易理解,甚至通过名字就可以猜出他的功能;

2024-05-19 11:37:10 959

原创 简单的IM入门讲解

WebSocket 是一种网络通信协议,提供了一种在单个TCP连接上进行全双工通信的方式。这意味着客户端和服务器可以同时发送和接收数据,而不需要等待对方的响应,这与传统的HTTP请求-响应模式不同。WebSocket 是一种网络通信协议,提供了一种在单个TCP连接上进行全双工通信的方式。这意味着客户端和服务器可以同时发送和接收数据,而不需要等待对方的响应,这与传统的HTTP请求-响应模式不同。

2024-05-19 11:33:36 1269

原创 实现用户个人随机salt生成jwt及鉴别用户权限的实现思路

这就出现了一个问题,中间件中每次都是要验证token是否正确和有效,如果salt放到mysql中每次验证都需要查询数据库,对性能影响很大,所以,我们就需要在用户登陆时就将用户个人信息放入redis缓存中设置过期时间,若用户活跃,那么该信息就会一直放在redis中,提升用户进行用户信心相关业务操作时的性能。利用用户名,id,权限等级,salt生成用户token;初始化首先需要在拿到用户手机号后,调用函数升成用户名,用户salt,用户头像,在插入用户信息时,数据库会将用户id一并生成,并生成默认权限。

2024-05-12 08:14:17 637

原创 跑腿业务和支付业务的具体实现流程

,钱会变成已冻结金额(接单人待提现金额=原待提现金额-任务金额&&接单人已冻结金额=原已冻结金额+任务金额),当工单被解决时,(两种情况,若后台判发起人胜,这笔钱会从接收人的已冻结移动到发起人的可提现金额,当后台判接单人胜,这笔钱会直接从接单人的已冻结转到可提现),异常解决时该任务会直接从异常转变为已完成;如果你以为这就结束了,那就太天真了,一个完整的业务逻辑,应该将所有能预料到的情况都包含在内,例如,这些方法中若一些方法的sql语句执行成功,一些失败,应该怎么处理?例如,基础支付的回调通知。

2024-04-24 11:06:50 1154

原创 项目开发流程

分发接口责任到人,各开发人员对负责的接口文档持续更新(推荐使用实时更新的markdown工具记录,例如有道云,共同工作,可以实时查看到各开发人员的接口状态,上级负责人应实时监测,不合理时及时调整),接口开发完成后,后端进行项目接口测试,成功后与前端进行联调测试,压力测试等,完全通过后进行项目上线工作。应考虑极端环境下的实现,以及安全性的实现。

2024-04-21 22:27:49 993

原创 宝塔面板部署go项目

即和本地跑项目没太大区别;但是该方法不太适合大型的项目,因为build会占用较大的内存,而服务器内存通常都较小,会有概率失败,而且下载各种环境也是一个弊端,日常项目自然是没有问题的;为了能够更完整的演示docker部署,教程会先演示在本地生成docker镜像并提交到dockerhub,然后在服务器上拉取先前提交的docker镜像生成容器运行;3.事先生成项目的linux版本二进制文件为main,单独将main拉进服务器,并配置启动项,若没有问题可直接运行,直接少了build和下载环境的步骤;

2024-04-20 08:12:36 4702

原创 使用urfave/cli实现命令行备忘录

于是就写了一个基于github.com/urfave/cli包的简单命令行备忘录demo;功能很简单,代码也并不是很复杂,当作入门来看还是很不错的;当然,学这些工具并不是就是为了去实现一个简单备忘录,在这个学习的过程中能了解到很多新鲜的东西亦能拓宽我们的视野,比如说,知道了黑窗口中各种命令究竟是如何去实现的,为什么go语言适合去制作这种命令行工具,shell脚本如何去实现的,docker,数据库命令,git等等的命令原理,这有助于我们对计算机整体知识和底层的理解;

2024-04-17 16:42:56 1385

空空如也

空空如也

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

TA关注的人

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