<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[南陈的博客]]></title><description><![CDATA[技术的发展都是一个渐变的过程，要想掌握技术就必须先了解其中的历史。]]></description><link>https://blog.youkuaiyun.com/Ch_en_x</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ch_en_x]]></copyright><item><title><![CDATA[第七章 读【MySql高级特性——分区】有感]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/119868540</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/119868540</guid><author>Ch_en_x</author><pubDate>Mon, 23 Aug 2021 14:28:48 +0800</pubDate><description><![CDATA[高级特性：分区、视图、外键、存储过程（触发器、存储函数和事件）、绑定变量、插件、字符集、全文索引、XA事务（分布式事务）、查询缓存。



一、分区

对用户来说，分区表是一张逻辑表，但是底部由多个物理子表组成。意味着索引也按照分区子表定义，没有全局索引。



1、分区的作用

表数据非常多，无法全部加载到内存中，或者有热点数据，其他的是历史数据。
	分区表的数据更加容易维护。（对单独一个分区进行CURD）
	分区表的数据可以分布到不同的物理设备上，高效利用硬件设备。


2、分区的限制

一张表最多有1]]></description><category></category></item><item><title><![CDATA[第五章 读【创建高性能索引】有感]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/119600729</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/119600729</guid><author>Ch_en_x</author><pubDate>Wed, 11 Aug 2021 11:39:09 +0800</pubDate><description><![CDATA[一、索引的类型

索引有很多种类型，为不同的场景提供更好的性能。不同存储引擎的索引工作方式也不一样，也并不是所有的存储引擎都支持所有类型的索引。

1、B-Tree索引

https://www.cs.usfca.edu/~galles/visualization/BTree.html

B-Tree是满足下列条件的数据结构：

d为大于1的一个正整数，称为B-Tree的度。

h为一个正整数，称为B-Tree的高度。

每个非叶子节点由n-1个key和n个指针组成，其中d&lt;=n&lt;=2d。
..]]></description><category></category></item><item><title><![CDATA[第四章 读【schema与数据类型优化】有感]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/119542515</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/119542515</guid><author>Ch_en_x</author><pubDate>Mon, 09 Aug 2021 17:16:43 +0800</pubDate><description><![CDATA[一、选择优化的数据类型

整数类型：

为整数类型指定宽度，如：int(11)，它不限制值的合法范围，只是规定了显示字符的个数。整数类型有UNSIGNED属性，如果不需要负数范围，最好使用该属性以提高存储数据上线。

字符串类型：

VARCHAR：存储可变字符串

CHAR：存储定长字符串，Mysql会自动删除末尾的空格

日期和时间类型：

DATATIME的时间范围从1001年到9999年，精度为秒，使用8位字节存储；

TIMEATAMP的时间范围从1970年到2038年，使用4位字节存储；

比较]]></description><category></category></item><item><title><![CDATA[记：印象深刻的开发经历]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/118325605</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/118325605</guid><author>Ch_en_x</author><pubDate>Tue, 29 Jun 2021 10:28:42 +0800</pubDate><description><![CDATA[一、有个需求：将PDF文件转图片上传到腾讯云。

之前一直没有做过pdf转图片的功能，在网上搜了一下，发现有三种方法：icepdf、pdfbox、jedal。

对比一下：

1、使用icepdf转换，会带官方水印，还需要专门的方法去水印，技术复杂；

2、使用pdfbox转换，能识别大部分内容，部分内容无法识别；

3、使用jedal转换，对中文不友好，而且官方很久不维护了。

最终选择使用pdfbox。

第一步：引入jar包


        &lt;dependency&gt;
         ]]></description><category></category></item><item><title><![CDATA[个人对Servlet的理解]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/115914373</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/115914373</guid><author>Ch_en_x</author><pubDate>Tue, 20 Apr 2021 17:35:17 +0800</pubDate><description><![CDATA[它定义了开发java项目的一套规范。

这个规范有什么内容：

1、首先这个规范有两种实现方式：web.xml和注解；

2、定义了servlet容器、定义了servlet对象的创建方式、以及servlet处理具体业务service方式；

3、如何创建管理servlet对象，servlet实例的生命周期，如何处理Http协议请求与响应，会话跟踪



与web.xml为例，实现servlet规范，步骤如下：

1、加载初始化信息：applicationContext.xml；

2、servlet规范规.]]></description><category></category></item><item><title><![CDATA[当大量恶意请求攻击某个接口时，会影响正常用户的使用，怎么应对这种情况？]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/115764145</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/115764145</guid><author>Ch_en_x</author><pubDate>Fri, 16 Apr 2021 15:53:28 +0800</pubDate><description><![CDATA[这里要解决两个问题：

1、高并发；

2、如何识别恶意用户



高并发是一个概念，很难讲请求量达到多少就是高并发。理论上每个接口都会出现高并发。实际上，我们只关心一些热点业务的并发数，这个和硬件、业务的复杂程度、容器节点数都有关。处理高并发的常规操作就是扩容和缓存，里面的操作细节就先不讲。



如何识别恶意用户？

实际中，程序员什么情况下意识到被攻击了？一般都是等用户反馈说应用访问很卡之类的，查看检查日志发现大量报错，因此在这里就突出了日志的重要性。但是有些人喜欢写continue或return..]]></description><category></category></item><item><title><![CDATA[如何防止会话信息的泄漏]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/115762350</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/115762350</guid><author>Ch_en_x</author><pubDate>Fri, 16 Apr 2021 15:22:40 +0800</pubDate><description><![CDATA[跟踪会话的四种方式：

1、URL重写；

2、隐藏表单域；

3、Cookie；

4、Session；

5、根据Session原理，自定义。

以我的理解：

会话ID，就是用来标识用户的唯一标识，姑且先叫做sessionId。这个sessionId如何创建？可以通过Session对象创建，也可以自定义创建。

1、URL重写，就是将sessionId拼接在请求url中，服务端解析url时获取会话ID；

2、隐藏表单域，则是将sessionId放到form表单中一起提交；

3、Cookie，则是通]]></description><category></category></item><item><title><![CDATA[为什么要禁用Cookie？]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/115704342</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/115704342</guid><author>Ch_en_x</author><pubDate>Wed, 14 Apr 2021 17:24:30 +0800</pubDate><description><![CDATA[思考一：为什么要禁用Cookie？

首先，cookie是服务端生成返回给客户端的，客户端会保存cookie到本地，甚至会永久保存。cookie有跨域(协议、域名、端口其中有一个不同就会产生跨域问题)问题。



cookie是和http捆绑在一起的，应该是当时科学家在设计http协议时就定义死了一个叫做cookie的字段用来保存会话信息。



既然http协议定义了一个cookie字段用来保存会话信息，那么我们就可以将会话信息保存到cookie里面，并返回给客户端。



cookie:加密(用户...]]></description><category></category></item><item><title><![CDATA[java常用设计模式]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/108449552</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/108449552</guid><author>Ch_en_x</author><pubDate>Mon, 07 Sep 2020 15:49:48 +0800</pubDate><description><![CDATA[一、设计模式的前世今生



起源于建筑领域：克里斯托弗·亚历山大——世界著名建筑设计师

模式的定义：每个模式都描述了一个在我们的环境中不断出现的问题，然后描述了该问题的解决方案的核心，通过这种方式，我们可以无数次地重用那些已有的成功的解决方案，无须再重复相同的工作。

1987年，Kent Beck和Ward Cunningham受到他作品的影响，将模式语言应用道路了软件设计和开发中。1994年“四人组(Gang of Four，简称GoF，分别是Erich Gamma, Richard Helm, .]]></description><category></category></item><item><title><![CDATA[java基础一]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/102846795</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/102846795</guid><author>Ch_en_x</author><pubDate>Thu, 31 Oct 2019 21:57:35 +0800</pubDate><description><![CDATA[equals与==的区别


2、hashcode



3、String、StringBuffer与StringBuilder的区别






]]></description><category></category></item><item><title><![CDATA[对对称加密与非对称加密算法的一点理解]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/102788773</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/102788773</guid><author>Ch_en_x</author><pubDate>Mon, 28 Oct 2019 21:59:20 +0800</pubDate><description><![CDATA[平时在工作中一直有使用到对称加密与非对称加密算法，以前一直是拿来就用，没有仔细想过里面的实现原理。今天突然有兴趣和时间研究下。

1、什么是对称加密算法？

加密和解密都使用相同密钥的算法。

公式：C=E(P,e) ， P=D(C,d) ，其中C是密文，P是明文，如果e=d，则函数P与函数D是对称函数，也即是对称算法。

2、什么是非对称加密算法？

加密和解密使用不同密钥的算法。...]]></description><category></category></item><item><title><![CDATA[Sql预编译]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/94837499</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/94837499</guid><author>Ch_en_x</author><pubDate>Sat, 06 Jul 2019 10:47:18 +0800</pubDate><description><![CDATA[一、什么是sql的编译？

当数据库接收到sql时，需要词法和语义的解析，优化sql，制定执行计划。每次编译都比较耗时间。

二、如何减少编译？

在实际开发中，对数据库的基本操作就是curd，每次执行sql都有经过编译过程，那么就需要消耗大量的时间，因此就有了预编译的过程，预编译可以想象成将sql变成一个函数，在需要的时候传参进行即可使用。这样就能达到一次编译，多次运行的效果。

三、预编译的实...]]></description><category></category></item><item><title><![CDATA[mysql分区]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/89344857</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/89344857</guid><author>Ch_en_x</author><pubDate>Tue, 16 Apr 2019 23:43:37 +0800</pubDate><description><![CDATA[mysql分区方案：Range分区（Columns Range分区）、List分区(Columns List分区)、Hash分区（Linear Hash分区）、Key分区（Linear Key分区）。

一、Range分区：

1、当表有主键/unique key时，分区字段必须包含在主键/unique key内；

2、Range分区，只有一个分区字段，分区范围必须是连续的，而不能是重叠的；

...]]></description><category></category></item><item><title><![CDATA[mysql的ssl警告]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/89293349</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/89293349</guid><author>Ch_en_x</author><pubDate>Sun, 14 Apr 2019 10:17:02 +0800</pubDate><description><![CDATA[Mon Sep 10 23:07:21 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection mus...]]></description><category></category></item><item><title><![CDATA[添加mysql依赖异常]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/89293279</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/89293279</guid><author>Ch_en_x</author><pubDate>Sun, 14 Apr 2019 10:10:34 +0800</pubDate><description><![CDATA[在spring+mybatis项目中，在pom.xml添加一下依赖后

&lt;!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --&gt;

&lt;dependency&gt;

&lt;groupId&gt;mysql&lt;/groupId&gt;

&lt;artifactId&gt;mysql-conn...]]></description><category></category></item><item><title><![CDATA[使用fdldler对手机进行抓包]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/89293064</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/89293064</guid><author>Ch_en_x</author><pubDate>Sun, 14 Apr 2019 09:50:48 +0800</pubDate><description><![CDATA[第一步：打开fiddler，点击Tools，选中第一项Fillder Options



第二步：如下图，选中对应的选框。



第三步：下载证书。点击Actions，选中第一项，下载证书。





第四步：如何需要抓取手机端（终端）的包，则需要Fillder监听设置端口，然后在手机的WIFI里面设置代理IP，端口。（注意：电脑和手机要在同一个网段中）。我自己是在笔记本里面开发wifi给...]]></description><category></category></item><item><title><![CDATA[log4j使用总结]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/89222789</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/89222789</guid><author>Ch_en_x</author><pubDate>Thu, 11 Apr 2019 23:36:01 +0800</pubDate><description><![CDATA[一、配置文件详解

   首先讲下日志等级，等级从高到底分别是：OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。总共7个等级，

其中最常用的是ERROR、WARN、INFO、DEBUG。在配置文件中，我们可以根据需要设置日志等级，当设置为ERROR

等级时，可以打印出ERROR以下的日志信息，当设置为DEBUG等级时，会将DEBUG等级以及以下的等级的日志打印出...]]></description><category></category></item><item><title><![CDATA[关于redis使用的一点理解（一）]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/88658831</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/88658831</guid><author>Ch_en_x</author><pubDate>Tue, 19 Mar 2019 11:51:23 +0800</pubDate><description><![CDATA[redis简介：

   Redis 是完全开源免费的，遵守BSD协议，是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点：

   Redis支持数据的持久化，可以将内存中的数据保存在磁盘中，重启的时候可以再次加载进行使用。

   Redis不仅仅支持简单的key-value类型的数据，同时还提供list，se...]]></description><category></category></item><item><title><![CDATA[设计模式——装饰模式]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/88636562</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/88636562</guid><author>Ch_en_x</author><pubDate>Mon, 18 Mar 2019 12:33:50 +0800</pubDate><description><![CDATA[装饰模式的结构图如下：







基本介绍：

装饰模式是一种替代继承的技术，通过一种无须定义子类的方式给对象动态增加职责，使用对象之间的关联关系取代类之间的继承关系。



通俗来说：在以前，我们都是通过继承的方式扩展子类的功能，但是通过装饰方式就不需要了。而且类只能继承一个类，扩展功能的能力有限，通过装饰的方式，我们可以很简单给对象增加多种职责。



在这里有一个点需要注意...]]></description><category></category></item><item><title><![CDATA[mysql高并发优化]]></title><link>https://blog.youkuaiyun.com/Ch_en_x/article/details/88551845</link><guid>https://blog.youkuaiyun.com/Ch_en_x/article/details/88551845</guid><author>Ch_en_x</author><pubDate>Thu, 14 Mar 2019 14:06:26 +0800</pubDate><description><![CDATA[一、Mysql高并发处理

例子1：新增手机号码，先判断是否已经存在，如果不存在则插入，在低并发访问情况下不会发生问题，在高并发下则会插入多条数据。

解决方案：通过写sql实现，在插入之前先判断是否已经存在数据。

 INSERT INTO test SET(id,username,phone) SELECT '1','测试','10086' FROM DUALWHERE NOT EXIS...]]></description><category></category></item></channel></rss>