<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liyu1012的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/liyu1012</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; liyu1012]]></copyright><item><title><![CDATA[Redis的持久化机制、过期策略]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668805</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668805</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:44:03 +0800</pubDate><description><![CDATA[1. Redis持久化

很多时候我们需要把内存中的数据持久化到磁盘中,大部分原因在于重启机器或机器故障数据恢复 。
reids支持两种不同的序列化操作。Redis 的⼀种持久化⽅式叫快照（snapshotting，RDB），另⼀种⽅式是只追加文件（append-only file, AOF）

RDB（snapshotting）持久化
RDB就是在指定时间间隔内,将内存中的数据集快照写入磁盘。redis重启时是将快照文件直接读取到内存中,来恢复数据。

优点:

RDB文件紧凑,全量备份,非常适合于备份和]]></description><category></category></item><item><title><![CDATA[Redis常用的数据结构及使用场景]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668762</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668762</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:41:14 +0800</pubDate><description><![CDATA[Redis** 常⻅数据结构以及使⽤场景
1 string


**介绍:**最简单的类型,就是普通的set和get,做简单的kv缓存


常⽤命令:set,get,strlen,exists,dect,incr,setex 等等。


**应⽤场景:**⼀般常⽤在需要计数的场景，⽐如⽤户的访问次数、热点⽂章的点赞转发数量等。


set key1 haha			#设置key
get key1					#获取key
exists key1 			#是否存在
strlen key1 			#获取长度
del ]]></description><category></category></item><item><title><![CDATA[JVM--垃圾回收算法]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668708</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668708</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:38:56 +0800</pubDate><description><![CDATA[垃圾收集算法
1 标记-清除算法

标记清除算法是最常见的垃圾收集算法。当堆空间被耗尽的时候,就会停止整个程序(STW),进行两项操作。第一是标记,第二是清除

标记: 从根节点开始遍历,标记所有被引用的对象
清除: 从堆内存中从头到尾进行遍历,如果发现没有被标记的对象就进行回收。
缺点: 1.效率不高  2. 这种方式清理出来的空间不连续,会产生内存碎片
2 复制算法

复制算法的高效性,是建立在存货对象少,垃圾对象多的的前提下。显然比较适合新生代,不适合老年代。

过程: 将存活的内存空间分为两块,每次]]></description><category></category></item><item><title><![CDATA[Java多线程--ThreadPoolExecutor线程池]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668625</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668625</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:36:57 +0800</pubDate><description><![CDATA[线程池

线程池: 3大方法、7大参数、4种拒绝策略

3.10.1 Executors 工具类

        // 创建单个线程的线程池
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        // 创建一个固定大小的线程池
        ExecutorService executorService1 = Executors.newFixedThreadPool(5);
     ]]></description><category></category></item><item><title><![CDATA[深拷贝VS浅拷贝]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668500</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668500</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:30:50 +0800</pubDate><description><![CDATA[深拷贝与浅拷贝
浅拷贝

浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精准拷贝。 如果属性是基本数据类型,拷贝的就是基本类型的值;如果属性是运用类型(内存地址),拷贝的就是内存地址,因此如果其中一个对象修改了这个地址,就会影响另一个对象。

@Data
@AllArgsConstructor
public class Person implements Cloneable {

    private int age;

    private String name;

  ]]></description><category></category></item><item><title><![CDATA[23种设计模式--原型模式]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668471</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668471</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:29:48 +0800</pubDate><description><![CDATA[2. 原型模式
2.1 概述

原型模式简单来说就是 主要用于对象的复制 用原型实例指定创建对象的种类，并通过拷贝这些原型创建新的对象

原型模式实际上就是实现Cloneable接口,重写clone()方法。
使用场景:
原型模式优点:

java自带的原型模式基于内存二进制流的复制,在性能上比直接new一个更快
可以使用克隆模式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程。

原型模式缺点:


需要为每个类都配置一个clone方法


clone方法位于类的内部,]]></description><category></category></item><item><title><![CDATA[23种设计模式-- 单例模式]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122668419</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122668419</guid><author>liyu1012</author><pubDate>Mon, 24 Jan 2022 15:28:14 +0800</pubDate><description><![CDATA[1. 单例模式

简而言之就是为了节省内存资源,要求某些类只能创建一个实例

1.1 概述
单例模式的3个特点:

只能有一个实例
单例对象必须由单例类自行创建
单例类对外提供一个获取该实例的方法

单例模式的应用场景:

频繁创建的一些类,使用单例降低资源消耗,减少GC
某些需要频繁实例化,而创建的对象又频繁销毁的资源,如多线程的线程池,网络连接池等

1.2 代码实现
Singleton有两种实现方式 饿汉式、懒汉式
1.2.1 饿汉式

该模式的特点就是类在加载的时候就创建一个实例,保证在调用gitI]]></description><category></category></item><item><title><![CDATA[微服务链路追踪之 zipkin+sleuth]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122573475</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122573475</guid><author>liyu1012</author><pubDate>Wed, 19 Jan 2022 09:26:18 +0800</pubDate><description><![CDATA[zipkin+sleuth

微服务链路追踪:跟踪一个用户请求的过程,捕获这些追踪数据,就能构建微服务的整个调用链的视图。





特点
说明




提供链路追踪
通过sleuth可以很清楚的看出一个请求经过了哪些服务， 可以方便的理清服务局的调用关系


性能分析
通过sleuth可以很方便的看出每个采集请求的耗时， 分析出哪些服务调用比较耗时，当服务调用的耗时 随着请求量的增大而增大时，也可以对服务的扩容提 供一定的提醒作用


数据分析 优化链路
对于频繁地调用一个服务，或者并行地调用等， 可以针]]></description><category></category></item><item><title><![CDATA[Centos 配置yum的源地址]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122534507</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122534507</guid><author>liyu1012</author><pubDate>Mon, 17 Jan 2022 10:23:39 +0800</pubDate><description><![CDATA[安装wget

yum install -y wget


备份/etc/yum.repos.d/CentOS-Base.repo文件

cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.back


下载阿里云的Centos-6.repo文件

wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo


重新加载yum

yum clean all
yum.]]></description><category></category></item><item><title><![CDATA[GitLab安装(基于Docker)]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122534421</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122534421</guid><author>liyu1012</author><pubDate>Mon, 17 Jan 2022 10:20:37 +0800</pubDate><description><![CDATA[1. gitlab环境准备
1.1	拉取镜像
docker pull gitlab/gitlab-ce:12.10.0-ce.0

1.2  准备挂载目录
mkdir -p /mydata/gitlab/config   
mkdir -p /mydata/gitlab/logs    
mkdir -p /mydata/gitlab/data    

1.3 运行镜像
docker run --detach \
		--restart=always \
    --hostname 172.16.25.]]></description><category></category></item><item><title><![CDATA[Docker安装Sentinel]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122487092</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122487092</guid><author>liyu1012</author><pubDate>Fri, 14 Jan 2022 09:16:30 +0800</pubDate><description><![CDATA[sentinel
1.  拉取镜像
docker pull bladex/sentinel-dashboard:1.8.0

2.运行镜像
docker run --restart=always \
--name sentinel \
-d -p 8858:8858 -d bladex/sentinel-dashboard:1.8.0

-d 后台运行
-p 端口映射
–restart=always 表示自启
3.安装成功
账户密码默认都是 sentinel


...]]></description><category></category></item><item><title><![CDATA[RabbitMQ集群模式的安装(基于Docker)]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122487021</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122487021</guid><author>liyu1012</author><pubDate>Fri, 14 Jan 2022 09:13:40 +0800</pubDate><description><![CDATA[rabbitmq
1. 集群模式

RabbitMQ 有三种模式：单机模式，普通集群模式，镜像集群模式。单机模式即单独运行一个 rabbitmq 实例，而集群模式需要创建多个 rabbitmq实例。

1.1 普通集群模式
默认的集群模式。需要创建多个 RabbitMQ 节点。但对于 Queue 和消息来说，只存在于其中一个节点，其他节点仅同步元数据，即队列的结构信息。

1.2 镜像集群模式
把队列做成镜像队列，让各队列存在于多个节点中，属于 RabbitMQ 的高可用性方案。镜像模式和普通模式的不同在于]]></description><category></category></item><item><title><![CDATA[docker环境下redis单节点安装]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122430971</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122430971</guid><author>liyu1012</author><pubDate>Tue, 11 Jan 2022 13:51:52 +0800</pubDate><description><![CDATA[redis安装
1. 获取 redis 镜像
##默认为最新版
docker pull redis

## 开放防火墙
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

2. 从官网获取 redis.conf 配置文件
# 创建redis配置文件挂载目录 conf为配置文件 data为数据
mkdir -p /mydata/redis/conf
mkdir -p /mydata/redis/da]]></description><category></category></item><item><title><![CDATA[docker环境下nacos的集群安装(持久化到mysql)]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122430603</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122430603</guid><author>liyu1012</author><pubDate>Tue, 11 Jan 2022 13:47:50 +0800</pubDate><description><![CDATA[docker环境下 nacos集群安装(三节点,配置持久化到mysql)]]></description><category></category></item><item><title><![CDATA[java集合总结]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/122123762</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/122123762</guid><author>liyu1012</author><pubDate>Fri, 24 Dec 2021 11:09:40 +0800</pubDate><description><![CDATA[集合框架
知识体系结构图

集合容器主要包括collection和Map两种,Collection存储着对象的集合,而Map存储着键值对的映射表



Collection
List
ArrayList

ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许存Null元素,底层通过 数组实现(Object数组)。
为追求效率，ArrayList没有实现同步(synchronized)，如果需要多个线程并发访问，用户可以手动同步，也可使用Vector替代。

数组结构
 ]]></description><category></category></item><item><title><![CDATA[java之彻底搞懂并发编程、juc]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/121783966</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/121783966</guid><author>liyu1012</author><pubDate>Wed, 08 Dec 2021 09:56:09 +0800</pubDate><description><![CDATA[`## 并发编程
1. 什么是juc

java.util.concurrent在并发编程中使用的工具类

2. 线程基础
2.1 进程和线程


进程
一个程序,QQ.exe
一个进程往往可以包含多个线程
java有多个线程? 2个  main  GC


线程
比如安全管家是一个进程,那么杀毒、垃圾清理都是一个线程


2.2 并发和并行

Erlang 之父 Joe Armstrong 用一张5岁小孩都能看懂的图解释了并发与并行的区别


并发是两个队列交替使用一台咖啡机
并行是两个队列同时使用两台咖]]></description><category></category></item><item><title><![CDATA[rabbitmq消息队列连环炮]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/121625058</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/121625058</guid><author>liyu1012</author><pubDate>Tue, 30 Nov 2021 09:34:48 +0800</pubDate><description><![CDATA[消息队列
使用消息队列的优缺点?
好处:

通过异步处理提高系统性能
削峰/限流
降低系统耦合性

坏处:

系统可用性降低
系统复杂度提高
一致性问题

Kafka、ActiveMq、RabbitMq、RocketMq区别?




特性
ActiveMQ
RabbitMQ
RocketMQ
Kafka




单机吞吐量
万级，比 RocketMQ、Kafka 低一个数量级
同 ActiveMQ
10 万级，支撑高吞吐
10 万级，高吞吐，一般配合大数据类的系统来进行实时数据计算、日志采集等场景


t]]></description><category></category></item><item><title><![CDATA[深入理解JVM(耗时一周吐血整理)--上]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/121422105</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/121422105</guid><author>liyu1012</author><pubDate>Fri, 19 Nov 2021 14:44:38 +0800</pubDate><description><![CDATA[1. jvm与java体系结构
1.1 Java代码执行流程

2. 类加载子系统
2.1 内存结构


Class文件


类加载子系统


运行时数据区



方法区




堆




程序计数器




虚拟机栈




本地方法栈



执行引擎


本地方法接口


本地方法库


2.2 类的加载过程

加载阶段

.class加载

链接阶段

验证

目的为了确保class文件的字节流包含信息符合当前虚拟机要求,保证正确性。
四种验证: 文件格式验证、元数据验证、字节码验证、符号引用验证
]]></description><category></category></item><item><title><![CDATA[mysql面试题(拿捏面试官)]]></title><link>https://blog.youkuaiyun.com/liyu1012/article/details/120042810</link><guid>https://blog.youkuaiyun.com/liyu1012/article/details/120042810</guid><author>liyu1012</author><pubDate>Wed, 01 Sep 2021 16:21:54 +0800</pubDate><description><![CDATA[基础
什么是DML、DDL、DCL?
DQL数据查询语言
	DQL基本结构是由select,from,where子句组成的查询块
DML数据操纵语言:
	就是我们经常使用到的SELECT、UPDATE、INSERT、DELETE。主要用来对数据库的数据进行一些操作。
DDL数据库定义语言:
	其实就是我们在创建表的时候用到的一些sql,比如说create、alter等。DDL主要是用在定义或者改变表的结构,数据类型,表之间的链接和约束等初始化工作上。
DCL数据库控制语言:
	是用来设置或者更改数据库用户或]]></description><category></category></item></channel></rss>