<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hello world]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a273967581</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a273967581]]></copyright><item><title><![CDATA[spring-cloud微服务部署转单体部署-feign直连调用]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/149440965</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/149440965</guid><author>a273967581</author><pubDate>Fri, 18 Jul 2025 13:38:56 +0800</pubDate><description><![CDATA[在单体部署的时候，由于之前是微服务的架构，为了不改变原来的微服务架构，引入一个新的单体模块用来单体部署。虽然这个时候所有的bean都在一起启动了，但是原来service-a里面通过feign调用service-b的接口的逻辑并没有修改，如果是纯单体项目，直接注入service-b里面写service就直接调用方法了，但是为了不破坏原来的微服务结构，不改动其他模块代码的情况下，就可以通过feign框架的调用逻辑来处理。]]></description><category></category></item><item><title><![CDATA[spring-cloud微服务部署-feign服务间调用]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/149439881</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/149439881</guid><author>a273967581</author><pubDate>Fri, 18 Jul 2025 11:59:23 +0800</pubDate><description><![CDATA[本文介绍了使用Spring Cloud Alibaba和Nacos实现服务间调用的简单流程。首先需要安装并启动Nacos作为服务注册中心。项目采用多模块结构，包含service-a、service-b和feign接口模块。关键配置包括：1)在父POM中声明Spring Boot、Spring Cloud和Alibaba的依赖版本；2)服务模块引入Nacos发现和Feign依赖；3)通过Feign接口定义服务调用方法；4)在调用方启动类添加@EnableFeignClients注解。]]></description><category></category></item><item><title><![CDATA[基于netty实现简易版rpc服务-代码实现]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/143083862</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/143083862</guid><author>a273967581</author><pubDate>Sat, 19 Oct 2024 22:09:54 +0800</pubDate><description><![CDATA[这样就实现了简单的rpc服务，通过公共部分的接口、注册中心、编解码器、服务端的服务映射，客户端就能进行远程过程调用了。]]></description><category></category></item><item><title><![CDATA[基于netty实现简易版rpc服务-理论分析]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/143082887</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/143082887</guid><author>a273967581</author><pubDate>Sat, 19 Oct 2024 20:36:45 +0800</pubDate><description><![CDATA[通过netty实现rpc服务，需要定义rpc协议，用来客户端和服务端数据交互，服务端通过监听端口，客户端tcp连接服务端，然后发送和接收数据，这个数据交互的过程，需要把数据序按照rpc协议的格式进行编解码，客户端通过动态代码封装网络请求，产生接口的代理对象。]]></description><category></category></item><item><title><![CDATA[spring循环依赖通过三级缓存解决过程分析-其二]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/142817261</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/142817261</guid><author>a273967581</author><pubDate>Thu, 10 Oct 2024 13:36:27 +0800</pubDate><description><![CDATA[使用三级缓存，前提就是spring觉得大部分程序，都应该是没有循环依赖，或者说循环依赖很少。基于这个理念，理想情况就是大部分的bean都是直接完成整个生命周期，在初始化中检查是否创建代理对象，然后把bean存入一级缓存，为了完成这个理想，加入了二级、三级缓存，尤其是三级缓存，延迟bean的代理创建时机，只有当发生循环依赖的时候不得已提前创建bean的代理放入二级缓存，最好的情况就是二级缓存永远都是空的，创建一个bean加入一级缓存然后就移除对应三级缓存中的lambda。]]></description><category></category></item><item><title><![CDATA[spring循环依赖通过三级缓存解决过程分析-其一]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/142815094</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/142815094</guid><author>a273967581</author><pubDate>Thu, 10 Oct 2024 11:29:43 +0800</pubDate><description><![CDATA[我用的sprin-boot 2.7版本，这个版本（没查是哪个版本开始的）默认情况下是不会解决循环依赖，而是启动程序会报错，如果需要spring帮我们解决循环依赖，需要加上一个配置spring.main.allow-circular-references=true。]]></description><category></category></item><item><title><![CDATA[spring程序员前置知识-ApplicationContext执行过程分析-其二]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/142576960</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/142576960</guid><author>a273967581</author><pubDate>Thu, 26 Sep 2024 20:58:40 +0800</pubDate><description><![CDATA[实例化 初始化 BeanpostProcessor BeanFactorypostProcessor bean工厂后置处理器 bean后置处理器 主要就是两种方式：BeanFactoryPostProcessor和BeanPostProcessor》》》》》》其中BeanFactoryPostProcessor可以向spring容器中添加一些bean定义信息。经常会说springboot自动配置，如何能做到自动配置，就是通过BeanFactoryPostProcessor的功能实现的。》》》》》》]]></description><category></category></item><item><title><![CDATA[spring程序员前置知识-ApplicationContext执行过程分析-其一]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/142568792</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/142568792</guid><author>a273967581</author><pubDate>Thu, 26 Sep 2024 20:07:23 +0800</pubDate><description><![CDATA[实例化 初始化 BeanpostProcessor BeanFactorypostProcessor bean工厂后置处理器 bean后置处理器 BeanDefinition 
大概分析了前面几个过程，梳理一下这几个过程大概就是：》》》》》加入spring内部BeanFactoryPostProcessor和BeanPostProcessor对应的BeanDefinition到beanDefinitionMap中》》》》》]]></description><category></category></item><item><title><![CDATA[dubbo微服务开发-服务间调用上下文参数传递]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/142437179</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/142437179</guid><author>a273967581</author><pubDate>Sun, 22 Sep 2024 16:24:38 +0800</pubDate><description><![CDATA[2.定义服务接口

2.1 服务提供方实现代码

2.2 服务消费方调用代码

3.注意事项
setAttachment 设置的 KV 对，在完成下面一次远程调用会被清空，即多次远程调用要多次设置。这个跟Threadlocal里面set有点类似，不同的是，tl中在每次请求完成以后需要手动remove保存的数据，避免内存泄漏。在dubbo自动清空传递的上下文参数，不需要程序员操心了。
下面是dubbo中服务间上下文参数传递的设计：
有时候我们微服务之间需要调用的时候用户信息（token），这些用户信息往往就是]]></description><category></category></item><item><title><![CDATA[java-cas原子操作]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/142001485</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/142001485</guid><author>a273967581</author><pubDate>Sat, 07 Sep 2024 20:31:52 +0800</pubDate><description><![CDATA[正所谓，java虐我千百遍，我待java如初恋。cas时compareAndSwap的缩写（也有说compareAndSet）。cas操作时系统提供的原子命令，java在原子整数、AQS锁内部都使用了cas提高并发效率。像常用的i++操作；看起来一行代码，实际上是三个原子操作：1.读取i；2.执行i+1；3.把i+1的值赋给i。cas就是把这个三个操作合并成一个原子操作，这样在并发时也不会出现问题。
java中cas操作需要使用到Unsafe类的compareAndSwapXxx()方法，需要四个参数，第一]]></description><category></category></item><item><title><![CDATA[synchronized加锁机制-偏向锁、轻量级锁、重量级锁]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/141997687</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/141997687</guid><author>a273967581</author><pubDate>Sat, 07 Sep 2024 17:21:40 +0800</pubDate><description><![CDATA[synchronized 加锁机制  偏向锁 轻量级锁 重量级锁]]></description><category></category></item><item><title><![CDATA[mysql可重复读事务隔离级别下幻读问题]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/141196744</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/141196744</guid><author>a273967581</author><pubDate>Wed, 14 Aug 2024 18:40:38 +0800</pubDate><description><![CDATA[1.在可重复读级别下，事务1在第一次执行select时产生一个快照读，这个快照读可以读到当前已经提交的所有事务，具体可以查看MVCC版本控制链的规则。然后事务2插入一条数据，事务1执行读还是用第一次生成的快照读，看不到事务2新插入的数据，所以没有产生幻读问题。2.如果select的时候使用当前读，也就是执行，事务1会加锁，事务2提交不了会阻塞，自然不会出现幻读问题。]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor线程池异常处理分析]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/140897834</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/140897834</guid><author>a273967581</author><pubDate>Sat, 03 Aug 2024 22:28:07 +0800</pubDate><description><![CDATA[结论：用execute执行任务，在任务抛出异常以后，线程会异常结束，线程池创建新的线程来执行后续任务。用submit执行任务，在任务抛出异常以后，线程池会复用任务抛异常的线程来执行后续任务。**## 所以建议实现run或者call方法的时候，确保里面的业务代码被正确try-catch了，因为线程外部拿不到抛出异常的任务。## 好了，ThreadPoolExecutor异常处理分析完了，下面是基于源码分析异常的处理逻辑。## 使用execute。]]></description><category></category></item><item><title><![CDATA[spring-boot开发一堆问题]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84925483</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84925483</guid><author>a273967581</author><pubDate>Sat, 01 Sep 2018 15:58:00 +0800</pubDate><description><![CDATA[
1 spring-boot + shiro  自定义过滤器 不按filterChain的规则执行
 
版本：spring-boot 1.5.15.RELEASE  +  shiro 1.4.0
 
当自定义filter以后，把自定义的filter配置到shiro的filterChain以后，发生了超出预期的效果，本来shiro中filterChain的的原则是从上往下匹配，当有一个规则...]]></description><category></category></item><item><title><![CDATA[RPC原理简单介绍]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84925238</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84925238</guid><author>a273967581</author><pubDate>Mon, 27 Aug 2018 19:40:10 +0800</pubDate><description><![CDATA[
    在说rpc之前，先简单说一下java的动态代理。jdk提供了基于接口的动态代理，只需要调用Proxy.newProxyInstance(ClassLoader loader, Class&amp;lt;?&amp;gt;[] interfaces, InvocationHandler h)，需要传入三个参数，第一个是类加载器，第二个被代理的接口，第三个是InvocationHandler，最关键就在于I...]]></description><category></category></item><item><title><![CDATA[spring4.x注解开发]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84923854</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84923854</guid><author>a273967581</author><pubDate>Mon, 23 Jul 2018 11:34:09 +0800</pubDate><description><![CDATA[
    之前spring是用xml配置，现在可以零xml使用，完全代码的方式来使用的spring的功能。实际上，注解并不重要，xml配置也不重要，重要的是使用spring的ioc和aop提供的功能。现在提供了注解的方式来使用spring的核心功能，那简直不要太舒服了。
    1.先建项目导入spring相关依赖
&amp;lt;dependency&amp;gt;
	&amp;lt;groupId&amp;gt;ch....]]></description><category></category></item><item><title><![CDATA[dubbo集成spring-boot]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84923187</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84923187</guid><author>a273967581</author><pubDate>Fri, 06 Jul 2018 17:04:13 +0800</pubDate><description><![CDATA[
    dubbo需要一个注册中心，用的是zookeeper。集成spring-boot是为了方便使用注解开发。
 
 
    1. 安装zoopkker
     hadoop01:2181, hadoop02:2181, hadodp03:2181
 
 
    2. 编写dubbo公共接口
    HelloService
package com.dubbo.ser...]]></description><category></category></item><item><title><![CDATA[windows安装tensorflow-gpu开发环境]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84915662</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84915662</guid><author>a273967581</author><pubDate>Sun, 28 Jan 2018 18:20:27 +0800</pubDate><description><![CDATA[
   
 
    新版的tensorflow已经支持windows了，不过python版本不能用2.x， 要用3.x，好像最新的tensorflow支持3.5和3.6这两个python版本，其他3.x的python版本没有测试过。当然电脑要有nvidia的显卡才行，我的电脑比较差，带的是gtx 950，跑起来例子比cpu还是快不少。下面是具体的安装步骤：
   
   1. 安装最新...]]></description><category></category></item><item><title><![CDATA[word2vec之skip-gram模型]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84914944</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84914944</guid><author>a273967581</author><pubDate>Mon, 15 Jan 2018 14:35:26 +0800</pubDate><description><![CDATA[
   
    在word2vec里面是使用一个简单的两层神经网络来训练的，一个隐层和一个softmax层。里面就有两组权值要训练，但是最后使用的时候只要只要第一组权值，也就是隐层的权值。
    输入是一个one-hot的向量，隐层的权值matrix实际上就是每个词的向量，每一行代表一个词的向量，这样，一个ont-hot乘这个权值矩阵的时候，就相当于取了matrix的一行。
   输出是...]]></description><category></category></item><item><title><![CDATA[python库numpy知识记录]]></title><link>https://blog.youkuaiyun.com/a273967581/article/details/84911917</link><guid>https://blog.youkuaiyun.com/a273967581/article/details/84911917</guid><author>a273967581</author><pubDate>Sun, 12 Nov 2017 14:18:14 +0800</pubDate><description><![CDATA[
    numpy
    1. zeros
     用来创建元素全为0的数组，数组的维度根据参数来。
     Examples：
&amp;gt;&amp;gt;&amp;gt; np.zeros(5)
array([ 0.,  0.,  0.,  0.,  0.])
&amp;gt;&amp;gt;&amp;gt; np.zeros((5,), dtype=np.int)
array([0, 0, 0, 0, 0])...]]></description><category></category></item></channel></rss>