自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringCloudAlibaba 2023.0.1、SpringBoot 3.2.5 - 项目完整搭建(Nacos、OpenFeign、Gateway、Sentinel)

c)点击 “创建配置”,然后就可以把 kt-gateway 微服务中的 application.yml 文件中的所有内容都放在 nacos 上进行统一管理,随后点击发布.这里需要配置路由规则,分别将将请求通过负载均衡引入到 kt-user 和 kt-product。b)接着分别给 kt-user 和 kt-product 引入 kt-feign 模块,如下。kt-product 微服务拿到 kt-user 微服务的数据,远程调用引入成功.a)在 feign 模块的 pom.xml 中引入如下依赖。

2024-05-12 22:35:04 686 2

原创 架构师成长之路 - 项目经验大总结(业务 + 技术)

将这些年来做过的所有项目做一个 业务 + 技术 的总结(面对 xxx 问题,如何解决,怎么解决......)

2024-04-07 23:47:50 340

原创 点赞功能真的有必要上 Redis 吗?(Mongo、MySQL、Redis、MQ 实测性能对比)

除了单表操作比较耗时外,对于中小型项目而言,频繁的读写操作场景,使用 mongo 就够用了. 甚至都不用上 mq,更甚至有的场景下 redis 性能还不如 mongo...

2024-03-10 20:00:34 1263 1

原创 架构师成长之路 - 结合领域设计项目架构总结(持续更新,暂不公开)

每个人项目架构设计风格千姿百态,导致项目难以维护、可读性低... 于是将自己接触过的大型企业级项目经验总结一下,最终目的是为了提高我的团队协作效率,降低维护成本。

2024-01-24 15:00:56 303

原创 SpringCloudAlibaba 2021.0.1 - Java/Kotlin 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)

a)先创建一个空项目,名字自定义.b)在刚刚的空项目下创建整个项目的父模块c)父工程下的 src 可以删了,没用d)最后直接用 IDEA 打开空项目下的父工程(否则 Java 文件不生效)

2023-11-05 00:13:41 2981 2

原创 Linux - 整理工作中常用的 Linux 命令(目录、文件、系统、进程、网络)持续更新~

整理了一下工作中常用的 Linux 命令(目录、文件、系统、进程、网络)

2024-05-16 17:51:16 981

原创 微服务项目 - SpringBoot 2.x 升级到 SpringBoot 3.2.5,保姆级避坑

a)先说结论:收益没有特别直观的感受,并且迁移成本比较高,坑很多(有时候一个坑能卡上几个小时,别问我是怎么过来的),如果是新项目,可以试试~b)改造的项目是一个 AI 图片社区,基于 JDK17、SpringBoot 2.6.3、SpringCloud 2021.0.1 的微服务项目,主要使用到的中间件有 MySQL、MongoDB、Redis、RabbitMQ、ElasticSearch、Nacos... 就是说,五脏俱全,该有的坑都有了...

2024-05-11 22:38:12 373 2

原创 SpringBoot 3.2.5 + ElasticSearch 8.12.0 - SpringData 开发指南

因此,一般会将需要进行模糊查询的字段存 Document 中(es 就擅长这个),而其他数据则可以在 Document 中以 id 的形式进行存储. 这样就既可以借助 es 高效的模糊查询能力,也能减少为保证一致性而带来的系统开销. 从 es 中查到数据后,再通过其他表的 id 从数据库中拿数据即可(这点开销,相对于从大量数据的数据库中进行 like 查询,几乎可以忽略).a)CriteriaQuery:允许创建查询来搜索数据,而不需要了解 Elasticsearch 查询的语法或基础知识。

2024-05-11 17:04:07 832 1

原创 RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo

本篇文章来自于笔者之前写过的一个系列 —— “根据源码,模拟实现 RabbitMQ” 系列,不妨可以去看看~

2024-05-08 09:52:36 962

原创 SpringData JPA - ORM 框架下,打造高效数据访问层

