自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【微服务治理】Opentelemetry、 Jaeger、Prometheus、grafana 关系?各自作用?最佳实践?

工具核心功能数据维度部署角色数据采集标准化与协议转换客户端/中间件Jaeger分布式追踪分析与可视化Traces服务端Prometheus指标采集、存储与告警Metrics服务端(含拉取器)Grafana多数据源可视化与联动分析All展示层这四个工具协作形成了云原生时代的可观测性「黄金组合」,共同解决系统的性能监控、故障诊断、资源优化三大核心问题。

2025-04-11 11:37:32 445

原创 【go每日一题】golang异常、错误 {源码、实践、总结}

Go 的错误处理设计与其他语言的异常不同。Go 中的 error 就是一个普通的值对象,而其他语言如 Java 中的 Exception 将会造成程序控制流的终止和其他行为,Exception 与普通的值不同。虽然 Go 也有类似的异常机制 —— panic,但它仅用于报告完全无法预料的错误(可能有 Bug),而不应该是一个健壮程序应该返回的程序错误(这一点与 Java 等语言不同)。在我们最常用的函数返回值类型就是这个接口类型Go 将 error 设计为一个接口,只需要实现 Error() stri

2025-01-02 16:22:28 904 2

原创 【go每日一题】 责任链模式的实现

当请求从链条的首端出发时,会沿着链的路径依次传递给每一个结点的对象,直到有对象处理这个请求为止。责任链模式:Chain of Responsibility Patten。就是说每个结点会处理一件事情,如果结点间。,每个结点处理请求均不同,且内部自动。

2024-12-28 12:48:05 405

原创 【golang】map遍历注意事项

循环结构,能够正确处理连续元素的查找和计数,避免了原代码中。当 you 尝试使用。上述代码通过修正后的。循环使用不当的问题。

2024-12-25 13:02:35 583

原创 【go每日一题】:并发任务调度器

调度器的目的是控制同时执行的任务数量(即并发度),以防止任务数过多导致系统资源过载。需要实现一个并发的任务调度器,能够处理多个并发任务并限制同时执行的任务数量。每个任务是一个函数,任务执行可能需要一段时间。

2024-12-22 12:46:14 415

原创 【go每日一题】 实现生产者消费者模式

可以看到,10s的时间内,每个任务耗时1-3s下,一共消费了46个任务,相比于顺序消费(3-10)个任务效率高了很多。golang使用并发编程,实现一个生产者消费者模式,消费的任务耗时1-3秒,希望最终10秒内能够消费尽可能多的任务。

2024-12-18 11:31:10 326

原创 【go每日一题】 channel实现mutex锁

实际上应该提供Lock方法(阻塞等待),TryLock(如果被占有就返回False)参考golang实现mutex的源码(内部实际上通过信号量实现)使用select模拟tryLock()

2024-12-14 14:47:35 500

原创 【golang】匿名内部协程,值传递与参数传递

下面代码的区别是直接调用循环变量,这里使用的就是这个变量的引用,而不是将参数的副本传递给协程执行。

2024-12-11 10:53:44 549

原创 【golang】 WaitGroup使用注意事项

首先,waitGroup的直接使用,是可以不进行初始化的, 默认0值即可用,下面这几种方式都可以直接使用。调用Add方法来增加计数器的值。如果在goroutine已经启动之后再调用Add,可能会导致。总的来说:推荐使用指针,在New结构体的时候指定底层的同一个WaitGroup,,因为计数器没有正确反映正在运行的goroutine的数量。具体看源码,解释为‘0’值是有效的,确实可以直接使用。Add方法调用时机:必须在goroutine。但是如果使用了指针,不进行初始化,就会。但是一定要进行初始化!

2024-12-10 11:45:26 1065

原创 golang 协程泄漏、协程退出时机、main函数

问题:如果在一个父goroutine中生成了子goroutine,请问如果父goroutine先执行完毕,那么子协程会自动退出吗?好处很简单,就是在代码层面我们可以实现很多功能,例如上面的代码,既然协程开了就不会随着父协程关闭,那就要注意开启的时候,,并且保证了全局唯一。

2024-12-07 23:01:33 584

原创 【go每日一题】结合channel 实现工作池

当没有更多的任务需要处理时,worker goroutine 将会保持空闲状态,等待新的任务到来。的关闭,并等待woker处理完毕当前的任务(waitGroup)使用go语言实现的一个工作池,工作池中的工作带有超时控制,task是具体的工作,可以是一个函数类型。工作池是一种常用的并发设计模式,

2024-12-06 11:30:59 441

原创 【go每日一题】 无缓冲chan作为锁,多协程顺序打印数字

其实这样的题目没什么实际意义,如果要多协程竞争锁打印数字,还要顺序,那还不如一个协程把所有事情处理完毕,多协程一般用来做并行操作。如果将题目变为:多协程,顺序打印1-20,每个协程需要轮流打印呢?多协程顺序打印 1-20数字。

