<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Eric的博客]]></title><description><![CDATA[学而不思则罔，思而不学则殆。]]></description><link>https://blog.csdn.net/dingjianmin</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; dingjianmin]]></copyright><item><title><![CDATA[SpringBoot跨域问题]]></title><link>https://blog.csdn.net/dingjianmin/article/details/134050951</link><guid>https://blog.csdn.net/dingjianmin/article/details/134050951</guid><author>dingjianmin</author><pubDate>Thu, 26 Oct 2023 10:58:28 +0800</pubDate><description><![CDATA[SpringBoot跨域问题]]></description><category></category></item><item><title><![CDATA[maven升级版本后报错：Blocked mirror for repositories]]></title><link>https://blog.csdn.net/dingjianmin/article/details/132687443</link><guid>https://blog.csdn.net/dingjianmin/article/details/132687443</guid><author>dingjianmin</author><pubDate>Tue, 05 Sep 2023 11:03:42 +0800</pubDate><description><![CDATA[maven在3.8.1 的默认配置文件中增加了一组标签，如果仓库镜像是 http 而不是https 就会被拦截禁止访问，而当前公司私服一般是http 而不支持https。方法一：降低Maven 版本到3.8.1 以下方法二：将镜像仓库从http 变成https方法三：增加节点方法四：注释掉 $MAVEN_HOME/conf/settings.xml 中的拦截标签。]]></description><category></category></item><item><title><![CDATA[Java lambda表达式使用笔记]]></title><link>https://blog.csdn.net/dingjianmin/article/details/129238465</link><guid>https://blog.csdn.net/dingjianmin/article/details/129238465</guid><author>dingjianmin</author><pubDate>Mon, 27 Feb 2023 11:27:16 +0800</pubDate><description><![CDATA[Java lambda表达式使用笔记]]></description><category></category></item><item><title><![CDATA[zset类型的底层数据结构的实现]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121729149</link><guid>https://blog.csdn.net/dingjianmin/article/details/121729149</guid><author>dingjianmin</author><pubDate>Sun, 05 Dec 2021 14:33:31 +0800</pubDate><description><![CDATA[参考资料：

redis中zset底层实现原理_渣渣-CSDN博客_zset底层数据结构

redis的zset数据结构：跳表 - 知乎



zset类型的底层数据结构的实现？

zset是Redis提供的一个非常特别的数据结构，常用作排行榜等功能，以用户id为value，关注时间或者分数作为score进行排序。与其他数据结构相似，zset也有两种不同的实现，分别是zipList和skipList。

数据结构

