<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Leeand的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Leeand</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Leeand]]></copyright><item><title><![CDATA[二级缓存设计思路]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/131928248</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/131928248</guid><author>Leeand</author><pubDate>Tue, 25 Jul 2023 23:11:32 +0800</pubDate><description><![CDATA[二级缓存]]></description><category></category></item><item><title><![CDATA[A/BTest设计方案]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/120526015</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/120526015</guid><author>Leeand</author><pubDate>Tue, 12 Oct 2021 12:43:22 +0800</pubDate><description><![CDATA[场景：

需要比较开卡活动的引流效率，有三种方案A、B、C。A为原始方案/公认最优方案，B为方案1，C为方案2。流量分配比例为：4:3:3，同时投放上线，从而选择效果最优方案。

痛点：

ABTest 页面，保持一个入口链接
	同一个用户多次进入应看到同一个页面
	避免重复开发，有配置后台让运营产品可配置，包括流量分配，查看实验效果等
	分流逻辑属于跨业务的公共逻辑，应单独抽象
方案：

渠道参数：

A：0、1、2、3

B：4、5、6

C：7、8、9

前端编写拉新页面，将渠道参数和uid等开卡信息]]></description><category></category></item><item><title><![CDATA[Elasticsearch概念理解及工作使用总结]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/120721178</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/120721178</guid><author>Leeand</author><pubDate>Tue, 12 Oct 2021 12:36:17 +0800</pubDate><description><![CDATA[使用命令
启动
bin/elasticsearch
bin/elasticsearch -Ehttp.port=8200 -Epath.data=node2	指定端口号 制定data2
bin/elasticsearch -Ehttp.port=7200 -Epath.data=node3	指定端口号 制定data3
查看集群
http://localhost:9200/_cat/nodes?v
查看集群详情
http://localhost:9200/_cluster/stats
elasticsearc]]></description><category></category></item><item><title><![CDATA[springboot架构中间件理解]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/120634274</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/120634274</guid><author>Leeand</author><pubDate>Thu, 07 Oct 2021 11:34:21 +0800</pubDate><description><![CDATA[中间件
DUBBO
RPC和http区别
RPC要求适合同环境的远程调用，http不用关注实现，只需遵循rest规范
结构：
business业务逻辑层、RPC配置层(负载均衡、集群容错、代理)、remoting 网络传输层
启动原理：


1、provider和consumer连接到注册中心register做注册，订阅服务
2、register根据配置的订阅关系，把provider提供的信息给consumer，同时consumer本地缓存信息
3、consumer根据负载均衡策略选择一台provider，]]></description><category></category></item><item><title><![CDATA[JDK源码解析(3)——String]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/116200972</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/116200972</guid><author>Leeand</author><pubDate>Wed, 26 May 2021 15:49:03 +0800</pubDate><description><![CDATA[一、类的定义


public final class String implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence

与其他几种类不同的是，String实现了CharSequence 接口，表示是一个有序字符的可读集合。

二、类的属性

与Integer类似，Boolean的私有属性是boolean。

1、私有属性


//String的值一旦创建就无法更改，String的值就被保存在了char数组里了，j]]></description><category></category></item><item><title><![CDATA[开发工具(1)-git常用命令速记]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/116271829</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/116271829</guid><author>Leeand</author><pubDate>Thu, 29 Apr 2021 16:47:16 +0800</pubDate><description><![CDATA[虽然我们现在都通过idea等开发工具中自带的git功能，带难免遇到面试时，面试官冷不丁问你 git 或 linux 的冷门命令，答不上来尴尬不说，工资还会被压，所以熟记常用命令是必须的。

一、git常用命令速查表



二、常见git命令

git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
git commit -am "init" 提交并且加注释
git ...]]></description><category></category></item><item><title><![CDATA[JDK源码解析(5)——Short、Long、Double、Float]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/116149016</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/116149016</guid><author>Leeand</author><pubDate>Tue, 27 Apr 2021 14:38:15 +0800</pubDate><description><![CDATA[一、Short

1、shortcache的初始值在-128 —— 127，不同于Integer，shortcache不可调整大小。

decode


//decode方法将字符串解码为Short，
//此方法接受十进制字符串，十六进制字符串（用0x\0X#标识），八进制字符串（用0标识），
//但是解码后的值必须在[-32768,32767]这一区间内，否则抛出NumberFormatException异常。
public static Short decode(String nm) throws Nu]]></description><category></category></item><item><title><![CDATA[JDK源码解析(4)——Byte、Character]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/116147884</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/116147884</guid><author>Leeand</author><pubDate>Mon, 26 Apr 2021 11:47:20 +0800</pubDate><description><![CDATA[一、Byte

Byte与Integer基本大同小异，也会在加载时生成-128到127的初始值，所以不多赘述。



二、Character

Character会在加载时生成127+1的初始值，所以不多赘述。

isValidCodePoint


// 判断指定的代码点是否为从 0x0000 到 0x10FFFF 范围之内的有效 Unicode 代码点值。
public static boolean isValidCodePoint(int codePoint) {
	// Optimized for.]]></description><category></category></item><item><title><![CDATA[JDK源码解析(2)——Boolean]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/116145971</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/116145971</guid><author>Leeand</author><pubDate>Mon, 26 Apr 2021 11:09:59 +0800</pubDate><description><![CDATA[Boolean是8大基础数据类型中比较简洁的一个数据类型，下面我们深入了解一下。

一、类的定义

通过类的定义，我们可以看到Boolean不能被继承。由于继承了Comparable接口，所以Boolean类被自然排序，我们可以调用compareTo方法来和Boolean类型的对象进行比较。


public final class Boolean implements java.io.Serializable, Comparable&lt;Boolean&gt;

二、类的属性

与Integer类似，B]]></description><category></category></item><item><title><![CDATA[JDK源码解析(1)——Integer]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/116129205</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/116129205</guid><author>Leeand</author><pubDate>Sun, 25 Apr 2021 18:52:35 +0800</pubDate><description><![CDATA[Integer是我们日常开发中最常用的数据类型，下面我们深入了解一下。

一、类的定义

通过类的定义，我们可以看到Integer不能被继承。由于继承了Comparable接口，所以Integer类被自然排序，我们可以调用compareTo方法来和Integer类型的对象进行比较。


public final class Integer extends Number implements Comparable&lt;Integer&gt;

二、类的属性

1、私有属性


//保存的int值
priva]]></description><category></category></item><item><title><![CDATA[JavaGC调优(2)——GC实战]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115443775</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115443775</guid><author>Leeand</author><pubDate>Mon, 05 Apr 2021 16:38:11 +0800</pubDate><description><![CDATA[上篇文章主要分析了一下JVM和GC算法等理论，这篇主要就是实战。

GC的目标

1.1、GC优化是必要的吗

事实上GC优化对Java基础服务来说在有些场合是可以省去的，但前提是这些正在运行的Java系统，必须包含以下参数或行为：

内存大小已经通过-Xms和-Xmx参数指定过
	运行在server模式下（使用-server参数）
	系统中没有残留超时日志之类的错误日志
我们GC优化的最主要的目的：

减少Full GC的执行时间
	将进入老年代的对象数量降到最低


1.2、GC调优调的是什...]]></description><category></category></item><item><title><![CDATA[JavaGC调优(1)——GC算法和垃圾回收]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115440960</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115440960</guid><author>Leeand</author><pubDate>Mon, 05 Apr 2021 16:06:29 +0800</pubDate><description><![CDATA[本章简要介绍GC的算法和垃圾回收器,下一章节再详细讲解GC算法的实现

一、简介

垃圾收集器都专注于两件事情:（1）查找所有存活对象（2）抛弃其他的部分,即死对象,不再使用的对象

1.1、标记可达对象(Marking Reachable Objects)

标记可达对象，就是存活的对象。有以下四种特定元素被指定为“GC根元素(Garbage Collection Roots)”。GC遍历(traverses)内存中整体的对象关系图(object graph)，从GC根元素开始扫描，到直接引用，以及其..]]></description><category></category></item><item><title><![CDATA[《深入理解java虚拟机》]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115436539</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115436539</guid><author>Leeand</author><pubDate>Mon, 05 Apr 2021 12:42:22 +0800</pubDate><description><![CDATA[一、走近Java

在本章中，我们将学习java虚拟机。

二、Java内存区域与内存溢出异常

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。



程序计数器

程序计数器（Program Counter Register）是一块较小的内存空间，它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令，分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。字节码解释器工作时就是]]></description><category></category></item><item><title><![CDATA[Java组件(3)——Listener的原理和应用]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115436533</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115436533</guid><author>Leeand</author><pubDate>Mon, 05 Apr 2021 04:43:31 +0800</pubDate><description><![CDATA[JavaWeb的三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器，我们这篇文章探索Listener底层原理，和使用场景。

一、简介

监听器用于监听Web应用中某些对象的创建、销毁、增加，修改，删除等动作的发生，然后作出相应的响应处理。Java事件监听器是由事件类和监听接口组成，自定义一个事件前，必须提供一个事件的监听接口以及一个事件类。JAVA中监听接口是继承java.util.EventListener的类，事件类继承java.util.EventObject的类]]></description><category></category></item><item><title><![CDATA[Java组件(1)——Servlet]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115436370</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115436370</guid><author>Leeand</author><pubDate>Mon, 05 Apr 2021 04:30:37 +0800</pubDate><description><![CDATA[一、简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序，它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet，您可以收集来自网页表单的用户输入，呈现来自数据库或者其他源的记录，还可以动态创建网页。

Servlet 架构



二、Servlet生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。

实例化：在第一次访问或启动tomcat时，tomcat会调用此无参构造方法实例化.]]></description><category></category></item><item><title><![CDATA[Java组件(2)——Filter的原理和应用]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115435724</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115435724</guid><author>Leeand</author><pubDate>Mon, 05 Apr 2021 01:25:08 +0800</pubDate><description><![CDATA[JavaWeb的三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器，我们就以三篇文章来一一探索其底层原理，和使用场景。

一、简介

Filter的基本功能是对Servlet容器调用Servlet(JSP)的过程进行拦截，从而在Servlet处理请求前和Servlet响应请求后实现一些特殊的功能。它的作用主要分两点:拦截请求，过滤响应。

针对这两点作用，我们衍生了很多使用场景：

过滤关键字、鉴权、拦截资源
	日记操作、事务管理、限流
二、原理

...]]></description><category></category></item><item><title><![CDATA[NoSQL数据库——Redis的经典问题(4)]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115422999</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115422999</guid><author>Leeand</author><pubDate>Sun, 04 Apr 2021 01:35:15 +0800</pubDate><description><![CDATA[关联文章

NoSQL数据库——简介(1)

NoSQL数据库——Redis(2)

NoSQL数据库——Redis缓存(3)

这篇主要讲redis的7大经典问题



一、缓存失效

缓存失效就是我们查redis时，找不到数据，这时就只能去DB中找，最后重新写入到缓存，并返回。当我们查询时，能直接在redis中找到，就是命中缓存，所以如何避免缓存批量失效，穿透到 DB，导致的服务器压力倍增呢。

缓存失效又有几种情况：

1、大面积的缓存key失效

失效时间设为base+random，使redis的失]]></description><category></category></item><item><title><![CDATA[NoSQL数据库——Redis缓存(3)]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115419051</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115419051</guid><author>Leeand</author><pubDate>Sat, 03 Apr 2021 23:43:10 +0800</pubDate><description><![CDATA[上篇我们讲了非关系型数据库的简介，有兴趣的朋友可以点击链接：

NoSQL数据库——简介(1)

NoSQL数据库——Redis(2)

这篇我们讲讲redis的缓存机制

一、持久化机制

我们知道redis是一个内存数据库，数据保存在内存中，也容易发生丢失。在了解redis的缓存机制之前，我们先来看看，redis如何确保数据不会丢失。只有我们将数据存储在计算机的内存中时，才能确保数据被写入到磁盘中。而如何确保数据在存储之前，redis不会挂、数据不会丢呢，我们分步来看。

不同的节点之间，如何备份、传输]]></description><category></category></item><item><title><![CDATA[NoSQL数据库——Redis(2)]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115417846</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115417846</guid><author>Leeand</author><pubDate>Sat, 03 Apr 2021 18:17:56 +0800</pubDate><description><![CDATA[上篇我们讲了非关系型数据库的简介，有兴趣的朋友可以点击链接：

NoSQL数据库——简介(1)

这篇我们就详细说说redis是什么。

一、Redis简介

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统，是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库，并提供多种语言的 ]]></description><category></category></item><item><title><![CDATA[NoSQL数据库——简介(1)]]></title><link>https://blog.youkuaiyun.com/Leeand/article/details/115417536</link><guid>https://blog.youkuaiyun.com/Leeand/article/details/115417536</guid><author>Leeand</author><pubDate>Sat, 03 Apr 2021 16:43:36 +0800</pubDate><description><![CDATA[导读：本文主讲讲NoSQL，非关系型数据库的概念和主流NoSQL的对比

概念：

NoSQL(NoSQL = Not Only SQL )，意即"不仅仅是SQL"。

前面的文章讲过，例如MySQL等关系型数据库遵循ACID规则，那什么是非关系型的数据库呢？NoSQL，指的是非关系型的数据库，是对不同于传统的关系型数据库的数据库管理系统的统称。随着互联网的发展，我们的业务对与“读”和“写”的频率差距越来越大，由此诞生了便于迅速查询的非关系型的数据库。CAP定理（CAP theorem）指出，对于一个分布式]]></description><category></category></item></channel></rss>