自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【新手易错点】golang中byte和rune

在Golang中,byte和rune是两种不同类型的数据。简单来说,,而r。总的来说,byte用于表示单个字节的数据,而rune用于表示Unicode字符,可以更好地支持多语言和复杂的文本处理。

2024-02-23 15:15:26 721 1

原创 【容易踩坑】golang 锁相关知识

在 Golang 中,锁的作用是用于保护共享资源,确保在多个 goroutine 并发访问时的数据一致性和正确性。当多个 goroutine 同时访问共享资源时,可能会出现竞态条件(race condition),导致数据错误或不一致。总而言之,锁在 Golang 中起到了保护共享资源、同步多个 goroutine、确保数据一致性和避免竞态条件等重要作用。

2023-09-12 14:42:04 494

原创 【容易踩坑】golang中的defer

defer是Go语言中的一个关键字,用于延迟执行函数调用。当一个函数中使用了defer关键字来延迟执行某个函数调用时,该函数调用会被推迟到函数返回之前执行。defer常用于需要在函数返回之前执行一些清理或释放资源的操作,例如关闭文件、释放锁等。defer还可以用于捕获函数中的错误,并在函数返回之前进行处理。

2023-09-12 14:41:20 259

原创 【容易踩坑】golang断言

在Go语言中,。在Go语言中,断言的语法形式为x.(T),其中x是一个接口类型的值,T是一个具体的类型。这个语法表示我们要判断x的实际类型是否是T,如果是,则将x转换为T类型的值,并返回给我们使用。断言的过程是通过判断x的实际类型信息和T类型信息是否一致来完成的。如果一致,断言就成功了,我们可以继续使用T类型的值;如果不一致,断言就失败了,会导致程序运行时产生一个恐慌(panic)。

2023-09-12 14:40:46 763

原创 golang context小节

Go 语言中的 context.Context 的主要作用还是在多个 Goroutine 组成的树中同步取消信号以减少对资源的消耗和占用,虽然它也有传值的功能,但是这个功能我们还是很少用到。在真正使用传值的功能时我们也应该非常谨慎,使用 context.Context 进行传递参数请求的所有参数一种非常差的设计,比较常见的使用场景是传递请求对应用户的认证令牌以及用于进行分布式追踪的请求 ID。

2023-08-13 16:06:39 79

原创 go匿名函数和闭包

在学go语言前期,常常搞不清楚匿名函数和闭包的关系,便写个文档深入总结一下。

2023-08-13 16:05:18 114

原创 计算机网络的拓朴结构:总线型,星形拓朴结构,环形拓扑结构,树形拓扑结构

:在总线型网络中,信号会沿着网线发送到整个网络。当信号到达线缆的端点时,将产生反射信号,这种发射信号会与后续信号发送冲突,从而使通信中断。为了防止通信中断,必须在线缆的两端安装终结器,以吸收端点信号,防止信号反弹。

2023-07-12 13:32:03 1611

原创 http状态码

2023-07-10 13:31:02 40

原创 死锁以及预防

死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

2023-07-10 13:30:14 45

原创 线程与进程

本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。影响关系:一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮

2023-07-10 13:29:14 34

原创 tcp和udp区别

TCP 面向连接(如打电话要先拨号建立连接)提供可靠的服务,UDP 是无连接的,即发送数据之前不需要建立连接,UDP 尽最大努力交付,即不保证可靠交付。UDP 具有较好的实时性,工作效率比 TCP 高,适用于对高速传输和实时性有较高的通信或广播通信。每一条 TCP 连接只能是一对一的,UDP 支持一对一,一对多,多对一和多对多的交互通信。UDP 分组首部开销小,TCP 首部开销 20 字节,UDP 的首部开销小,只有 8 个字节。TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流

2023-07-10 13:28:22 33

原创 go 一致性hash

如果服务器的节点过少,容易引起key的倾斜。例如上面的例子中p2、p4、p6分布在环的上半部分,下半部分是空的。那么映射到下半部分的key都会被分配给p2,key过度倾斜到了p2缓存间节点负载不均衡;假设1个真实的节点对应3个虚拟节点,那么p1对应的就是p1-1、p1-2、p1-3。实现原理:将key映射到 2^32 的空间中,将这个数字的首尾相连,形成一个环。,一个真实的节点对应多个虚拟的节点。为了解决这个问题,引入了。

