自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解 gRPC 服务定义:从基础到高级

service服务定义的意义在 gRPC 中,一个service定义了一组相关的远程过程调用(RPC)方法。通过定义服务,你可以明确地指出哪些操作是可用的,以及这些操作应该如何被调用。在这个例子中,Greeter服务包含了一个名为GetStream的 RPC 方法。该方法接受一个类型的消息作为请求,并返回一系列类型的消息(因为使用了stream关键字)。明确的输入输出在.proto文件中,每一个rpc方法都必须明确其输入和输出的数据类型。输入参数类型。

2025-06-18 21:04:46 573

原创 深入学习 gRPC 流式通信:四种模式详解与实战代码解析

gRPC 基于 HTTP/2 协议,支持全双工通信,允许客户端和服务端之间建立持续的数据流。实时数据推送(如股票行情)批量数据传输(如文件上传)双向实时交互(如聊天机器人)proto1";// 服务端流模式:客户端发送一次请求,服务端持续返回数据// 客户端流模式:客户端持续发送数据,服务端最终返回结果// 双向流模式:双方均可随时发送数据// 请求数据// 响应数据接口定义:通过.proto文件定义服务和消息结构,这是 gRPC 的核心设计起点。流式声明stream。

2025-06-18 16:35:51 600

原创 SQL关键字三分钟入门:UNION 与 UNION ALL —— 数据合并全攻略

UNION:用于合并两个或多个SELECT语句的结果集,并自动去除重复行。UNION ALL:也用于合并两个或多个SELECT语句的结果集,但它不会去除重复行。你可以把它们理解为:“将不同的查询结果合并成一个大集合”。场景SQL 示例合并两表数据(去重)合并两表数据(含重复)多列合并结合筛选条件。

2025-06-18 14:13:41 190

原创 SQL关键字三分钟入门:EXISTS —— 子查询高效之道

场景SQL 示例查找有未支付订单的客户确认产品是否被购买过查找无未支付订单的客户。

2025-06-18 14:13:11 280

原创 学习 Protobuf:序列化、反序列化及与 JSON 的对比

在构建高性能的分布式系统时,数据的序列化和反序列化是一个关键环节。是由 Google 开发的一种语言中立、平台中立、可扩展的序列化结构数据的方式, 它是一种高效的二进制序列化格式,适用于通信协议、数据存储等场合。它允许你定义结构化的数据,并生成多种语言的代码来读写这些数据。.proto通过这篇博客,我们了解了如何使用 Protobuf 进行数据的序列化和反序列化,并与传统的 JSON 格式进行了比较。同时也了解到 Protobuf 是一种强大且灵活的数据序列化工具,特别适用于需要高效数据传输的场景。

2025-06-17 21:21:25 526

原创 Windows下grpc开发环境搭建

注意这里想要使用需要找到对应的exe文件,一般是在bin目录下(GOPATH环境),想要在命令行中操作,需要将该bin目录添加到环境变量中。下载完成后直接解压到本地,找到里面的bin目录:C:\Users\Lu\GoProgram\protoc\bin。1.从官网下载protoc文件,下载对应操作系统的win版本即可。protoc-gen-go --version 检查版本。2.在命令提示符中安装 protoc-gen-go 程序。这是下载最新版本,也可以指定版本下载。添加到系统环境变量即可。

2025-06-17 16:37:14 73

原创 跨语言RPC:使用Java客户端调用Go服务端的HTTP-RPC服务

RPC(Remote Procedure Call,远程过程调用)允许程序像调用本地方法一样调用位于网络另一端的服务。虽然传统的RPC机制通常依赖于特定的传输协议和序列化格式,但HTTP-RPC利用了广泛支持的HTTP协议和JSON格式,使得跨语言、跨平台的通信变得简单而直接。角色功能服务端(Go)接收 HTTP 请求,解析 JSON 输入,执行本地方法,返回 JSON 输出客户端(Java)构造 JSON 请求,发送 HTTP POST 请求,读取并解析返回的 JSON 响应关键点。

2025-06-17 15:30:00 735

原创 跨语言RPC:使用Java客户端调用Go服务端的JSON-RPC服务

