<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[stupid_Java_learner的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/stupid_Java_learner</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; stupid_Java_learner]]></copyright><item><title><![CDATA[如何从零开始写一个网关]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/112490887</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/112490887</guid><author>stupid_Java_learner</author><pubDate>Mon, 11 Jan 2021 20:53:24 +0800</pubDate><description><![CDATA[一、前言

最近在github上看了soul网关的设计，突然就来了兴趣准备自己从零开始写一个高性能的网关。折腾了大概三周时间，我的网关ship-gate核心功能基本都已完成，写这篇文章是记录我是如何从零开始手写一个网关的。

二、设计

2.1技术选型

网关是所有请求的入口，所以要求有很高的吞吐量，为了实现这点可以使用请求异步化来解决。目前一般有以下两种方案：


	Tomcat/Jetty+NIO+Servlet3
	
Servlet3已经支持异步，这种方案使用比较多，京东，有赞和Zuul，都用的是这种]]></description><category></category></item><item><title><![CDATA[【Netty】利用Netty实现心跳检测和重连机制]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/90726865</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/90726865</guid><author>stupid_Java_learner</author><pubDate>Sat, 01 Jun 2019 10:57:36 +0800</pubDate><description><![CDATA[一、前言
&nbsp;&nbsp;心跳机制是定时发送一个自定义的结构体(心跳包)，让对方知道自己还活着，以确保连接的有效性的机制。
&nbsp;&nbsp;我们用到的很多框架都用到了心跳检测，比如服务注册到 Eureka Server 之后会维护一个心跳连接，告诉 Eureka Server 自己还活着。本文就是利用 Netty 来实现心跳检测，以及客户端重连。
二、设计思路

分为客户端和服务端...]]></description><category></category></item><item><title><![CDATA[细说分布式锁]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/90726668</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/90726668</guid><author>stupid_Java_learner</author><pubDate>Sat, 01 Jun 2019 10:42:40 +0800</pubDate><description><![CDATA[一、使用场景
目前几乎很多大型网站及应用都是分布式部署的，分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性（Consistency）、可用性（Availability）和分区容错性（Partition tolerance），最多只能同时满足两项。”所以，很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中，都...]]></description><category></category></item><item><title><![CDATA[Spring事件机制详解]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/90726601</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/90726601</guid><author>stupid_Java_learner</author><pubDate>Sat, 01 Jun 2019 10:36:24 +0800</pubDate><description><![CDATA[一、前言
&nbsp;&nbsp;说来惭愧，对应Spring事件机制之前只知道实现 ApplicationListener 接口，就可以基于Spring自带的事件做一些事情（如ContextRefreshedEvent），但是最近看公司的wiki基于Spring事件的领域驱动才发现原来还有这么多东西。
二、订阅/发布（观察者模式）
2.1简介
Spring是基于事件驱动模型的，我们常用的ＭＱ就是基...]]></description><category></category></item><item><title><![CDATA[springboot-jpa报错No identifier specified for entity:]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/78346820</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/78346820</guid><author>stupid_Java_learner</author><pubDate>Wed, 25 Oct 2017 21:16:25 +0800</pubDate><description><![CDATA[JPA,No identifier specified for entity:错误解决方法]]></description><category></category></item><item><title><![CDATA[redis整合spring]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/72083057</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/72083057</guid><author>stupid_Java_learner</author><pubDate>Sun, 14 May 2017 22:37:27 +0800</pubDate><description><![CDATA[一、代码编写
package cn.sp.component;

public interface JedisClient {
	public String set(String key,String value);
	public String get(String key);
	public Long hset(String key,String item,String value);
	p]]></description><category></category></item><item><title><![CDATA[服务器环境搭建【三】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71699366</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71699366</guid><author>stupid_Java_learner</author><pubDate>Thu, 11 May 2017 23:14:10 +0800</pubDate><description><![CDATA[nginx的安装和负载均衡，待续。。。]]></description><category></category></item><item><title><![CDATA[服务器分布式环境搭建【二】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71699158</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71699158</guid><author>stupid_Java_learner</author><pubDate>Thu, 11 May 2017 23:11:57 +0800</pubDate><description><![CDATA[linux环境mysql5.6的安装]]></description><category></category></item><item><title><![CDATA[服务器分布式环境搭建【一】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71698931</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71698931</guid><author>stupid_Java_learner</author><pubDate>Thu, 11 May 2017 23:01:45 +0800</pubDate><description><![CDATA[一、安装jdk
1.上传安装包，jdk-7u7-linux-i586.tar。这里我使用的是jdk1.7，32位的。
2.解压tar -zxf jdk-7u7-linux-i586.tar.gz
3.设置环境变量
vim /etc/profile
export JAVA_HOME="/usr/local/jdk1.7.0_07"
export PATH="$JAVA_HOME/bin:]]></description><category></category></item><item><title><![CDATA[redis-helloWorld]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71179353</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71179353</guid><author>stupid_Java_learner</author><pubDate>Thu, 04 May 2017 20:24:41 +0800</pubDate><description><![CDATA[1新建项目，导入jar包，commons-pool2-2.4.2.jar，jedis_2.9.0.jar
2.代码部分
package cn.sp.redis;

import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.]]></description><category></category></item><item><title><![CDATA[redis的安装和部署]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71178144</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71178144</guid><author>stupid_Java_learner</author><pubDate>Thu, 04 May 2017 20:18:43 +0800</pubDate><description><![CDATA[一、单机版
1.安装步骤
第一步：安装gcc编译环境
yum install gcc-c++

第二步：把redis的源码上传到linux服务器。
第三步：解压缩。
tar -zxvf redis-3.0.0.tar.gz
第四步：make
第五步：make install PREFIX=/usr/local/redis
2.启动redis
两种启动方式，前端启动、后台启动。]]></description><category></category></item><item><title><![CDATA[lucene项目实战【一】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71055431</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/71055431</guid><author>stupid_Java_learner</author><pubDate>Mon, 01 May 2017 13:22:08 +0800</pubDate><description><![CDATA[lucene的一个使用例子]]></description><category></category></item><item><title><![CDATA[使用jsoup爬取网站图片]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/70915725</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/70915725</guid><author>stupid_Java_learner</author><pubDate>Fri, 28 Apr 2017 15:30:21 +0800</pubDate><description><![CDATA[使用jsoup爬取网站图片小例子]]></description><category></category></item><item><title><![CDATA[cxf整合spring练习]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/70478126</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/70478126</guid><author>stupid_Java_learner</author><pubDate>Sat, 22 Apr 2017 23:57:39 +0800</pubDate><description><![CDATA[一、环境搭建。
（a）最基本的Java环境
JAVA_HOME

(b)CXF_HOME

(c)ANT_HOME



(d)CATALINA_HOME

(e)PATH

(f)
CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes
二、编写服务端代码
1.新建动态web项目cxf-spring]]></description><category></category></item><item><title><![CDATA[webService【二】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/67653009</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/67653009</guid><author>stupid_Java_learner</author><pubDate>Tue, 28 Mar 2017 21:56:02 +0800</pubDate><description><![CDATA[一、使用JDK发布webService
  1.编写自己的服务类
package cn.sp.server;

import javax.jws.WebMethod;
import javax.jws.WebService;
/**
 * 使用jdk发布服务，需要在类上打注解
 * @author 2YSP
 *
 */
@WebService
public class SayHelloSer]]></description><category></category></item><item><title><![CDATA[webService【一】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/67086172</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/67086172</guid><author>stupid_Java_learner</author><pubDate>Mon, 27 Mar 2017 23:41:46 +0800</pubDate><description><![CDATA[虽然之前简单的看过webService，但是后来忘得一干二净了，于是便重新学习下。
一、定义


   顾名思义就是基于Web的服务。它使用Web(HTTP)方式，接收和响应外部系统的某种请求。从而实现远程调用。
   webService基于soap协议，该协议其实就是Http+XML的组合。
   我们可以调用互联网上查询天气信息Web服务，然后将它嵌入到我们的程序(C/S或B/S]]></description><category></category></item><item><title><![CDATA[JVM【一】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62940732</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62940732</guid><author>stupid_Java_learner</author><pubDate>Fri, 17 Mar 2017 22:50:11 +0800</pubDate><description><![CDATA[package cn.sp.test03;

import java.util.ArrayList;
import java.util.List;
/**
 * JVM堆内存溢出
 * @author 2YSP
 *
 */
public class TestOOM {
	static class OOMObject{
		
	}
	public static void main(String[]]]></description><category></category></item><item><title><![CDATA[HttpClient【一】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62929178</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62929178</guid><author>stupid_Java_learner</author><pubDate>Fri, 17 Mar 2017 22:36:58 +0800</pubDate><description><![CDATA[之前见过这东西确不知道是干嘛的，后来学习了下才发现，原来它就相当于一个游览器客户端能够发出get和post请求，然后获得返回的数据。
首先新建一个java项目，然后添加所需jar包。

然后就是代码的编写了，也比较简单。
package cn.sp.test01;

import java.util.ArrayList;
import java.util.List;

import org]]></description><category></category></item><item><title><![CDATA[线程死锁问题]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62928745</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62928745</guid><author>stupid_Java_learner</author><pubDate>Fri, 17 Mar 2017 22:23:59 +0800</pubDate><description><![CDATA[线程死锁就是线程之前相互争夺对面拥有的资源，并且不释放资源，这样下去就会造成死锁。（个人见解）
package cn.sp.test02;
/**
 * 
 * @author 2YSP
 *线程死锁问题
 */
public class TestDeadLock {
	//是指不同的线程分别占用对方需要的同步资源不放弃，都再等待对方放弃自己需要的同步资源，就形成了线程的死锁
	static S]]></description><category></category></item><item><title><![CDATA[自定义注解【一】]]></title><link>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62925661</link><guid>https://blog.youkuaiyun.com/stupid_Java_learner/article/details/62925661</guid><author>stupid_Java_learner</author><pubDate>Fri, 17 Mar 2017 22:20:44 +0800</pubDate><description><![CDATA[一、背景虽然经常使用注解，但是之前对于注解的原理什么都不懂，然后看书写了个demo，算是初窥其面目。二、例子package cn.sp.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
...]]></description><category></category></item></channel></rss>