跳表（skiplist）是一个查询/插入/删除 复杂度o(lgn)的数据结构。在查询上跟平衡]]></description><category></category></item><item><title><![CDATA[线程池实现原理]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121728089</link><guid>https://blog.csdn.net/dingjianmin/article/details/121728089</guid><author>dingjianmin</author><pubDate>Sun, 05 Dec 2021 13:08:56 +0800</pubDate><description><![CDATA[创建线程有哪几种方式

一、继承Thread类创建线程类


	（1）定义Thread类的子类，并重写该类的run方法，该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
	
	
	（2）创建Thread子类的实例，即创建了线程对象。
	
	
	（3）调用线程对象的start()方法来启动该线程。
	
二、通过Runnable接口创建线程类


	（1）定义runnable接口的实现类，并重写该接口的run()方法，该run()方法的方法体同样是该线程的线程执行体。
	
	
..]]></description><category></category></item><item><title><![CDATA[数据库Mysql 核心日志（redolog、undolog、binlog）]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121727060</link><guid>https://blog.csdn.net/dingjianmin/article/details/121727060</guid><author>dingjianmin</author><pubDate>Sun, 05 Dec 2021 11:42:58 +0800</pubDate><description><![CDATA[Mysql 核心日志（redolog、undolog、binlog）

我们在使用Mysql 里会接触到三个核心日志分别是 binlog 、redo log、undo log， 这里面binlog 是server层的日志，而redo log 和undo log都是引擎层（innodb）的日志，要换其他数据引擎那么就未必有redo log和undo log了。也正是因为它们在Mysql不同的体系结构里，所以他们所针对的的问题也是完全不同的，而我们要了解这些日志的核心思想和功能原理，那么就势必先要从它锁针对的问]]></description><category></category></item><item><title><![CDATA[数据库MVCC多版本并发控制原理]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121722287</link><guid>https://blog.csdn.net/dingjianmin/article/details/121722287</guid><author>dingjianmin</author><pubDate>Sat, 04 Dec 2021 21:36:47 +0800</pubDate><description><![CDATA[MVCC实现原理


频繁的加锁会带来什么问题？

读数据的时候没办法修改。修改数据的时候没办法读取，极大的降低了数据库性能。

数据库是如何解决加锁后的性能问题的？

MVCC 多版本控制实现读取数据不用加锁， 可以让读取数据同时修改。修改数据时同时可读取。


一、什么是MVCC？

MVCC是在并发访问数据库时，通过对数据做多版本管理，避免因为写锁的阻塞而造成读数据的并发阻塞问题。

通俗的讲就是MVCC通过保存数据的历史版本，根据比较版本号来处理数据的是否显示，从而达到读取数据的时候不需要加锁就可以]]></description><category></category></item><item><title><![CDATA[数据库事务与锁]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121722223</link><guid>https://blog.csdn.net/dingjianmin/article/details/121722223</guid><author>dingjianmin</author><pubDate>Sat, 04 Dec 2021 21:34:11 +0800</pubDate><description><![CDATA[一、事务的ACID特性

什么是事务？

在数据库系统里而言，事务是代表一个或者一系列操作的最小逻辑单元，所有在这个逻辑单元内的操作要么全部成功，要么就全部失败，不存在任何中间状态，一旦事务失败那么所有的更改都会被撤消，一旦事务成功所有的操作结果都会被保存。

“一致性是事务的最终目的，而原子性、隔离性、持久性其实都是为了实现一致性的手段”。

1、原子性（Atomicity）


概念：一个事务必须是一系列操作的最小单元，这系列操作的过程中，要么整个执行，要么整个回滚，不存在只执行了其中某一个或者某几个步]]></description><category></category></item><item><title><![CDATA[gateway和nginx网关的区别]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121718914</link><guid>https://blog.csdn.net/dingjianmin/article/details/121718914</guid><author>dingjianmin</author><pubDate>Sat, 04 Dec 2021 17:37:22 +0800</pubDate><description><![CDATA[spring cloud gateway

网关是介于nignx以及业务应用之间的中间层，主要负责将请求路由到不同的微服务中以及对请求的合法性进行校验。

我们目前网关的选型是spring cloud gateway，位置在nignx之后，各个微服务应用之前。为何在已经有nignx的情况下，中间还需要一道负责负载均衡功能的网关呢？

一个原因是spring cloud gateway天然集成了注册中心eureka，能实现应用的自动注册与发现，而nginx每增加一个服务应用都需要手动去设置配置文件。 另一个原]]></description><category></category></item><item><title><![CDATA[数据库优化的方法]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121718822</link><guid>https://blog.csdn.net/dingjianmin/article/details/121718822</guid><author>dingjianmin</author><pubDate>Sat, 04 Dec 2021 17:27:37 +0800</pubDate><description><![CDATA[1、数据库优化概览图

在数据库优化方面，从主到次的顺序：

以SQL优化、索引优化为主，解决慢SQL问题，最大程度地利用好索引 其次从数据库表结构入手、分库与分表，对数据量级进行处理 最大化利用机器配置，比如设置使用机器内存的大小 如果以上三点无法满足需求，那么再考虑硬件方面的问题，比如提升机器配置，再不行就多用几台服务器，这种成本较高，其性价比相对来说是最低的



2、软优化：

2.1、查询语句的优化 用EXPLAIN 分析一条查询语句


	1.避免索引失效导致的全表扫描
	
	
	2.SQL语句]]></description><category></category></item><item><title><![CDATA[Redis使用过程中遇到的问题]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121691082</link><guid>https://blog.csdn.net/dingjianmin/article/details/121691082</guid><author>dingjianmin</author><pubDate>Fri, 03 Dec 2021 09:11:58 +0800</pubDate><description><![CDATA[Redis使用过程中的问题


	数据库和redis的数据一致性问题（最终一致性）
	


	先更新数据库，再删除缓存(相当于被动更新)
	
	
	先删除缓存，再更新数据库
	



	缓存雪崩
	

大量热点数据同时失效，或者redis出现故障

由redis的key过期导致




	过期时间设置一个随机值
	
	
	对于热点数据，没必要设置过期时间
	
	
	增加二级缓存
	



	缓存穿透
	

redis和mysql都不存在的情况，有可能是恶意攻击。


Redis使用起来很简单，但是在实际应用]]></description><category></category></item><item><title><![CDATA[centos7设置静态IP地址& “journalctl -xe“ for details]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121608697</link><guid>https://blog.csdn.net/dingjianmin/article/details/121608697</guid><author>dingjianmin</author><pubDate>Mon, 29 Nov 2021 19:00:00 +0800</pubDate><description><![CDATA[1.查看IP配置信息



如上图所示，我的em1网卡已配置好

2、编辑 vi /etc/sysconfig/network-scripts/ifcfg-你的网卡名字



操作：vim /etc/sysconfig/network-scripts/ifcfg-你的网卡名字，按i键进入编辑。编辑结束后Esc退出编辑→Shift+q→!wq→x

修改配置文件如下图



参数说明：


BOOTPROTO="static" # 使用静态IP地址，默认为dhcp 
IPADDR="19.37.33.66".]]></description><category></category></item><item><title><![CDATA[Netty介绍及其工作原理]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121361854</link><guid>https://blog.csdn.net/dingjianmin/article/details/121361854</guid><author>dingjianmin</author><pubDate>Tue, 16 Nov 2021 18:20:16 +0800</pubDate><description><![CDATA[资料总结来自MIC老师，仅供学习使用。

为什么选择Netty

Netty其实就是一个高性能NIO框架，所以它是基于NIO基础上的封装，本质上是提供高性能网络IO通信的功能。由于前面的课程中我们已经详细的对网络通信做了分析，因此在学习Netty时，学习起来应该是更轻松的。

Netty提供了上述三种Reactor模型的支持，我们可以通过Netty封装好的API来快速完成不同Reactor模型的开发，这也是为什么大家都选择Netty的原因之一，除此之外，Netty相比于NIO原生API，它有以下特点：


]]></description><category></category></item><item><title><![CDATA[网络IO的通信原理及Reactor模型]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121349059</link><guid>https://blog.csdn.net/dingjianmin/article/details/121349059</guid><author>dingjianmin</author><pubDate>Tue, 16 Nov 2021 09:55:48 +0800</pubDate><description><![CDATA[网络IO的通信原理

首先，对于TCP通信来说，每个TCP Socket的内核中都有一个发送缓冲区和一个接收缓冲区，接收缓冲区把数据缓存到内核，若应用进程一直没有调用Socket的read方法进行读取，那么该数据会一直被缓存在接收缓冲区内。不管进程是否读取Socket，对端发来的数据都会经过内核接收并缓存到Socket的内核接收缓冲区。

read所要做的工作，就是把内核接收缓冲区中的数据复制到应用层用户的Buffffer里。

进程调用Socket的send发送数据的时候，一般情况下是将数据从应用层用户的]]></description><category></category></item><item><title><![CDATA[阿里云服务器上部署zookeeper 3.6.3（6）- 一致性与Leader选举原理分析篇]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121346393</link><guid>https://blog.csdn.net/dingjianmin/article/details/121346393</guid><author>dingjianmin</author><pubDate>Tue, 16 Nov 2021 09:21:11 +0800</pubDate><description><![CDATA[学习资料来源MIC老师，仅供学习使用。

关于Zookeeper中的一致性

前面我们在讲Zookeeper的数据同步时，提到zookeeper并不是强一致性服务，它是一个最终一致性模型，具体情况如图-4所示。



ClientA/B/C假设只串行执行， clientA更新zookeeper上的一个值x。ClientB和clientC分别读取集群的不同副本，返回的x的值是不一样的。clientC的读取操作是发生在clientB之后，但是却读到了过期的值。很明显，这是一种弱一致模型。如果用它来实现锁机制是.]]></description><category></category></item><item><title><![CDATA[阿里云服务器上部署zookeeper 3.6.3（5）- 基于Zookeeper实现分布式锁及Leader选举篇]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121307120</link><guid>https://blog.csdn.net/dingjianmin/article/details/121307120</guid><author>dingjianmin</author><pubDate>Sat, 13 Nov 2021 17:37:24 +0800</pubDate><description><![CDATA[资料来自MIC老师，仅学习参考。

理解分布式锁

我们先来看一个问题，如图11-1所示，两个用户同时去抢购秒杀商品，当秒杀服务同时收到秒杀请求时，都去进行库存扣减，此时在没有做任何处理的情况下，就会导致库存数量变成负数从而导致超卖现象。

这种情况下我们一般会选择加锁的方式来避免并发的问题。但是在分布式场景中，采用传统的锁并不能解决跨进程并发的问题，所以需要引入一个分布式锁，来解决多个节点之间的访问控制。







Zookeeper如何解决分布式锁

我们可以基于Zookeeper的两种特性来实现.]]></description><category></category></item><item><title><![CDATA[阿里云服务器上部署zookeeper 3.6.3（4）- 客户端命令使用篇]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121274727</link><guid>https://blog.csdn.net/dingjianmin/article/details/121274727</guid><author>dingjianmin</author><pubDate>Thu, 11 Nov 2021 19:51:22 +0800</pubDate><description><![CDATA[zkCli.sh客户端命令使用


[root@iZwz9fyh8d6xm9hs0q453mZ bin]# ./zkCli.sh






./zkCli.sh -timeout 0 -r -server ip:port
./zkCli.sh -timeout 5000 -server 192.9.200.242:2181
​
-r ：即使ZooKeeper服务器集群一般以上的服务器当掉，也给客户端体统读服务



h ：显示所有命令


[zk: localhost:2181(CONNECTED) 0.]]></description><category></category></item><item><title><![CDATA[阿里云服务器上部署zookeeper 3.6.3（3）- 集群模式篇]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121274458</link><guid>https://blog.csdn.net/dingjianmin/article/details/121274458</guid><author>dingjianmin</author><pubDate>Thu, 11 Nov 2021 19:32:37 +0800</pubDate><description><![CDATA[伪集群模式


这里我们采用的是伪集群模式，一台机器上三个节点，集群模式是一台机器上一个节点。之所以称伪集群，就是这台机器挂了，集群也就没了。集群与伪集群的方式完全一样的。


Zookeeper工作原理

在zookeeper的集群中，各个节点共有下面3种角色和4种状态：


角色：leader,follower,observer

状态：leading,following,observing,looking


Zookeeper的核心是原子广播，这个机制保证了各个Server之间的同步。实现这个机制的]]></description><category></category></item><item><title><![CDATA[阿里云服务器上部署zookeeper 3.6.3（2）- 单机模式篇]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121274027</link><guid>https://blog.csdn.net/dingjianmin/article/details/121274027</guid><author>dingjianmin</author><pubDate>Thu, 11 Nov 2021 19:09:12 +0800</pubDate><description><![CDATA[单机模式


zookeeper有两种运行模式：集群模式和单机模式。


下载zookeeper安装包：https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz 。

步骤一：安装配置jdk环境

　　切换到root账户

　　检查是否已安装过jdk


yum list --installed|grep jdk　

　　或者java -version看下能不能执行。

　　如]]></description><category></category></item><item><title><![CDATA[java核心知识点总结篇-JAVA 基础篇]]></title><link>https://blog.csdn.net/dingjianmin/article/details/121177014</link><guid>https://blog.csdn.net/dingjianmin/article/details/121177014</guid><author>dingjianmin</author><pubDate>Sat, 06 Nov 2021 14:19:07 +0800</pubDate><description><![CDATA[5.1.1. JAVA 异常分类及处理

5.1.1.1. 概念

如果某个方法不能按照正常的途径完成任务，就可以通过另一种路径退出方法。在这种情况下

会抛出一个封装了错误信息的对象。此时，这个方法会立刻退出同时不返回任何值。另外，调用

这个方法的其他代码也无法继续执行，异常处理机制会将代码执行交给异常处理器。





5.1.1.2. 异常分类

Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception

Error

\1. Error 类是指.]]></description><category></category></item></channel></rss>