在之前的文章中,我们已经了解了如何使用Go语言构建一个基本的RPC服务。然而,默认情况下,Go语言的net/rpc包使用的是一种名为Gob的序列化格式,这限制了它只能与支持Gob编码的语言进行交互。为了实现跨语言的RPC调用,我们可以采用更通用的数据交换格式——如JSON。Go语言的包就提供了这样的功能,允许我们在不修改服务逻辑的情况下,轻松地与其他语言进行交互。通过这篇文章,我们学习了如何使用Go语言构建一个JSON-RPC服务端,并使用Java作为客户端进行跨语言调用。

2025-06-17 11:26:55 696

原创 探索RPC通信的多样性:从Gob到HTTP-RPC与JSON-RPC

跨语言支持JSON-RPC:通过使用JSON作为数据交换格式,JSON-RPC可以在不同编程语言编写的服务之间进行通信。由于几乎所有现代编程语言都支持JSON的解析和生成,这使得它成为实现跨语言RPC的理想选择。HTTP-RPC:利用HTTP协议作为传输层,可以更容易地在不同语言和技术栈之间进行集成,因为几乎所有的编程语言都有良好的HTTP库支持。跨平台兼容性无论是JSON-RPC还是HTTP-RPC,都可以跨越操作系统、硬件架构等差异进行通信。

2025-06-16 23:41:22 841

原创 理解基本的RPC实现:从概念到实践

虽然这里展示的例子并非传统意义上的RPC框架,但它展示了RPC背后的基本原理:通过网络传输数据,调用远端的服务,并处理返回结果。对于更复杂的场景,可以考虑使用成熟的RPC框架如gRPC,它们提供了更多高级特性,比如负载均衡、健康检查等,同时支持多种语言。希望这篇博客可以帮助你更好地理解RPC的基础知识及其应用。

2025-06-16 18:07:04 230

原创 SQL关键字三分钟入门:DISTINCT —— 去重就这么简单

DISTINCT是 SQL 中用于去重的关键字。它作用于SELECT查询中,确保返回的结果集中某列或组合列的值是唯一的。你可以把它理解为:“相同的值只显示一次”。操作类型SQL示例说明单字段去重返回不重复的用户ID多字段去重返回不重复的用户+商品组合去除重复行整行完全一致的记录只保留一条与 GROUP BY 对比等效去重功能但更适合做统计汇总。

2025-06-16 17:41:40 415

原创 SQL关键字三分钟入门:JOIN 联表查询不再难

JOIN类型是否保留左表全部是否保留右表全部匹配方式INNER JOIN❌❌仅返回匹配项LEFT JOIN✅❌左表全保留RIGHT JOIN❌✅右表全保留FULL JOIN✅✅两边都保留。

2025-06-16 17:41:20 368

原创 Go语言开发规范指南:代码风格、命名与注释标准(持续更新)

本篇文章持续整理了Go语言开发中的常见规范,包括命名、注释、代码风格等核心要点。这些规范虽然不是语法强制要求,但在实际项目中至关重要,尤其对于团队协作和长期维护来说,有着不可替代的作用。后续将持续更新更多关于Go工程化实践、测试规范、性能优化等内容,欢迎关注订阅!

2025-06-15 22:10:51 869

原创 虚拟机配置node.js(前端环境搭建)

修改npm镜像为阿里云的。

2025-06-15 20:49:30 157

原创 虚拟机配置mysql (虚拟机搭建数据库)