全英文名叫 Java Persistence API,就是 java 持久化 api ,是SUN公司推出的一套基于 ORM 的规范。ORM(Object Relational Mapping)表示对象关系映射. 简单来讲,通过 ORM,就可以把对象映射到关系型数据库中(为了不用 JDBC 那套方法来操作数据库).

2024-05-03 17:35:14 1226

原创 设计模式 - 命令模式,就该这样学!

命令模式是一种行为型设计模式,主要就是将每种请求或对象封装为一个独立的对象,从而可以集中管理这些请求或操作,比如 多个操作打包成一个执行、请求队列化执行、对操作进行日志记录、撤销.......命令模式通过将请求的 发送者(客户端) 和 接收者(请求的执行者) 进行解耦,提高了更大的维护性和灵活性.例如,电视机和遥控器,我们就相当于客户端,通过 遥控器(命令调用者)上的按钮(具体命令),来操控电视(请求执行者)。

2024-04-24 23:47:35 435

原创 DDD 领域驱动设计 - Domain Primitive(Kotlin 落地实现)

让隐性的概念显性化、让隐性的上下文显性化、封装多对象行为......

2024-04-15 22:05:24 903

原创 PicGo + Gitee + VsCode - 搭建私人图床

本人是一个重度 vimer,并且喜欢客制化一些东西… Typora 固然好用,但不支持 vim…发现 vscode 中既可以使用 vim,也可以 md,用起来比较舒服.因此这里就搭建一个图床供 vscode 写博客使用.

2024-04-07 17:41:03 665

原创 注解式 WebSocket - 构建 群聊、单聊 系统

很久之前,咱们聊过 WebSocket 编程式的写法,但是有些过于繁琐,这次来看看更接近现代的注解式,构建 群聊、单聊 有多么便利.

2024-04-06 16:12:43 563 1

原创 SpringBoot 2.6.3 + ElasticSearch7.12.1 - SpringData 开发指南

这个东西就跟 JPA 的使用方式一样,只不过高版本的 SpringData Elasticsearch 没有给 ElasticsearchRepository 接口提供复杂搜索查询,建议还是使用 ElasticsearchTemplate。

2024-04-02 16:22:13 1190 1

原创 Kotlin,简直是 Java 的 Pro Max!(笔记4 协程篇)

协程就是一个轻量单线程通过快速切换来执行不同的任务,从而实现了非阻塞的并发执行 —— 我的总结

2024-03-21 17:46:03 1049

原创 Kotlin,简直是 Java 的 Pro Max!(笔记3 进阶篇)

a)拓展函数就是动态的给类添加方法.Java 中是不支持对系统的类进行拓展,而 Kotlin 支持.例如,统计一个 List 中,元素大于 0 的元素个数. 如果使用 Java,我们可能会创建一个 ListUtils 然后在里面编写这样一个方法.b)Kotlin 就可以拓展函数实现:创建一个 List.kt,职责就是对 List 进行拓展(创建新文件可使得拓展函数拥有全局访问域,不定义新文件也是可以的,但是郭霖大佬是建议定义新文件).

2024-03-20 23:27:04 706

原创 Kotlin,简直是 Java 的 Pro Max!(笔记2)