2023-07-10 13:27:49 109

原创 redis zset实现

redis中有序集合的实现采用了一种数据结构——。跳跃表是有序单链表的一种改进,其查询、插入、删除也是O(logN)的时间复杂度。

2023-07-10 13:27:18 153

原创 sql执行慢的原因?如何看是什么问题?

比如MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写数据的操作,而多个从库只用来处理读操作。在流量比较大的场景中,可以增加从库来提高数据库的负载能力,从而提升数据库的总体性能。表切分规则一般分为两种,一种是水平切分,一种是垂直切分。将查询比较频繁的热点数据预存到缓存当中,比如Redis、MongoDB、ES等,以此来缓解数据的压力,从而提高数据库的响应速度。首先,可以打开MySQL的慢查询日志,收集一段时间的慢查询日志内容,然后找出耗时最长的SQL语句,对这些SQL语句进行分析。

2023-07-10 13:26:21 631

原创 复合索引生效问题

复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。当然,col1,col3组合也可以,但实际上只用到了col1的索引,col3并没有用到。当创建(col1,col2,col3)联合索引时,相当于创建了。

2023-07-10 13:25:43 53

原创 mysql引擎

MYSQL常用2个引擎分别是和。没啥特殊的话请使用innodb。myisam已被放弃。读操作多用写操作多用1、myisam查询效率更高,查询效率差myisam6-7倍。2、innodb支持事务,行锁,外键。myisam不支持。如果数据表涉及的存储数据多、查询多,用myisam,如文章表。如果数据表涉及业务逻辑多,增删改操作多,就用innodb,如订单表。

2023-07-10 13:25:04 31

原创 cpu特别高如何定位

代码执行到下图中,189行dispatchIdleTeu返回了错误qferror.ErrNoTeu,所以189 if的执行语句192~212无法进入进行,而外层是一个for死循环,则会造成该协程一直占用cpu,导致cpu过载。通过上一步,我们确定了是pid=11205的cava_smu进程cpu过高,那么可以通过。通过以上操作,可以确认tid=11208,11212,11213三个线程的cpu过高。首先,如果生产环境没有dlv,则可以拷贝对应的dlv到。在dlv中切换到对应高cpu协程,并查看堆栈。

2023-07-10 13:24:37 380

原创 golang面试题答案总结(四)技术中台golang开发实习生 滴滴

HTTP1.1的缺点:安全性不足和性能不高;HTTP2.0完全兼容HTTTP1.0,是“更安全的HTTP,更快的HTTPS”,头部压缩,多路复用等技术充分利用了带宽,降低了延迟。HTTP3.0的底层支撑协议QUIC基于UDP实现,又含TCP的特点,实现了又快又可靠的协议。

2023-07-09 17:07:31 247

原创 golang内存分配原理

另外,内存分配与GC(垃圾回收)关系密切,所以了解GC前有必要了解内存分配的原理。

2023-07-07 16:57:17 164

原创 golang面试经验总结(三)游服务器一二三面 秋招 米哈游

问题来源于,自学习使用,答案搜索来自于网络,若有不对的地方欢迎指正。

2023-07-05 19:53:57 507

原创 rabbitmq常用命令(mac)

具体网站:http://localhost:15672。

2023-07-05 14:34:55 217

原创 golang面试经验答案总结(二)字节跳动一面 golang

主要是堆(heap)和栈(stack)分配两种。栈分配廉价,堆分配昂贵。栈分配:对于栈的操作只有入栈和出栈两种指令,属于静态资源分配。使用栈分配:函数的内部中不对外开放的局部变量,只作用于函数中。堆分配:堆中分配的空间,在结束使用之后需要垃圾回收器进行闲置空间回收,属于动态资源分配。使用堆分配:1.函数的内部中对外开放的局部变量。2.变量所需内存超出栈所提供最大容量。GMP基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