由于 mysql 的安全策略,现在还不能使用 root/123456 来访问数据库。(当宿主机的 3306 端口已经主机上的 MySQL 服务占用了。-- 刷新权限使其立即生效 FLUSH PRIVILEGES;之后就可以使用电脑上的可视化工具连接mysql了。运行容器(使用 3307 端口),就会再次出现端口冲突的问题。-- 创建用户(如果不存在)-- 创建用户(如果不存在)-- 创建用户(如果不存在)-- 刷新权限使其立即生效。验证容器是否成功运行。

2025-06-15 18:28:37 389

原创 SQL关键字三分钟入门:HAVING —— 分组后的条件过滤

HAVING是 SQL 中用于对GROUP BY分组后的结果进行条件过滤的关键字。你可以把它理解为:“只留下满足我条件的数据组”。WHERE是在分组前过滤原始数据;而HAVING是在分组后对聚合结果进行过滤。场景使用方式分组后筛选总金额大于 X分组后筛选订单数量分组后筛选平均值分组后筛选最大/最小值分组后筛选特定聚合结果。

2025-06-15 15:23:07 231

原创 十一、Go高并发编程的核心要点与最佳实践

核心要素关键技术应用场景Goroutinego关键字启动协程任务分发、事件处理、I/O密集型操作Channel无缓冲/有缓冲Channel、关闭Channel数据同步、任务传递、结果汇总同步机制Mutex、RWMutex、原子操作保护共享资源、避免竞态条件上下文管理控制Goroutine生命周期、聚合错误性能优化Worker Pool、限流、异步处理资源控制、防止过载、提升吞吐量Go语言的高并发编程能力源于其轻量级协程和通道机制的设计哲学。

2025-06-15 15:22:43 557

原创 主机ip地址变化,主机ping不通虚拟机,远程主机也不能连接虚拟机——解决方案

例如我的虚拟机ip地址是192.168.110.111 ,就把这些ip地址的开头也修改为192.168.110,后面部分保持默认。在设置中找到VMnet8网络,编辑更多适配器选项,找到ipv4选项,点击查看,如果ip地址和前面配置的一样,就修改成功了。想要解决就需要在VMware中的虚拟网络编辑器中修改子网ip,子网掩码,网关等信息。每过一段时间,IP地址可能会发生变化,就会倒是连接虚拟机出现问题。到了这里就配置成功了,基本就可以正常连接。

2025-06-15 00:23:57 295

原创 SQL关键字三分钟入门:GROUP BY 分组统计

GROUP BY的作用是将查询结果按照一个或多个字段进行“分组”,然后对每个组内的数据进行聚合操作(如求和、计数、平均值等)。你可以把它理解为:“把相同类型的数据归类在一起,再做统计”。功能示例语句分组求和分组计数多字段分组分组后筛选常见聚合函数SUM()COUNT()AVG()MAX()MIN()

2025-06-14 22:29:05 292

原创 八、深入解析Go语言的GMP调度模型:实现高效并发的秘密武器

Go的GMP调度模型通过Goroutine的轻量级设计、Processor的资源管理以及Machine的动态调度,实现了高效、灵活的并发处理能力。减少锁竞争:通过本地队列和工作窃取机制降低锁开销。充分利用CPU:动态调整线程数,避免资源浪费。高并发支持:支持百万级并发,适合高吞吐量场景。理解GMP模型有助于编写高性能的Go程序,尤其是在处理I/O密集型任务或大规模并发时,合理利用调度策略和资源分配是关键。

2025-06-14 22:28:28 786

原创 SQL关键字三分钟入门:CASE —— 实现条件逻辑

CASE是 SQL 中用于实现条件逻辑的关键字。它可以根据指定的条件返回不同的值,非常适合用来进行数据分类、转换等操作。你可以把它理解为:“如果满足这个条件,则返回某个值;否则返回另一个值”。case when的正确语法是: case when ... then ... when ... then ... else ... end,case和end不能缺少。场景SQL 示例根据具体值划分等级CASE score WHEN 90 THEN '优秀' ... END根据条件范围划分等级。

2025-06-14 10:41:18 297

原创 十、Go并发编程详解:从入门到实战

Goroutine是Go语言中的一种轻量级线程,由Go运行时环境管理和调度。与传统的操作系统线程相比,Goroutine的创建和切换开销极小,因此可以在一个程序中轻松创建成千上万个Goroutine。Channel是Go语言中用于Goroutine间通信的管道。它允许一个Goroutine向另一个Goroutine发送数据,从而实现数据的同步和共享。锁是一种同步机制,用于保护共享资源不被多个Goroutine同时访问,从而避免数据竞争和不一致的问题。select语句用于从多个Channel中选择一个已就绪。

2025-06-13 23:07:21 594

原创 SQL关键字三分钟入门:ORDER BY 排序数据就这么简单

ORDER BY是 SQL 中用于对查询结果进行排序的关键字。它可以根据一个或多个字段的值,将结果集按照指定的顺序输出。你可以把它理解为:“把查询结果按我想要的顺序排好”。ORDER BY必须放在WHERE之后。如果没有指定排序方式,默认是升序(ASC支持对多个字段排序,字段之间用逗号分隔。在大数据量表中,排序操作可能会影响性能,建议配合索引使用。排序方式SQL语句写法效果说明单字段升序年龄从小到大单字段降序年龄从大到小多字段排序先按性别降序,再按年龄升序结合筛选排序。

2025-06-13 13:56:47 183

原创 SQL关键字三分钟入门:WHERE 是如何筛选数据的?

WHERE是 SQL 中用于过滤查询结果的关键字。它允许我们根据某些条件来选择性地获取数据。你可以把它理解为:“只返回满足我条件的数据”。功能使用方式精确筛选WHERE name = '张三'数值比较多条件筛选WHERE gender = '女' AND age > 20模糊匹配WHERE name LIKE '张%'判断空值。

2025-06-13 13:53:33 237

原创 SQL关键字三分钟入门:SELECT 是什么?

SELECT是 SQL 中最基础、最常用的关键字之一,它的作用是从一个或多个表中检索数据。你可以把它理解为:“告诉我,我想要看到哪些数据”。关键词含义SELECT查询数据FROM指定数据来源的表所有列AS给列起别名通过这篇小文,你应该已经了解了SELECT的基本用法。它是 SQL 查询的起点,也是构建复杂查询的基础。

2025-06-13 13:48:17 224

原创 九、Go并发编程必知:闭包引用的正确使用姿势

Go语言中的闭包是指函数捕获并记住其创建时作用域的变量。闭包可直接引用外部变量(共享引用)或通过参数传递(值拷贝)。

2025-06-12 18:18:04 216

原创 使用 kubeadm 在 CentOS 上搭建 Kubernetes 集群(k8s)操作步骤

本文介绍了使用kubeadm搭建Kubernetes集群的步骤。

2025-06-06 23:42:14 244

原创 Docker 安装、加速配置指南:超详细步骤+常见错误修复

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。

2025-06-05 23:20:52 527

原创 关于 CompletableFuture 等异步编程的典型问题解决方案

在 Java 中,异步编程是一种处理耗时操作而不阻塞主线程的方式,比如网络请求、数据库查询等。是 Java 8 引入的一个强大的类,用于简化异步编程模型,并且提供了对组合多个异步任务的支持。下面我简单讲解一下它的用法。

2025-06-04 23:55:23 768

原创 七、为什么用指针也能调用值接收者方法?一文讲清 Go 的自动转换机制

在 Go 中,方法是依附于类型(如结构体)的函数。func (接收者 接收者类型) 方法名(参数列表) 返回值 {// 方法体这里的p就是接收者,可以是值类型(Person)或指针类型(*Person无论你是用值还是指针调用方法,Go 都会自动帮你处理接收者类型是否匹配的问题。// 值接收者方法// 指针接收者方法p1 := Person{Name: "Alice"} // 值类型p2 := &Person{Name: "Bob"} // 指针类型。

2025-06-04 18:52:52 303

原创 六、一文搞懂 Go 方法中的值接收者和指针接收者

Go语言方法接收者类型选择指南:指针接收者允许修改原始对象状态,适用于大型结构体以提升性能;值接收者操作副本不改变原对象,适合小型结构体或不需要修改的场景。Go会自动进行指针解引用和取地址转换,使调用更灵活。

2025-06-04 18:35:27 385

原创 五、Go 中空白标识符(_)的使用详解

摘要:Go语言中的“_”;是一个特殊占位符,用于忽略不需要的变量或返回值。常见使用场景包括:遍历切片/Map时忽略索引或键值、忽略函数的部分返回值等。它能让代码更简洁清晰,同时避免编译器因未使用变量而报错。使用时需注意“_”;不是实际变量,仅作为占位符存在。

2025-06-03 21:18:36 166

原创 四、使用泛型类型OR直接使用字面量 创建实例方式对比

泛型方式适合抽象、复用和封装;字面量方式适合快速、简单的使用。

2025-06-01 20:57:14 191

原创 三、使用recover( ) 恢复程序 处理异常

结合 defer + recover 实现“类似 try-catch”条件判断 { // 执行代码 }Go 没有像 Java、Python 那样的。

2025-06-01 16:34:26 212

原创 二、Fprintf Println Printf 用法及区别

io.Writeros.Stdoutio.Writerfprintffmt.Fprintf(file, "输出格式:%s", "World") // 将内容写入到文件。

2025-06-01 15:52:31 360 1

DynamicArray02.java

DynamicArray02.java

2024-04-24

空空如也

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

TA关注的人

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