2024-12-04 11:53:46 332

原创 【go每日一题】 并发编程

在 TestConcur 中,select 中的每个分支直接赋值给 res.ResultText、res.ResultImage 和 res.ResultVideo,这样会导致一旦有一个结果返回,其他通道可能会被阻塞。应该考虑提前判断超时逻辑,避免在业务处理逻辑中阻塞。由于 select 中的 ctx.Done() 通道已经处理了超时信号,可以直接返回并结束函数,不需要再创建额外的错误信息。context 的取消机制已经处理得很好,但为了提高代码可读性和灵活性,可以把超时设置提取为常量,而不是直接硬编码。

2024-12-03 11:53:17 581

原创 【go每日一题】:golang并发 mutex、context

num 结构体的复制问题:num 结构体包含了 sync.Mutex 和 sync.WaitGroup,这两个类型是不安全被复制的,因为 Mutex 和 WaitGroup 是带有状态的对象。将 num 类型传递给 goroutine 时,会复制 num 实例你应该使用指针传递 num,而不是传递结构体的副本。WaitGroup 的并发修改问题:在并发场景中,WaitGroup 的 Add() 和 Done() 操作需要在同一个 goroutine 内进行管理。

2024-12-03 11:30:52 441

原创 go每日一题:mock打桩、defer、recovery、panic的调用顺序

下面是对一个io文件的mock示例,文件为外部依赖,存在不稳定性质,因此使用mock。

2024-11-29 16:10:13 606

原创 golang每日一题:context、goroutine相关

24/11/28。

2024-11-28 15:36:24 419

原创 【go 每日一题】append 底层操作细节

【go 每日一题】append 底层操作细节。

2024-11-28 14:24:33 384

原创 Go 命名规范、git提交规范

参考自大佬:https://github.com/Andrew-M-C/code-style-guide/blob/master/file_system/file_system.md本文为自己的学习记录。

2024-11-13 04:16:23 511

原创 golang项目三层依赖架构设计模式,自底向上;依赖注入trpc\grpc

问题又来了:proto中定义的service服务主体,GetAccountByUsername()方法是生成的接口需要实现的方法,但之前repo层实现的方法是QueryAccountByUsername()方法,想要将Repo结构体注册给服务,一定需要实现接口的方法,这下没实现,怎么办?答:这正是service层的作用,实际上,我们必须实现proto中定义的接口,因此也很简单:在service层中搞一个结构体:userImpl,实现接口中的方法GetAccountByUsername即可!

2024-11-13 03:56:15 856

原创 golang 常用的占位符 %w, %v, %s

在 Go 语言中,提供了一些常用的占位符,用于格式化不同类型的输出。

2024-11-13 03:16:35 766

原创 load config fail: open ./trpc_go.yaml: no such file |trpc-go goland run/debug configurations 添加自定义命令

直接启动goland,比如会出现:panic: load config fail: open ./trpc_go.yaml: no such file or directory这样的错误,原因是没有指定配置文件conf的位置。

2024-11-04 11:54:55 268

原创 tRPC/gRPC代码生成后import github相关报红

问题如下解决步骤设置环境代理检查go.mod文件中module是否正确修改正确:问题解决!

2024-10-31 11:13:02 275

原创 Spring框架底层细节

refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器(这是spring的核心容器),容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法,我们把它们称为 refresh 的 12 个步骤:(refresh中调用了12个方法)onRefresh。

2024-01-03 15:37:17 1078

原创 快速搭建一个SpringCloud、SpringBoot项目 || 项目搭建要点

执行所有“预”过滤器逻辑。在上面的示例中,com.example.config.SwaggerConfig 是配置类的全限定名,通过将它添加到 spring.factories 文件中,Spring Boot 在启动时会自动加载和执行这个配置类,从而实现对 Swagger 的自动配置和集成。创建 Swagger 配置类:创建一个配置类,用于配置 Swagger 相关的信息,例如扫描的包路径、API 文档信息、文档页面的访问路径等。这种方式能够明确地控制配置类的加载过程,并且适用于一些特定的场景和需求。

2023-11-27 20:41:01 480

原创 Kafka-go各部分详细分析、案例

Produce其中又调用了ProduceMessage方法,方法具体内容如下,就是将通过producer将要发送的消息序列化后发送出去。kafka消费消息的代码之前在initMQ的时候就已经开启一个goroutine开始消费,只要有消息对应上topic就可以消费。,其中writer肯定需要绑定Topic,而reader肯定需要Topic和GroupId,去消费这些消息。Topic、GroupId都很简单,赋一个string的字符串就好了,kafka.Writer,consumer实际上就是。

2023-10-08 18:03:57 1143

原创 Golang网络编程:即时通讯系统Instance Messaging System

