- 博客(46)
- 收藏
- 关注
原创 go相比与java的优势
Go语言相比Java具有多项优势:语法简洁减少冗余代码,开发效率更高;原生轻量级并发模型(goroutine和channel)支持百万级并发,资源占用远低于Java线程;编译速度更快,依赖管理简单;内存管理采用高效的三色标记法,GC停顿时间短;特别适合云原生和微服务场景,轻量高效的特点使其成为容器化环境的首选。这些优势使Go在并发性能、资源利用和开发效率等方面优于Java。
2025-08-21 16:27:18
371
原创 Go 语言 里 `var`、`make`、`new`、`:=` 的区别
本文梳理了Go语言中var、:=、new和make四种变量声明方式的区别: var用于变量声明,可带初始值,默认给零值,适用于全局或局部变量。 :=是短变量声明,必须同时赋值,仅限函数内部使用,适合局部变量。 new分配内存返回指针,仅初始化零值,适用于需要指针的场景。 make专用于创建slice、map和channel,返回初始化后的引用类型。 关键区别:var和:=声明值类型,new返回指针,make初始化引用类型。
2025-08-12 09:37:23
433
原创 Cookie和Session是什么?有什么区别?
Cookie:适用于存储少量的、非敏感的信息,比如用户的偏好设置、跟踪用户的行为等。它是存储在客户端的,因此安全性较低,容易被篡改。Session:适用于存储敏感信息,像用户的登录状态、购物车内容等,数据存储在服务器上,因此更加安全。客户端只保存一个 Session ID,服务器负责存储和管理会话数据。通常,Session和Cookie会协同工作,Cookie 存储 Session ID,而 Session 存储用户的会话数据。
2025-08-07 19:12:22
836
原创 DNS查询过程?CDN是什么,有什么作用?
DNS和CDN是互联网内容分发的两项关键技术。两者共同优化了互联网访问体验,DNS解决地址解析问题,CDN解决内容快速分发问题。
2025-08-07 19:08:05
532
原创 TCP如何实现可靠传输?实现细节?
TCP通过自身的序列号、确认应答、数据效验、超时重传、流量控制、拥塞避免,确保了数据传输的可靠性和效率。拥塞控制可以在网络出现拥塞时,动态的调整数据传输的速率,防止网络过载。流量控制就是让发送方的发送速率不要太快,让接收方来得及接收数据。就可以实现流量控制,主要是动态调整发送方和接收方之间的数据传输速率。
2025-08-05 20:49:51
437
原创 Go 语言结合 Redis 实现固定窗口、滑动窗口、令牌桶和漏桶限流算法的示例代码
算法实现复杂度限流精度突发流量处理适用场景固定窗口算法简单低差流量平稳、精度要求低的场景滑动窗口算法较复杂高一般流量波动大、精度要求高的场景令牌桶算法较复杂高好可容忍突发流量、需平滑限流的场景漏桶算法较复杂高差对流量稳定性要求极高的场景。
2025-02-21 10:39:38
715
原创 rpc和http的区别,为啥golang使用grpc 不使用http?
明确的接口定义:gRPC 使用 Protocol Buffers 的.proto文件来定义服务接口和消息结构,这种方式提供了明确的接口规范,使得服务的提供者和调用者之间的交互更加清晰和可维护。类型安全:在编译时,gRPC 会根据.proto文件生成对应的 Go 代码,保证了类型的安全性,减少了因类型不匹配而导致的错误。
2025-02-21 10:14:08
906
原创 redis的缓存击穿,雪崩,穿透
缓存击穿:热点数据失效导致大量请求打到数据库。缓存雪崩:大量缓存数据同时失效导致数据库压力骤增。缓存穿透:查询不存在的数据导致请求直接打到数据库。
2025-02-20 13:45:59
459
原创 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
353
原创 数据库索引
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修 改时,索引本身也会被修改。因为索引需要额外的存储空间和处理。数据列不允许重复,允许为 NULL 值,一个表允许多个列创建唯一索引。1. 基于一个范围的检索,一般查询返回结果集小于表中记录数的 30%:索引是数据库中用于加速数据检索的一种数据结构,类似于书籍的目录。数据列不允许重复,不允许为 NULL,一个表只能有一个主键。基本的索引类型,没有唯一性的限制,允许为 NULL 值。2. 基于非唯一性索引的检索。
2025-02-18 16:18:25
432
原创 golang channel底层实现?
closed uint32 // channel 是否关闭。qcount uint // 当前队列中的元素数量。buf unsafe.Pointer // 指向环形队列的指针。dataqsiz uint // 环形队列的大小。elemsize uint16 // 元素大小。sendx uint // 发送索引。recvx uint // 接收索引。
2025-02-18 15:38:35
514
原创 Golang中 var make new
可分配任意类型的数据,根据传入的类型申请一块内存,返回指向这块内存的指针,即类型 *Type。返回引用,即 Type,new 分配的空间被清零, make 分配空间后,会进行初始。仅用来分配及初始化类型为 slice、map、chan 的数据.函数返回的是slice、map、chan类型本身。返回一个指向该类型内存地址的指针。的变量时,系统会默认为他。
2025-02-09 10:40:18
358
原创 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
318
原创 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
350
原创 Docker安装Centos
其余两个文件一样.把每一个BaseOS AppStream Extras 换成对应的就行。然后就可以重新下载你要的工具,比如vim naon等。#清除缓存,重新加载缓存。
2024-12-08 19:30:23
770
原创 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
883
原创 关于Nginx的代理和负载均衡的方式
反向代理:对于客户是无感的,客户端不需要配置.我们把请求发送给代理服务器,代理服务器去选择目标客户端,再返回给客户端.用户不知道真实服务器地址,隐藏了真实的服务器地址.也就是在服务器中配置代理服务器.解决方法:我们采用ip_hash的指令解决这个问题,如果用户已经访问了某个服务器.再次访问时,我们请求通过哈希算法,自动定位到该服务器.如果某用户已经登陆,再次访问时,因为负载均衡,可能访问其他的代理服务器,那么登录信息会缺失,需要重新登录.这样会严重影响体验。一.轮询法.如同时间片轮询一样。
2024-12-02 10:38:36
227
原创 Goroutine的切换时机
方法时,如果锁已经被其他 goroutine 持有,当前 goroutine 将会阻塞,也就会被切换到其他的协程执行,直到锁被释放。当该gorutine在进行I/O操作时(网络请求,文件读取等),就会阻塞当前协程,GO会调用其他协程,并且将该协程标记为阻塞状态.是一个用于处理多个通道(channels)操作的关键字,它用于选择多个通道中的一个进行操作。当多个通道都准备好时,2.io,通道(channel)的发送和接收被阻塞。是用来实现互斥锁的标准库类型,它提供了。6.程序调用(系统自行调用或者显示调用)
2024-12-01 20:12:59
297
原创 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
388
原创 go 触发GC的条件
可能会是在某些业务方法执行完后,因其占用了过多的内存,需要人为释放。又或是 debug 程序所需。在GO的源码中,src/runtime/mgc.go 明确标识了GC触发的三种情景。通过手动调用runtime.GC来触发.想要查看更加详细的话,请参考。
2024-11-28 09:42:49
703
原创 GO 垃圾回收
4.碎片化:在垃圾回收中,如果频繁进行对象移动和重新分配内存,会导致内存碎片化,降低内存的利用。3.协程(goroutine)的栈中变量. 每一个协程都有自己的独立栈空间。缺点: 需要程序暂停,标记需要扫描整个heap,清理会造成heap碎片。是指能够从全局可达的地方访问到的对象.3.如果出现过于频繁的垃圾回收,那么将会十分耗时.2.暂停程序(STM),所有的处理器会进入安全点。1.暂停业务,找到可达对象,和不可达对象。1.垃圾回收时,程序必须暂停.2.内存开销,用来标记状态。3.唤醒后台,清扫协程。
2024-11-26 19:57:24
248
原创 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
369
原创 npm install 下载出现问题,一直下载不成功
这是我ubuntu现在使用的,https://registry.npm.taobao.org,存在问题.这会忽略冲突并继续安装依赖。
2024-11-24 10:02:53
552
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1