<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小范的博客]]></title><description><![CDATA[冰冻三尺非一日之寒]]></description><link>https://blog.youkuaiyun.com/ocean_fan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ocean_fan]]></copyright><item><title><![CDATA[手动方式搭建redis集群]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79853819</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79853819</guid><author>ocean_fan</author><pubDate>Sun, 08 Apr 2018 16:38:25 +0800</pubDate><description><![CDATA[redis集群环境手动搭建流程1）配置6份redis.conf文件。2）启动这6个redis实例。3）登录到其中一个redis实例和另外5个实例手动建立连接。4）登录到三个主节点将16384个槽点分配到这三个主节点。5）登录到三个从节点设置其对应的主节点。6）检查集群搭建是否正常。1.1	复制6个redis.conf文件，内容只需要按照下面的配置文件修改端口即可假定主从关系如下：主:cluster...]]></description><category></category></item><item><title><![CDATA[redis哨兵机制]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79853405</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79853405</guid><author>ocean_fan</author><pubDate>Sun, 08 Apr 2018 16:12:38 +0800</pubDate><description><![CDATA[一、为什么要使用哨兵机制redis主从复制存在缺陷，如果主节点出现问题不能提供服务，需要人工重新把从节点设置为主节点，还需要通知应用程序更新了主节点的地址。这样处理是非常不科学的。redis2.8正式提供哨兵架构。二、哨兵机制原理当sentinel监控的主节点出现故障时，redis sentinel自动完成故障发现和转移，并通知应用方，实现高可用性。故障转移和通知应用方只需要一个sentinel来...]]></description><category></category></item><item><title><![CDATA[redis主从复制]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79853274</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79853274</guid><author>ocean_fan</author><pubDate>Sun, 08 Apr 2018 16:05:26 +0800</pubDate><description><![CDATA[一、主从复制原理    redis主从复制分为全量复制和增量复制,redis2.8以后增加了增量复制操作，这样提高了同步效率以及节省了带宽资源。全量复制步骤以及时序图       1）从服务器连接主服务器，发送SYNC命令； 　　2）主服务器接收到SYNC命名后，开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令； 　　3）主服务器BGSAVE执行完后，向所有从服务器发送快...]]></description><category></category></item><item><title><![CDATA[redis持久化方案]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79760834</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79760834</guid><author>ocean_fan</author><pubDate>Fri, 30 Mar 2018 17:33:54 +0800</pubDate><description><![CDATA[一、什么是redis的持久化redis持久化的机制如下图二、redis持久化的两种方式方式一:RDB将当前数据快照到.rdb格式文件。方式二:AOF将写操作追加到缓冲区，再将缓冲区的操作同步到磁盘。三、两种持久化方式的对比1）RDB不能实时持久化数据，如果redis服务器断电可能存在丢失数据的风险。而AOF方式持久化做到实时实时持久化数据。2）加载RDB恢复数据远快于AOF方式。因为RDB是二进制...]]></description><category></category></item><item><title><![CDATA[java通过NIO实现时间服务器]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79698744</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79698744</guid><author>ocean_fan</author><pubDate>Mon, 26 Mar 2018 15:27:01 +0800</pubDate><description><![CDATA[NIO客户端以及服务端通信流程图解读流程图1、客户端和服务端通信是通过SocketChannel（包含ByteBuffer），且客户端和服务分别一个SocketChannel对象。2、客户端与服务端都是从ByteBuffer读取/写入数据。NIO开发时间服务器大致流程服务端1、新开一个线程，打开ServerSocketChannel并设置为非阻塞模式，监听一个端口，新建一个多路复用器Selecto...]]></description><category></category></item><item><title><![CDATA[五种IO模型详解]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79622956</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79622956</guid><author>ocean_fan</author><pubDate>Tue, 20 Mar 2018 11:26:52 +0800</pubDate><description><![CDATA[在《Unix网络编程》一书中提到了五种IO模型，分别是：阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。下面就分别来介绍一下这5种IO模型的异同。1.阻塞IO模型　　最传统的一种IO模型，即在读写数据过程中会发生阻塞现象。　　当用户线程发出IO请求之后，内核会去查看数据是否就绪，如果没有就绪就会等待数据就绪，而用户线程就会处于阻塞状态，用户线程交出CPU。当数据就绪之后，内核会将数据...]]></description><category></category></item><item><title><![CDATA[JVM内存模型详解]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79298076</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79298076</guid><author>ocean_fan</author><pubDate>Fri, 09 Feb 2018 14:24:27 +0800</pubDate><description><![CDATA[笔记大纲1、jvm内存结构图2、jvm按照线程共享和私有内存区域划分结构图3、堆和栈在功能、内存大小、线程共享私有进行比较4、JVM运行结构图5、线程安全本质时序图6、jdk6、7、8三个版本内存模型比较7、jdk1.8为什么将方法区移除到本地内存8、jvm内存启动参数详解JVM内存结构图(JDK1.6)多线程共享内存区域:方法区、堆。每一个线程独享内存:java栈、本地方法栈、程序计数器。程序计...]]></description><category></category></item><item><title><![CDATA[服务器推送消息SSE以及springmvc后台实现例子]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79225203</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79225203</guid><author>ocean_fan</author><pubDate>Thu, 01 Feb 2018 10:45:13 +0800</pubDate><description><![CDATA[什么是SSE？