2023-07-04 17:08:09 1083

原创 golang面试经验答案总结(一)分享一篇B站后端面经 哔哩哔哩

golang面试总结

2023-07-02 16:17:51 606 1

原创 go GMP调度

golang GMP调度

2023-07-01 19:18:14 47

原创 go mutex原理

自旋对应于CPU的”PAUSE”指令,CPU对该指令什么都不做,相当于CPU空转,对程序而言相当于sleep了一小段时间,时间非常短,当前实现是30个时钟周期。自旋过程中会持续探测Locked是否变为0,连续两次探测间隔就是执行这些PAUSE指令,它不同于sleep,不需要将协程转为睡眠状态。

2023-07-01 16:09:37 56

原创 go RWmutex读写锁原理

所谓读写锁RWMutex,完整的表述应该是读写互斥锁比如,程序钟写操作少而读操作多,简单的说,如果执行过程时1次写然后N次读的话,使用Mutex这个过程将是串行的, 因为即便N次读操作相互之间并不影响,但也都需要持有Mutex后才可以操作。如果使用(读写锁)RWmutex,多个读操作时可以同时持有锁,并发能力将大大提升。

2023-07-01 15:37:13 51

原创 golang垃圾回收机制

垃圾回收的核心就是。把未被引用的内存回收掉,以供后续内存分配时使用。上图中,内存块1、2、4号位上的内存块已被分配(数字1代表已被分配,0 未分配)。变量a, b为一指针,指向内存的1、2号位。内存块的4号位曾经被使用过,但现在没有任何对象引用了,就需要被回收掉。垃圾回收开始时从root对象开始扫描,把root对象引用的内存标记为”被引用”,考虑到内存块中存放的可能是指针,所以还需要递归的进行标记,全部标记完成后,只,未被标记的全部标识为未分配即完成了回收。

2023-07-01 14:02:51 418

原创 mysql查询关键词总结

limit一般用于分页。

2023-05-29 22:00:29 948

原创 mysql(锁)

写锁–>其他客户端既不能读也不能写。读锁–>其他客户端只能读数据。

2023-05-22 15:35:57 31

原创 mysql存储过程

用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用@变量名使用就可以。其作用域为当前连接。-- 赋值 set @var_name = expr [ , @var_name = expr ] . . .;select 字段名 into @var_name from 表名;-- 使用 select @var_name;

2023-05-17 15:56:12 39

原创 mysql视图

当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。CASCADED和 LOCAL,默认值为 CASCADED。

2023-05-16 15:26:43 26

原创 mysql优化

order by优化group by优化limit优化count优化update优化

2023-05-16 14:55:26 65 1

原创 mysql插入大批量数据

mysql插入大批量数据

2023-05-15 16:37:24 179 1

原创 mysql索引基本操作

假设有test_2表,表结构如下。

2023-05-15 15:12:13 60

原创 mysql事务

【代码】mysql事务。

2023-05-13 21:13:24 28

原创 protobuf(golang)序列化与反序列化

输出的是二进制数据。

2023-05-09 15:45:13 432

原创 mac下载protobuf(golang)并执行proto文件

使用brewhome在终端上进行下载进入终端查看是否下载成功出现版本号证明下载成功。

2023-05-09 15:39:05 635

原创 css 鼠标点击的几种状态

【代码】css 鼠标点击的几种状态。

2023-03-09 21:41:40 1293

原创 python二维列表的切片

python二维列表切片

2023-03-01 12:25:41 841

原创 typescript语法入门

typescript 基础语法

2023-02-28 20:37:15 81

使用grpc+gin+gorm+oss等构建的简易版抖音后端

使用grpc+gin+gorm+oss+jwt等中间件搭建的简易抖音版后端。

2023-09-10

flaskpython web学习资料

使用flask搭建的一个web网站,包含论坛的前台后台页面,其中包含vue3的前端页面。一步步的帮助使用者搭建flask网站。

2023-09-10

使用python爬虫对天气信息进行爬取

使用python爬虫对天气信息进行爬取

2023-09-07

空空如也

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

TA关注的人

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