- 博客(134)
- 问答 (2)
- 收藏
- 关注
原创 Init、break、continue等语法的使用
init函数:每个包中可以包涵任意多个init函数,这些函数会在程序执行开始的时候被调用,init函数会在main函数、设置包、初始化变量或者其它要在程序运行前优先完成的引导工作。程序编译时,优先执行导入包里的所有init函数,再执行本包内的init函数。for循环:go的for循环中不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化变量。init初始赋值表达式只执行一遍,循环控制条件、post(给控制变量增量或者减量)每循环一次,都要执行一次。...
2021-06-09 16:31:48
626
原创 Go 语言深度剖析:指针、unsafe.Pointer 与 uintptr 底层原理、区别与实战避坑
在 Go 语言日常开发中,绝大多数场景我们几乎不会直接触碰unsafe包、uintptr这类底层能力,Go 本身也主打内存安全、语法简洁、自动 GC、杜绝野指针。普通类型指针*Tuintptr本文就从本质定义、相互转换、底层规则、实战场景、致命坑点全方位讲透三者,彻底打通 Go 内存底层逻辑。*T普通 Go 指针,就是我们日常写的*int*string*[]byte这类带类型的指针。本质:持有一个变量的内存地址,并且携带完整的类型信息能力可以直接解引用读写指向的值可以同类型指针互相赋值。
2026-04-30 00:35:57
405
6
原创 温柔解锁自我:疗愈“过度替别人着想”的内耗困局
摘要: 你是否习惯性心软,难以拒绝他人?过度替别人着想往往源于自我价值感缺失和边界模糊,形成"讨好型"行为模式。这种行为并非软弱,而是长期心理塑造的结果:原生家庭的"懂事教育"压抑自我需求,成长中的"偏爱缺失"让人通过讨好换取认可,过强的共情力混淆了同情与责任。疗愈的关键在于建立边界——善良不等于牺牲自我,体谅他人也需维护自身权益。通过理性陈述需求、练习小事拒绝、分离他人课题、接纳不完美的自己,逐步摆脱内耗。真正的温柔是既有共情他人的能力,也有守护
2026-04-22 23:48:09
344
原创 Go语言切片,&取切片变量内存地址,那切片指向底层数组的内存地址能知道吗
Go语言切片底层数组地址解析摘要 本文揭示了Go语言切片获取底层数组内存地址的核心方法:1)通过切片首元素地址&a[0]获取;2)使用unsafe包直接访问切片内部指针。关键发现:当切片b赋值自a时,两者共享底层数组(&a[0]==&b[0]返回true),而copy创建的新切片c则拥有独立存储空间。文中通过内存地址对比实验证明,修改共享底层数组的切片会影响所有关联切片,而copy操作产生的切片互不影响。切片内部结构包含指向底层数组的指针、长度和容量三个字段,这是理解切片共享机制的关
2026-04-19 07:00:00
41
原创 Go关于切边变量本身地址和内部指向地址
a 和 &b 不同,因为它们是两个不同的变量d == &a,因为 d 就是被赋值为 &a 的a 和 b 共享底层数组,是因为它们的内部指针字段相同,而不是因为它们本身的地址相同这就是为什么Go的切片是引用语义:赋值时复制的是切片头(包含指针、长度、容量),但指针指向的是同一块底层数据。
2026-04-18 00:05:27
79
原创 好久没写Go了,熟悉下int变量的常用定义方式
本文详解Go语言五种变量定义方式:1)new函数创建指针并赋值;2)短变量声明自动类型推断;3)var声明零值初始化后赋值;4)var声明直接初始化;5)指针变量声明及取地址操作。重点对比了指针与非指针变量的使用差异,指出new分配的指针初始化为零值,需解引用访问;短变量声明最简洁但仅限函数内;var声明可显式指定类型。建议优先使用短变量声明,指针操作推荐&取址而非new函数。各种方式适用于不同场景,需根据内存管理和类型需求灵活选择。
2026-04-17 00:20:55
170
原创 RabbitMQ 生产运维命令大全
本文汇总了RabbitMQ集群运维的核心命令与最佳实践。主要内容包括:基础服务启停命令、用户权限管理、集群节点操作、高可用镜像队列策略配置(推荐ha-all或ha-two模式)、队列消息管理等运维操作。重点介绍了集群故障处理流程(节点恢复/剔除/队列同步)和关键配置(Erlang Cookie一致性要求)。生产环境建议采用3节点集群,配合镜像队列策略和负载均衡,确保消息持久化和消费者ACK机制,实现高可用架构。全文提供了从基础运维到故障处理的完整解决方案,是RabbitMQ集群管理的实用指南。
2026-04-11 03:15:00
73
原创 RabbitMQ 高可用集群配置,
本文介绍RabbitMQ 3.8+高可用集群的部署方案,采用3节点普通集群+镜像队列模式。架构包含rmq1、rmq2、rmq3三个磁盘节点,所有队列全镜像同步,确保单节点故障不影响业务。部署步骤包括:配置hosts、安装相同版本RabbitMQ、同步cookie、组建集群、设置镜像策略(ha-mode:all)。通过HAProxy实现4层负载均衡,SpringBoot连接LB VIP即可实现高可用访问。该方案保证:节点互为镜像、单点故障无中断、消息不丢失、队列高可用、自动负载均衡,是经过验证的稳定企业级方案
2026-04-10 07:15:00
173
原创 RabbitMQ / RocketMQ / Kafka /ZeroMQ 对比
本文对比了四种主流消息中间件:RabbitMQ、RocketMQ、Kafka和ZeroMQ的核心特点。RabbitMQ功能最全适合企业级应用,RocketMQ适合高并发场景,Kafka专长大数据吞吐,ZeroMQ则是无中心的高性能通信库。通过对比表展示了它们在性能、可靠性、功能等方面的差异:RabbitMQ功能丰富但吞吐一般,RocketMQ平衡性能与功能,Kafka吞吐量最高但功能简单,ZeroMQ无需部署但可靠性较低。最后给出了选型建议:微服务选RabbitMQ,高并发选RocketMQ,大数据选Kaf
2026-04-09 07:00:00
268
原创 Java rabbitMQ如何发送、消费消息、全套可靠方案
SpringBoot整合RabbitMQ企业级开发指南 本文详细介绍了RabbitMQ在SpringBoot中的企业级应用方案。主要内容包括: 基础配置 依赖引入spring-boot-starter-amqp 配置连接参数及生产者确认机制 消费者手动ACK模式和预取计数设置 核心架构 业务队列与死信队列绑定 延迟队列实现方案 消息持久化配置 可靠性保障 生产者Confirm/Return机制 消费者幂等处理 异常重试策略(3次失败转死信) 死信队列监控处理 完整实现方案 包含队列声明、交换机绑定等配置类
2026-04-09 01:12:18
457
原创 mq是什么,常用mq的使用场景有哪些?
消息队列(MQ)是一种异步通信中间件,主要解决系统间的异步处理、解耦、流量削峰和最终一致性问题。其核心功能包括:异步提速、系统解耦、应对高并发和分布式事务处理。主流MQ产品各有特点:RabbitMQ稳定可靠,RocketMQ适合高并发场景,Kafka擅长日志处理。典型应用场景包括异步通知、订单处理、延迟任务、秒杀系统等。MQ通过消息中转机制,有效提升了系统性能、可靠性和扩展性,是构建现代分布式系统的重要组件。
2026-04-08 23:03:16
241
原创 k8s中service和ingress的区别和使用
摘要: Kubernetes中Service与Ingress的核心区别在于:Service是四层(TCP/UDP)服务,提供内部负载均衡和Pod访问入口,适用于集群内通信或非HTTP服务暴露(如MySQL);Ingress是七层(HTTP/HTTPS)网关,支持域名/路径路由、SSL终结及多服务复用公网入口,适合生产环境Web服务。Service类型包括ClusterIP(内部)、NodePort(测试)、LoadBalancer(云单服务)和Headless(StatefulSet)。Ingress需配合
2026-04-08 01:08:34
237
原创 Java 三套最常用、企业级、可直接上线的 AOP 全套代码
① 注解② AOP@Slf4j@Aspect@Componentlog.info("方法:{}", method.getName());log.info("入参:{}", JSON.toJSONString(joinPoint.getArgs()));log.info("出参:{}", JSON.toJSONString(result));log.info("耗时:{}ms", System.currentTimeMillis() - start);③ 使用。
2026-03-30 08:15:00
27
原创 最清晰、最实用的Java + Spring 双版本的单例 / 多例模式
本文介绍了Java和Spring中单例与多例模式的使用方法。在原生Java中,可以通过饿汉式或懒汉式实现单例,而多例则直接通过公共构造方法创建。Spring默认使用单例模式,通过@Scope注解可控制作用域,其中"singleton"为单例,"prototype"为多例。关键区别在于对象地址是否相同:单例返回相同对象,多例每次创建新对象。单例适用于无状态、线程安全的类(如Service、工具类),多例适用于有状态或线程不安全的类。特别提醒:单例注入多例会导致多例失效,
2026-03-29 07:15:00
300
原创 Java 中如何将一个类被 Spring 管理(成为 Bean)
Spring注册Bean的三种方式:1)常用注解方式(@Component/@Service等),需确保类被扫描到;2)配置类方式(@Configuration+@Bean),强制注册任何类;3)高级编程方式(实现ImportBeanDefinitionRegistrar接口),实现框架级强制注入。验证方法:通过ApplicationContext的containsBean()检查Bean是否存在。其中注解方式最简便,@Bean方式最可靠,编程方式最灵活,适合不同场景需求。
2026-03-27 06:00:00
37
原创 Java监听rabbitmq消息报错:Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
摘要:SpringBoot项目在拆分为Dubbo微服务后,RabbitMQ消息监听报错,提示无法将JSON对象反序列化为String。原因为Dubbo自动配置将消息转换器从SimpleMessageConverter替换为Jackson2JsonMessageConverter。解决方案是恢复使用SimpleMessageConverter,通过配置自定义容器工厂或直接声明SimpleMessageConverter Bean,使消息体直接转为字符串,保持与原有逻辑一致。
2026-03-26 23:35:33
174
原创 想给孩子说的话(1):警惕成长路上的陷阱
遇到 “快速致富” 的投资项目,像虚拟货币、不知名的传销盘,大多是庞氏骗局,用后来人的钱给前面的人 “分红”,最终只会血本无归,千万别被高收益冲昏头脑。现在的网络贷款广告到处都是,说 “日息低”“秒到账”,但实际利息高得吓人,一旦还不上,利滚利很快就会欠一大笔钱,还会被催收骚扰,影响正常生活。签任何合同前,一定要仔细看每一条款,特别是关于钱、责任和违约的部分,不明白的地方别不好意思问,必要时可以找懂法律的人帮忙看看,别稀里糊涂就签字,很多纠纷都是从 “没看清合同” 开始的。再者,网络世界的风险不能忽视。
2026-03-26 22:11:01
197
转载 Java自定义注解完全指南
注解是Java 5引入的特性,本质是一种特殊的接口(继承自),用于在代码中嵌入元数据。其核心价值在于“解耦”——将非业务逻辑(如日志、权限、校验、配置)与业务代码分离,由专门的处理器解析注解并执行对应逻辑,大幅提升代码的可维护性和灵活性。自定义注解的核心是“元注解 + 注解属性”:元注解用于定义注解的自身行为(如生效范围、生命周期),注解属性用于存储自定义配置信息。元注解作用常用取值@Target指定注解可作用的Java元素范围。
2026-03-26 00:04:22
23
原创 前端web页面请求后端服务时,接口出现50s初始连接超时
摘要:前端请求后端接口频繁出现50秒超时问题,经排查发现是Nginx配置不当导致。主要问题包括:未配置proxy_connect_timeout(默认50秒)和proxy_send_timeout参数,且未设置Connection:close导致长连接复用异常。当后端服务重启或网络波动时,会产生死连接阻塞请求。解决方案是优化Nginx配置,添加合理的超时参数和连接关闭设置,修改后问题得到解决。
2026-03-25 22:29:53
145
原创 使用腾讯企业邮箱免费版时:如何用Python脚本自动批量删除收件箱邮件
本文介绍了使用Python和Selenium自动化批量删除QQ企业邮箱邮件的方法。具体步骤包括:1)安装Python环境并配置pip镜像源;2)安装Selenium库并下载对应浏览器驱动;3)编写自动化脚本实现登录邮箱、进入收件箱、循环删除邮件等功能;4)通过模拟浏览器操作实现全选和批量删除。该方法解决了企业邮箱邮件数量多、手动删除效率低的问题,通过Python自动化显著提高了工作效率。文中提供了完整的代码示例和详细的配置说明,包括代理设置、驱动下载等注意事项。
2025-11-14 15:42:22
778
原创 Mysql-使用-ON DUPLICATE KEY UPDATE-做更新时的更新规则
摘要:本文介绍了ONDUPLICATEKEYUPDATE语法在MySQL中的使用规则。该语法会根据主键或唯一键判断执行插入或更新操作。在digitalmall.tb_message_receive_config表中,当主键message_config_id冲突时优先触发更新;若无主键冲突但user_id和message_title_id组合违反唯一键约束时,也会执行更新操作。最终结论是主键冲突优先于唯一键冲突触发更新。
2025-11-14 14:36:37
217
原创 什么是raft协议
Raft协议是一种分布式系统中用于实现一致性(Consensus) 的算法,目的是让多个节点在分布式环境下,对某个数据或操作达成一致的结果,比如分布式数据库中的数据同步、分布式存储中的日志复制等场景都可能用到。2. 日志复制:领导者接收客户端请求后,会将操作记录为日志并同步给所有跟随者,只有当多数跟随者确认收到日志后,领导者才会提交该操作,确保所有节点最终执行相同的操作。相比其他一致性算法(如Paxos),Raft的设计更注重可理解性,通过清晰的角色划分和流程步骤,让开发者更容易理解和实现。
2025-08-21 19:57:12
315
原创 Go Modules 的基本使用
在 Go Modules 项目中,首次运行时下载依赖包的正确流程需要根据项目情况区分处理。后续开发中,每次添加或移除依赖后都应运行该命令,确保依赖与代码一致。将这两个文件加入版本控制,确保团队成员和 CI 环境使用相同的依赖版本。会自动分析代码中的导入语句,添加缺失的依赖,移除未使用的依赖,并更新。,它会自动分析代码并下载所需的依赖,同时保持。创建离线依赖副本(适用于无法联网的环境)。显示项目的依赖关系(直接依赖和间接依赖)。中记录的哈希值一致,防止篡改。中声明的所有依赖到本地缓存(检查下载的依赖是否与。
2025-05-09 21:26:25
1299
原创 Go语言中 源文件开头的 // +build 注释的用法
//+build注释用于Go语言中的条件编译,允许根据不同的构建标签(如操作系统、架构或自定义条件)编译特定文件。注释必须位于文件开头,与包声明之间需有空行,格式为//+build后跟空格和标签。标签逻辑中,同一行标签为“与”关系,不同行标签为“或”关系,可使用!表示取反。常见应用包括针对不同操作系统或架构的代码,以及自定义构建标签(如debug或prod)。编译时可通过-tags参数启用特定标签。优先级顺序为“与”>“或”>“非”。构建标签大小写敏感,仅适用于.go文件。Go 1.17及以上版
2025-05-09 21:19:43
825
转载 ERROR: ld.so: object ‘/usr/local/lib/libsystemd.so/usr/lib/libsystemd-shared-165.so‘ from /etc/ld.so
文章摘要:当系统出现“ERROR: ld.so: object cannot be preloaded: ignored”错误时,通常意味着系统可能感染了病毒。解决此问题的步骤包括清空/etc/ld.so.preload文件、设置文件不可更改属性、删除可疑的定时任务文件、移除恶意共享库文件以及终止相关进程。具体操作包括使用chattr命令锁定关键文件,删除/var/spool/cron/和/etc/cron.d/目录中的文件,移除/usr/local/lib/和/var/tmp/目录中的可疑文件,并终止kw
2025-05-09 09:37:29
335
原创 如何理解k8s中的controller
Controller(控制器)是核心组件之一,其负责维护集群状态并确保集群内的实际状态与期望状态一致的一类组件
2025-05-07 07:45:00
1165
原创 K8s 资源分类
用于将外部流量路由到集群内部的 Service,通常用于暴露 HTTP/HTTPS 服务,可以配置域名、路径等规则来实现更灵活的路由。:用于定义 Pod 之间的网络访问策略,通过规则来限制哪些 Pod 可以访问哪些其他 Pod 或网络端点,提供了网络层面的安全控制。:定义了一组 Pod 的逻辑集合以及访问它们的策略,用于实现 Pod 之间的网络通信和负载均衡。(PV):是集群中一段可供 Pod 使用的存储资源,生命周期独立于使用它的 Pod。:用于执行一次性的任务,任务完成后 Pod 会被删除。
2025-05-06 13:33:25
576
原创 当一个 HTTP 请求发往 Kubernetes(K8s)部署的微服务时,整个过程流转时怎样的?
客户端(可以是浏览器、移动应用或者其他服务)发起一个 HTTP 请求到目标微服务的地址。这个地址可以是服务的域名、IP 地址或者 Kubernetes 服务的 ClusterIP、NodePort 等。
2025-04-11 00:44:45
1289
原创 Go语言中的interface
Go 语言中的 interface 是一种抽象类型,它定义了一组方法签名,但不包含方法的实现。任何类型只要实现了 interface 中定义的所有方法,就被认为实现了该 interface。1、接口底层接口是引用类型。接口底层包含两个指针,一个指向具体类型信息另一个指向具体的值(或者是指向值的指针)。当你把一个实现了接口的值赋值给接口变量时,实际上是在复制这两个指针,而不是复制底层的值。空接口是一种特殊的接口类型,它不包含任何方法签名。
2025-03-28 06:30:00
506
原创 Redis数据持久化机制 + Go语言读写Redis各种类型值
持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。
2025-03-27 06:30:00
1970
原创 k8s 基础知识:Service + 负载均衡(下)
例如,若有一个 ClusterIP 服务关联了 3 个 Pod(Pod A、Pod B、Pod C),第一个请求会被导向 Pod A,第二个请求会被导向 Pod B,第三个请求会被导向 Pod C,之后的请求再按照这个顺序循环分配。将服务映射到一个外部的 DNS 名称,而不是一个集群内部的 IP 地址,主要用于访问集群外部的服务。LoadBalancer:用于向外部暴露服务,通常会创建一个外部负载均衡器,将流量分发到后端的 Pod 上,适用于需要对外提供服务的场景。提供一个统一的访问入口。
2025-03-26 02:07:48
1183
原创 K8S基础知识:DaemonSet、Deployment、StatefulSet、ReplicaSet的用法区别
DaemonSet 的主要目的是确保在集群中的每个节点(或满足特定条件的节点)上都运行一个且仅运行一个 Pod 副本。当节点从集群中移除时,对应的 Pod 也会被自动删除。StatefulSet 用于管理有状态应用的 Pod,它为每个 Pod 提供了稳定的网络标识和持久存储。StatefulSet 中的 Pod 有固定的名称和顺序,并且在删除和重新创建时会保留其状态。的多个 Pod 副本,它提供了声明式的方式来创建、更新和删除 Pod。即在不中断服务的情况下逐步替换旧版本的 Pod 为新版本。
2025-03-26 01:35:10
1652
原创 k8s基础知识总结node+pod(上)
k8s(Kubernetes )是一个开源的容器编排平台,用于容器化应用程序的部署、扩展和管理。使运维人员能够轻松地管理容器化应用的整个生命周期,包括容器的调度、资源分配、服务发现、负载均衡、自动伸缩以及故障恢复等功能。
2025-03-24 07:00:00
1195
原创 Go语言中的切片、数组有什么区别?
数组作为参数传递时是值传递,会复制整个数组;切片作为参数传递时是引用传递,只复制切片的头信息。:数组的长度是固定的,在定义时需要指定长度;而切片是动态的,不需要指定长度。:数组是值类型,在栈上分配内存;切片是引用类型,在堆上分配内存。
2025-03-23 22:56:27
261
原创 Go的并发模型?其和线程区别?
1、Go的并发模型Go的并发模型,通过 goroutine 和 channel 来实现并发:goroutine:协程,是 Go 语言轻量级的线程,由 Go 运行时管理,其栈内存可以动态伸缩,初始时仅需 2KB,创建和销毁的开销极小。:用于在 goroutine 之间进行通信和同步,保证数据的安全传递。Goroutine:由Go语言的运行时系统创建和销毁,创建开销小,可以在Go应用程序中创建大量的Goroutine而不会显著影响性能。线程。
2025-03-22 07:45:00
348
原创 浅谈Go垃圾回收机制-面试笔记
全局变量在程序运行期间通常不会被回收,因为它们在整个程序的生命周期内都处于可达状态。代表已被垃圾回收器访问过,但它引用的其他对象尚未全部被访问完的对象。表示已被垃圾回收器访问过,并且其引用的所有对象也都已被访问过的对象。的所有对象,将那些仍然是白色的对象回收,释放它们占用的内存空间。表示尚未被垃圾回收器访问过的对象。初始时,所有对象默认都是白色。
2025-03-21 07:00:00
913
【工业自动化】西门子S7-1500PLC与KEPServerEx 6.x仿真连接:安装配置及数据交互实现详解
2025-04-18
为啥我go get老是失败,git clone 就能成功
2021-08-27
我的个人电脑上好多 microsoft visual c++ 版本,可以卸载旧版本吗?
2021-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