<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ccccc202的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ccccc202</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ccccc202]]></copyright><item><title><![CDATA[Redis学习-中级篇]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/115853427</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/115853427</guid><author>ccccc202</author><pubDate>Sun, 18 Jul 2021 09:10:39 +0800</pubDate><description><![CDATA[发布订阅
发布订阅

什么是发布订阅
Redis发布订阅（pub/sub）是一种消息通讯模式：可以指定一个频道（key），发布者（pub）向频道发送消息，订阅者（sub）可以接受该频道的消息。



]]></description><category></category></item><item><title><![CDATA[Redis-高级篇]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/116571777</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/116571777</guid><author>ccccc202</author><pubDate>Sun, 18 Jul 2021 09:09:57 +0800</pubDate><description><![CDATA[发布订阅
发布订阅


什么是发布订阅
Redis发布订阅（pub/sub）是一种消息通讯模式：可以指定一个频道（key），发布者（pub）向频道发送消息，订阅者（sub）可以接受该频道的消息。


客户端演示


先创建频道名redisWechat

redis 127.0.0.1:6379&gt; SUBSCRIBE redisChat
Reading messages… (press Ctrl-C to quit)

“subscribe”
“redisChat”
(integer) 1


重新开.]]></description><category></category></item><item><title><![CDATA[Redis学习-基础篇]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/114809401</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/114809401</guid><author>ccccc202</author><pubDate>Fri, 02 Apr 2021 00:25:50 +0800</pubDate><description><![CDATA[Redis简介
Redis简介

基于内存但可以持久化的日志型（持久化形式AOF，RDB），K/V结构的数据库
性能极高：理想的读速度11000次/S ，写81000次/S
支持丰富的数据类型：Strings，Lists，Hashes，Sets 及 Ordered Sets 数据类型操作。
原子性：单个操作是原子性的，要么成功要么失败。多个操作也支持事务，通过MULTI和EXEC指令包起来。
其他：还支持发布/订阅（publish/subscribe），key过期等特性


...]]></description><category></category></item><item><title><![CDATA[序列化、反序列化原理]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/114786451</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/114786451</guid><author>ccccc202</author><pubDate>Sun, 14 Mar 2021 16:55:29 +0800</pubDate><description><![CDATA[一、 基本概念二、为什么需要序列化和反序列化三、实现序列化和反序列化的方式1、JDK类库API2、JSON方式四、面试重点
一、 基本概念

序列化：将Java对象装换成字节序列


对象序列化的最主要的用处就是再传递和保存对象的时候，保存对象的完整性和可传递性.序列化把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中.序列化后的字节流保存了Java对象的状态以及相关描述信息.序列化机制的核心作用就是对象状态的保存与重建.


反序列化:把字节序列转换成Java对象


客户端从文件或者网络上获.]]></description><category></category></item><item><title><![CDATA[HTTP和HTTPS通讯原理分析]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/113941486</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/113941486</guid><author>ccccc202</author><pubDate>Mon, 22 Feb 2021 20:20:25 +0800</pubDate><description><![CDATA[什么是HTTP?什么是HTTPS？
什么是HTTP?
HTTP全称HyperText Transfer Protocol（超文本传输协议），是一个基于请求与相应、无状态、应用层的协议，常基于TCP/IP协议传输数据，互联网应用最广泛的一种网络协议，所有的WWW文件都必须遵守这个标准。想了解Http，就需要了解TCP、IP协议，因为Http是基于TCP、IP层的。

TCP/IP协议
互联网的关键技术就是TCP/IP协议。两台计算机之间的通讯是通过TCP/IP协议在英特网上进行的。实际上这是两个协议


T.]]></description><category></category></item><item><title><![CDATA[分布式架构的演变之路]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/113913376</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/113913376</guid><author>ccccc202</author><pubDate>Sun, 21 Feb 2021 14:50:46 +0800</pubDate><description><![CDATA[为什么要使用分布式架构分布式的术语概念区别分布式架构的演进之路分布式架构带来的问题
为什么要使用分布式架构

历史渊源


随着物联网行业的发展,系统业务的扩张,对计算机硬件的要求也越来越高了,单台设备做的再好,也很难满足业务需求,而且这样的设备价格也是非常昂贵的,一般企业也购买不起


分布式和微服务的区别


分布式: 分散压力 解决三高(高性能,高可用,高并发)问题
微服务: 分散能力 解决的是业务耦合问题

PS：本身没有严格的区别和关系，一般来说大型的互联网项目都是基于微服务的分布式架构
分布式.]]></description><category></category></item><item><title><![CDATA[java并发容器]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108930758</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108930758</guid><author>ccccc202</author><pubDate>Sat, 28 Nov 2020 22:41:05 +0800</pubDate><description><![CDATA[什么是同步容器
通过synchronized关键字修饰的容器,保证同一个时刻内只有一个线程在使用这个容器,从而使得容器线程安全
什么是并发容器
允许多线程同时使用容器,并且保证线程安全.而为了达到尽可能的提高并发,java并发工具包中采用了多种优化方式来提高并发容器的执行效率. 核心: 锁,cas,cow(读写分离),分段锁
同步容器
Vector: 和Arraylist一样实现的List接口,区别在于Vector在可能出现线程不安全的所有方法都用了synchronized进行修饰
Stack: 是Vect]]></description><category></category></item><item><title><![CDATA[spring源码解析之IOC/DI（上篇）]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/109018542</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/109018542</guid><author>ccccc202</author><pubDate>Sun, 11 Oct 2020 23:43:37 +0800</pubDate><description><![CDATA[说到Spring,我们就必须要说到IOC和DI,但是,IOC是什么呢?DI又是什么呢?两者之间有何关系呢?首先,我们先了解下什么是容器?


什么是容器?
作为程序员，如果我需要进行一次羞羞的事情…
如果没有会所，那么我需要有钱，帅气，重要的是活好，才能找个女朋友进行----相当于自己创造（new）了一个对象；
如果有会所，我只需要有钱就可以给我提供服务并进行羞羞的事情----这个会所就是容器，会所里面
的小姐姐就是Bean
在我们的Spring中也是如此,所有的Bean都管理在同一个地方,也就是容器


]]></description><category></category></item><item><title><![CDATA[Mybatis源码解析之SQL语句执行源码]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108562916</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108562916</guid><author>ccccc202</author><pubDate>Sun, 13 Sep 2020 16:24:46 +0800</pubDate><description><![CDATA[Mybatis源码解析之DefaultSqlSession#getMapper
上面我们探讨过获取mapper的过程,获取到mapper之后是怎么执行sql语句的呢?
我们一起看下这个MapperProxy#invoke():
@Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    try {
      //如果是Object,就执行执行(Object的方法toS]]></description><category></category></item><item><title><![CDATA[Mybatis源码解析之DefaultSqlSession#getMapper]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108555804</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108555804</guid><author>ccccc202</author><pubDate>Sat, 12 Sep 2020 23:33:45 +0800</pubDate><description><![CDATA[Mybatis源码解析之SqlSession
上篇中我们探讨了SqlSession的构建流程,但是怎么去通过这个SqlSession去获取Mapper对象的?

XXXMapper mapper = sqlSession.getMapper(XXXMapper.class);


上一篇我们知道,这里返回是DefaultSqlSession
我们看下getMapper()这里面做了啥


  @Override
  public &lt;T&gt; T getMapper(Class&lt;T&gt; ty]]></description><category></category></item><item><title><![CDATA[Mybatis源码解析之SqlSession]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108553503</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108553503</guid><author>ccccc202</author><pubDate>Sat, 12 Sep 2020 20:29:06 +0800</pubDate><description><![CDATA[Mybatis实战教程-入门必看
Mybatis源码解析之SqlSessionFactory
前面咱们一起探讨了SqlSessionFactory的创建流程,然后就是获取sqlSession,SqlSession sqlSession = build.openSession();下面咱们一起看下这行代码的执行流程
这里地方调用实例是DefaultSqlSessionFactory


我们接着往下看,这里主要流程是在openSessionFromDataSource()里面
 @Override
  pub]]></description><category></category></item><item><title><![CDATA[Mybatis源码解析之SqlSessionFactory]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108479803</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108479803</guid><author>ccccc202</author><pubDate>Fri, 11 Sep 2020 19:24:15 +0800</pubDate><description><![CDATA[Mybatis实战教程-入门必看
上面我们已经探讨了mybatis的使用,但mybatis的调用流程咱们还是不知道,下面咱们花点时间来探讨下整个流程

SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);

第一步是获取SqlSessionFactory 对象,我们看下里面做了啥?

创建XMLConfigBuilder对象

new SqlSessionFactoryBuilder().build]]></description><category></category></item><item><title><![CDATA[Mybatis实战教程-入门必看]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108395568</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108395568</guid><author>ccccc202</author><pubDate>Fri, 04 Sep 2020 02:23:37 +0800</pubDate><description><![CDATA[Mybatis单表操作动态sql

Mybatis是一款优秀的持久层框架。其封装了JDBC操作， 免去了开发人员编写JDBC 代码以及设置参数和获取结果集的重复性工作。通过编写简单的 XML 或Java注解即可映射数据库CRUD操作。下面咱们就开撸吧

Maven依赖如下

 &lt;dependencies&gt;
        &lt;!--mybatis版本--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.mybatis]]></description><category></category></item><item><title><![CDATA[Spring源码解读之DispatcherServlet处理请求流程]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108250165</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108250165</guid><author>ccccc202</author><pubDate>Mon, 31 Aug 2020 23:13:54 +0800</pubDate><description><![CDATA[这里主要讲下java原生的servlet和Spring下DispatcherServlet对http请求的处理流程做一个梳理!
原生Servlet
我们先看下Servlet的实现关系图解

DispatcherServlet

]]></description><category></category></item><item><title><![CDATA[设计模式-委派模式]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108269821</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108269821</guid><author>ccccc202</author><pubDate>Thu, 27 Aug 2020 23:35:16 +0800</pubDate><description><![CDATA[委派模式委派模式

委派模式
属于行为模式,其作用就是负责任务的调度和分配,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果
委派模式角色如下:

抽象任务角色   &gt;&gt; 分发任务
委派者角色  &gt;&gt; 接受任务,分配任务给具体任务角色,自己本身是不做事情的
具体任务角色 &gt;&gt; 普通员工,做事情的真是角色

下面用项目经理给程序员排任务的例子

抽象任务对象: 定义抽象任务

/**
 * 抽象任务角色
 */
publ]]></description><category></category></item><item><title><![CDATA[设计模式-适配器模式]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108172653</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108172653</guid><author>ccccc202</author><pubDate>Sun, 23 Aug 2020 22:32:48 +0800</pubDate><description><![CDATA[适配器模式类适配器模式对象适配器模式(重点)

适配器模式属于结构型模式,而工厂模式则属于创建型模式
适配器模式分为三种,类适配器模式、对象适配器模式、接口适配器模式;其别名为包装器,将某个类的接口转换成客户期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协作工作,原理如下图所示

角色划分

Target目标抽象类:定义客户所需的接口，可以是抽象类或者接口，也可以是具体类（5V电压）
Adapter适配器:  适配器可以调用另一个接口，作为一个转换器，对Adaptee和T]]></description><category></category></item><item><title><![CDATA[设计模式-代理模式]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108089103</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108089103</guid><author>ccccc202</author><pubDate>Fri, 21 Aug 2020 01:11:55 +0800</pubDate><description><![CDATA[代理模式静态代理模式动态代理模式cglib动态代理

代理是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象,这样做可以在目标对象实现的功能上,加上额外的功能补充,即扩展目标对象的功能
这就符合了设计模式的开闭原则，即在对既有代码不改动的情况下进行功能的扩展。

主要的角色

真实角色: 被代理的对象
代理角色: 代理真实角色,而且会做一些附加操作(中介,签合同,看房…)
抽象角色: 一般会使用接口或者抽象类类解决
客户: 访问代理对象的角色



静态代理模式
静态代理:  代]]></description><category></category></item><item><title><![CDATA[设计模式-原型模式]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108088112</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108088112</guid><author>ccccc202</author><pubDate>Tue, 18 Aug 2020 21:57:32 +0800</pubDate><description><![CDATA[原型模式原型模式
原型模式

原型模式 用于创建重复的对象,同时又能保证性能,用原型实例指定创建对象的种类,并通过拷贝这些原型,创建新的对象.属于创建型设计模式
这种模式是实现了一个原型接口(Cloneable),该接口用于创建当前对象的克隆.当直接创建对象的代价比较大时，则采用这种模式。
通过将一个原型对象传给那个要发动创建的对象，这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建，即 对象.clone()

代码如下版本1
/**
 * 步骤：
 *    1. 实现 Cloneable接口
 ]]></description><category></category></item><item><title><![CDATA[设计模式之-工厂模式]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/108045062</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/108045062</guid><author>ccccc202</author><pubDate>Mon, 17 Aug 2020 23:30:02 +0800</pubDate><description><![CDATA[工厂模式简单工厂模式工厂方法合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
简单工厂模式
简单工厂模式属于创建型模式,定义一个创建对象的类,由这个类来封装实例化对象的代码,在软件开发中，当我们会用到大量的创建某种、某类或者某批对象时，就会使]]></description><category></category></item><item><title><![CDATA[使用hibernate插入数据到mysql中文乱码解决]]></title><link>https://blog.youkuaiyun.com/ccccc202/article/details/90744731</link><guid>https://blog.youkuaiyun.com/ccccc202/article/details/90744731</guid><author>ccccc202</author><pubDate>Sun, 02 Jun 2019 22:37:34 +0800</pubDate><description><![CDATA[1  hibernate.cfg.xml文件配置

2 配置mysql的url时指定好字符集格式utf-8
&lt;property name="connection.url"&gt;&lt;![CDATA[jdbc:mysql://192.168.174.145:3306/test?useUnicode=true&amp;characterEncoding=utf8]]&gt;&lt;/prop...]]></description><category></category></item></channel></rss>