<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yeleits的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ye201622021113</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ye201622021113]]></copyright><item><title><![CDATA[MyBatis Dynamic SQL]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/131938474</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/131938474</guid><author>ye201622021113</author><pubDate>Wed, 26 Jul 2023 14:45:38 +0800</pubDate><description><![CDATA[问题1、pom.xml中plugin配置不同，会导致Mapper文件中生成缺少如下的几个xxxxPrimaryKey方法。]]></description><category></category></item><item><title><![CDATA[虚拟机搭建k8s集群]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/131012509</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/131012509</guid><author>ye201622021113</author><pubDate>Fri, 02 Jun 2023 19:25:24 +0800</pubDate><description><![CDATA[1、连接方式：host-only networks，关联之前手动创建的LAN网络（k8s集群节点内部通信）ip范围不要和k8s内部一些默认ip重叠，否则后续搭建集群、集群通信可能有问题。2、连接方式：桥接网卡，关联物理机的无线网卡（连接外网，安装k8s等）]]></description><category></category></item><item><title><![CDATA[k8s入门学习]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/129911336</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/129911336</guid><author>ye201622021113</author><pubDate>Sun, 02 Apr 2023 15:32:27 +0800</pubDate><description><![CDATA[k8s入门]]></description><category></category></item><item><title><![CDATA[Docker学习总结]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/128944545</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/128944545</guid><author>ye201622021113</author><pubDate>Thu, 09 Feb 2023 01:12:05 +0800</pubDate><description><![CDATA[docker]]></description><category></category></item><item><title><![CDATA[跨域那些事儿]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/128795650</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/128795650</guid><author>ye201622021113</author><pubDate>Mon, 30 Jan 2023 01:15:19 +0800</pubDate><description><![CDATA[跨域相关问题]]></description><category></category></item><item><title><![CDATA[MapUtil]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/120640278</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/120640278</guid><author>ye201622021113</author><pubDate>Thu, 07 Oct 2021 19:43:32 +0800</pubDate><description><![CDATA[@Slf4j
public class MapUtil {

    private static BiConsumer&lt;Map&lt;String, String&gt;, String&gt; saveNullField = (map, key) -&gt; map.put(key, null);

    private static BiConsumer&lt;Map&lt;String, String&gt;, String&gt; ignoreNullField = (map, key).]]></description><category></category></item><item><title><![CDATA[Java随笔7-stream api]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/120640205</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/120640205</guid><author>ye201622021113</author><pubDate>Thu, 07 Oct 2021 19:38:46 +0800</pubDate><description><![CDATA[jdk8 stream api的常见用法：


public class Student {
    private Integer id;
    private Integer age;
    private String name;
    
    //getter and setter
}

public class Clbum {
    private List&lt;Student&gt; students;

    //getter and setter
}

List&lt;Clbu]]></description><category></category></item><item><title><![CDATA[vue随笔-踩坑]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/120304238</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/120304238</guid><author>ye201622021113</author><pubDate>Wed, 15 Sep 2021 10:58:55 +0800</pubDate><description><![CDATA[1、select选择器回显到页面失败

原因：后端接口返回的选项类型(item.value)与选中值(selectedValue)类型不一致


&lt;el-select v-model="selectedValue" placeholder="请选择"&gt;
    &lt;el-option
      v-for="item in cities"
      :key="item.value"
      :label="item.label"
      :value="item.value"&]]></description><category></category></item><item><title><![CDATA[Java随笔6-并发-AtomicXxxxFieldUpdater]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/120008633</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/120008633</guid><author>ye201622021113</author><pubDate>Tue, 31 Aug 2021 01:18:02 +0800</pubDate><description><![CDATA[一个对象的属性 x 只是用基本数据类型或者引用类型声明，通过getter、setter等方式修改变量的值，在并发情况下无法保证原子化。一种常规的解决思路是将该属性修改成AtomicXxxx等原子类型，例如：


public class Product {

    public int stock = 0;

    public int getStock() {
        return stock;
    }

    public void setStock(int stock) {
    ]]></description><category></category></item><item><title><![CDATA[Java随笔5-引用]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/118879615</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/118879615</guid><author>ye201622021113</author><pubDate>Sun, 18 Jul 2021 17:16:33 +0800</pubDate><description><![CDATA[设定虚拟机参数：-Xmx20m，执行以下代码：


public class ReferenceTest {

    @Test
    public void test() {
        SoftReference&lt;byte[]&gt; softReference = new SoftReference&lt;&gt;(new byte[1024 * 1024 * 10]);
        System.out.println("软引用，gc前：" + softReference.get(]]></description><category></category></item><item><title><![CDATA[Java随笔4-lombok使用注意(持续补充)]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/118727936</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/118727936</guid><author>ye201622021113</author><pubDate>Wed, 14 Jul 2021 15:03:50 +0800</pubDate><description><![CDATA[1.@Data注解

（1）自动生成boolean equals(final Object o)、int hashCode()方法，但是equals、hashCode方法仅使用当前类声明的属性，不使用父类的属性

参考：Lombok的@Data生成的hashCode和equals方法坑
]]></description><category></category></item><item><title><![CDATA[Java随笔3-TransmittableThreadLocal]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/118640303</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/118640303</guid><author>ye201622021113</author><pubDate>Sun, 11 Jul 2021 16:33:09 +0800</pubDate><description><![CDATA[阅读本文前，需要了解

① ThreadLocal的特性，参考：Java随笔1-ThreadLocal

② InheritableThreadLocal的特性，参考：Java随笔2-InheritableThreadLocal

③ transmittable：adj.可传送的，可传播的

④ TransmittableThreadLocal 是Alibaba开源的，需配合TtlRunnable 和 TtlCallable 使用


&lt;dependency&gt;
    &lt;groupId&.]]></description><category></category></item><item><title><![CDATA[Java随笔2-InheritableThreadLocal]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/118639852</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/118639852</guid><author>ye201622021113</author><pubDate>Sat, 10 Jul 2021 20:30:31 +0800</pubDate><description><![CDATA[Inheritable：adj. 可继承的；会遗传的

1、特性

相比ThreadLocal，InheritableThreadLocal有什么特性？可从以下demo窥探一二：


import org.junit.Test;

import java.util.concurrent.CountDownLatch;

public class InheritableTLTest {


    InheritableThreadLocal&lt;String&gt; inheritableTL = new]]></description><category></category></item><item><title><![CDATA[(反)序列化方式]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/116486617</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/116486617</guid><author>ye201622021113</author><pubDate>Fri, 07 May 2021 14:20:37 +0800</pubDate><description><![CDATA[jdk、msgpack、protobuf的(反)序列化

1. Protobuf的准备工作

参考：https://hi-dhl.com/2020/10/28/android/05-probuff-mac/

① mac安装protobuf：brew install protobuf

② idea的resource目录下编写Person.proto文件：


syntax = "proto3";

option java_package = "com.phei.encode";
option java_o]]></description><category></category></item><item><title><![CDATA[Java的IO]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/116333689</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/116333689</guid><author>ye201622021113</author><pubDate>Sun, 02 May 2021 16:54:55 +0800</pubDate><description><![CDATA[本文根据《Netty权威指南(第2版)》第2章关于时间服务器的demo程序，概括地描述各种IO的主要用法，站在更宏观的角度看清差异。

一. 传统的BIO

1. 时间服务器的设计

（1）客户端

①. 构建Socket（阻塞，直到与服务器建立连接）

②. 通过socket获取输出流、写入请求信息

③. 通过socket获取输入流、读出响应信息（阻塞，直到读取到指定大小or指定结束符）

（2）服务端

①. 构建ServerSocket

②. 监听请求（阻塞，直到读取到客户端请求）

③. 监听到]]></description><category></category></item><item><title><![CDATA[Kafka学习笔记1]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/113797060</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/113797060</guid><author>ye201622021113</author><pubDate>Sat, 13 Feb 2021 12:33:06 +0800</pubDate><description><![CDATA[1. 主题与分区

（1）每个主题分为若干分区，同一个分区存在多个副本，副本分为两类：领导者副本(Leader Replica)、追随者副本(Follower Replica)。副本们分散在不同的Broker上，保存了相同的消息序列，从而避免部分Broker宕机带来的数据不可用。

（2）追随者副本不能响应消费者和生产者的读写请求，优点：

①实现Read-your-writes：如果读取追随者副本，可能读取不到最新消息

②实现单调读（Monotonic Reads）：如果读取追随者副本，各追随...]]></description><category></category></item><item><title><![CDATA[zookeeper-配置中心]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/112760952</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/112760952</guid><author>ye201622021113</author><pubDate>Mon, 18 Jan 2021 11:11:33 +0800</pubDate><description><![CDATA[平常工作中经常使用公司的配置中心修改特定服务的配置，修改配置后，部署在不同机房不同机器的服务都能够及时跟随配置的变化。这个功能就是通过zookeeper实现的，同时结合了spring、java自定义注解，便于业务根据线上情况灵活调整。

本文介绍通过zookeeper的api实现简单的服务监听配置功能。

代码包括如下三个部分：配置客户端类ConfigClient、应用服务类Service、本地配置类MyConfig，关系如下：

ConfigClient通过与zookeeper服务器交互，修改MyConf]]></description><category></category></item><item><title><![CDATA[zookeeper-基础]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/112754881</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/112754881</guid><author>ye201622021113</author><pubDate>Sun, 17 Jan 2021 21:57:14 +0800</pubDate><description><![CDATA[作为学习笔记，本文记录了《Zookeeper分布式过程协同技术详解》学习过程中的一些基础知识。

一、概念

1. 是什么，有什么用？

zookeeper = 运行在一组服务器上的zookeeper服务 + 客户端API。通过zookeeper的客户端API，能够帮助构建分布式系统，实现分布式系统的一些核心功能：数据发布/订阅、群首选举、分布式锁等。

2. 什么叫帮助构建？

zookeeper没有直接实现满足协作需求的功能，比如没有直接提供分布式锁机制的3个基本方法：创建锁、获取锁、释放锁。但是通过z]]></description><category></category></item><item><title><![CDATA[递归与非递归的二叉树遍历]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/112504994</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/112504994</guid><author>ye201622021113</author><pubDate>Tue, 12 Jan 2021 00:56:39 +0800</pubDate><description><![CDATA[import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

import org.junit.Test;


public class BinaryTreeTraverse {

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        public TreeNode(int val) .]]></description><category></category></item><item><title><![CDATA[二叉搜索树]]></title><link>https://blog.youkuaiyun.com/ye201622021113/article/details/112504403</link><guid>https://blog.youkuaiyun.com/ye201622021113/article/details/112504403</guid><author>ye201622021113</author><pubDate>Tue, 12 Jan 2021 00:11:21 +0800</pubDate><description><![CDATA[import java.util.ArrayList;
import java.util.List;


public class BinarySearchTree&lt;Key extends Comparable&lt;Key&gt;, Value&gt; {

    Node&lt;Key, Value&gt; root;

    Node get(Node node, Key k) {
        if (node == null) {
            return null;
 .]]></description><category></category></item></channel></rss>