自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-04-07 23:47:50 224 1

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

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

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

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

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

2024-01-24 15:00:56 271

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

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

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

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

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

2024-04-15 22:05:24 515

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

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

2024-04-07 17:41:03 617

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

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

2024-04-06 16:12:43 492 3

原创 SpringData ElasticSearch - 简化开发,完美适配 Spring 生态

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

2024-04-02 16:22:13 863

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

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

2024-03-21 17:46:03 1004

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

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

2024-03-20 23:27:04 688

原创 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 1018

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

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

2024-03-19 23:57:48 1123

原创 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 1339

原创 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 448

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

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

2024-02-15 11:56:40 970

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

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

2024-02-03 21:32:47 884

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

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

2024-02-03 16:58:37 1161

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

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

2024-01-29 15:33:11 1551

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

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

2024-01-28 14:46:10 1399

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

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

2024-01-25 22:28:45 1010

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

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

2024-01-24 22:50:51 1632

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

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

2024-01-21 19:02:04 1439

原创 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 1283

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

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

2024-01-18 22:39:01 1906

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

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

2024-01-17 20:23:03 820

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

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

2024-01-16 23:16:26 800

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

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

2024-01-14 21:46:28 1228

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

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

2024-01-14 16:43:01 1289

原创 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 1525

原创 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 1262

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

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

2024-01-06 22:26:20 1360

原创 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 1711 1

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

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

2024-01-05 21:47:17 1153

原创 gRCP - 面向未来的第二代 RPC 技术,解析 HTTP2.0 和 Protobuf

gRPC 是 Google 开源的一个高性能的 RPC 框架,高效实现进程间通信。Studdy Google 内部的 RPC 演化而来,2015 正式开源. 云原生时代是一个 RPC 标准.

2024-01-03 17:49:03 1379

原创 JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性

本文只是站在开发者视角,来看看升级哪些咱们程序员常用的功能~经过统计,空指针异常是导致 Java 应用程序失败的最常见原因,因此 Google 公司 引入了Optional 类以检查空值的方式来避免空指针异常,使程序员写出更干净的代码.Optional 类(Java.util.Optional)是一个容器类,可以保存类型T值,表示这个值存在。或者,也可以只保存 null,表示这个值不存在。也就是说,以前用 null 表示一个值不存在,现在 Optional 就可以更好的表达这个概念,避免空指针异常.

2024-01-02 16:41:19 1769 2

原创 DockerCompose - 容器编排、模板命令、compose命令、Pottainer 可视化界面管理(一文通关)

为什么使用 DockerCompose?(纯 Docker 进行项目部署存在问题)

2023-12-30 16:55:16 1248

原创 Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

a)简介:就是一个对 用户表 简单的增删改查的 SpringBoot 项目.b)接口:采用 restful 风格这里简单回顾以下 restful 风格接口规范原则: GET(查询)、POST(添加)、PUT(全字段更新)、PATCH(部分字段更新)、DELETE(删除)使用复数名词: user -> users、 car -> cars请求和响应指定: request: @RequestBody;资源唯一标识需要通过路径传参,例如 id@Autowired。

2023-12-28 18:48:37 1541

原创 【IDEA - EasyCode】好物推荐 -> 代码自动生成工具

e)这里展示以下生成的 UserServiceImpl 接口实现(基本的增删改查,以及分页查询都有了)只要是与数据库相关的代码都可以通过自定义模板来生成,支持数据库类型与 java 类型映射关系配置。c)IDEA 连接对应的数据库. 连接成功后使用 EasyCode 开始生成,如下。b)准备一张表作为生成元数据,例如如下 user 表。大大减少开发时间~~

2023-12-28 15:44:49 432

原创 Dockerfile - 工作流程、构建镜像、文件语法

a)Dockerfile 是什么?Dockerfile 就是镜像的描述文件.b)Dockerfile 的作用?通过 Dockerfile 文件就可以构建一个属于自己的镜像.c)为什么使用 Dockerfile 构建镜像?官方的镜像确实足够好了,适用于大多数应用场景,但是如果我们想要构建属于我们自己的业务镜像,就需要自定义镜像了.

2023-12-28 14:40:13 1269

原创 Docker 高级网络 - 自定义网桥实现容器间通信

docker netword create -d 网桥类型(不指定,默认是 bridge) 网络名称例如创建一个类型为 bridge,名称为 mynet1 的网络.

2023-12-27 15:35:21 1785

空空如也

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

TA关注的人

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