<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[whichard的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/whichard</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; whichard]]></copyright><item><title><![CDATA[CentOS7环境下使用Docker配置ElasticSearch集群、MongoDB和Tomcat多实例]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/92835281</link><guid>https://blog.youkuaiyun.com/whichard/article/details/92835281</guid><author>whichard</author><pubDate>Wed, 19 Jun 2019 16:15:17 +0800</pubDate><description><![CDATA[Docker
Docker这玩意确实好用。对开发的影响不大，但对于部署来说，是场革命。实现更轻量级的虚拟化，方便快速部署；可以极大的减少部署的时间成本和人力成本。
docker配置MongoDB
docker配置es
把镜像配置为容器
docker run -d -p 9200:9200 -p 9300:9300 --name es elasticsearch:2.4.4

-d后台启动 -p端口...]]></description><category></category></item><item><title><![CDATA[七牛云存储域名配置和JavaAPI使用]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/91901048</link><guid>https://blog.youkuaiyun.com/whichard/article/details/91901048</guid><author>whichard</author><pubDate>Thu, 13 Jun 2019 22:09:59 +0800</pubDate><description><![CDATA[七牛云存储域名配置和JavaAPI使用
七牛云存储的测试域名只能试用一个月（国家为了链接实名化可溯源，据传之前有人使用七牛的测试域名传播淫秽信息），所以我们需要配置自己的域名来


在七牛云添加融合cdn域名。使用自己的二级域名，如cdn.whichard.cn 得到一个cname记录


腾讯云配置cname：
把得到的cname填到记录值处，主机记录处注意：填写二级域名cdn即可，不是填写cd...]]></description><category></category></item><item><title><![CDATA[ElasticSearch集群原理和版本问题采坑]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/91384379</link><guid>https://blog.youkuaiyun.com/whichard/article/details/91384379</guid><author>whichard</author><pubDate>Mon, 10 Jun 2019 16:57:51 +0800</pubDate><description><![CDATA[elasticsearch设计的理念就是分布式搜索引擎，底层实现还是基于Lucene的，核心思想是在多态机器上启动多个es进程实例，组成一个es集群。
es的索引数据存储结构：
es中，存储数据的基本单位就是索引，一个索引就像数据库。而type就相当于每一张表，一个index里面可以有多个type，而mapping就相当于表的结构定义，定义了什么字段类型等，你往index的一个type里添加一行数...]]></description><category></category></item><item><title><![CDATA[ElasticSearch中的数据结构]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/90753727</link><guid>https://blog.youkuaiyun.com/whichard/article/details/90753727</guid><author>whichard</author><pubDate>Mon, 03 Jun 2019 16:13:31 +0800</pubDate><description><![CDATA[本文总结了ElasticSearch中用于性能优化所用到的几种数据结构，如用于压缩倒排索引内存存储空间的FST，用于查询条件合并的SkipList以及用于提高范围查找效率的BKDTree，对这几种数据结构在Lucene中的使用进行了详细分析。
倒排索引（Inverted Index）存储
很多数据结构均能完成字典功能，总结如下。




数据结构
优缺点




排序列表Array/List
使用...]]></description><category></category></item><item><title><![CDATA[Redis应用与原理(4) Redis分布式锁实现II -- 上一章的实现竟然有这些BUG？]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/89309970</link><guid>https://blog.youkuaiyun.com/whichard/article/details/89309970</guid><author>whichard</author><pubDate>Mon, 15 Apr 2019 13:25:21 +0800</pubDate><description><![CDATA[上次我们介绍了SETNX + GETSET的方式实现分布式锁，这是老版本Redis中最常用的实现分布式锁的方法，但该方法存在以下问题：

由于是客户端自己生成过期时间，所以需要强制要求分布式下每个客户端的时间必须同步。
当锁过期的时候，如果多个客户端同时执行jedis.getSet()方法，那么虽然最终只有一个客户端可以加锁，但是这个客户端的锁的过期时间可能被其他客户端覆盖。
锁不具备拥有者标识，...]]></description><category></category></item><item><title><![CDATA[Redis应用与原理(3) Redis分布式锁实现]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88950887</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88950887</guid><author>whichard</author><pubDate>Mon, 08 Apr 2019 18:53:06 +0800</pubDate><description><![CDATA[使用redis的setnx()、get()、getset()方法，用于分布式锁
原理
这个方案的背景主要是在setnx()和expire()的方案上针对可能存在的死锁问题，做了一版优化。
那么先说明一下这三个命令，对于setnx()和get()这两个命令，相信不用再多说什么。那么getset()命令？这个命令主要有两个参数 getset(key，newValue)。该方法是原子的，对key设置ne...]]></description><category></category></item><item><title><![CDATA[Redis应用与原理(2) Redis数据结构 源码解析]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88950794</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88950794</guid><author>whichard</author><pubDate>Mon, 01 Apr 2019 16:20:07 +0800</pubDate><description><![CDATA[数据结构
内存寸土寸金，能省则省，Redis在这一部分的设计思路便是节约
简单的C字符串无法满足Redis的需求，开发者设计了数据结构Simple Dynamic String用于存取字符串。
struct sdshdr {
    unsigned int len;
    unsigned int free;
    char buf[];
};

比起C字符串，SDS具有以下优点：
1）常数...]]></description><category></category></item><item><title><![CDATA[Redis应用与原理(1) Redis五种数据结构]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88950655</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88950655</guid><author>whichard</author><pubDate>Mon, 01 Apr 2019 16:15:21 +0800</pubDate><description><![CDATA[面试重点， 需要阅读面经问题。
Redis
关系型数据库。内存缓存数据库。
Redis数据结构
Redis支持五种数据类型：string（字符串），hash（哈希），list（列表），set（集合）及zset(sorted set：有序集合)。
String
等价于java中的map, 键值对. 通过set和get命令存取.
redis 的 string 可以包含任何数据。比如jpg图片或者序列化...]]></description><category></category></item><item><title><![CDATA[《大型网站技术架构》学习笔记]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88798950</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88798950</guid><author>whichard</author><pubDate>Mon, 25 Mar 2019 16:48:35 +0800</pubDate><description><![CDATA[大型网站技术架构
大型网站的技术挑战主要来自于庞大的用户，高并发的访问和海量的数据，任何简单的业务一旦需要处理数以PB计的数据和面对数以亿计的用户，问题就会变得很棘手。
大型网站架构主要就是解决这类问题。
这个世界没有哪个网站从诞生起就是大型网站；也没有哪个网站第一次发布就拥有庞大的用户，高并发的访问，海量的数据；大型网站都是从小型网站发展而来。网站的价值在于它能为用户提供什么价值，在于网站能做什...]]></description><category></category></item><item><title><![CDATA[MySQL语法和基础知识总结]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88635371</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88635371</guid><author>whichard</author><pubDate>Mon, 18 Mar 2019 11:16:04 +0800</pubDate><description><![CDATA[主键（primary key）
一列（或一组列），其值能够唯一区分表中每个行。
表中的任何列都可以作为主键，只要它满足以下条件：
 任意两行都不具有相同的主键值；
 每个行都必须具有一个主键值（主键列不允许NULL值）
主键的最好习惯 除MySQL强制实施的规则外，应该坚持的几个普遍认可的最好习惯为：
 不更新主键列中的值；
 不重用主键列的值；
 不在主键列中使用可能会更改的值。（例如...]]></description><category></category></item><item><title><![CDATA[awk grep sed sort curl Linux常用的终端命令总结]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88123510</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88123510</guid><author>whichard</author><pubDate>Mon, 04 Mar 2019 16:40:06 +0800</pubDate><description><![CDATA[grep查找行 sort排序 sed编辑 awk处理
ps -ef|grep java 查看所有包含关键字java的进程
ps aux|grep java 查看所有包含关键字java的进程，显示详细的运行信息
ps –ef|grep tomcat 查看所有有关tomcat的进程
ps aux 查看所有进程, 显示详细运行信息
kill -9 19979 终止线程号位19979的进程
ls -al ...]]></description><category></category></item><item><title><![CDATA[RabbitMQ教程 入门指南 原理解析分析]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/87863829</link><guid>https://blog.youkuaiyun.com/whichard/article/details/87863829</guid><author>whichard</author><pubDate>Mon, 04 Mar 2019 16:35:23 +0800</pubDate><description><![CDATA[MQ： Message Queue， 消息队列。
开发者谈起名Rabbit：像兔子那样行动迅捷，而又拥有超强的繁殖力。
类比记忆：消息 - 信件， 生产者 - 寄信者，消费者 - 收信人，Queue - 邮局，Exchange - 邮递员/邮箱。
RabbitMQ是一个实现了AMQP（Advanced Message Queuing Protocol）高级消息队列协议的消息队列服务，用Erlang...]]></description><category></category></item><item><title><![CDATA[Java源码分析之ArrayList 源码分析解析教程（基于Java8 JDK8）]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88123248</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88123248</guid><author>whichard</author><pubDate>Mon, 04 Mar 2019 16:34:22 +0800</pubDate><description><![CDATA[总结


增删改查中， 增导致扩容，则会修改modCount，删一定会修改。 改和查一定不会修改modCount。


扩容操作会导致数组复制，**批量删除会导致 找出两个集合的交集，以及数组复制操作，**因此，增、删都相对低效。 而 改、查都是很高效的操作。


因此，结合特点，在使用中，以Android中最常用的展示列表为例，列表滑动时需要展示每一个Item（element）的数组，所以 查 ...]]></description><category></category></item><item><title><![CDATA[开发面试 TopK问题 从排序算法优化的角度分析海量数据TopK优化问题]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88024510</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88024510</guid><author>whichard</author><pubDate>Thu, 28 Feb 2019 13:38:55 +0800</pubDate><description><![CDATA[海量数据的TopK问题几乎是后台开发面试必备题，本文从排序算法从0优化的角度分析TopK问题的优化。
什么是TopK问题：给定一个很大的数据量n，要求从n中提取出最大/最小/重复频度最高的K个数（K相对于n较小，如n为10亿量级，而K为100）。
解决这个问题，很容易想到要使用排序算法，首先，使用方法1笨办法 – 全部排序，解出来再说。


将n个数全部排序
使用普通排序，将n个数全部排序之后，取...]]></description><category></category></item><item><title><![CDATA[Spring入门教程 学习笔记 IOC控制反转DI依赖注入AOP面向切面编程详细解析]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/88024306</link><guid>https://blog.youkuaiyun.com/whichard/article/details/88024306</guid><author>whichard</author><pubDate>Thu, 28 Feb 2019 13:31:33 +0800</pubDate><description><![CDATA[Spring
Spring框架是以简化Java EE应用程序的开发为目标而创建的
DI和AOP: 基于注解+反射+动态代理，见《java编程的逻辑》p573、p584
用Java实现AOP
面向切面编程 Aspect Oriented Programming
在OOP设计中，它导致了大量代码的重复，而不利于各个模块的重用。AOP技术恰恰相反，它利用一种称为&quot;横切&quot;的技术，剖解开封装的对象内部，并将...]]></description><category></category></item><item><title><![CDATA[Session和Cookie的关系. Cookie禁用之后Session是否受到影响?]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/87874859</link><guid>https://blog.youkuaiyun.com/whichard/article/details/87874859</guid><author>whichard</author><pubDate>Fri, 22 Feb 2019 11:18:45 +0800</pubDate><description><![CDATA[
由于HTTP协议是无状态的协议，所以服务端需要记录用户的状态时，就需要用某种机制来识具体的用户，这个机制就是Session.典型的场景比如购物车，当你点击下单按钮时，由于HTTP协议无状态，所以并不知道是哪个用户操作的，所以服务端要为特定的用户创建了特定的Session，用用于标识这个用户，并且跟踪用户，这样才知道购物车里面有几本书。这个Session是保存在服务端的，有一个唯一标识。在服务端保...]]></description><category></category></item><item><title><![CDATA[JVM GC垃圾收集器详解]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/87874672</link><guid>https://blog.youkuaiyun.com/whichard/article/details/87874672</guid><author>whichard</author><pubDate>Fri, 22 Feb 2019 11:17:45 +0800</pubDate><description><![CDATA[垃圾收集器
GC主要用于JVM堆内存的管理自动化，分析需要回收的内存依靠的算法为可达性分析。




收集器
串行、并行or并发
新生代/老年代
算法
目标
适用场景




Serial
串行
新生代
复制算法
响应速度优先
单CPU环境下的Client模式


Serial Old
串行
老年代
标记-整理
响应速度优先
单CPU环境下的Client模式、CMS的后备预案


ParNew
并...]]></description><category></category></item><item><title><![CDATA[JVM类加载过程详解 & 类加载器的两种架构模型：双亲委派模型和OSGi模块化模型]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/87873622</link><guid>https://blog.youkuaiyun.com/whichard/article/details/87873622</guid><author>whichard</author><pubDate>Fri, 22 Feb 2019 10:32:35 +0800</pubDate><description><![CDATA[类从被加载到虚拟机内存中开始，到卸载出内存为止，它的整个生命周期包括：加载、验证、准备、解析、初始化、使用和卸载七个阶段。
类加载的过程包括了加载、验证、准备、解析、初始化五个阶段 （验证、准备、解析合称连接阶段）
记：加载-验证，准备-解析，初始化
加载
载入字节流
​    加载时类加载过程的第一个阶段，在加载阶段，虚拟机需要完成以下三件事情：


通过一个类的全限定名来获取其定义的二进制字节...]]></description><category></category></item><item><title><![CDATA[Java代码优化技术 编译期优化 - 前期优化，运行时优化 - 后期优化]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/87873220</link><guid>https://blog.youkuaiyun.com/whichard/article/details/87873220</guid><author>whichard</author><pubDate>Fri, 22 Feb 2019 10:17:50 +0800</pubDate><description><![CDATA[优化
分为编译期优化和运行时优化
编译期优化
前端编译：字节流 -&amp;amp;gt; 抽象语法树 -&amp;amp;gt; jvm规范class字节码
javac优化：语法糖：在编译期解语法糖。
泛型及其擦除，自动拆装箱，Foreach循环，变长参数，条件编译，内部类，枚举类，断言语句，对字符串的switch支持，字符串加法


泛型
java中的泛型只存在于源码中，会在编译期间替换为原生类型，在字节码中已经不存在泛型，...]]></description><category></category></item><item><title><![CDATA[《Java编程的逻辑》学习笔记]]></title><link>https://blog.youkuaiyun.com/whichard/article/details/87863526</link><guid>https://blog.youkuaiyun.com/whichard/article/details/87863526</guid><author>whichard</author><pubDate>Thu, 21 Feb 2019 16:28:38 +0800</pubDate><description><![CDATA[Java编程的逻辑
编程基础
基本数据类型分类

整数类型：有4种整型byte/short/int/long，分别有不同的取值范围: 8, 16, 32, 64位,(1,2,4,8个字节) 存放(-27~27-1, …, -231~231-1,…)


在给long类型赋值时，如果常量超过了int的表示范围，需要在常量后面加大写或小写字母L，因为数字常量默认为是int类型。 类似的, 对于floa...]]></description><category></category></item></channel></rss>