Kotlin 如下对应 Java 如下:@NotNullreturn aaa;可以看到,这里的 aaa 也是通过静态代码块初始化的.如果 Java 想要调用该类中的静态变量 aaa,需要通过 public 的 instance 实例才能调用到,如果在 Java 中想直接调用,可以通过 const 来解决.@NotNullstatic {可以看出,通过 const 直接将 aaa 修饰成 public.和上面的 object 定义几乎没区别.

2024-03-20 11:39:20 1034

原创 Kotlin,简直是 Java 的 Pro Max!(笔记1)

Java 虚拟机只认识 class 文件,并且不会关心 class 是 java 文件编译来的还是其他文件编译来的. 那么此时我们自己创造一个语法规则,再做一个编译器,就可以让我们的语言跑在虚拟机上.Kotlin 正是如此,运行前会先编译成 class,再供 Java 虚拟机运行.

2024-03-19 23:57:48 1168

原创 Gradle v8.5 笔记 - 从入门到进阶(基于 Kotlin DSL)

gradle:Gradle自动生成的项目缓存目录。.idea:这个是IDEA的项目配置目录,跟Gradle生成的没关系,无视掉就行。app:存放整个项目的源代码、测试等,这里面就是我们写代码的地方了(使用 gradle 命的方式创建会出现此模块,如果使用 IDEA 创建,则不会出该现模块)。build.gradle.kts:项目的gradle构建脚本。src:存放源代码和测试代码。main:编写所有项目核心代码。test:编写项目测试代码。

2024-03-19 22:06:28 1540

原创 spring-boot-starter-validation - 实际开发常见使用归纳

第二,嵌套参数,例如 UserInfo 类中的成员变量有一个 Avatar 对象,并且 Avatar 的成员变量也被 javax.validation.constraints 提供的注解标记,此时就需要在 Avatar 对象上标注 @Valid 注解,否则 Avatar 对象中的注解不生效.a)@Validated 一般用于在 Api 类上标注,那么在 Api 类下的方法参数中,使用 javax.validation.constraints 提供的注解生效.父依赖即为 spring boot。

2024-02-28 23:50:10 548

原创 MyBatisPlus - 润物无声、效率至上、丰富功能

自定义的 Mapper 类继承 MyBatisPlus 提供的 BaseMapper 接口:例如对 User 类操作.可以看到 BaseMapper 接口中提供了很多方法,都可以直接调用~MyBatisPlus 更适合于构建复杂的 where 的条件(避免使用一些 动态 sql 显得臃肿),对于例如 update 中出现例如 "set age = age + 10" 这样的语句就只能使用硬编码.而 MyBatisPlus 是包含 MyBatis 的,因此可以通过。

2024-02-15 11:56:40 1002

原创 Vue3 - 从 vue2 到 vue3 过渡,这一套就够了(案例 + 效果演示)(二)

f)特殊情况:当监视的是 reactive 定义的对象中的某个属性对象或者当前对象,并且第一个参数返回的是 回调方法,deep也会生效,默认非深层监视.c)虽然实现了响应式,但是这相当于是重新创建了一个新的 ref 对象,对这些数据的修改不会影响源数据,因此就需要使用 toRef 了~不用指明监视的是哪个属性,只要监视的回调中用到哪个属性发生变化了,就会重新执行回调(挂载的时候也会执行一次).通俗来讲,是对源对象的属性的浅拷贝,并且将源对象对应的属性改成响应式的.

2024-02-03 21:32:47 961

原创 Vue3 - 从 vue2 到 vue3 过渡,这一套就够了(案例 + 效果演示)(一)

vue3 中有一个新的配置项,值是一个函数. 他是所有组合 API 的“舞台”,也就是说,之前 vue2 组件中使用到的 data、methods...... 都要配置在 setup 中.

2024-02-03 16:58:37 1360

原创 Git - 在公司中,使用 git 的流程是什么?遇到冲突怎么办?

这种情况就是因为你在你的分支上写代码之前,有其他人提交了代码到 master 分支上,导致你本地的代码和远程仓库的代码不一致,此时你再去编辑本地的代码(你 push 的文件正好是别人在远程仓库上已经修改过的文件),然后 push,就会出现以上这种情况.d)之后就可以将此页面的链接发送给你的 Mentor 啦,他就会对你的代码进行 code review... 指出哪里有问题,如果没问题的话,你的导师就会直接给你 merge 了.c)此时你再去查看你之前 push 的文件,就可以选择保留谁的代码啦。

2024-01-29 15:33:11 1756

原创 Vue-Cli3 - 从安装 nodejs 配置环境 ~ 搭建 cli 脚手架项目全过程

以下过程凡是涉及到终端的使用,一定都要使用 管理员 方式打开!

