自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王廷云的博客

一个分享各种技术的博客,博主会不定期分享各个领域的技术知识!

  • 博客(351)
  • 收藏
  • 关注

原创 【软件工具】之 Sublime Text

SublimeText 是一款非常好用的文本和代码编辑软件,该软件属于轻量级的,启动快、内存占用小、打开大体积文件非常快速。同时该软件有强大的全目录文本搜索功能,支持丰富的文本查找和替换。如果想要打造成软件开发平台的话,可以通过安装各种插件进行搭建。

2024-01-14 19:25:29 1375

原创 【Linux】之搭建 PostgreSQL 环境

在 Linux 系统下安装 PostgreSQL,可以选择快捷方便的 Docker 安装,但正常的服务器都是直接原生安装的,所以,这里我将讲解如何正常安装 PostgreSQL 以及安装之后的一些配置。

2024-01-07 15:27:05 1251

原创 【Windows】之微软输入法配置小鹤双拼

Windows 自带的输入法微软输入法本身就是个最简洁、最方便的输入法,不需要去安装多余的第三方输入法软件。同时,微软中文拼音输入法支持双拼输入法,但微软自带的双拼输入法不包含小鹤双拼方案的。所以,在这里将会讲解如何配置小鹤双拼方案。

2024-01-06 15:48:36 1791

原创 【Linux】之搭建 Redis 环境

在 Linux 服务器上有两种常用的方式搭建 Redis 环境,一种是直接原生的本地安装,一种就是使用 Docker,使用 Docker 的话比较快速方便。但实际的开发环境可能更多的使用本地安装的方式进行搭建,所以这里我就演示如果在 Linux 系统下本地安装搭建 Redis 环境,以 CentOS7 系统为例。

2023-12-26 01:43:35 997

原创 【MySQL】之死锁问题及其解决方案

数据库死锁问题是我们老生常谈的问题了,在我们实际开发过程中经常会遇到,为了尽量避免出现死锁,我们需要了解出现死锁的场景。同时,如果线上出现了死锁之后怎么去分析、排查和解决,下面我就这两点介绍一下。

2023-12-10 20:41:58 1449

原创 【MySQL】之联合索引与最左匹配原则

最左匹配原则在我们 MySQL 开发过程中和面试过程中经常遇到,为了加深印象和理解,我在这里把 MySQL 的最左匹配原则详细的讲解一下,包括它的原理以及是否导致索引失效的场景。

2023-12-10 00:53:16 1341

原创 【Java开发】之获取客户端真实 IP 地址

一般的客户端(例如浏览器)发送HTTP请求是没有 X-Forwarded-For 头的,当请求到达第一个代理服务器时,代理服务器会加上 X-Forwarded-For 请求头,并将值设为客户端的IP地址(也就是最左边第一个值),后面如果还有多个代理,会依次将IP追加到 X-Forwarded-For 头最右边,最终请求到达Web应用服务器,应用通过获取 X-Forwarded-For 头取左边第一个IP即为客户端真实IP。这种方式在中间没有代理的情况下,获取连接到服务器的客户端 IP 的最简单有效的方式。

2023-11-11 17:42:41 2035

原创 【RabbitMQ】之消息的可靠性方案

RabbitMQ 消息的可靠性涉及 producer 端的确认机制、broker 服务的持久化与镜像队列的配置、consumer 端的确认机制。要想确保消息的可靠性越高,那么性能也会随之而降,所以需要根据实际情况进行选择和取舍。

2023-07-30 18:05:13 1558

原创 【RabbitMQ】之持久化机制

本文围绕 RabbitMQ 的持久化机制讲解了 RabbitMQ 的消息、队列和交换器的持久化。突出扩展地讲解了一些观赏 RabbitMQ 的内存与磁盘相关的知识。

2023-07-30 10:25:07 3430 1

原创 【RabbitMQ】之高可用集群搭建

1、默认集群原理单台 RabbitMQ 服务器处理消息的能力是有瓶颈的,而且可靠性还无法保证,所以需要通过集群来提高消息的吞吐量和提高数据可靠性。由于 RabbitMQ 本身是基于Erlang编写,而Erlang 语言天生具备分布式特性通过同步 Erlang 集群各节点的 erlang.cookie 来实现因此,RabbitMQ 天然支持集群,并且还能通过水平扩展节点的方式提高吞吐量。在一个多节点的 RabbitMQ 集群中,Exchange交换器)的元数据(Metadata。

2023-07-24 18:36:58 2745 1

原创 【编程开发】之 Tomcat 请求数设置与 QPS

maxThreads。

2023-07-11 19:04:09 1689

原创 【Redis】之缓存一致性

一般来讲,对于实时性和一致性要求高的数据不应该放入缓存中。缓存一致性问题即:缓存里的数据如何与数据库保持一致?

2023-07-08 16:40:05 783

原创 【开发经验】之 DevOps

DevOps(和Operations的组合词),翻译过来就是开发运维一体化,是一种重视软件开发人员Dev)和IT运维技术人员Ops) 之间沟通合作的文化、运动或惯例。透过自动化软件交付和架构变更的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