由于之前开启了一个协程,定期的检查server的channel有没有东西,有东西就发给map表中每个在线的用户,当然,由于。另外,读取到的字节数n与缓冲区的长度不一定相等,这是因为网络中的数据可能会分块传输,需要多次读取才能获取完整的数据。时(通过指定缓冲区大小来初始化通道),当通道中已有缓冲的数据时,即使没有接收操作,发送操作也可以继续进行。函数签名中,net.Conn表示net.Conn类型的对象,b是用于存储读取数据的缓冲区(一个字节数组),函数的返回值为读取到的字节数和可能出现的错误。

2023-10-07 00:00:34 714 1

原创 opentelemetry、grafana、Prometheus、jaeger、victoria-metrics 介绍、关系与使用

OTEL 是 OpenTelemetry 的简称, 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务。OpenTelemetry 是一组标准和工具的集合,旨在管理观测类数据,如 Traces、Metrics、Logs 等 (未来可能有新的观测类数据类型出现)。目前已经是业内的标准。

2023-09-27 16:12:25 3167

原创 golang云原生项目☞redis配置

配置redis适用与golang云原生架构。包括redis与数据库一致性等重要内容。

2023-08-21 16:08:06 843

原创 golang 分布式微服务DAO层构建

构建云原生项目的dao层配置读写分离的mysql集群。

2023-08-20 12:45:21 806

原创 golang云原生项目之:etcd服务注册与发现

EtcdResolver: etcd resolver是一种DNS解析器,用于将域名转换为etcd集群中的具体地址,以便应用程序可以与etcd集群进行通信。通过使用etcd resolver,应用程序可以更方便地与etcd集群交互。endpoints 用于指定集群的地址列表.例如:etcd1.example.com:2379, etcd2.example.com:2379。应用程序将通过这些地址与etcd集群的各个节点进行通信,以读取和更新数据。上面有实现的案例,直接cv。直接看例子就能大致明白。

2023-08-19 16:30:50 1668

原创 Redis 缓存穿透、互斥锁、缓存空值 项目实例

在这个方案中,他确实可以使用对应路径的拦截,同时刷新登录token令牌的存活时间,但是现在这个拦截器他只是拦截需要被拦截的路径,假设当前用户访问了一些不需要拦截的路径,那么这个拦截器就不会生效,所以此时令牌刷新的动作实际上就不会执行,所以这个方案他是存在问题的解决状态实际开发中,系统也需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪;这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存技术;缓存(Cache),就是数据交换的缓冲区。

2023-07-20 16:12:07 414

原创 Netty 聊天室项目案例

网络编程netty构建聊天室

2023-06-25 21:00:17 956

原创 java八股文-并发篇

分别是五种状态的说法来自于操作系统层面的划分。

2023-06-11 16:33:01 1134

原创 springboot项目:瑞吉外卖 前后端 代码、思路 详细分析 part6

part1part2part3part4part5part6(本页)

2023-05-22 22:07:50 1393

原创 springboot项目:瑞吉外卖 前后端 代码、思路 详细分析 part5

part1part2part3part4part5 本页。

2023-05-06 21:20:09 2012

原创 springboot项目:瑞吉外卖 前后端详细分析 part4

part 1part 2part 3part 4 本页。

2023-04-20 17:53:43 895

原创 java面试八股文_虚拟机篇(jvm)

java面试八股文jvm

2023-04-06 10:43:28 363

原创 springboot项目:瑞吉外卖 前后端详细分析 part3

part 1第二部分链接part 2part 34.1 文件上传(后端为什么要返回文件名给前端、yml中自定义路径值并在类中取出、文件如何转存到指定位置、用UUID防止文件名称重复造成文件覆盖)4.2 文件下载4.3 新增菜品 (设计多表操作,事务保证一致性,DTO的使用,自己编写controller,值得学习)4.4 菜品信息分页查询 (多表联合操作、Dto进一步使用)4.5 修改菜品上传文件后,404错误,因为controller没写。同时也注意拦截器的配置,当时配置的是只拦截cont

2023-04-04 22:39:50 438

原创 springboot项目:瑞吉外卖 前后端详细分析 part2

类似的,菜品 这个分类名称 字段也加了唯一性约束,如果重复添加,会自动跳转到全局异常处理器,然后会有弹窗提示,这个复习之前,有详细分析。注意总结,既然前端也是以json的格式发送数据给后端,那后端参数接收那里就需要加@RequestBody注解。前后端对来个进行了复用,通过表中的一个字段type,来区分是菜品分类还是套餐分类。新使用了一张category表,字段如下(注意公共字段的处理策略和前面一样)整体和之前的员工管理非常像。3.1 公共字段自动填充。3.3 分类信息分页查询。

2023-03-26 11:20:04 813

原创 springboot: 配置消息转换器后,拦截器无效,出现No mapping for GET xxx

【代码】springboot: 配置消息转换器后,拦截器无效,出现No mapping for GET xxx。

2023-03-20 23:02:40 1607 1

Mybatis讲义laodu

Mybatis讲义laodu

2022-11-13

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

TA关注的人

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