2024-01-28 14:46:10 1810

原创 Tailscale - Mac、Window、Linux 组网,免费版小公司都够用

一般互联网公司都会私有化的部署一个 vpn,用来访问公司内网资源,比如 openvpn...当然还有更简单的方案也能实现端对端加密,例如 tailscale、headscale、wireguard...这里来说一下 tailscale 组建内网,是我们能通过外网 ip 访问到我们组建的内网设备.Ps:实际上我主要是解决部署多台机器分布式系统下 mysql 和 redis 端口暴露被频繁攻击的问题...

2024-01-25 22:28:45 1726

原创 SpringCloud Alibaba Sentinel 与 SpringCloud Gateway 的限流有什么差别?(四种限流算法原理分析)

就是指对服务器请求量做限制,避免因为突发的请求量过多,导致服务器宕机.比如,我们的服务器只能抗住每秒 1000 的请求量,但此时突然有 10000 的请求量来了,那么就需要把你这么大的请求量拦下来,按照服务能够承载的流量去放行,起到一个流控的效果.如何实现呢,就来看看这主流的三种限流算法~

2024-01-24 22:50:51 1964

原创 SpringCloud Alibaba 深入源码 - Nacos 和 Eureka 的区别(健康检测、服务的拉取和订阅)

那么当服务消费者要去消费时,就可以从注册中心拉取服务信息. 这个过程也被称为“服务发现”. 但是他这个拉去动作不是每次都要做的(压力太大),而是将拉取到的服务信息缓存到一个列表中,这样接下来的一段时间里,就不用去拉去了,而是直接从缓存列表中拿.因为一个集群中可能包含多个实例,也就是具体的节点信息(例如实例的IP、Port、健康状态),那么 Cluster 这个类中又维护了 两个 Set,分别是临时实例和非临时实例(此处,Eureka 就没有做区分,只有临时实例).

2024-01-21 19:02:04 1524

原创 SpringCloud Alibaba 深入源码 - Nacos 分级存储模型、支撑百万服务注册压力、解决并发读写问题(CopyOnWrite)

a)Nacos 的分级存储模型对应到源码中,实际上就是一个多层嵌套Map,key 就是 String 类型的 namespace,而他的 value 又是一个 Map.b)这个第二层的 Map 就表示 group 和 服务了,key 就服务名称,而 value 就是一个服务 service.c)服务实际上就是一个类,由于一个服务往往是有多个集群的,因此在 service 类中又维护了一个 map,key 就是集群名称(例如,上海、广州、杭州...).d)他的值 cluster 集群也是一个

2024-01-21 15:56:28 1347

原创 JSONObject - 用最通俗的讲解,教你玩转 JSON 数据的解析和修改

在还没有接触过这个东西的时候,一直是通过 ObjectMapper 进行 JSON 的序列化和反序列化,尤其是将 JSON 数据进行解析还需要提供一个具体的类... 就算不提供具体的类,使用 JsonNode 读取数据,涉及到修改还要强转 ObjectNode 就很麻烦~而且如果要构造一个 JSON 格式的数据,可能最先想到的就是通过 HashMap ,但是一但要构造的 JSON 数据稍微复杂一点,就要嵌套不少,代码的简洁、可读性大大降低.. 如果 key 存在就覆盖,key 不存在就添加.

2024-01-18 22:39:01 3977

原创 Stream API 函数式编程 - 告别for循环,代码竟能写的如此优雅?

代码简洁优雅,函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。简写并发执行,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法,透明地并行处理,你无需写任何多线程代码,极大的提高编程效率和程序可读性。

2024-01-17 20:23:03 875

原创 MongoDB - 整合 SpringBoot 操作全流程

uri 格式为: mongodb://ip 地址:mongodb 端口号/集合名。Ps:以 demo 集合为例。

2024-01-16 23:16:26 1746

原创 MongoDB - 索引底层原理和使用,聚合的使用(案例 + 演示)

