<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chuchenchen的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chuchenchen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chuchenchen]]></copyright><item><title><![CDATA[Elasticsearch]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/155884787</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/155884787</guid><author>chuchenchen</author><pubDate>Sat, 13 Dec 2025 12:34:23 +0800</pubDate><description><![CDATA[掌握 ES 核心概念与 MySQL 的对应关系，快速建立认知；能独立搭建 ES + Kibana 环境，解决常见启动问题；熟练使用 RESTful API 完成索引、文档的 CRUD 及基础检索，可落地到工作中的简单检索场景（如日志查询、底稿关键词搜索）。]]></description><category></category></item><item><title><![CDATA[redis的分布式锁]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/143308328</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/143308328</guid><author>chuchenchen</author><pubDate>Mon, 28 Oct 2024 17:30:18 +0800</pubDate><description><![CDATA[‌‌是指在给定的键不存在时，将该键的值设置为指定的值。如果键已经存在，则不进行任何操作。这种方法在多线程和分布式环境下非常有用，能够避免竞态条件，确保操作的原子性‌。]]></description><category></category></item><item><title><![CDATA[Optional orElse orElseGet的基本用法]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/142896900</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/142896900</guid><author>chuchenchen</author><pubDate>Sun, 13 Oct 2024 12:52:47 +0800</pubDate><description><![CDATA[/ 执行该句时会打印"Generating a name..."//orElseGet 只有为空的时候才走 返回值为方法返回。//OrElse  里的方法必走  返回值为方法返回。//Optional  值为空。]]></description><category></category></item><item><title><![CDATA[Springboot EnableScheduling注解解析]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/124670195</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/124670195</guid><author>chuchenchen</author><pubDate>Mon, 09 May 2022 17:08:01 +0800</pubDate><description><![CDATA[解析：Spring @EnableScheduling 注解是要实现计划任务，首先通过在配置类注解@EnableScheduling来开启对计划任务的支持，然后在要执行计划任务的方法上注解@Scheduled，声明这是一个计划任务。一般公司里面企业级开发会集成经常用到此应用

实例demo

1.创建springboot项目maven不需要加别的依赖

2.写一个类 类里面写两个方法 方法上使用注解Scheduled 利于属性fixedRate设置定时时间间隔，完整代码如下：


package com.z]]></description><category></category></item><item><title><![CDATA[Sql优化，数据库优化]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/122643725</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/122643725</guid><author>chuchenchen</author><pubDate>Sat, 22 Jan 2022 21:09:50 +0800</pubDate><description><![CDATA[Sql 优化

正确使用sql

1.正确使用索引 查询条件列,排序列添加索引 项目中是如何使用的 查询条件

2.应改避免索引失效 name like "%张%" 改为全文索引

在 where 子句中 避免 num is null

在 where 子句中使用!=或&lt;&gt;操作符

避免在 where 子句中使用 or 来连接条件

在where num/2=100 使用运算符

在where中使用函数 substring()

3.mysql建议使用主键自增 合理利用索引结构

4.索引不宜建]]></description><category></category></item><item><title><![CDATA[MVCC的知识点]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/122637835</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/122637835</guid><author>chuchenchen</author><pubDate>Sat, 22 Jan 2022 15:06:02 +0800</pubDate><description><![CDATA[MVCC

MVCC（多版本并发控制 Multi-Version Concurrent Control）

为了提升mysql 读-写,写-读两个操作同时进行, 写-写mysql支持行级锁的,如果操作同一行数据,那么肯定是不可以的.



每次对表中的记录操作时,会保存一个日志(undolog) 里面会记录事务的id号.

如果有多个事务操作时,他们就会根据事务id,找到自己操作的版本记录.



不同的隔离级别在读数据时, 会根据版本链生成一个ReadView(临时读视图) 版本链快照



READ C]]></description><category></category></item><item><title><![CDATA[Mysql事物的四大特性，隔离级别]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/122637828</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/122637828</guid><author>chuchenchen</author><pubDate>Sat, 22 Jan 2022 15:05:15 +0800</pubDate><description><![CDATA[关系型数据事务4大特性:

原子性: 一次事务过程中的多个操作要么都成功,要么都失败.

持久性: 事务一旦提交,数据就不可改变.即使数据库服务出现问题.

隔离性: 数据库是允许同时有多个事务进行访问, 这时就需要对多个事务间的操作进行隔离,

隔离分为4个级别:

读未提交 问题 脏读

读已提交 解决 脏读 不可重复读

可重复读 解决 不可重读 幻读

串行化 解决一切问题 加锁 效率低

一致性: 在事务开始之前和事务结束以后，数据库的完整性没有被破坏.

例如: 我们多种方式对银行账户的余额进行]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap和HashTable的区别]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/122578874</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/122578874</guid><author>chuchenchen</author><pubDate>Wed, 19 Jan 2022 13:28:16 +0800</pubDate><description><![CDATA[Hashtable ConcurrentHashMap]]></description><category></category></item><item><title><![CDATA[JVM面试总结高频考点]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/122578786</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/122578786</guid><author>chuchenchen</author><pubDate>Wed, 19 Jan 2022 13:21:36 +0800</pubDate><description><![CDATA[Java校招面试JVM常考考点 高频考点]]></description><category></category></item><item><title><![CDATA[并发编程总结]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/122578725</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/122578725</guid><author>chuchenchen</author><pubDate>Wed, 19 Jan 2022 13:16:08 +0800</pubDate><description><![CDATA[回顾线程基本内容

程序: 静态代码 安装在硬盘上的

进程: 运行中的程序 是操作系统分配内存空间的单位

线程: 线程是进程中的一个最小执行单位, 是cpu调度单位 线程依赖于进程



创建线程

1.线程类 继承 Thread


	类 实现 Runnable接口 重写 run( )

	创建Thread类的对象,为其分配任务
	
	
	类 实现 Callable接口 重写 call( ) 有返回值 可以抛出异常
	
创建Thread类的对象,为其分配任务



常用方法

run() calll(]]></description><category></category></item><item><title><![CDATA[集合高频小结]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/121447748</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/121447748</guid><author>chuchenchen</author><pubDate>Sat, 20 Nov 2021 23:29:30 +0800</pubDate><description><![CDATA[一.集合

1.HashMap的低层实现原理？

线程不安全，存储null的key和value

jdk7:数组＋链表（jdk7） HashMap map = new HashMap();在实例化之后就创建了一个长度为16的一维数组Entry[] table,map.put(key1,value1) 首先调用Key1所在类的hashCode()计算key1的哈希值，此哈希值经过某种算法计算后，得到在Entry数组存放的位置，如果此位置上的数据为空，此时的key1-value1添加成功，如果此位置上的数据不为]]></description><category></category></item><item><title><![CDATA[死锁概念的具体实现]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/118343786</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/118343786</guid><author>chuchenchen</author><pubDate>Tue, 29 Jun 2021 20:59:32 +0800</pubDate><description><![CDATA[一：线程概念：不同的线程分别占用对方需要的同步资源不放弃，都在等待对方放弃 自己需要的同步 资源，就形成了线程的死锁. 出现死锁后，不会出现异常，不会出现提示，只是所有的线程都处于 阻塞状态，无法继续。

synchronized：隐试加锁，释放锁，可以锁定代码块，也可以锁定方法。

lock:可以显示的加锁，只能锁定代码块


package day05.demo2;
​
import java.util.concurrent.locks.Lock;
import java.util.concurre..]]></description><category></category></item><item><title><![CDATA[集合set和map总结]]></title><link>https://blog.youkuaiyun.com/chuchenchen/article/details/118228746</link><guid>https://blog.youkuaiyun.com/chuchenchen/article/details/118228746</guid><author>chuchenchen</author><pubDate>Fri, 25 Jun 2021 21:14:39 +0800</pubDate><description><![CDATA[一：set

不可以重复，值没有索引

1.1：HashSet:无序 低层用哈希表+链表+红黑树


package day01;

import java.util.HashSet;

public class HashSetDemo1 {
    public static void main(String[] args) {
        HashSet&lt;Integer&gt; set = new HashSet&lt;&gt;();
        set.add(2);
        s]]></description><category></category></item></channel></rss>