SSE （ Server-sent Events ）是 WebSocket 的一种轻量代替方案，使用 HTTP 协议，严格地说，HTTP 协议是没有办法做服务器推送的，但是当服务器向客户端声明接下来要发送流信息时，客户端就会保持连接打开，SSE
 使用的就是这种原理。



SSE和WebSocket比较

SSE是单向的只能从服务器端向客户端推送消息，而Web]]></description><category></category></item><item><title><![CDATA[https之SSL证书]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79201996</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79201996</guid><author>ocean_fan</author><pubDate>Tue, 30 Jan 2018 09:33:09 +0800</pubDate><description><![CDATA[内容大纲

1、SSL证书是由受信任的数据证书颁发机构颁发的证书，主要是帮助用户识别服务器身份以及数据传输过程加密防止数据被篡改，防劫持、防篡改、防监听。

2、一份SSL证书包含一个公钥和一个私钥。公钥用于数据加密私钥用于数据解密。

3、SSL连接产生会话服务器会将它的证书传到客户端，客户端再根据传回的证书生成会话密钥，这个会话密钥会对传输数据进行加密。

4、理解三个协议，握]]></description><category></category></item><item><title><![CDATA[mongodb高可用方案（三）可复制集内部机制]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79191726</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79191726</guid><author>ocean_fan</author><pubDate>Mon, 29 Jan 2018 09:44:58 +0800</pubDate><description><![CDATA[笔记大纲
1、主从架构图和副本集架构图
2、主节点选举算法(bully算法)、触发选举条件、如何人工干预主节点。
3、副本集个数为什么是奇数个，防止无法选举出主节点，参与选举的节点最多只能有7个节点参与，在未选举出主节点时则整个集群只提供只读服务，当集群中所有的secondary节点都挂了这时主节点会自动降级为secondary节点对外提供只读服务，不提供写服务。
4、集群中所有节点必须每]]></description><category></category></item><item><title><![CDATA[mongodb高可用方案（一）主从复制]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79191521</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79191521</guid><author>ocean_fan</author><pubDate>Mon, 29 Jan 2018 09:35:46 +0800</pubDate><description><![CDATA[一、mongodb为什么要做主从

1、数据的备份,有利于故障的恢复

2、读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性.
二、mongodb主从复制的原理

主节点会记录写有关的操作，读操作不记录。这些操作记录在local数据库中的oplog.$admin这个集合，这个是一个固定大小的集合，可以修改oplogSize大小，单位MB，一般为磁盘]]></description><category></category></item><item><title><![CDATA[mongodb高可用方案（二）可复制集]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79191649</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79191649</guid><author>ocean_fan</author><pubDate>Mon, 29 Jan 2018 09:33:03 +0800</pubDate><description><![CDATA[一、mongodb高可用方案实现

1）主从复制（不建议使用，会有单点故障的问题）

2）复制集(mongodb官方推荐)

主从复制会有如下问题

1、主节点挂了能否自动切换连接（目前需要手工切换）。

2、主节点的读写压力过大如何解决

3、从节点每个上面的数据都是对数据库全量拷贝，从节点压力会不会过大

4、数据压力大到机器支撑不了的时候能否做到自动扩展
二、高]]></description><category></category></item><item><title><![CDATA[java手动实现双向链表LinkedList]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79044275</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79044275</guid><author>ocean_fan</author><pubDate>Fri, 12 Jan 2018 15:22:29 +0800</pubDate><description><![CDATA[一、LinkedList原理介绍
LinkedList是java中重要的List集合，其内部是一个双向链的数据结构。插入和删除的效率比ArrayList高,之前手动实现的ArrayList，因为插入和删除没有数组的复制工作，如果想在下标为index位置插入元素则通过从头部或者尾部开始查找，找到index原始位置的元素，则修改原始位置index元素的Node中的上一个元素，以及元素index元素前]]></description><category></category></item><item><title><![CDATA[java实现分布式环境Hash一致性]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/79005463</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/79005463</guid><author>ocean_fan</author><pubDate>Mon, 08 Jan 2018 17:42:01 +0800</pubDate><description><![CDATA[一、hash一致性解决的问题
如果一个缓存系统，出现某一个节点宕机，如果采用的是hash(key)%N的方式来操作具体某一台缓存机器，这时候N变成了N-1这样会导致大部分缓存失效(缓存雪崩)，这个是很致命的。如果缓存失效会导致压力转移到数据库DB层，这时DB压力陡增可能导致整个服务不可用。
二、hash一致性的实现原理
大致是将缓存系统的机器(ip端口)通过hash算法[0,
2^32)将]]></description><category></category></item><item><title><![CDATA[linux清除tomcat日志文件Shell脚本]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/78901871</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/78901871</guid><author>ocean_fan</author><pubDate>Tue, 26 Dec 2017 14:25:04 +0800</pubDate><description><![CDATA[生产环境中tomcat每天都会产生很多日志，如果不清理磁盘容量会不够，手动清理又太麻烦。因此写个脚本每天定时去删除5天前(根据实际情况而定)的日志文件。
1.写一个/usr/local/script/cleanTomcatlog.sh脚本
#!/bin/bash
export LANG=zh_CN
#tomcat1日志文件路径
export WEB_TOMCAT1=/usr/local/tom]]></description><category></category></item><item><title><![CDATA[JSP页面头部page标签详解]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/78895802</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/78895802</guid><author>ocean_fan</author><pubDate>Mon, 25 Dec 2017 19:06:59 +0800</pubDate><description><![CDATA[理解这个page标签必须搞懂jsp文件从请求到响应经历的三个阶段。

1）将jsp文件编译成servlet java文件（pageEncoding）

2）服务器将java文件编译成class文件(不受外界参数控制)

3）服务器将数据返回到浏览器（charset）


<%@ page language="java" contentType="text/html;
chars]]></description><category></category></item><item><title><![CDATA[单机redis环境java实现分布式锁]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/78887753</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/78887753</guid><author>ocean_fan</author><pubDate>Sun, 24 Dec 2017 21:57:33 +0800</pubDate><description><![CDATA[分布式锁一般有三种实现方式：1. 数据库乐观锁；2. 基于Redis的分布式锁；3. 基于ZooKeeper的分布式锁。

为了确保分布式锁可用，我们至少要确保锁的实现同时满足以下四个条件：
1)互斥性。在任意时刻，只有一个客户端能持有锁。 
2)不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁，也能保证后续其他客户端能加锁。 
3)具有容错性。只要大部分的Redis节点正]]></description><category></category></item><item><title><![CDATA[简单实现java中ArrayList]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/78761845</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/78761845</guid><author>ocean_fan</author><pubDate>Sat, 09 Dec 2017 21:39:32 +0800</pubDate><description><![CDATA[ArrayList实现了一个可变长度数组，ArrayList这个对象包含一个数组，以及当前数组添加的元素个数，以及添加元素个数和数组长度一样的时候将原数组复制到新数组。代码如下。
package test;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * 实现自己的ArrayList
 * ]]></description><category></category></item><item><title><![CDATA[linux环境定时重启tomcat]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/78655452</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/78655452</guid><author>ocean_fan</author><pubDate>Tue, 28 Nov 2017 15:20:30 +0800</pubDate><description><![CDATA[1.写一个shell脚本test.sh，重新启动tomcat







[java] view
 plain copy






   #!/bin/sh  
  
. /etc/profile  
  
pid=`ps aux | grep tomcat | grep -v grep | grep -v retomcat | awk '{print ]]></description><category></category></item><item><title><![CDATA[java实现单例模式的几种方式]]></title><link>https://blog.youkuaiyun.com/ocean_fan/article/details/78635700</link><guid>https://blog.youkuaiyun.com/ocean_fan/article/details/78635700</guid><author>ocean_fan</author><pubDate>Sun, 26 Nov 2017 10:04:06 +0800</pubDate><description><![CDATA[我们知道实现单例模式的方式有很多种，如:懒汉式加载、饿汉式、双检锁的方式实现单例，今天主要介绍一下静态内部类、枚举、cas方式实现单例


静态内部类的方式实现单例
package test;

/**
 * 静态内部类实现单例
 * @author lenovo
 *
 */
public class InnerClassSingle {
	
	private InnerClassSin]]></description><category></category></item></channel></rss>