<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[一只小菜鸡]]></title><description><![CDATA[欢迎指错]]></description><link>https://blog.youkuaiyun.com/chengkui1990</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chengkui1990]]></copyright><item><title><![CDATA[leetCode之二叉树的前中后序遍历递归和非递归]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/123768329</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/123768329</guid><author>chengkui1990</author><pubDate>Sun, 27 Mar 2022 09:37:43 +0800</pubDate><description><![CDATA[leetcode算法]]></description><category></category></item><item><title><![CDATA[sharding-jdbc+mybatis+pageHelper分库分表实现pageHelper分页查询四]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/116172239</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/116172239</guid><author>chengkui1990</author><pubDate>Mon, 26 Apr 2021 20:53:49 +0800</pubDate><description><![CDATA[背景：上一章我们实现的自定义的分页查询，这一章我们使用mybatis的插件pageHelper实现分库分表的分页查询；

一、引入pageHelper的maven依赖（这里要注意版本号，如果版本号和mybatis的版本号不一致就会报datasource错误）：


&lt;!--pagehelper--&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt;
		&lt;artifactId&gt;page]]></description><category></category></item><item><title><![CDATA[sharding-jdbc+mybatis分库分表实现自定义分页查询三]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/116137764</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/116137764</guid><author>chengkui1990</author><pubDate>Sun, 25 Apr 2021 20:54:07 +0800</pubDate><description><![CDATA[一、先插入数据：



二、实现mybatis分页接口，因为我用的数据库是db，所以分页用的limit n,m，offset是偏移量，limit是查询条数：


@Component
public interface TUserMapper {

    /**
     * 按照age分页查询
     * @param offset
     * @param limit
     * @return
     */
    List&lt;TUser&gt; pageQuery(@Param("of.]]></description><category></category></item><item><title><![CDATA[sharding-jdbc+mybatis分库分表实现查询二]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/116136312</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/116136312</guid><author>chengkui1990</author><pubDate>Sun, 25 Apr 2021 19:26:26 +0800</pubDate><description><![CDATA[一、新增mybatis的查询接口：


/**
 * @author kcheng
 * mybatis对应的接口mapper文件
 *
 */
@Component
public interface TUserMapper {

    int insert(TUser user);

    TUser selectById(@Param("id") Integer id);
}

二、新增mybatis的XML配置文件：


&lt;?xml version="1.0" encoding="UTF-8]]></description><category></category></item><item><title><![CDATA[sharding-jdbc+mybatis分库分表实现一]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/115872300</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/115872300</guid><author>chengkui1990</author><pubDate>Mon, 19 Apr 2021 19:55:41 +0800</pubDate><description><![CDATA[前言：大致目录如下：





第一步：引入pom依赖：


&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.ap.]]></description><category></category></item><item><title><![CDATA[Vue.js从入门到使用之第一个Vue.js小程序]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/107848943</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/107848943</guid><author>chengkui1990</author><pubDate>Thu, 06 Aug 2020 20:26:08 +0800</pubDate><description><![CDATA[&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="app"&gt;
   &lt;ul&gt;
   &lt;li v-for="tab in tabs"&gt.]]></description><category></category></item><item><title><![CDATA[Maven学习笔记]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/106649771</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/106649771</guid><author>chengkui1990</author><pubDate>Tue, 09 Jun 2020 20:36:38 +0800</pubDate><description><![CDATA[1、可选依赖：

  可选依赖不会进行传递，例如：A—&gt;B、B—&gt;X（可选）、B—&gt;Y(可选)，那么对于A来说，X、Y都是A的可选依赖，依赖将不会得到传递，换句话来说，X、Y对A不会又任何影响，A不会像传递性依赖一样引入X、Y，传递性依赖的表示&lt;optional&gt;


&lt;dependency&gt;
  &lt;groupId&gt;com.ck&lt;/groupId&gt;
  &lt;artifactId&gt;common-data&lt;/artifactI..]]></description><category></category></item><item><title><![CDATA[替换字符串中的占位符之MessageFormat用法]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/105418463</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/105418463</guid><author>chengkui1990</author><pubDate>Thu, 09 Apr 2020 19:52:47 +0800</pubDate><description><![CDATA[1、假如我们有以下这个链接字符串“http://127.0.0.1:8080/add?name={0}&amp;age={1}”，在程序中我们要替换{0}，{1}为真实的name和age，那么可以用MessageFormat操作！

例子如下：


import java.text.MessageFormat;

public class Test {

    public static voi...]]></description><category></category></item><item><title><![CDATA[windows环境下git生成多套密钥]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/102929902</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/102929902</guid><author>chengkui1990</author><pubDate>Wed, 06 Nov 2019 10:24:42 +0800</pubDate><description><![CDATA[前言：一般情况下，假如我们在公司里面既要生成公司里面的git密钥，又要生成coding.net的密钥，可以按照下面的步骤进行配置；

一、生成公司的git密钥：

  ssh-keygen -t rsa -C "xxx@xxx.com"，这个邮箱是公司的邮箱，然后一直回车，然后你就可以在你的用户目录下查看到公私钥对，直接粘贴公钥到你的公司git账号的公钥里就行了；



二、生成Codin...]]></description><category></category></item><item><title><![CDATA[fastjson解决反序列化字符串和bean字段不一致时如何反序列化]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/100781521</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/100781521</guid><author>chengkui1990</author><pubDate>Thu, 12 Sep 2019 19:39:47 +0800</pubDate><description><![CDATA[一、首先我们来看一下正常的反序列化的用法，我们有一个Person类：

1、Person类：


@Data
class Person{
    String name;
    int age;
}

下面通过一个字符串反序列化成一个java对象；


public class Test {

    public static void main(String[] args) {
      ...]]></description><category></category></item><item><title><![CDATA[Apollo 接入规范+Demo]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/87978727</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/87978727</guid><author>chengkui1990</author><pubDate>Mon, 08 Jul 2019 20:00:00 +0800</pubDate><description><![CDATA[先看下Apollo的官方架构图：



上图简要描述了Apollo的总体设计，我们可以从下往上看：

Config Service提供配置的读取、推送等功能，服务对象是Apollo客户端
	Admin Service提供配置的修改、发布等功能，服务对象是Apollo Portal（管理界面）
	Config Service和Admin Service都是多实例、无状态部署，所以需要将自己注册到Eu...]]></description><category></category></item><item><title><![CDATA[springBoot以外部tomcat作为容器方式部署启动]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/89217436</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/89217436</guid><author>chengkui1990</author><pubDate>Thu, 11 Apr 2019 18:51:52 +0800</pubDate><description><![CDATA[前言：springBoot采用约定大于配置的规则，使开发人员可以快速部署启动web项目，包括tomcat容器，springBoot启动时使用的是springBoot的内嵌容器，那么加入我们需要使用自定义的外部容器启动springBoot项目，那么应该这么实现呢？往下看！

1、第一步：

  打包方式设置成war：



2、第二步：

springBoot的启动类继承SpringBootS...]]></description><category></category></item><item><title><![CDATA[java8新特性以及guava用法]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/89108080</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/89108080</guid><author>chengkui1990</author><pubDate>Mon, 08 Apr 2019 21:04:45 +0800</pubDate><description><![CDATA[1、提取list集合中bean的某一属性


List&lt;Integer&gt; uniqueList = result.stream().map(ComplaintsPdMappingSource::getSourceId).distinct().collect(Collectors.toList());


2、判断某一个值是否存在list集合中：


/**
     * 转换字符串为b...]]></description><category></category></item><item><title><![CDATA[equals和hashCode的关系，equals相等，hashCode就必须要相等吗？]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/88405510</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/88405510</guid><author>chengkui1990</author><pubDate>Mon, 11 Mar 2019 19:36:37 +0800</pubDate><description><![CDATA[我们经常听见hashCode相等，那么equals可以不相等，但是equals相等，那么hashCode就一定相等这2个定理，没有看源码的同学就会认为jdk保证了equals相等，那么hashCode就一定相等，但是事实真的是这样吗？答案是否定的，equals相等，hashCode也是可以不相等的，看下面的那个例子：


package controller.abstractfactory;

i...]]></description><category></category></item><item><title><![CDATA[AIO案例详解]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/86544309</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/86544309</guid><author>chengkui1990</author><pubDate>Fri, 18 Jan 2019 17:59:18 +0800</pubDate><description><![CDATA[TimeServer ：


package com.ck.prefix.aio;

public class TimeServer {

    public static void main(String[] args) {
        new Thread(new AsyncTimeServerHandler(8081)).start();
    }
}


 AsyncTimeSer...]]></description><category></category></item><item><title><![CDATA[NIO案例详解]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/86538496</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/86538496</guid><author>chengkui1990</author><pubDate>Fri, 18 Jan 2019 14:17:38 +0800</pubDate><description><![CDATA[一、

NIO解释：NIO官方的解释是NEW I/O，意思是相对与BIO（同步阻塞I/O）来说是全新的，但是大部分人更喜欢叫他no-block I/O（同步非阻塞I/O），因为他相对于BIO的最大改变就是非阻塞的，我们知道传统的Socket下的流都是阻塞I/O，也就是客户端的一个请求对应服务端的一个线程，并且这个线程是一直阻塞的直到请求结束，对于线程这种宝贵的资源来说，如果并发量太大同时处理线程又...]]></description><category></category></item><item><title><![CDATA[Centos 6.1下安装部署redis-cluster集群和哨兵模式]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/86292192</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/86292192</guid><author>chengkui1990</author><pubDate>Fri, 11 Jan 2019 15:40:35 +0800</pubDate><description><![CDATA[环境： Centos 6.1、redis 3.2.4；

注释：查看Centos命令：cat /etc/issue

第一步：下载并解压

cd root目录下，下载redis的jar包：wget http://download.redis.io/releases/redis-3.2.4.tar.gz，解压： tar -zxvf redis-3.2.4.tar.gz

第二步：编译并安装

cd ...]]></description><category></category></item><item><title><![CDATA[UDP简单实例]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/86025205</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/86025205</guid><author>chengkui1990</author><pubDate>Mon, 07 Jan 2019 20:35:08 +0800</pubDate><description><![CDATA[
package com.ck.prefix;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * UDP传输的Server端
 */

public class UDPServer {
  ...]]></description><category></category></item><item><title><![CDATA[AtomicInteger的底层实现CAS]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/85253328</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/85253328</guid><author>chengkui1990</author><pubDate>Tue, 25 Dec 2018 20:55:51 +0800</pubDate><description><![CDATA[我们都知道在Java中i++操作是线程不安全的操作，虽然他看起来只有一行，像是只有一步操作，其实可以拆分开出来三步：

第一步：从内存中读出值i；

第二步：计算i的值；

第三步：将计算得到的i的值替换内存中原有的i；

但是以上的3个步骤不是一个原子操作，所以就会出现线程安全的问题，看下面的例子：


package com.ck.prefix;

import java.util.concu...]]></description><category></category></item><item><title><![CDATA[Spring AOP实现多数据源动态切换]]></title><link>https://blog.youkuaiyun.com/chengkui1990/article/details/85136026</link><guid>https://blog.youkuaiyun.com/chengkui1990/article/details/85136026</guid><author>chengkui1990</author><pubDate>Thu, 20 Dec 2018 20:25:35 +0800</pubDate><description><![CDATA[前言：前面的一篇文章我们实现了mysql数据库的主从同步，那么这一篇开始我们用AOP来简单实现多数据源的动态切换；

要实现的功能：设置读数据库和写数据库，当查询数据的时候从读数据库读取，当插入数据的时候插入写数据库，读写数据库是主从关系，这样就可以实现读写分离了；

首先看一下我的项目目录结构，然后我们一步一步的实现：



 1、配置读写数据源：既然是设置读写2个数据库，那么肯定是要配置2个数...]]></description><category></category></item></channel></rss>