- 博客(33)
- 收藏
- 关注
原创 golang的var ,make ,new, := 的区别
关键字 / 操作符适用类型功能返回值使用场景var所有类型声明变量并初始化为零值变量本身需要显式声明变量类型,或在函数外部声明变量时使用new值类型为值类型分配内存并初始化为零值指向该类型零值的指针需要获取值类型的指针时使用make引用类型(slicemapchannel为引用类型分配内存并进行初始化引用类型本身创建并初始化切片、映射或通道时使用:=所有类型声明并初始化变量,自动推断类型变量本身在函数内部快速声明并初始化变量时使用。
2025-02-21 11:24:32
423
原创 Go 语言结合 Redis 实现固定窗口、滑动窗口、令牌桶和漏桶限流算法的示例代码
算法实现复杂度限流精度突发流量处理适用场景固定窗口算法简单低差流量平稳、精度要求低的场景滑动窗口算法较复杂高一般流量波动大、精度要求高的场景令牌桶算法较复杂高好可容忍突发流量、需平滑限流的场景漏桶算法较复杂高差对流量稳定性要求极高的场景。
2025-02-21 10:39:38
552
原创 rpc和http的区别,为啥golang使用grpc 不使用http?
明确的接口定义:gRPC 使用 Protocol Buffers 的.proto文件来定义服务接口和消息结构,这种方式提供了明确的接口规范,使得服务的提供者和调用者之间的交互更加清晰和可维护。类型安全:在编译时,gRPC 会根据.proto文件生成对应的 Go 代码,保证了类型的安全性,减少了因类型不匹配而导致的错误。
2025-02-21 10:14:08
688
原创 redis的缓存击穿,雪崩,穿透
缓存击穿:热点数据失效导致大量请求打到数据库。缓存雪崩:大量缓存数据同时失效导致数据库压力骤增。缓存穿透:查询不存在的数据导致请求直接打到数据库。
2025-02-20 13:45:59
400
原创 TCP和Http协议
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,http:应用层协议。
2025-02-18 21:54:19
284
原创 数据库索引
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修 改时,索引本身也会被修改。因为索引需要额外的存储空间和处理。数据列不允许重复,允许为 NULL 值,一个表允许多个列创建唯一索引。1. 基于一个范围的检索,一般查询返回结果集小于表中记录数的 30%:索引是数据库中用于加速数据检索的一种数据结构,类似于书籍的目录。数据列不允许重复,不允许为 NULL,一个表只能有一个主键。基本的索引类型,没有唯一性的限制,允许为 NULL 值。2. 基于非唯一性索引的检索。
2025-02-18 16:18:25
390
原创 golang channel底层实现?
closed uint32 // channel 是否关闭。qcount uint // 当前队列中的元素数量。buf unsafe.Pointer // 指向环形队列的指针。dataqsiz uint // 环形队列的大小。elemsize uint16 // 元素大小。sendx uint // 发送索引。recvx uint // 接收索引。
2025-02-18 15:38:35
467
原创 Golang中 var make new
可分配任意类型的数据,根据传入的类型申请一块内存,返回指向这块内存的指针,即类型 *Type。返回引用,即 Type,new 分配的空间被清零, make 分配空间后,会进行初始。仅用来分配及初始化类型为 slice、map、chan 的数据.函数返回的是slice、map、chan类型本身。返回一个指向该类型内存地址的指针。的变量时,系统会默认为他。
2025-02-09 10:40:18
307
原创 ubuntu 启动springBoot项目报错 An incompatible version 1.1.33 of the APR based Apache Tomcat Native library
官网: http://archive.apache.org/dist/tomcat/tomcat-connectors/native/ 下载过来。进入/tomcat-native-1.3.1-src/native目录;解压到tomcat/bin目录。
2025-01-03 15:44:18
184
原创 docker的tomcat不能直接运行出现404错误
docker commit -m="修复了打开使用404的原因,把webapps.dist文件全部移到webapps里面" -a="我们tomcat镜像" 8fe08dbf4ea7 new_tomcat:1.0。我们映射的是webapps文件夹,他们内容存放在webapps.dist文件夹里面,你可以进入容器查看。webapps文件夹为空,把webapps.dist文件夹全部移到webapps里面来。我们不能直接删除webapps文件夹,因为我们已经对外面文件夹形成了映射。
2024-12-16 13:53:17
238
原创 Docker安装Centos
其余两个文件一样.把每一个BaseOS AppStream Extras 换成对应的就行。然后就可以重新下载你要的工具,比如vim naon等。#清除缓存,重新加载缓存。
2024-12-08 19:30:23
645
原创 Goroutine的调度原理以及调度策略
G的生命周期:创建,保存,被获取,调度和执行,阻塞,销毁. 具体步骤如下步骤1:创建G,关键字go func( )创建G步骤2∶保存G,创建的G优先保存到本地队列P,如果P满了,则会平衡部分P到全局队列中保存G的详细流程如下:执行go func的时候,主线程M0会调用newproc()生成一个G结构体,这里会先选定当前M0上的P结构每个协程G都会被尝试先放到P中的runnext,若runnext 为空则放到runnext中,生产结束。
2024-12-03 15:03:57
804
原创 关于Nginx的代理和负载均衡的方式
反向代理:对于客户是无感的,客户端不需要配置.我们把请求发送给代理服务器,代理服务器去选择目标客户端,再返回给客户端.用户不知道真实服务器地址,隐藏了真实的服务器地址.也就是在服务器中配置代理服务器.解决方法:我们采用ip_hash的指令解决这个问题,如果用户已经访问了某个服务器.再次访问时,我们请求通过哈希算法,自动定位到该服务器.如果某用户已经登陆,再次访问时,因为负载均衡,可能访问其他的代理服务器,那么登录信息会缺失,需要重新登录.这样会严重影响体验。一.轮询法.如同时间片轮询一样。
2024-12-02 10:38:36
185
原创 Goroutine的切换时机
方法时,如果锁已经被其他 goroutine 持有,当前 goroutine 将会阻塞,也就会被切换到其他的协程执行,直到锁被释放。当该gorutine在进行I/O操作时(网络请求,文件读取等),就会阻塞当前协程,GO会调用其他协程,并且将该协程标记为阻塞状态.是一个用于处理多个通道(channels)操作的关键字,它用于选择多个通道中的一个进行操作。当多个通道都准备好时,2.io,通道(channel)的发送和接收被阻塞。是用来实现互斥锁的标准库类型,它提供了。6.程序调用(系统自行调用或者显示调用)
2024-12-01 20:12:59
241
原创 GO的GMP模型和CSP模型
Goroutine是协作式的,一个协程只有让出CPU才能让下一个协程执行,而Goroutine执行超过10ms就会强制让出CPU,防止其他协程饿死。在程序中,线程 M 想要运行任务 G ,就需要 获取P, 从P的本地队列获取 G ,P:process,包含了GO代码所需要的必要资源,用来调度G和M之间的关联关系.G: goroutine , 指go的协程.每一个go关键字都会去创建一个协程.M运行G,G执行之后,M再次获取G,不断循环下去.如图。M:machine,工作线程.数量对应CPU的数量。
2024-11-29 20:13:40
323
原创 go 触发GC的条件
可能会是在某些业务方法执行完后,因其占用了过多的内存,需要人为释放。又或是 debug 程序所需。在GO的源码中,src/runtime/mgc.go 明确标识了GC触发的三种情景。通过手动调用runtime.GC来触发.想要查看更加详细的话,请参考。
2024-11-28 09:42:49
587
原创 GO 垃圾回收
4.碎片化:在垃圾回收中,如果频繁进行对象移动和重新分配内存,会导致内存碎片化,降低内存的利用。3.协程(goroutine)的栈中变量. 每一个协程都有自己的独立栈空间。缺点: 需要程序暂停,标记需要扫描整个heap,清理会造成heap碎片。是指能够从全局可达的地方访问到的对象.3.如果出现过于频繁的垃圾回收,那么将会十分耗时.2.暂停程序(STM),所有的处理器会进入安全点。1.暂停业务,找到可达对象,和不可达对象。1.垃圾回收时,程序必须暂停.2.内存开销,用来标记状态。3.唤醒后台,清扫协程。
2024-11-26 19:57:24
195
原创 dockerfile 构建项目
CMD /usr/local/apache-tomcat-9.0.41/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.41/bin/logs/catalina.out (CMD 镜像运行的时候这条命令就会运行 )ADD jdk-8u281-linux-x64.tar.gz /usr/local/ ( 使用ADD添加压缩包,自动解. /usr/local/是解压到的目录 )ENV:设置的环境变量。
2024-11-25 16:54:32
337
原创 npm install 下载出现问题,一直下载不成功
这是我ubuntu现在使用的,https://registry.npm.taobao.org,存在问题.这会忽略冲突并继续安装依赖。
2024-11-24 10:02:53
435
原创 *string类型 关于值和指针的使用
0xc000010230 // user 是一个指针,存储了解析后的值的地址。0xc000006030 // &user 获取 user 本身的地址。admin // *user 解引用,访问解析后的值。
2024-11-23 11:28:14
193
原创 go 验证字段 断言 以及反射的使用
在 Go 中,(Assertion)通常指的是(Type Assertion),用于在运行时判断一个接口类型的值是否具有某种特定的类型TvaluevalueTokoktruefalse。
2024-11-21 19:27:00
456
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人