<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Forward__的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Forward__</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Forward__]]></copyright><item><title><![CDATA[了解Synchronzied原理一篇就够了!]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120834736</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120834736</guid><author>Forward__</author><pubDate>Mon, 18 Oct 2021 21:50:04 +0800</pubDate><description><![CDATA[这里写自定义目录标题原理底层原理monitor监视器锁什么是monitor？synchronized 加锁方式
原理
synchronized 内置锁是一种对象所，作用力度是对象，可以用来实现对临街资源的同步互斥访问，可重入；
加锁方式：
- 同步实例方法，锁得是当前实例对象；
- 同步类方法，所得是当前类对象；
- 同步代码块，所得是括号里的对象；
底层原理
synchronized是基于JVM内置锁实现，通过内部对象Monitor(监视器锁)实现，基于进入与退出Monitor对象实现方法与代码 块同步，]]></description><category></category></item><item><title><![CDATA[mysql去掉特殊字符]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120784897</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120784897</guid><author>Forward__</author><pubDate>Fri, 15 Oct 2021 16:01:45 +0800</pubDate><description><![CDATA[现象

从文本中导入mysql,查询不到指定的数据



实际有数据



发现红色框直接换行了，说明有不可见特殊字符



执行替换sql，如下：

//9 水平制表符；10 换行符；13 回车符号
update qea set ip = replace(replace(replace(ip,char(9),''),char(10),''),char(13),'');

可以查到了，红色区域的换行符也没有了






...]]></description><category></category></item><item><title><![CDATA[spring源码-aop解析]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120724776</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120724776</guid><author>Forward__</author><pubDate>Tue, 12 Oct 2021 17:13:05 +0800</pubDate><description><![CDATA[spring aop 是通过动态代理实现的，具体是如何实现的那？spring通过一个切面类，在他类上加入了@Aspect注解，定义一个pointCut方法，最后定义一系列的增强方法。这样就完成了一个对象的切面操作。
基本的思路是
1.找到所有的切面类
2.解析出所有的advice并保存
3.创建一个动态代理类
4.调用被代理类方法时，找到所有的增强器，并增强当前方法
切面解析
spring通过@EnableAspectJAutoProxy开启aop切面，在注解上面发现@Import(AspectAutoPr]]></description><category></category></item><item><title><![CDATA[深入理解java动态代理]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120658548</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120658548</guid><author>Forward__</author><pubDate>Fri, 08 Oct 2021 23:52:41 +0800</pubDate><description><![CDATA[AOP,Aspectj,Spring AOP 前世今生

AOP 是要实现在我们原来写的代码的基础上，进行一定的包装，如方法执行前，方法返回后，方法跑出异常后等地方进行一定的拦截处理或者叫增强处理。
AOP 的实现并不是因为java提供了什么神奇的狗子，可以把方法的几个生命周期告诉我们，而是我们要实现一个代理，实际运行的实例是生成的代理类的实例。
动态代理。默认如果使用接口，用JDK动态代理，如果没有接口，使用CGLIB实现。
Spring 3.2 以后，spring-core直接把CGLIB和ASM的源码]]></description><category></category></item><item><title><![CDATA[idea中spring-5.2.11源码搭建]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120475890</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120475890</guid><author>Forward__</author><pubDate>Sat, 25 Sep 2021 20:02:20 +0800</pubDate><description><![CDATA[环境准备

jdk1.8.0
spring-framework-5.2.11.RELEASE  下载地址 https://github.com/spring-projects/spring-framework (注意下载版本，不需要下载最新的；
gradle v5.6.4   下载地址 https://gradle.org/releases/

修改镜像
将spring工程下的build.gradle配置如下
repositories {
			maven{ url 'https://maven.aliyu]]></description><category></category></item><item><title><![CDATA[tomcat源码解析-container]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120356429</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120356429</guid><author>Forward__</author><pubDate>Fri, 17 Sep 2021 22:17:14 +0800</pubDate><description><![CDATA[在tomcat中，容器主要分为四种，engine,host,context,wrapper。在详细分析tomcat源码之前，我们先来看看容器的类继承层级是怎样的。

这里，我们先说明一下容器的包含关系。engine包含多个host,host包含多个context,context包含多个wrapper,每个wrapper对应一个servlet。

engine,我们可以看成是容器对外提供功能的入口，每个Engine是Host的集合，用于管理各个Host。
Host，我们可以看成虚拟主机，一个tomcat可以支]]></description><category></category></item><item><title><![CDATA[tomcat源码分析-pipeline管道机制]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120252706</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120252706</guid><author>Forward__</author><pubDate>Sun, 12 Sep 2021 20:37:13 +0800</pubDate><description><![CDATA[本文主要目的是讲解tomcat中的pipeline机制
我们前面文章介绍过，tomcat中container有四种，分别是engine,host,context,wrapper,这4个。
container的实现类分别是StandardEngine,StandardHost,StandardContext,StandardWrapper。四个容器是包含关系，engine包含host,host包含context,context，包含wrapper，wappper代表最基础的一个servlet。

tomcat]]></description><category></category></item><item><title><![CDATA[tomcat源码-engine及standardEngine实现]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120249855</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120249855</guid><author>Forward__</author><pubDate>Sun, 12 Sep 2021 14:24:42 +0800</pubDate><description><![CDATA[我们看下engine，引擎的执行
server.xml
如下engine下包含了host节点
    &lt;Engine name="Catalina" defaultHost="localhost"&gt;

      &lt;!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/clust]]></description><category></category></item><item><title><![CDATA[tomcat源码分析-executor及其实现StandardThreadExecutor]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120230359</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120230359</guid><author>Forward__</author><pubDate>Sat, 11 Sep 2021 01:09:09 +0800</pubDate><description><![CDATA[executor
executor 是引擎，用户请求是经过executor进行处理的，知觉告诉我们这应该是一个多线程，线程池的容器，我们先从类的关系看下；
public interface Executor extends java.util.concurrent.Executor, Lifecycle {

    public String getName();

    @Deprecated
    void execute(Runnable command, long timeout, TimeU]]></description><category></category></item><item><title><![CDATA[tomcat源码分析-service及standardService分析]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120170189</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120170189</guid><author>Forward__</author><pubDate>Thu, 09 Sep 2021 00:22:55 +0800</pubDate><description><![CDATA[前面已经知道，server下可以包含多个service,
整体类的继承结构


]]></description><category></category></item><item><title><![CDATA[tomcat源码分析-server原理及其实现standardServer]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120144138</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120144138</guid><author>Forward__</author><pubDate>Tue, 07 Sep 2021 00:18:40 +0800</pubDate><description><![CDATA[理解思路

继承结构

我们要从高一点的维度去理解Server的结构设计，我们看下server对应的server.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
//这里端口8005负责监听tomcat的关闭请求
&lt;Server port="8005" shutdown="SHUTDOWN"&gt;
//监听器相关
  &lt;Listener className="org.apache.catalina.startup.VersionLoggerL]]></description><category></category></item><item><title><![CDATA[tomcat源码分析-bootstrap和catalina启动]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120119749</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120119749</guid><author>Forward__</author><pubDate>Mon, 06 Sep 2021 00:25:18 +0800</pubDate><description><![CDATA[Tomcat架构图
网上提供了的Tomcat成熟的架构图，感觉比较形象和全面贴出来看下。

启动
我们看下整体的初始化和启动的流程，在理解的时候可以直接和Tomcat架构设计中组件关联上：

这里涉及的组件有：

...]]></description><category></category></item><item><title><![CDATA[Tomcat架构以及生命周期和事件监听]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120103686</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120103686</guid><author>Forward__</author><pubDate>Sat, 04 Sep 2021 20:14:18 +0800</pubDate><description><![CDATA[讲一下tomcat的架构和生命周期和事件监听机制，因为东西很多，会在后面的tomcat源码中阐述；
Tomcat结构


Tomcat 生命周期
tomcat架构是一种树状的层级管理结构，组件会有自己的父节点，也可以有自己的孩子节点，每个节点都是组件，每个组件都有生命周期，为了管理方便，子节点的生命周期交给父节点来管理。
每个组件的生命周期的管理主要是由接口org.apache.catalina.Lifecycle和一个枚举org.apache.catalina.LifecycleState来表示。
Lif]]></description><category></category></item><item><title><![CDATA[tomcat中http和socket关系]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120095922</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120095922</guid><author>Forward__</author><pubDate>Sat, 04 Sep 2021 16:18:15 +0800</pubDate><description><![CDATA[我们知道http协议是建立再socket之上的。

1.在web领域，常见的场景是浏览器发送请求到服务器；

在每次请求时都是断开服务器连接，第一次请求时，客户端浏览器会发送close，则tomcat会立即关掉socket；

如果每次请求不是断开服务器连接，那么请求时发送keep-alive，则tomcat不会立即关掉socket;




...]]></description><category></category></item><item><title><![CDATA[tomcat中的类加载器和安全机制]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/120072035</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/120072035</guid><author>Forward__</author><pubDate>Fri, 03 Sep 2021 00:07:50 +0800</pubDate><description><![CDATA[类加载器
java中的类并不是一次加载完成的，而是按需加载。类加载器是用于加载java类到java虚拟机中的组件，它负责读取java字节码，并转换成 java.lang.Class 的一个实例，使字节码.class文件可以运行。一般类加载器负责根据一个指定的类找到对应的字节码，然后根据这些字节码定义一个java类。另外，它还可以加载资源，包括图像文件和配置文件。
类加载器可以使java类动态地加载到jvm中并运行，即可在程序运行时再加载类，提供了很灵活的动态加载方式。

启动类加载器（Bootstrap C]]></description><category></category></item><item><title><![CDATA[maven打包跳过pmd和单元测试]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/108295337</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/108295337</guid><author>Forward__</author><pubDate>Wed, 25 Aug 2021 09:36:40 +0800</pubDate><description><![CDATA[java8 工作中lomda表达式操作集合
]]></description><category></category></item><item><title><![CDATA[grpc-java代码实战]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/119838614</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/119838614</guid><author>Forward__</author><pubDate>Mon, 23 Aug 2021 09:46:47 +0800</pubDate><description><![CDATA[目录环境搭建一元流服务端流客户端流双向流二级目录三级目录
环境搭建
通过maven引入grpc相关包
 &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.google.protobuf&lt;/groupId&gt;
            &lt;artifactId&gt;protobuf-java&lt;/artifactId&gt;
            &lt;version&gt;3.9]]></description><category></category></item><item><title><![CDATA[grpc原理及四种实现方式]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/119812570</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/119812570</guid><author>Forward__</author><pubDate>Fri, 20 Aug 2021 00:13:18 +0800</pubDate><description><![CDATA[文章目录1. 概述2. grpc3. 使用API4. 服务定义5. 同步与异步6. 一元 RPC7. 服务器流 RPC8. 客户流 RPC9. 双向流 RPC10. 截止日期/超时11. RPC 终止12. 取消 RPC
1. 概述
RPC（Remote Procedure Call）-远程过程调用，他是一种通过网络从远程计算机程序上请求服务，而不需要了解底层网络技术的协议。
RPC采用客户端/服务器模式。请求程序就是一个客户端，而服务提供程序就是一个服务器。首先，客户端调用进程发送一个有进程参数的调用信息]]></description><category></category></item><item><title><![CDATA[nacos2.0-源码分析-事件机制分析]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/119699524</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/119699524</guid><author>Forward__</author><pubDate>Mon, 16 Aug 2021 22:51:08 +0800</pubDate><description><![CDATA[##前言
nacos的事件机制是异步的，心跳状态变化，服务状态变化都是通过事件机制传递的。发布者发送事件，订阅者订阅事件，并执行逻辑。
1. 事件(Event)
事件包括常规事件和慢事件，都是虚函数。
1.1 常规事件(SlowEvent)
public abstract class Event implements Serializable {
 //注释1.0
    private static final AtomicLong SEQUENCE = new AtomicLong(0);
    pr]]></description><category></category></item><item><title><![CDATA[nacos-naming 模块日志设计实现及思想]]></title><link>https://blog.youkuaiyun.com/Forward__/article/details/119407761</link><guid>https://blog.youkuaiyun.com/Forward__/article/details/119407761</guid><author>Forward__</author><pubDate>Thu, 05 Aug 2021 10:40:16 +0800</pubDate><description><![CDATA[nacos作为注册中心，naming模块是其实现的主要位置，这里发现其日志实现比较有特色，简单讲一下。
一.日志类
模块位置如下：
不同的模块使用不通的日志路径做区分，直接上代码，
public class Loggers {

    public static final Logger PUSH = LoggerFactory.getLogger("com.alibaba.nacos.naming.push");

    public static final Logger CHECK_RT = Lo]]></description><category></category></item></channel></rss>