<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sinat_22594643的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sinat_22594643</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_22594643]]></copyright><item><title><![CDATA[见微知著 静态代理]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/100867246</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/100867246</guid><author>sinat_22594643</author><pubDate>Sun, 15 Sep 2019 22:58:53 +0800</pubDate><description><![CDATA[代理是JAVA中老生常谈的话题了，但也是最为抽象的知识之一，以至于很多人谈代理色变，所以今天就抽丝剥茧，好好掰扯掰扯这个问题

  首先对于代理我们要明白一点，就是代理分为静态代理和动态代理，不说废话，首先是静态代理

  举个例子，你现在写了一个银行账户类，账户有余额转出和转入功能



现在突然出了问题，余额的数目不对了，于是项目经理提出要求，你要在转出和转入余额的时候打印出当前...]]></description><category></category></item><item><title><![CDATA[你真的了解Servlet吗？]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/100642077</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/100642077</guid><author>sinat_22594643</author><pubDate>Sun, 08 Sep 2019 23:11:32 +0800</pubDate><description><![CDATA[整天都说Servlet，那什么是Servlet呢？

答：Servlet就是运行在服务器端的一段代码，可以帮我们处理网络请求，说白了就是我们平时Main方法里面执行的那一段逻辑，不过我们的程序跑在Servlet容器中，并没有Main方法可以执行，那我们写的这段代码怎么办呢？

Tomcat，也就是我们常说的Servlet容器，其实就是一个大的Main方法，像是一个永动机一样，时时刻刻的监听着来自网...]]></description><category></category></item><item><title><![CDATA[mysql唯一索引和普通索引的选择]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/87971916</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/87971916</guid><author>sinat_22594643</author><pubDate>Wed, 27 Feb 2019 14:19:27 +0800</pubDate><description><![CDATA[
结论：
如果业务能够保证唯一性应该尽量选择普通索引而不是唯一索引
从查询和更新两方面说明：
查询：

查询来说二者的区别是
普通索引查到符合条件的项后会继续查找下一项，如果下一项不符合再返回
唯一索引则是查到符合条件的项后就直接返回
其实这两种方式效率几乎没有差别，因为查找都是先读取数据项然后在内存中进行的所以多读取一次并不会带来很大的影响
更新：
对于更新操作二者还是有很大区别的，要理解他们之...]]></description><category></category></item><item><title><![CDATA[Redis持久化]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/86615022</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/86615022</guid><author>sinat_22594643</author><pubDate>Wed, 23 Jan 2019 17:51:26 +0800</pubDate><description><![CDATA[Redis持久化

快照方式

快照方式是采用二进制方式对数据进行编码存储，采用Copy on Write方法进行的，因为Redis是单线程的，在持久化的时候还要同时处理来自客户端套接字的操作，同时快照操作不能注册到Selector线程，不能使用多路复用，所以Redis采用的是多进程的COW方式进行持久化

持久化过程：

1.产生子进程，这个阶段子进程和主进程，使用的还是同一个数据主体，这里的子...]]></description><category></category></item><item><title><![CDATA[Java异常处理]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/84636652</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/84636652</guid><author>sinat_22594643</author><pubDate>Thu, 29 Nov 2018 17:25:04 +0800</pubDate><description><![CDATA[Exception和Error的区别

Exceception和Error都继承自Throwable类，在Java中只有声明为Throwabel类或者它的子类才能进行捕获或者抛出，
当然捕获和抛出基本都是对于Exception而言的，这里就说一下Exception和Error的区别
首先，Error通常是导致程序不正常的错误，很难被捕获同时也就很难被恢复，比如常见的NoClassDefError和...]]></description><category></category></item><item><title><![CDATA[Elasticsearch]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/82964049</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/82964049</guid><author>sinat_22594643</author><pubDate>Mon, 08 Oct 2018 10:17:14 +0800</pubDate><description><![CDATA[Elasticsearch是一款效率很高的搜索引擎，他底层基于Lucene

首先介绍一下搜索引擎:

当我们需要在海量数据中查找某一个数据时，用关系型数据库，使用像Like这种查询语句是不现实的，这种查询进行全表检索，效率极低，而且一不小心会是数据库服务器崩溃，这时候我们就需要使用搜索引擎来进行海量数据的检索

一般搜索引擎分为以下几步:

1.将需要进行检索的文本或者Pdf等内容，进行转换，形...]]></description><category></category></item><item><title><![CDATA[从0开始学习微服务（二）]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/82492582</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/82492582</guid><author>sinat_22594643</author><pubDate>Fri, 07 Sep 2018 10:31:15 +0800</pubDate><description><![CDATA[微服务的一次远程调用
服务消费者与服务提供者之间的调用关系往往是通过注册中心实现的，那么服务消费者具体是怎么通过注册中心去调用服务提供者所提供的服务的呢
1.确定通信框架
我们称消费者为客户端，注册中心为服务端，客户端想要跟服务端进行通信首先要确定的就是通讯框架，现在常用的通讯框架有两种：
Http协议，通过应用层的http协议进行通信是常用的方式之一，通过传统的三次握手建立连接
Socket通信...]]></description><category></category></item><item><title><![CDATA[从0开始学习微服务（一）]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/82387713</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/82387713</guid><author>sinat_22594643</author><pubDate>Tue, 04 Sep 2018 17:53:27 +0800</pubDate><description><![CDATA[话不多说，首先介绍微服务的相关概念

所谓微服务就是将单体应用的本地调用改变为通过HTTP或者RPC远程调用的多应用

相比于传统单体应用的优缺点

单体应用缺点：

不同模块直接逻辑耦合性高

任何一个模块代码有改动时即使是不相关的模块也要重新打包部署

部署代码时候要时刻更改依赖版本，容易出错

部署时间久

任何一块代码逻辑错误可能导致整个系统崩溃

一些并发量高的模块和一些并发量低的模块部...]]></description><category></category></item><item><title><![CDATA[redis原理之通讯协议]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/81536578</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/81536578</guid><author>sinat_22594643</author><pubDate>Thu, 09 Aug 2018 14:54:19 +0800</pubDate><description><![CDATA[redis使用的通讯协议是最基本也是最简单的文本协议

在redis中将数据传输的结构分为五种类型：

1.单行字符串，以+开头

2.多行字符串，以$开头，后面跟着字符串对的长度

3.数组，以*开头，后跟数组长度

4.整数值，以：开头，后面跟整数的字符串形式

5.错误消息，以-开头

当我们使用redis的操作指令进行操作时，redis会将操作指令序列化为对应的文本协议的传输内容，输入指令...]]></description><category></category></item><item><title><![CDATA[Reids原理之IO模型]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/81536065</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/81536065</guid><author>sinat_22594643</author><pubDate>Thu, 09 Aug 2018 14:43:51 +0800</pubDate><description><![CDATA[众所周知Redis是单进程单线程的应用，在如今多核横行的时代，我们不免有疑问，单线程的redis怎么就成了高性能的代表

当有多个线程同时调用redis的时候，那么单线程的redis是怎么处理的呢，这里就不得不说redis内部的IO模型

首先要提到几个概念，阻塞IO，非阻塞IO，同步IO，异步IO，多路复用

首先我们要理解IO的过程才能更好的理解上面这几种情况，IO分为两步，第一阶段是数据准备...]]></description><category></category></item><item><title><![CDATA[基于TCP与HTTP的RPC调用的区别]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/81204320</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/81204320</guid><author>sinat_22594643</author><pubDate>Wed, 25 Jul 2018 15:58:16 +0800</pubDate><description><![CDATA[RPC即远程服务调用

出现原因：随着项目越来越大，访问量越来越大，为了突破性能瓶颈，需要将项目拆分成多个部分，这样比起传统的项目都是本地内存调用，分布式的项目之间需要在网络间进行通信

服务之间的远程调用通常有两种方式，即基于TCP的远程调用和基于Http的远程调用

基于TCP的RPC实现

主要是服务提供方定义socket端口和提供的方法名称已经需要的参数结构，服务调用方通过连接服务方的so...]]></description><category></category></item><item><title><![CDATA[NoClassDefFoundError 和 ClassNotFoundException 有什么区别]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/80567342</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/80567342</guid><author>sinat_22594643</author><pubDate>Mon, 04 Jun 2018 15:04:03 +0800</pubDate><description><![CDATA[二者的原因的都是jvm在类加载路径下找不到对应的类NoClassDefFoundError是Error异常类型是Throwable，而ClassNotFoundException是ExceptionNoClassDefFoundError往往不涉及编译问题，在编译器一般可以通过，而在运行期JVM找不到类的时候会出现ClassNotFoundException是编译器检查异常，往往在编译器就有可能出...]]></description><category></category></item><item><title><![CDATA[java中四种引用的概念及应用场景]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/80520712</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/80520712</guid><author>sinat_22594643</author><pubDate>Thu, 31 May 2018 11:18:19 +0800</pubDate><description><![CDATA[java中存在四种引用机制，分别是强引用，软引用，弱引用，虚引用强引用一般情况下我们用new方式创建的引用就是强引用，比如Client client = new Client()jvm进行GC的时候是不会回收存在强引用的对象的，比如Server server = new Server()
Client client = new Client()当在第二行时jvm内存耗尽，jvm会报内存溢出的错误，...]]></description><category></category></item><item><title><![CDATA[Java9的垃圾回收机制Cleaner]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/80512525</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/80512525</guid><author>sinat_22594643</author><pubDate>Wed, 30 May 2018 17:29:47 +0800</pubDate><description><![CDATA[垃圾回收是java的最大特点之一，可以大大的解决了c++中依靠程序员去释放内存的压力，但是java提供的用来做为GC前的最后一道防线的finalize方法却并不友好finalize的缺点首先finalize的执行时间并不确定，其次finalize会阻碍GC的快速回收，在jvm进行GC时会启动一个finalizethread，当遇到有重写了finalize方法的对象时，会将对象放入finalizet...]]></description><category></category></item><item><title><![CDATA[JAVA异常]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/80509459</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/80509459</guid><author>sinat_22594643</author><pubDate>Wed, 30 May 2018 14:41:26 +0800</pubDate><description><![CDATA[今天总结一下java的异常处理机制ERROR与EXCEPTIONerror和exception是java种关于异常的两个分类，它们Throwable的子类，都可以选择捕获和抛出，error发生的场景往往不是程序员能够控制的，比如常见的OutMeroryError和noclassdeffounderror等，error也是可以被捕获的，但是不建议捕获error，因为error发生的场景并不常见，而且...]]></description><category></category></item><item><title><![CDATA[JAVA中return与finally的先后关系]]></title><link>https://blog.youkuaiyun.com/sinat_22594643/article/details/80509266</link><guid>https://blog.youkuaiyun.com/sinat_22594643/article/details/80509266</guid><author>sinat_22594643</author><pubDate>Wed, 30 May 2018 14:19:45 +0800</pubDate><description><![CDATA[以前一直觉得有这个问题存在但也没有深究，今天来彻底探讨一下二者之间的关系预备知识首先是关于return返回的底层知识  java方法是在栈幀中执行，栈幀是线程私有栈的单位，执行方法的线程会为每一个方法分配一小块栈空间来作为该方法执行时的内存空间，栈幀分为三个区域：    1. 操作数栈，用来保存正在执行的表达式中的操作数，数据结构中学习过基于栈的多项式求值算法，操作数栈的作用和这个一样    2....]]></description><category></category></item></channel></rss>