- 博客(66)
- 收藏
- 关注
原创 Go 原理剖析:数据结构之字符串
Go 中的字符串看似简单,但背后有很多优化技巧:避免频繁使用拼接。使用或预分配的[]byte提高性能。理解字符串与[]byte的转换机制,避免不必要的拷贝。
2025-03-31 18:45:03
344
原创 Go中的逃逸分析
逃逸是指一个变量本来应该分配在栈(stack)上,但由于某些原因,最终被分配到了堆(heap)上。栈就像一个临时的快餐盒,用来存放短期使用的数据。堆就像一个长期的仓库,用来存放需要长期存在的数据。如果快餐盒里的东西需要长期保存,就会被放到仓库里,这就是逃逸。逃逸分析是 Go 语言优化性能的重要工具。虽然逃逸到堆上会增加 GC 压力,但在某些场景下是不可避免的。通过合理设计代码结构和使用工具,可以尽量减少不必要的逃逸,提高程序性能。
2025-03-30 21:16:04
325
原创 pg数据库备份
当一个业务逐步成熟之后,为了保证安全,这个时候就需要不时对数据库做一些备份了,下面为大家讲讲如何备份postgreSql数据库。使用像nvicat 和 database 这样的数据库管理idea的话,基本可以实现无痛迁移。实际上就是用的 pg_dump 和 psql 这两个命令。
2025-03-28 15:51:03
82
原创 算法--最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12。
2025-02-05 15:41:50
312
原创 算法--最长回文子串
回文字符串具有对称性,因此我们可以以每个字符为中心,向两边扩展,找到最长的回文子串。需要注意的是,回文可能是奇数长度或偶数长度。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”看似困难,实则一点也不简单。
2025-02-05 14:42:51
362
原创 到底什么是依赖注入,揭露依赖注入的神秘面纱
依赖注入(DI)是一种软件设计模式,它通过将对象的依赖关系交由外部容器或构造函数提供,从而解耦对象之间的关系。简言之,依赖注入就是将“依赖”从内部移到外部,由外部负责“注入”这些依赖。我们可以把依赖看作是对象所需要的其他对象。例如,在一个 Web 应用中,一个处理用户请求的服务可能需要依赖数据库服务来存取数据。传统的做法是,服务自己创建并管理这些依赖,而依赖注入则把创建依赖的责任交给外部。
2025-01-26 18:30:23
574
原创 年末努力冲击500粉-- git的骚操作
撤销最近一次提交,保留修改。:撤销最近一次提交,删除修改。:撤销指定提交,生成新的提交,适用于已推送到远程仓库的情况。:撤销暂存区的文件修改,保留工作区内容。掌握这些常用的撤销提交操作,可以帮助你灵活应对 Git 使用中的各种场景。无论是修改提交历史,还是解决开发过程中出现的小问题,都能轻松应对,确保提交记录的清晰与整洁。
2025-01-14 16:22:57
347
原创 go中常用的处理json的库
将 Go 值编码为 JSON。: 将 JSON 解码为 Go 值。: 创建一个编码器,直接将 Go 值写入io.Writer。: 创建一个解码器,从io.Reader读取并解码 JSON。: 对 JSON 数据进行格式化,添加缩进。: 用于存储和处理未解码的 JSON 数据。这些函数是 Go 处理 JSON 数据时最常用的功能,涵盖了编码、解码、格式化以及延迟解码等常见需求。
2024-12-20 17:34:40
1056
原创 学习go中的Resty, 比标准库net/http更加方便友好
它的目标是提供一个简洁且易于使用的 API,以便进行常见的 HTTP 请求(如 GET、POST、PUT、DELETE 等)。如果你在 Go 项目中需要进行 HTTP 请求,可以考虑使用 Resty,因为它封装了很多常见操作,减少了开发者的重复工作。Resty 是一个功能强大且易于使用的 Go HTTP 客户端库,适用于开发中经常需要进行 HTTP 请求的场景。它通过简洁的 API 提供了对 JSON、表单数据、URL 参数等的处理支持,同时也能够进行请求头设置、认证、重试等功能。Resty 常用功能。
2024-12-20 16:27:56
659
原创 常见的那些互联网黑话!!!
在互联网行业中,有一些专有的术语和黑话,虽然它们在业内是通用的,但对于外行来说,可能听起来像是“外星语言”。QPS与TPS的区别在于,TPS更侧重于“事务”或“操作”的处理数量,而QPS通常关注“请求”的数量。吞吐量与QPS类似,但它更多关注系统实际处理能力和资源消耗,通常是评估系统性能的一个重要指标。TPS越高,系统的处理能力越强,意味着系统可以同时处理更多的用户请求。负载均衡是指将用户的请求分配到多台服务器上,确保各个服务器的工作负载均衡,从而避免某一台服务器的过载并提高系统的整体性能和可用性。
2024-12-19 15:14:54
333
原创 Goland编译器异常爆红,go mod tidy 之后依然爆红
最后通过goland file 文件里边有一个清除缓存,清除之后,爆红问题得到解决。最近,入职了一家新公司,拉下代码来,配置好环境之后,goland一直爆红。go mod tidy 重启编译器之后还是爆红。
2024-12-19 14:50:01
407
原创 在 Ubuntu/Debian 上安装 Go
Go 提供了官方的二进制安装包,适用于大多数 Linux 发行版,包括 Ubuntu 和 Debian。下载 Go 安装包。如果安装成功,会显示 Go 的版本信息。查找最新版本的 Go。
2024-11-22 22:30:04
558
原创 golang如何实现sse
在这段代码中,SSE 的实现核心是通过将服务器的响应逐行读取,并格式化为符合 SSE 协议的格式 (data: \n\n) 推送给客户端。与传统的 HTTP 请求-响应模型不同,SSE 使用一个持久连接来推送数据,而不需要客户端反复发起请求。在你提供的代码中,Server-Sent Events (SSE) 的实现主要是通过逐步读取 HTTP 响应体并以事件流的形式将数据推送到客户端。服务端返回的数据是逐行传送的,并且每行都以 data: 开头,这是 SSE 的标准格式。
2024-11-12 16:26:39
1554
1
原创 嘻嘻我是图床倒霉蛋
还有就是下载PicGo的时候尽量下载稳定版本,测试版会有奇奇怪怪的bug(亲自踩坑)七牛云因为测试域名30天到期,用自己的得备案,所以比较麻烦,建议直接上阿里云。按照这小小的一张才几KB,那我真是可以肆意妄为了。最后记得给用户开权限,要不然会上传失败!嘻嘻花了将近两个小时的时间配了一个小小的图床。我买了一年的40G,直接0元购。大体上按照这篇配置就好。
2024-06-16 19:53:28
218
1
原创 关于使用图形化界面 ssh密钥连接
关于finalshell不能使用密钥连接,因为一些格式不正确的原因pub 和 pem的格式问题,存在一些难以解决的bug。后来入坑了这个moboxXterm(某贝斯特姆),关键是和finalshell一样对新手很友好,有文件显示界面。然后新建一个连接,点击SSH,在Remote host里边放入ip。use pribate key 把自己的密钥文件.pem放入。在服务器和本地配置好之后,首先确保通过终端是可以直接连接的。然后下载完成之后,打开点击session。然后下载我们的moboxXterm。
2024-06-12 15:06:16
385
原创 学习记录-5.30
## Golang为什么比别的语言跟擅长并发:首先是因为Goroutine,算是go的一个最大的特色是轻量级的线程,创建一个goroutine的开销非常小,大约几KB,且调度开销很低并且goroutine的调度,并不依赖操作系统的线程调度器,而是使用了GMP模型其次就是channel,也是go的特色channel通信机制:channel 算是锁的一个升级,可以避免显示锁的使用,channel可以传递数据,用于异步通信,降低并发编程的难度。
2024-05-30 19:26:50
1351
原创 关于实习中git的使用
小小实习生,给公司共享了代码,但是还没人审核,所以先创一个test分支。先创建这么个测试环境,等到有人审核通过了,再进行合并。1.建立一个对应的feat-chat 分支。查看可用的 commit id。了解更多欢迎来我的小窝。
2024-05-30 11:18:21
673
原创 心心念念的小破站终于上线了
后来,总算是在友人的指导下跳出思维的误区,技术应该服务于需求,面对仅仅是搭建一个名不见经传的小网站,当然得用世界上最好的语言PHP了。后来发现完全没必要,不仅仅工作量太大,而且对前端不熟悉,写出来的页面像是一坨答辩。本来是打算拿golang来做网站后端,实现前后端分离,做高并发等等。用上宝塔+Typecho+定制主题,一晚上域名搭建全部解决。一直想要搭建一个自己的网站,今天终于成功上线了。拖延小半年的小破站,就这样顺利上线。果然,技术服务于需求才是硬道理。不嫌弃的友友可以来做客。
2024-05-30 11:16:04
233
原创 今天重新使用natapp发现连不上了
我配置了natapp.ini以后还是这种情况。直接在natapp页面中使用cmd。然后发现使用命令是可以的。
2024-05-08 15:54:12
352
原创 学习mysql相关知识记录
MySQL的执行流程:Mysql的索引索引是帮助Mysql高效获取数据的排好序的数据结构索引的数据结构:二叉树可能变成链表,变成全表扫描了红黑树二叉平衡树 有自我平衡功能 树的高度太高了 磁盘io太多B树 :叶节点具有相同的深度,叶节点的指针为空所有的索引元素不重复节点中的数据索引从左到右递增排列高度为3 的B+树3层可以存大概2千万数据B+树的非叶子节点占用内存非常少,一般MySQL在启动的时候就将他加载在内存中,因此查询只需一次磁盘io,快的很存储引擎对应的是表myisam索引文件和数据文件是分离的f
2024-05-01 12:03:15
1083
2
原创 TCP重传,滑动窗口,流量控制,拥塞控制
窗口实质上是一个缓存空间,发送发主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据,如果收到确认应答,此时数据就可以从缓存区清除。发送窗口和接受窗口中所存放的字节数,都是放在操作系统内存缓冲区中的,而操作系统的缓冲区,会被操作系统调整。先发一部分比如80,再发一部分比如120,然后发送方的可用窗口为0了,然后等待80的确认报文,但是这里存在一个问题:如果接收方向发送方发送的窗口非0的ACK报文,丢失,那么会造成死锁。如果超时重发的数据,再次超时的时候,又需要重传,TCP的策略是超时间隔加倍。
2024-04-30 22:31:32
363
原创 TCP重传,滑动窗口,流量控制,拥塞控制
窗口实质上是一个缓存空间,发送发主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据,如果收到确认应答,此时数据就可以从缓存区清除。发送窗口和接受窗口中所存放的字节数,都是放在操作系统内存缓冲区中的,而操作系统的缓冲区,会被操作系统调整。先发一部分比如80,再发一部分比如120,然后发送方的可用窗口为0了,然后等待80的确认报文,但是这里存在一个问题:如果接收方向发送方发送的窗口非0的ACK报文,丢失,那么会造成死锁。如果超时重发的数据,再次超时的时候,又需要重传,TCP的策略是超时间隔加倍。
2024-04-30 22:27:28
1518
4
原创 Go-逃逸分析
用于确定程序中对象的生命周期是否局限在方法内部。如果一个对象在方法内创建,并且在方法结束后不再被引用,那么该对象可以被认为是不逃逸的,即其生命周期局限在方法内部。相反,如果一个对象在方法内创建后被返回给调用者,或者被赋值给方法外部的引用,那么该对象就会逃逸出方法的作用域。
2024-04-12 12:15:29
567
原创 mysql索引相关知识点
1、最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。索引是一种数据结构。比如我们在查字典的时候,前面都有检索的拼音和偏旁、笔画等,然后找到对应字典页码,这样然后就打开字典的页数就可以知道我们要搜索的某一个key的全部值的信息了。
2024-04-05 14:58:50
1120
原创 golang知识点总结
面向对象在了解 Go 语言是不是面向对象(简称:OOP) 之前,我们必须先知道 OOP 是啥,得先给他 “下定义”面向对象编程(OOP)是一种基于 “对象” 概念的编程范式,它可以包含数据和代码:数据以字段的形式存在(通常称为属性或属性),代码以程序的形式存在(通常称为方法)。对象自己的程序可以访问并经常修改自己的数据字段。对象经常被定义为类的一个实例。对象利用属性和方法的私有/受保护/公共可见性,对象的内部状态受到保护,不受外界影响(被封装)。封装继承多态。
2024-03-15 15:22:28
1788
原创 Redis学习过程中的一些总结
String是最常用的一种数据类型,普通的key- value 存储都可以归为此类。其中Value既可以是数字也可以是字符串。使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种简单动态字符串SDS。
2024-03-05 21:16:44
1317
原创 Mysql知识点总结
存储过程是一些预编译的 SQL 语句。1、更加直白的理解:存储过程可以说是一个记录集,它是由一些 T-SQL 语句组成的代码块,这些 T-SQL 语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。2、存储过程是一个预编译的代码块,执行效率比较高,一个存储过程替代大量 T_SQL 语句 ,可以降低网络通信量,提高通信速率,可以一定程度上确保数据安全。
2024-03-05 21:15:44
1205
原创 计网知识点总结二
什么是 CookieHTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)个性化设置(如用户自定义设置、主题等)浏览器行为跟踪(如跟踪分析用户行为等)
2024-03-04 17:18:41
979
原创 计网笔记总结
图片来自:https://juejin.cn/post/6844904005315854343三次握手机制:第一次握手:客户端请求建立连接,向服务端发送一个同步报文(SYN=1),同时选择一个随机数 seq = x 作为初始序列号,并进入SYN_SENT状态,等待服务器确认。第二次握手::服务端收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文。
2024-03-04 17:17:56
1088
原创 jwt鉴权
ExpiresAt: time.Now().Add(TokenExpireDuration).Unix(), // 过期时间。// MyClaims 自定义声明结构体并内嵌jwt.StandardClaims。// jwt包自带的jwt.StandardClaims只包含了官方字段。// 使用指定的secret签名并获得完整的编码后的字符串token。// ParseToken 解析JWT。// GenToken 生成JWT。// 创建一个我们自己的声明。然后定义jwt的过期时间。// 解析token。
2024-02-14 21:20:12
820
原创 git入门
分布式版本控制系统可以不用联网就可以工作,因为每个人的电脑上都是完整的版本库,当你修改了某个文件后,你只需要将自己的修改推送给别人就可以了。但是,在实际使用分布式版本控制系统的时候,很少直接进行推送修改,而是使用一台当"中央服务器"的东西。切换当前分支到test,(当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样)一个好的git提交信息。只看某个人的提交记录。
2024-02-12 18:13:04
1386
原创 docker从入门到入土
一个镜像代表一个软件;而基于某个镜像运行就是生成一个程序实例,这个程序实例就是容器;而仓库是用来存储Docker中所有镜像的其中仓库又分为远程仓库和本地仓库,第一次访问依赖时,将其下载到本地仓库,第二次,第三次使用时直接用本地仓库的依赖即可通过docker cp 指令能够将文件从Centos复制到容器中,./test.html为centos中的资源路径,xxx为容器id,/usr/local/tomcat/webapps 为容器的资源路径,此时test.html文件将会被复制到该路径下。
2024-02-12 11:07:12
3122
原创 mysql基础从头到尾快速梳理
左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID,姓名,年龄,职位,薪资,入职日期,上级主管ID,部门ID,在员工的信息存储的是部门ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。在一个正常的业务系统中,查询操作的频次是远高于增删改的,我们去访问企业官网,电商网站,在这些网站中我们所能看到的数据,实际都是需要从数据库中查询并展示的,而且在查询的过程中,可能还会涉及条件,排序,分页等操作。),(值1,值2,…
2024-02-07 17:26:56
388
原创 go-基于逃逸分析来提升性能程序
逃逸分析简单来说就是分析在程序的哪些位置可以访问到该指针简单的来说,它是在对变量放在堆上或者栈上进行分析,该分析在编译阶段完成。如果一个变量超过了函数调用的生命周期,那么这个变量就在函数外部存在引用了,编译器会把这个变量分配到堆上,接下来我们就说这个变量发生逃逸了。逃逸分析是编译器在静态编译时完成的逃逸分析后可以确定哪些变量可以在分配栈上,栈的性能好。
2024-02-04 13:24:27
666
原创 计算机网络
因为三次握手已经可以确认双发的发送接受能力正常,双方也都知道彼此都准备好了,并且具备可以完成收发的能力,也就无需四次浪费资源了。第二次握手:客户端确认自己发,自己收,服务端收,客户端发报文功能正常,客户端认为连接已建立。防止已过期的连接请求报文突然又传送到服务器,因而产生错误和资源浪费。三次握手才能让双方均确认自己和对方的发送和接受能力都正常。告知对方自己的初始序号值,并确认收到对方的初始序号值。第一次握手:服务端确认自己收,客户端发报文功能正常。第三次握手:服务端确认自己发,客户端收报文功能正常。
2024-01-27 00:44:24
803
原创 golang代码规范和单元测试
go test命令是一个按照一定约定和组织的测试代码驱动程序。在包目录中,所有以_test.go为后缀的源码文件都会被go test运行。我们写的__test.go源码文件不用担心内容过多,因为go build命令不会将这些测试文件打包到最后的可执行文件。方便团队内部统一风格,提高代码可读性,统一性。test文件有4类,Test开头的 功能测试。Benchmark开头的 性能测试。对三种字符串的拼接方式进行性能测试。单元测试命令:go test。example 模糊测试。
2024-01-26 21:02:45
721
原创 计算机网络
计算机网络的各层协议及作用?计算机网络体系可以大致分为以下三种: OSI七层模型,TCP/IP四层模型和五层模型○ OSI七层模型:大而全,但是比较复杂,而且是先有理论模型。没有实际应用○ TCP/IP四层模型:是有实际应用发展总结出来的,从实质上讲,TCP/IP只有最上面三层,最下面一层没有没事具体内容,TCP/IP参考模型没有真正描述这一层的实现○ 五层模型:五层模型只出现在计算机网络教学过程中,这是对七层模型和四层模型的一个折中,既简洁又能将概念阐述清楚。○○ 七层网络体系结构各层的主要
2024-01-24 22:52:42
556
原创 Golang 垃圾回收
在内存管理中,allocBits记录了每块内存的分配情况,而gcmarkBits记录了每块内存的回收情况,在标记阶段会对每块内存进行标记,有对象引用的标记为1,没有的标记为0,结束标记后,将allocBits指向gcmarkBits,则有标记的才是存活的内存块,这样就完成了内存回收。辅助GC是为了防止GC过程中内存分配的速度过快,因此会在GC过程中让mutator线程并发执行,协助GC执行一部分回收工作。写屏障是让GC和应用程序并发执行的手段,可以有效减少STW的时间。灰色: 待处理的内存块。
2024-01-23 16:20:00
566
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人