- 博客(330)
- 收藏
- 关注
原创 点赞功能真的有必要上 Redis 吗?(Mongo、MySQL、Redis、MQ 实测性能对比)
除了单表操作比较耗时外,对于中小型项目而言,频繁的读写操作场景,使用 mongo 就够用了. 甚至都不用上 mq,更甚至有的场景下 redis 性能还不如 mongo...
2024-03-10 20:00:34 883 1
原创 架构师成长之路 - 结合领域设计项目架构总结(持续更新,暂不公开)
每个人项目架构设计风格千姿百态,导致项目难以维护、可读性低... 于是将自己接触过的大型企业级项目经验总结一下,最终目的是为了提高我的团队协作效率,降低维护成本。
2024-01-24 15:00:56 216
原创 SpringCloudAlibaba 2021.0.1 - 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)
a)先创建一个空项目,名字自定义.b)在刚刚的空项目下创建整个项目的父模块c)父工程下的 src 可以删了,没用d)最后直接用 IDEA 打开空项目下的父工程(否则 Java 文件不生效)
2023-11-05 00:13:41 2160 2
原创 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 398
原创 MyBatisPlus - 润物无声、效率至上、丰富功能
自定义的 Mapper 类继承 MyBatisPlus 提供的 BaseMapper 接口:例如对 User 类操作.可以看到 BaseMapper 接口中提供了很多方法,都可以直接调用~MyBatisPlus 更适合于构建复杂的 where 的条件(避免使用一些 动态 sql 显得臃肿),对于例如 update 中出现例如 "set age = age + 10" 这样的语句就只能使用硬编码.而 MyBatisPlus 是包含 MyBatis 的,因此可以通过。
2024-02-15 11:56:40 936
原创 Vue3 - 从 vue2 到 vue3 过渡,这一套就够了(案例 + 效果演示)(二)
f)特殊情况:当监视的是 reactive 定义的对象中的某个属性对象或者当前对象,并且第一个参数返回的是 回调方法,deep也会生效,默认非深层监视.c)虽然实现了响应式,但是这相当于是重新创建了一个新的 ref 对象,对这些数据的修改不会影响源数据,因此就需要使用 toRef 了~不用指明监视的是哪个属性,只要监视的回调中用到哪个属性发生变化了,就会重新执行回调(挂载的时候也会执行一次).通俗来讲,是对源对象的属性的浅拷贝,并且将源对象对应的属性改成响应式的.
2024-02-03 21:32:47 840
原创 Vue3 - 从 vue2 到 vue3 过渡,这一套就够了(案例 + 效果演示)(一)
vue3 中有一个新的配置项,值是一个函数. 他是所有组合 API 的“舞台”,也就是说,之前 vue2 组件中使用到的 data、methods...... 都要配置在 setup 中.
2024-02-03 16:58:37 988
原创 Git - 在公司中,使用 git 的流程是什么?遇到冲突怎么办?
这种情况就是因为你在你的分支上写代码之前,有其他人提交了代码到 master 分支上,导致你本地的代码和远程仓库的代码不一致,此时你再去编辑本地的代码(你 push 的文件正好是别人在远程仓库上已经修改过的文件),然后 push,就会出现以上这种情况.d)之后就可以将此页面的链接发送给你的 Mentor 啦,他就会对你的代码进行 code review... 指出哪里有问题,如果没问题的话,你的导师就会直接给你 merge 了.c)此时你再去查看你之前 push 的文件,就可以选择保留谁的代码啦。
2024-01-29 15:33:11 1391
原创 Vue-Cli3 - 从安装 nodejs 配置环境 ~ 搭建 cli 脚手架项目全过程
以下过程凡是涉及到终端的使用,一定都要使用 管理员 方式打开!
2024-01-28 14:46:10 1164
原创 Tailscale - Mac、Window、Linux 组网,免费版小公司都够用
一般互联网公司都会私有化的部署一个 vpn,用来访问公司内网资源,比如 openvpn...当然还有更简单的方案也能实现端对端加密,例如 tailscale、headscale、wireguard...这里来说一下 tailscale 组建内网,是我们能通过外网 ip 访问到我们组建的内网设备.Ps:实际上我主要是解决部署多台机器分布式系统下 mysql 和 redis 端口暴露被频繁攻击的问题...
2024-01-25 22:28:45 548
原创 SpringCloud Alibaba Sentinel 与 SpringCloud Gateway 的限流有什么差别?(三种限流算法原理分析)
就是指对服务器请求量做限制,避免因为突发的请求量过多,导致服务器宕机.比如,我们的服务器只能抗住每秒 1000 的请求量,但此时突然有 10000 的请求量来了,那么就需要把你这么大的请求量拦下来,按照服务能够承载的流量去放行,起到一个流控的效果.如何实现呢,就来看看这主流的三种限流算法~
2024-01-24 22:50:51 1387
原创 SpringCloud Alibaba 深入源码 - Nacos 和 Eureka 的区别(健康检测、服务的拉取和订阅)
那么当服务消费者要去消费时,就可以从注册中心拉取服务信息. 这个过程也被称为“服务发现”. 但是他这个拉去动作不是每次都要做的(压力太大),而是将拉取到的服务信息缓存到一个列表中,这样接下来的一段时间里,就不用去拉去了,而是直接从缓存列表中拿.因为一个集群中可能包含多个实例,也就是具体的节点信息(例如实例的IP、Port、健康状态),那么 Cluster 这个类中又维护了 两个 Set,分别是临时实例和非临时实例(此处,Eureka 就没有做区分,只有临时实例).
2024-01-21 19:02:04 1354
原创 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 1210
原创 JSONObject - 用最通俗的讲解,教你玩转 JSON 数据的解析和修改
在还没有接触过这个东西的时候,一直是通过 ObjectMapper 进行 JSON 的序列化和反序列化,尤其是将 JSON 数据进行解析还需要提供一个具体的类... 就算不提供具体的类,使用 JsonNode 读取数据,涉及到修改还要强转 ObjectNode 就很麻烦~而且如果要构造一个 JSON 格式的数据,可能最先想到的就是通过 HashMap ,但是一但要构造的 JSON 数据稍微复杂一点,就要嵌套不少,代码的简洁、可读性大大降低.. 如果 key 存在就覆盖,key 不存在就添加.
2024-01-18 22:39:01 984
原创 Stream API 函数式编程 - 告别for循环,代码竟能写的如此优雅?
代码简洁优雅,函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。简写并发执行,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法,透明地并行处理,你无需写任何多线程代码,极大的提高编程效率和程序可读性。
2024-01-17 20:23:03 787
原创 MongoDB - 整合 SpringBoot 操作全流程
uri 格式为: mongodb://ip 地址:mongodb 端口号/集合名。Ps:以 demo 集合为例。
2024-01-16 23:16:26 617
原创 MongoDB - 索引底层原理和使用,聚合的使用(案例 + 演示)
MongoDB 中的索引和 MySQL 索引十分类似,能够极大的提高查询效率,如果没有索引,就需要扫描全集数据,效率非常低. 索引是一种特殊的数据结构,存储在一个易于遍历的读取的数据集合中,是对数据库表中一列或多列值进行排序的一种结构.下图来自于 MongoDB 官方文档:Indexes — MongoDB Manual例如有一个 users 集合,每一个元素都含有 score 这个属性,现在如果需要查询分数小于 30 的文档,在没有索引的情况下就需要扫描全集数据,将符合条件的放到结果集中.为了提升查询效
2024-01-14 21:46:28 1127
原创 MongoDB - 库、集合、文档(操作 + 演示 + 注意事项)
MongoDB 是一个基于。由 C++ 编写,就是为MongDB 是一个之间的产品. 他支持的数据结构非常松散,类似 json 的 bson 格式,因此可以存储比较复杂的数类型. Mongo 最大的特点就是他的查询非常强大,语法类似于面向对象的查询语言,
2024-01-14 16:43:01 1170
原创 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 1260
原创 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 1120
原创 docker - 常用容器部署命令大全(MySQL、MongoDB、Redis、RabbitMQ、ES、Kibana、Nacos、Sentine)
a)为了 es 和 将来要下载的 kibana 进行互联,因此需要我们去创建一个网络.Ps:默认账号和密码都是 sentinel。Ps:默认账号密码都是 nacos。c)kibana 部署。
2024-01-06 22:26:20 1314
原创 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 1223 1
原创 gRPC - 分布式 gRPC 四种通信方式、三种代理方式(全代码演示)
可以看到,在获取 gRPC 代理对象时,有三种方式,其中 newStub 就是异步方式,newBlockingStub 就是同步(阻塞) 的方式,newFutrueStub 即可以同步,也可以异步(几乎不用最后这种方式).可以看出,由于 api 模块既提供了 service 的接口,有提供了 client 的 stub,因此创建完三个 module 之后,client 和 service 中都需要引入 api 模块.客户端发送一个请求对象,服务端可以在未来多个不同的时刻返回不同的响应对象.
2024-01-05 21:47:17 1049
原创 gRCP - 面向未来的第二代 RPC 技术,解析 HTTP2.0 和 Protobuf
gRPC 是 Google 开源的一个高性能的 RPC 框架,高效实现进程间通信。Studdy Google 内部的 RPC 演化而来,2015 正式开源. 云原生时代是一个 RPC 标准.
2024-01-03 17:49:03 1217
原创 JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性
本文只是站在开发者视角,来看看升级哪些咱们程序员常用的功能~经过统计,空指针异常是导致 Java 应用程序失败的最常见原因,因此 Google 公司 引入了Optional 类以检查空值的方式来避免空指针异常,使程序员写出更干净的代码.Optional 类(Java.util.Optional)是一个容器类,可以保存类型T值,表示这个值存在。或者,也可以只保存 null,表示这个值不存在。也就是说,以前用 null 表示一个值不存在,现在 Optional 就可以更好的表达这个概念,避免空指针异常.
2024-01-02 16:41:19 1279
原创 DockerCompose - 容器编排、模板命令、compose命令、Pottainer 可视化界面管理(一文通关)
为什么使用 DockerCompose?(纯 Docker 进行项目部署存在问题)
2023-12-30 16:55:16 1167
原创 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 1409
原创 【IDEA - EasyCode】好物推荐 -> 代码自动生成工具
e)这里展示以下生成的 UserServiceImpl 接口实现(基本的增删改查,以及分页查询都有了)只要是与数据库相关的代码都可以通过自定义模板来生成,支持数据库类型与 java 类型映射关系配置。c)IDEA 连接对应的数据库. 连接成功后使用 EasyCode 开始生成,如下。b)准备一张表作为生成元数据,例如如下 user 表。大大减少开发时间~~
2023-12-28 15:44:49 390
原创 Dockerfile - 工作流程、构建镜像、文件语法
a)Dockerfile 是什么?Dockerfile 就是镜像的描述文件.b)Dockerfile 的作用?通过 Dockerfile 文件就可以构建一个属于自己的镜像.c)为什么使用 Dockerfile 构建镜像?官方的镜像确实足够好了,适用于大多数应用场景,但是如果我们想要构建属于我们自己的业务镜像,就需要自定义镜像了.
2023-12-28 14:40:13 1235
原创 Docker 高级网络 - 自定义网桥实现容器间通信
docker netword create -d 网桥类型(不指定,默认是 bridge) 网络名称例如创建一个类型为 bridge,名称为 mynet1 的网络.
2023-12-27 15:35:21 1730
原创 Docker - 镜像 | 容器 | 数据卷 日常开发常用指令 + 演示(一文通关)
b)强制删除(可以删除正在运行的镜像):docker image rm -f 镜像名(name:tag) | 镜像 id。a)简单运行一个容器(这种方式运行容器,会导致容器内无法访问,因为这里涉及到容器端口映射的概念,后面会讲)b)将宿主机中指定文件拷贝到容器内:docker cp 宿主机目录 容器id:容器中文件或目录。a)将容器中指定文件拷贝到宿主机:docker cp 容器id:容器中文件或目录 宿主机目录。b)强制删除容器(可以删除运行中的容器):docker rm -f id | name。
2023-12-23 21:58:57 1249
原创 Gradle - 安装、环境变量、配置国内源、常用命令
目录文件作用.gradle gradle项目产生文件(自动编译工具产生的文件).ideaIDEA项目文件(开发工具产生的文件)app其中一个module,复用父项目的设置,可与父项目拥有相同的配置文件build自动构建时生成文件的地方gradle自动完成gradle环境支持文件夹.gitignoregit源码管理文件gradle 项目自动编译的配置文件gradle 运行环境配置文件gradlew。
2023-12-23 17:54:00 2067
原创 【Kotlin】一款专门为 Java 程序员打造的快速掌握 Kotlin 技术博客
Kotlin由JetBrains公司开发设计,2011年公布第一版,2012年开源。2016年发布1.0正式版,并且JetBrains在IDEA加入对Kotlin的支持,安卓自此又有新的选择。2019年谷歌宣布Kotlin成为安卓第一开发语言,安卓程序员由java转Kotlin已经迫在眉睫。
2023-12-22 22:11:13 907
原创 SpringCloud - 新版淘汰 Ribbon,在 OpenFeign 中整合 LoadBalancer 负载均衡
RandomLoadBalancer - 随机分配策略(默认)RoundRobinLoadBalancer - 轮询分配策略//这里不用加 @Configuration 注解//将官方提供的 RandomLoadBalancer 注册为Bean@Bean通过 @LoadBalancerClient(value = "服务名", configuration = LoadBalancerConfig.class) 指定负载均衡策略为随机.
2023-11-22 10:39:18 3121 1
原创 基于 SpringCloud + SpringCloud Alibaba 自主研发项目 “小贴吧” 总结(Redis、RabbitMQ、ElasticSearch、WebSocket...)
全面覆盖后端技术的自主研发项目~
2023-11-21 14:47:16 194
原创 BUG 随想录 - Java: 程序包 com.example.xxx 不存在
背景:通过 feign 的最佳实践,将 feign 单独提取成一个微服务,接着在需要远程调用的微服务中引入 feign 模块,并在启动类通过 @EnableFeignClients 声明指定的 Feign 客户端.出现问题:feign 这个模块已经使用过很多次了,之前一直都没问题,直到有一次在 @EnableFeignClients 中多指定了一个客户端,接着但凡引入了 feign 模块的其他微服务在编译期间出现以下错误.直到有一次,我重新给 feign 这个模块打 jar 包,发现竟然可以了!
2023-11-17 11:33:24 753
原创 ObjectMapper - 实现复杂类型对象反序列化(天坑!)
当使用ObjectMapper.readValue()方法将 JSON 字符串反序列化为AppResult对象时,如果AppResult对象的 data属性是一个泛型(如 Object),那么 Jackson 将无法知道这个属性的确切类型,因此会将其反序列化为一个LinkedHashMap.
2023-11-10 14:05:39 605
原创 SpringCloud - OpenFeign 参数传递和响应处理(全网最详细)
因为 openfeign 是 伪HttpClient 对象,我们在远程调用他的客户端提供的接口时,并不知道你到底是路径传参还是问号传参,因此需要通过注解的方式来指明传参方式(就像 Spring Web 一样,只不过 Spring Web 中如果没指明传参类型,底层会按默认方式走,而 openfeign 则没有).然而,需要注意的是,OpenFeign 只能处理简单的 Java 对象和 Map 对象,对于复杂的 Java 对象或包含特殊类型的对象,可能无法自动进行正确的序列化和反序列化。
2023-11-10 00:52:06 2224 3
原创 Spring Cloud - 通过 Gateway webflux 编程实现网关异常处理
【代码】Spring Cloud - 通过 Gateway webflux 编程实现网关异常处理。
2023-11-07 15:46:45 847
空空如也
MySQL用户狠狠的踩了MariaDB的坑(2)
2023-04-08
MySQL用户狠狠的踩了MariaDB的坑
2023-04-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人