2023-07-08 15:58:54 1075

原创 【Java开发】之 OOM 内存溢出

OOM,全称 Out Of Memory,意思是内存耗尽或内存溢出。对应Java 程序抛出的错为,这个错误在官方的解释如下:意思就是说,当 JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个 error(注意:这错误并非 exception,因为这个问题已经严重到不足以被应用处理)。

2023-07-03 19:27:20 786

原创 【MySQL】之 SQL 优化案例

本案例优化的目标是消除由 group by zone-id 执行语句中引入的 using temporary 与 using file-sort。MySQL的优化器证明也不是万能的。它始终坚守一个小表驱动大表原则,结果将大表 zone 调度为被驱动表,从而额外引入了 using temporary 与 using filesort 的步骤,延长的查询语句的执行时间。我们需要在特殊的场景来有条件地推翻小表驱动大表原则。引入 ICP 索引下推;选择区分度(选择率)大的列建立索引。

2023-06-25 11:11:25 701

原创 【MySQL】之索引与索引优化

索引(Index)是帮助MySQL高效获取数据的数据结构。索引是数据结构。索引的目的在于提高查询效率,就好像是字典一样,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要 a - z,如果我想找到Java开头的单词呢?或者Oracle开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成?我们可以简单理解为排好序的快速查找结构。

2023-06-17 17:06:17 714

原创 【Redis】之 RedLock 分布式锁

在多线程环境中,为了控制线程对资源并发访问和竞争,我们经常需要用到锁来进行控制。常用的锁例如 Java 自带的等。但这些锁只能用于单机系统中,如果涉及到多机器、多节点的分布式环境的资源竞争,就需要使用分布式锁了。

2023-06-16 18:59:40 6403

原创 【开发经验】之记一次Redis分布式锁造成的事故

这个时候就会发生一连串的连锁反应:一开始获得锁的线程还没有执行完毕,锁就被另一个线程获取了,而第一个线程执行业务逻辑完毕后执行释放锁的操作时就会把第二个线程的锁给释放了,然后第三个线程再次获取锁,就这样陷入了恶性循环。当然,虽然锁失去了作用,但还有个库存校验逻辑,但是偏偏库存校验逻辑不是非原子性的,代码中库存校验方式是先从 Redis 中 get 出库存数量,然后判断库存是否还有,最后再进行库存的扣减。在性能要求极高的场景下,一般数据以缓存为准,支付交易等也是如此,分布式场景下,大多数场景都是最终一致性。

2023-06-13 20:15:35 397

原创 【电商经验】之商品下单减库存方案

而更新库存数据就是 udate 操作,命中索引时也是行级锁,但是这是个独占锁,所有的操作都要等待前一个释放锁后才能继续 update。在商品促销的时候(比如促销),因为一部分人下了单但没有付款完成订单流程,导致其他用户看到已售罄(实际意义上是有库存的),这样就会在某个时间点阻止其他用户购买。比如,库存只有100件,但有1000个用户成功下单,最后会有900个用户付款失败的,这种体验是很糟糕的,100件商品却超卖出900件。这种方案可以避免掉下单减库存的所有问题,但会产生新的问题,即“

2023-06-10 15:41:43 2061

原创 【MySQL】之 MySLQ 中的四种注释

本博客介绍了 MySQL 中的四种注释,包括两种单行注释、一种多行注释,还有一种特殊内联注释。

2022-10-08 11:50:48 2729 1

原创 【Windows】之搭建 Go 语言环境

本博客介绍了如何在 windows 下搭建 Go 语言的开发环境,包括 SDK 的下载、环境变量的配置以及 Go 依赖包下载的代理配置。

2022-09-28 15:20:57 2216

原创 【SpringBoot】之自定义 Filter 过滤器

本文对 Java 中 Servlet Filter 进行了介绍,同时对 Servlet Filter 的执行顺序进行了讲解,最后介绍了如何通过实现 Filter 接口来自定义过滤器。

2022-09-12 18:53:19 1591

原创 【计算机网络】之 HTTPS 保证数据安全防止被篡改

本文对 HTTP 与 HTTPS 进行简单介绍,同时通过对称加密、非对称加密和数字证书来讲解了 HTTPS 是怎么保证数据安全的。

2022-09-12 12:43:56 2874

原创 【SpringBoot】之接口设计防篡改和防重放攻击

本文讲解JavaWeb开发过程中可能出现的接口被拦截和参数被篡改的问题;然后介绍了如何进行有效安全防范;最后介绍了如何通过参数加密和签名校验的方式进行有效防范。

2022-09-12 01:06:07 4653 1

原创 【SpringBoot】之创建自定义 SpringBoot-Starter

