<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cgk1996的博客]]></title><description><![CDATA[记录自己的学习过程]]></description><link>https://blog.youkuaiyun.com/cgk1996</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cgk1996]]></copyright><item><title><![CDATA[并发面试题]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/124874484</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/124874484</guid><author>cgk1996</author><pubDate>Thu, 19 May 2022 23:57:45 +0800</pubDate><description><![CDATA[HashMap和ConcurrentHashMap和HashTable

HashMap、HashTable、ConcurrentHashMap区别

答：首先三者都实现了Map接口，存储都是 Key、Value 的键值对。

HashMap是线程不安全的，HashTable、ConcurrentHashMap是线程安全的。

HashMap：存在多个线程同时修改同一数据得情况，所以非线程安全

HashTable：线程安全的。HashTable的每一个方法都加Synchronize锁，直接锁住了方法，方法]]></description><category></category></item><item><title><![CDATA[docker常用命令]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/124834848</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/124834848</guid><author>cgk1996</author><pubDate>Wed, 18 May 2022 08:53:46 +0800</pubDate><description><![CDATA[docker命令

https://docs.docker.com/engine/reference/run/


查看所有镜像

docker images


查看所有正在运行容器

docker ps


查看所有容器

docker ps -a


查看所有容器ID

docker ps -a -q


stop停止所有容器

docker stop $(docker ps -a -q)


remove删除所有容器

docker  rm $(docker ps -a -q)


查找image
]]></description><category></category></item><item><title><![CDATA[Mybatis面试题]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/124680070</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/124680070</guid><author>cgk1996</author><pubDate>Tue, 10 May 2022 08:40:13 +0800</pubDate><description><![CDATA[Mybatis面试题
resultType 和 resultMap 的区别？


resultType 是标签的一个属性，适合简单对象（POJO、JDK 自带类型： Integer、String、Map 等），只能自动映射，适合单表简单查询。


&lt;select id="selectAuthor" parameterType="int" resultType="com.gupaoedu.domain.Author"&gt;
    select author_id authorId, author_n]]></description><category></category></item><item><title><![CDATA[RestTemplate的使用]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/124620825</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/124620825</guid><author>cgk1996</author><pubDate>Fri, 06 May 2022 22:53:08 +0800</pubDate><description><![CDATA[RestTemplate的使用
GET请求
getForObject
第一种
String result = externalRestTemplate.getForObject("http://127.0.0.1:8081/restTemplate/get", String.class);

第二种
String result = externalRestTemplate.getForObject("http://127.0.0.1:8081/restTemplate/get/{a}/{b}", Strin]]></description><category></category></item><item><title><![CDATA[接口文档生成和管理解决方案：Smart-Doc+Torna]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/124586155</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/124586155</guid><author>cgk1996</author><pubDate>Thu, 05 May 2022 12:34:26 +0800</pubDate><description><![CDATA[今天给大家推荐的是接口文档生成和管理解决方案：Smart-Doc+Torna
通过Smart-Doc生成接口文档并推送到Torna接口文档管理平台上。用户(前端、后端人员、外部人员)通过文档管理平台查看、编辑接口文档等。
推荐理由：

Smart-Doc真的是零注解、零学习成本、只需要写标准JAVA注释
Torna是开源文档管理平台，拿到即用，自带了很多文档管理的功能：用户管理、权限管理等
Smart-Doc + Torna实现文档全流程自动化(最重要的一点，非常的方便)

开源地址：

Smart-Doc]]></description><category></category></item><item><title><![CDATA[事务&数据库锁&MVCC]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/124554598</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/124554598</guid><author>cgk1996</author><pubDate>Tue, 03 May 2022 14:10:28 +0800</pubDate><description><![CDATA[事务&数据库锁&MVCC的一些概念和描述]]></description><category></category></item><item><title><![CDATA[MQ消息队列面试题]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/121913608</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/121913608</guid><author>cgk1996</author><pubDate>Mon, 13 Dec 2021 20:30:35 +0800</pubDate><description><![CDATA[MQ消息队列面试题，个人整理，如有错误，请留言]]></description><category></category></item><item><title><![CDATA[MySQL查询优化详解]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103487392</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103487392</guid><author>cgk1996</author><pubDate>Wed, 11 Dec 2019 10:03:14 +0800</pubDate><description><![CDATA[MySQL查询优化详解
查询执行路径


mysql 客户端/服务端通信
查询缓存
查询优化处理
查询执行引擎
返回客户端


mysql 客户端/服务端通信

Mysql客户端与服务端的通信方式是“半双工”；

全双工：双向通信，发送同时也可以接收
半双工：双向通信，同时只能接收或者是发送，无法同时做操作
单工：只能单一方向传送



半双工通信：

在任何一个时刻，要么是有服务器向客户端发送数...]]></description><category></category></item><item><title><![CDATA[定位慢sql - 慢查询日志]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103487379</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103487379</guid><author>cgk1996</author><pubDate>Wed, 11 Dec 2019 10:02:39 +0800</pubDate><description><![CDATA[定位慢sql - 慢查询日志
慢查询日志配置


show variables like ‘slow_query_log’
set global slow_query_log = on
set global slow_query_log_file = ‘/var/lib/mysql/gupaoedu-slow.log’
set global log_queries_not_using_indexe...]]></description><category></category></item><item><title><![CDATA[存储引擎]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103487369</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103487369</guid><author>cgk1996</author><pubDate>Wed, 11 Dec 2019 10:02:08 +0800</pubDate><description><![CDATA[存储引擎
介绍


插拔式的插件方式
存储引擎是指定在表之上的，即一个库中的每一个表都可以指定专用的存储引擎
不管表采用什么样的存储引擎，都会在数据区，产生对应的一个frm文件（表结构定义描述文件，mysql 8.0版本之后 没有该文件）


CSV存储引擎
数据存储以CSV文件
特点


不能定义没有索引、列定义必须为NOT NULL、不能设置自增列 —&gt; 不适用大表或者数据的在线处理
C...]]></description><category></category></item><item><title><![CDATA[MySQL 索引及B+树]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103487345</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103487345</guid><author>cgk1996</author><pubDate>Wed, 11 Dec 2019 10:01:33 +0800</pubDate><description><![CDATA[MySQL 索引及B+树
什么是索引？

索引是为了加速对表中数据行的检索而创建的一种分散存储的 数据结构

为什么用索引


索引能极大的减少存储引擎需要扫描的数据量
索引可以把随机IO变成顺序IO
索引可以帮助我们在进行分组、排序等操作时，避免使 用临时表


为什么用B+树


普通的树，当数据的id 一直是增量的时候，树的什么就一直增加，从而失去了索引的意义
使用平衡二叉树，可以避免普通树...]]></description><category></category></item><item><title><![CDATA[代理模式]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103226377</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103226377</guid><author>cgk1996</author><pubDate>Sun, 24 Nov 2019 17:16:38 +0800</pubDate><description><![CDATA[代理模式
为其他对象提供一种代理，以控制对这个对象的访问。
使用场景

保护目标对象
增强目标对象

静态代理
显式声明被代理对象
使用场景
代理类，只代理 一个被代理类

定义一个person接口

public interface Person {
    void findLove();
}


被代理类

public class Son implements Person {
    @...]]></description><category></category></item><item><title><![CDATA[原型模式]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103134582</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103134582</guid><author>cgk1996</author><pubDate>Tue, 19 Nov 2019 00:40:49 +0800</pubDate><description><![CDATA[原型模式
用一个已经创建的实例作为原型，通过克隆 获得一个新对象
使用场景

类的初始化消耗资源过多
new产生的一个对象需要非常繁琐的过程
循环体中生产大量对象时，可读性下降
构造函数比较复杂

浅克隆
适用场景
克隆出来的对象和原对象中的 属性地址 一样
public class Prototype implements Cloneable {
    private int age;
   ...]]></description><category></category></item><item><title><![CDATA[使用数组实现队列]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103112700</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103112700</guid><author>cgk1996</author><pubDate>Sun, 17 Nov 2019 20:16:55 +0800</pubDate><description><![CDATA[使用数组实现队列
public class MyQueue {

    private int[] array;
    private int front;
    private int rear;

    public MyQueue(int capacity) {
        this.array = new int[capacity];
    }

    public voi...]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103104925</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103104925</guid><author>cgk1996</author><pubDate>Sun, 17 Nov 2019 00:38:28 +0800</pubDate><description><![CDATA[单例模式
使用场景
全局只有一个实例。确保一个类在任何情况下都绝对只有一个实例，并提供一个全局访问点。
饿汉式

优点：线程安全，能够确保 任何时候访问都是同一个实例
缺点：不管是否使用这个实例，只要类加载了，就会初始化实例，这样造成空间浪费。

public class HungrySingle {

    private static HungrySingle hungrySingle = ...]]></description><category></category></item><item><title><![CDATA[工厂模式]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/103093094</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/103093094</guid><author>cgk1996</author><pubDate>Fri, 15 Nov 2019 22:11:33 +0800</pubDate><description><![CDATA[工厂模式
使用场景

一个基类有很对子类，并且子类对象创建过程复杂，将对象创建的过程放在工厂中，如果使用对象的时候，直接从工厂中获取。
优点：不用管复杂的创建逻辑，同时实现创建和使用的解耦作用。
缺点：一旦基类发生改变，所有子类都需要改变。

简单工厂模式
适用场景
工厂类负责创建的对象较少的场景，并且工厂的创建方法需要传递参数

培训机构有很多课程，包括Java课程、Python课程等：
课程的...]]></description><category></category></item><item><title><![CDATA[ForkJoin的使用]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/102998623</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/102998623</guid><author>cgk1996</author><pubDate>Sun, 10 Nov 2019 16:03:20 +0800</pubDate><description><![CDATA[ForkJoin的使用
第一种 无返回值的使用：异步处理线程
第一步：定义一个task，继承RecursiveTask，用于分组 和 每个线程对每个组的处理逻辑
@Component
@Slf4j
public class TaskForkJoin extends RecursiveTask&lt;Void&gt; {

    /**
     * 阀值,每组的大小
     */
    pr...]]></description><category></category></item><item><title><![CDATA[SpringBoot中线程池的使用]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/102889384</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/102889384</guid><author>cgk1996</author><pubDate>Mon, 04 Nov 2019 00:14:56 +0800</pubDate><description><![CDATA[线程池在springboot中的创建及使用
第一步 配置线程池
创建线程池的Bean
@Configuration
@EnableAsync
@Slf4j
public class ExecutorConfig {

    @Value("${async.executor.thread.core_pool_size}")
    private int corePoolSize;
    @Va...]]></description><category></category></item><item><title><![CDATA[JMeter简单使用]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/102889286</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/102889286</guid><author>cgk1996</author><pubDate>Mon, 04 Nov 2019 00:11:15 +0800</pubDate><description><![CDATA[第一步 新建线程组
右键 &gt; 添加 &gt; 线程 &gt;线程组

第二步 配置线程组参数
第一种：设置线程数和执行次数


线程数：虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up Period(in seconds)准备时长：设置的虚拟用户数需要多长时间全部启动。如果线程数为10，准备时长为2，那么需要2秒钟启动10个线程，也...]]></description><category></category></item><item><title><![CDATA[访问SpringBoot应用配置无权限]]></title><link>https://blog.youkuaiyun.com/cgk1996/article/details/83218631</link><guid>https://blog.youkuaiyun.com/cgk1996/article/details/83218631</guid><author>cgk1996</author><pubDate>Sun, 21 Oct 2018 00:39:08 +0800</pubDate><description><![CDATA[访问SpringBoot应用配置无权限
在地址栏中访问类型/beans时，无权限，需要
在application.properties中配置management.security.enabled=false属性

]]></description><category></category></item></channel></rss>