MongoDB 中的索引和 MySQL 索引十分类似,能够极大的提高查询效率,如果没有索引,就需要扫描全集数据,效率非常低. 索引是一种特殊的数据结构,存储在一个易于遍历的读取的数据集合中,是对数据库表中一列或多列值进行排序的一种结构.下图来自于 MongoDB 官方文档:Indexes — MongoDB Manual例如有一个 users 集合,每一个元素都含有 score 这个属性,现在如果需要查询分数小于 30 的文档,在没有索引的情况下就需要扫描全集数据,将符合条件的放到结果集中.为了提升查询效

2024-01-14 21:46:28 1478

原创 MongoDB - 库、集合、文档(操作 + 演示 + 注意事项)

MongoDB 是一个基于。由 C++ 编写,就是为MongDB 是一个之间的产品. 他支持的数据结构非常松散,类似 json 的 bson 格式,因此可以存储比较复杂的数类型. Mongo 最大的特点就是他的查询非常强大,语法类似于面向对象的查询语言,

2024-01-14 16:43:01 1796

原创 DockerCompose - 微服务项目部署全过程(最佳实践)

a)技术选型:SpringCloud 2021.0.1 、SpringCloud Alibaba 2021.0.1.0、SpringBoot 2.6.3、Docker & DockerCompose、JDK 17.b)软件环境:MySQL、Nacos.c)服务拆分:blog、user、gateway.d)其他模块:common(公共模块)、OpenFeign.Ps:麻雀虽小,五脏俱全~ 如果还有其他中间件(RabbitMQ、ES......)需要部署,如果人不是小傻瓜,都能配出来~

2024-01-14 00:44:36 1986

原创 VMware 最新版 - 虚拟机安装、激活、Centos安装、XShell 连接虚拟机、网络配置(全流程)

b)点击菜单栏上的【编辑】->【虚拟网络编辑器】,打开下方的虚拟网络编辑器。选择VMnet8(NAT模式),取消勾选[Use local DHCP service...](如果勾选,将设置动态IP)。Ps:上图中192.168.44.2是网关地址,192.168.44.255是广播地址,192.168.44.0一般是网段IP,所以不能设置0、2、255这三个地址。h)在Windows上设置VMnet8的IP属性,如下图。虚拟机官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘。

2024-01-10 21:55:13 1548

原创 docker - 常用容器部署命令大全(MySQL、MongoDB、Redis、RabbitMQ、ES、Kibana、Nacos、Sentine)

a)为了 es 和 将来要下载的 kibana 进行互联,因此需要我们去创建一个网络.Ps:默认账号和密码都是 sentinel。Ps:默认账号密码都是 nacos。c)kibana 部署。

2024-01-06 22:26:20 1427

原创 gRPC - gRPC 整合 SpringBoot(全代码 + 避坑!)

b)这是因为我们在 client 模块中引入的依赖 "grpc-client-spring-boot-starter" 已经包含了 api 模块中引入的官方最新依赖,但是 client 中包含的依赖是 1.51.0 版本,而 api 模块中引入的是 1.60.0 版本。a)创建一个类,添加 @GrpcService 注解(注入容器中,表示它是一个 proto 文件中描述的 service 的实现类),让他继承对应的 Base 接口,重写 proto 文件中提供 service 下的方法即可.

2024-01-06 16:44:14 2633 1

原创 gRPC - 分布式 gRPC 四种通信方式、三种代理方式(全代码演示)

可以看到,在获取 gRPC 代理对象时,有三种方式,其中 newStub 就是异步方式,newBlockingStub 就是同步(阻塞) 的方式,newFutrueStub 即可以同步,也可以异步(几乎不用最后这种方式).可以看出,由于 api 模块既提供了 service 的接口,有提供了 client 的 stub,因此创建完三个 module 之后,client 和 service 中都需要引入 api 模块.客户端发送一个请求对象,服务端可以在未来多个不同的时刻返回不同的响应对象.

2024-01-05 21:47:17 1347

空空如也

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

TA关注的人

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