本文介绍了 SpringBoot Starter 的相关内容,同时详细讲解了如何创建一个自定义的 SpringBoot Starter。

2022-09-01 12:20:33 2389

原创 【SpringBoot】之自动配置原理分析(源码级别)

本文对 SpringBoot 进行了简单介绍,同时通过源码深入分析了 SpringBoot 自动配置的原理,并通过 Redis 的自动配置为例,讲解了组件是如何装配进容器中的。

2022-08-29 01:37:16 353

原创 【SpringBoot】之浅谈 SpringBoot 项目的创建

本文介绍了如何通过 Spring Initializr 来创建 SpringBoot 项目,同时分析其项目的依赖结构并以此为基础介绍如何手动创建 SpringBoot 项目;最后介绍了 SpringBoot 项目的兼容性问题。

2022-08-27 18:21:41 503

原创 【Spring】之 SpringAOP 切点指示符详解

本稳详细介绍了 SpringAOP 中的切点指示符。

2022-08-26 00:29:00 495

原创 【Spring】之 SpringAOP 理论与实践

本博客介绍了 SpringAOP 的相关理论,并以一个实际例子为例讲解如何使用 SpringAOP。

2022-08-24 01:27:42 273

原创 【Java并发编程】之线程安全

本文介绍了Java多线程下的一些安全问题以及解决方案。

2022-08-21 00:26:34 292

原创 【Spring】之 Spring 中常用的设计模式

介绍了 Spring 中常用的设计模式

2022-07-26 01:16:49 935

原创 【分布式开发】之 CAP 原则

介绍了 CAP 的定义以及 CAP 的取舍策略

2022-07-24 12:49:44 1490

原创 【Java 集合】之 CopyOnWriteArrayList

讲解 CopyOnWrite 的原理,同时介绍了 CopyOnWriteArrayList

2022-07-24 11:58:57 703

原创 【Docker】之安装 PgSQL

1、下载 Postgres 镜像下载最新版本的 Postgres 镜像(默认是 latest 版本):docker pull postgres如果想要下载其他版本,比如常用的 10 版本的话,在镜像后面指定版本:docker pull postgres:10.21-alpine更多版本的镜像可以访问 Docker 官网:https://hub.docker.com/_/postgres?tab=tags2、创建并运行 RabbitMQ 容器启动命令:docker run -d \

2022-05-23 19:21:06 6496 3

原创 【MySQL】之解决数据导出问题

目录解决导出数据时中文乱码问题解决导出的ID为科学记数法的问题

2022-04-28 18:22:12 1311

原创 【Java并发编程】之 CountDownLatch

CountDownLatch 的概念CountDownLatch 是一个同步工具类(位于 java.util.concurrent 包下),用来协调多个线程之间的同步,起到线程之间的通信作用。CountDownLatch 能够使一个线程在等待其他线程完成各自工作之后,再继续往下执行。其使用一个计数器进行实现,计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在 CountDownLatch 上等待的线程就可以继续执行接下

2022-04-08 16:25:08 675

原创 【RabbitMQ】之延时队列

RabbitMQ 延时队列(实现定时任务)1、定时任务的场景购物下单等待支付的订单,超过一定时间后,系统就会自动取消订单并释放占有的资源。常用的解决方案是:使用 Spring 的 Schedule 定时任务轮询数据库。但缺点很大:消耗系统内存、增加了数据库的压力、存在较大的时间误差。较好的解决方案是使用 RabbitMQ 的延时队列:RabbitMQ 消息的 TTL 和死信 Exchange 结合。2、消息的 TTL(Time To Live)消息的 TTL 就是消息的存活时间。Rabbit

2022-04-07 11:11:48 2441

原创 【RabbitMQ】之 RabbitMQ 与 SpringBoot 整合

一、SpringBoot 整合 RabbitMQ1)、引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>2)、添加配置# 配置 RabbitMQ 服务器 IP 和端口spring.rabbitmq.host=19

2022-04-07 11:09:32 2109

原创 【Redis】之分布式锁

1、Redis 的并发竞争 Key 问题所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同!推荐一种方案:分布式锁(zookeeper 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并发竞争 Key 问题,不要使用分布式锁,这样会影响性能)基于 zookeeper 临时有序节点可以实现的分布式锁。大致思想为:每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节

2022-04-06 19:35:28 747

原创 【Redis】之雪崩、穿透、击穿

目录一、缓存雪崩二、缓存穿透三、缓存击穿四、缓存降级五、缓存热点 Key六、热点数据与冷数据七、缓存预热一、缓存雪崩缓存雪崩是指缓存同一时间大面积的失效,导致后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案:1、缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生;2、一般并发量不是特别多的时候,使用最多的解决方案是加锁排队;3、给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。二、缓存穿透

2022-04-06 19:26:49 371 1

空空如也

空空如也

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

TA关注的人

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