<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yx444535180的专栏]]></title><description><![CDATA[java架构师]]></description><link>https://blog.csdn.net/yx444535180</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; yx444535180]]></copyright><item><title><![CDATA[Netty学习一——Netty的通信原理]]></title><link>https://blog.csdn.net/yx444535180/article/details/128645764</link><guid>https://blog.csdn.net/yx444535180/article/details/128645764</guid><author>yx444535180</author><pubDate>Wed, 11 Jan 2023 17:02:08 +0800</pubDate><description><![CDATA[在 Linux 的网络编程这个层次中，客户机和服务器各有一个Socket文件，当两台主机通信时，客户机里的客户端应用进程 A 发送消息，通过 TCP协议数据包头的 SYN 标志位置1，进行主动打开，经 A 主机的 TCP/IP 协议栈发送到 LAN，然后经 WAN 中的路由器传给服务端应用进程 B 的目的主机所在的 LAN，之后经目的主机的 LAN 将报文传给目的主机，最后经目的主机的 TCP/IP 协议栈处理，服务器被动打开，将消息递交给目的应用程序 B。下面的 demo 只一次调用，很简单。]]></description><category></category></item><item><title><![CDATA[java并发编程学习八——ReentrantLock原理]]></title><link>https://blog.csdn.net/yx444535180/article/details/127244361</link><guid>https://blog.csdn.net/yx444535180/article/details/127244361</guid><author>yx444535180</author><pubDate>Fri, 28 Oct 2022 15:12:00 +0800</pubDate><description><![CDATA[基于AQS自定义实现一个不可重入的独占锁try {try {try {再次加锁，当前线程被阻塞 System . out . println(Thread . currentThread() . getName());} /*** 独占锁，不可重入//上锁之后，设置锁的所有者为当前线程 setExclusiveOwnerThread(Thread . currentThread());System . out . println("成功加锁");]]></description><category></category></item><item><title><![CDATA[kafka怎么保证不丢失消息和不重复消费消息]]></title><link>https://blog.csdn.net/yx444535180/article/details/127298764</link><guid>https://blog.csdn.net/yx444535180/article/details/127298764</guid><author>yx444535180</author><pubDate>Thu, 13 Oct 2022 11:58:47 +0800</pubDate><description><![CDATA[Leader 维护了一个动态的 in-sync replica set (ISR：同步副本)，意为和 leader 保持同步的 follower 集合。当 ISR 中的 follower 完成数据的同步之后，leader 就会给 producer 发送 ack。如果 follower长时间未向leader同步数据，则该 follower 将被踢出 ISR，该时间阈值由replica.lag.time.max.ms参数设定。而如果Leader 发生故障，就会从 ISR 中选举出新的 leader。]]></description><category></category></item><item><title><![CDATA[java并发编程学习七——线程池]]></title><link>https://blog.csdn.net/yx444535180/article/details/127067105</link><guid>https://blog.csdn.net/yx444535180/article/details/127067105</guid><author>yx444535180</author><pubDate>Mon, 10 Oct 2022 14:37:32 +0800</pubDate><description><![CDATA[模拟实现线程池]]></description><category></category></item><item><title><![CDATA[java并发编程学习六——乐观锁CAS]]></title><link>https://blog.csdn.net/yx444535180/article/details/126931257</link><guid>https://blog.csdn.net/yx444535180/article/details/126931257</guid><author>yx444535180</author><pubDate>Thu, 22 Sep 2022 14:54:12 +0800</pubDate><description><![CDATA[CAS必须借助volatile才能读到共享变量的最新值，从而完成【比较-交换】的效果，来看看AtomicInteger的源码，其中初始值value就是用volatile修饰的。原子累加器，指的是累加操作是原子的，java8之前只能使用原子整数类的incrementAndGet方法，java8新增了LongAdder（并发大神狗哥，Doug Lea编写），专门用于累加操作，效率提升5倍。，当竞争激烈的时候，累加分散到多个cell减少失败重试，最后将结果汇总，最终减少竞争提高效率。给withdraw加锁即可。]]></description><category></category></item><item><title><![CDATA[java并发编程学习五——volatile]]></title><link>https://blog.csdn.net/yx444535180/article/details/126706289</link><guid>https://blog.csdn.net/yx444535180/article/details/126706289</guid><author>yx444535180</author><pubDate>Tue, 13 Sep 2022 15:13:40 +0800</pubDate><description><![CDATA[但是，Java的volatile在实现层面用的不是fence族屏障，而是lock。lock锁用来控制cpu对一个内存区域的访问权限，具体的这里不再深入讨论。他们都能达到内存屏障的效果，在字节码指令层面可以这样理解：
- 对volatile变量的写指令后会加入写屏障
- 对volatile变量的读指令前会加入读屏障]]></description><category></category></item><item><title><![CDATA[java并发编程学习四——ReentrantLock使用]]></title><link>https://blog.csdn.net/yx444535180/article/details/126501736</link><guid>https://blog.csdn.net/yx444535180/article/details/126501736</guid><author>yx444535180</author><pubDate>Mon, 05 Sep 2022 14:07:22 +0800</pubDate><description><![CDATA[可中断意思是，在获取lock失败之后，线程进入lock的阻塞队列，再调用了线程的interrupt方法之后，线程将被中断，不再阻塞并抛出异常InterruptedException。使用ReentrantLock的tryLock(n,TimeUnit)方法，可以设定等待锁的时间，等待期间也可以被interrupt方法打断。看示例代码，t1线程要先睡觉再工作，t2线程要先工作再睡觉就发生了死锁。三个线程t1/t2/t3，t1输出五次a，t2输出5次b，t3输出5次c；执行的结果，程序不能正常退出。]]></description><category></category></item><item><title><![CDATA[java并发编程学习三——wait/notify与park/unpark]]></title><link>https://blog.csdn.net/yx444535180/article/details/126408867</link><guid>https://blog.csdn.net/yx444535180/article/details/126408867</guid><author>yx444535180</author><pubDate>Wed, 24 Aug 2022 11:34:01 +0800</pubDate><description><![CDATA[wait/notify与park/unpark]]></description><category></category></item><item><title><![CDATA[java并发编程学习二——synchronized]]></title><link>https://blog.csdn.net/yx444535180/article/details/126305869</link><guid>https://blog.csdn.net/yx444535180/article/details/126305869</guid><author>yx444535180</author><pubDate>Thu, 18 Aug 2022 16:31:48 +0800</pubDate><description><![CDATA[每个java对象都可以关联一个Monitor对象，当对象被synchronized(obj)加锁（重量级）之后，对象头中的Mark Word会记录指向Monitor对象的指针，即上图中的ptr_to_heavyweight_monitor。那么什么是轻量级锁呢，轻量级锁是相对于原来使用操作系统互斥量来实现的传统锁而言的，所以才有轻重的区别。下面看下轻量级锁的实现过程。锁膨胀或者叫锁升级，指的是在CAS操作尝试加轻量级锁时失败，说明已经有其他线程加上了轻量级锁（发生了竞争），将轻量级锁变为重量级。......]]></description><category></category></item><item><title><![CDATA[java并发编程学习一——Thread]]></title><link>https://blog.csdn.net/yx444535180/article/details/126246434</link><guid>https://blog.csdn.net/yx444535180/article/details/126246434</guid><author>yx444535180</author><pubDate>Fri, 12 Aug 2022 11:57:47 +0800</pubDate><description><![CDATA[Java语言中，在Thread类定义了一个状态枚举，表示线程的状态，有以下六种：NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。如图所示：开始和终止状态一样的，java中将就绪和运行合并为可运行，将阻塞细分为阻塞、等待和超时等待。值得注意的是，操作系统中一部分阻塞，在java中认为是可运行状态，例如IO阻塞。setDaemon将设置线程为守护线程，顾名思义守护其他线程的线程，当没有线程需要守护，自己就强制结束了。加判断让t1线程停止运行。...]]></description><category></category></item><item><title><![CDATA[Spring Cloud Gateway集成Nacos和Swagger聚合Api文档]]></title><link>https://blog.csdn.net/yx444535180/article/details/125974436</link><guid>https://blog.csdn.net/yx444535180/article/details/125974436</guid><author>yx444535180</author><pubDate>Fri, 05 Aug 2022 16:10:57 +0800</pubDate><description><![CDATA[服务网关又称API网关，是系统对外的唯一入口，封装了系统的内部架构。所有的客户端和消费端，都通过网关接入微服务，在网关层处理非业务逻辑。API网关不是微服务场景中的必须组件，如图没有网关，微服务一样可以对外提供服务但是对应微服务数量较多，复杂度比较高的系统，使用网关可以带来一些好处聚合接口，使得服务对调研者透明，降低客户端与服务端的耦合度聚合后台服务，节省流量，提升用户体验提供安全，流量控制、API监控、计费等功能。...]]></description><category></category></item><item><title><![CDATA[Flyway报错源码分析——Validate failed: Migrations have failed validation]]></title><link>https://blog.csdn.net/yx444535180/article/details/126171960</link><guid>https://blog.csdn.net/yx444535180/article/details/126171960</guid><author>yx444535180</author><pubDate>Fri, 05 Aug 2022 12:09:59 +0800</pubDate><description><![CDATA[Flyway报错分析，Validate failed: Migrations have failed validation]]></description><category></category></item><item><title><![CDATA[Docker系列九——安装Nacos1.4.2]]></title><link>https://blog.csdn.net/yx444535180/article/details/126096618</link><guid>https://blog.csdn.net/yx444535180/article/details/126096618</guid><author>yx444535180</author><pubDate>Mon, 01 Aug 2022 14:23:01 +0800</pubDate><description><![CDATA[Docker安装Nacos1.4.2]]></description><category></category></item><item><title><![CDATA[SpringBoot2.6.5集成Swagger3和Knife3]]></title><link>https://blog.csdn.net/yx444535180/article/details/125914778</link><guid>https://blog.csdn.net/yx444535180/article/details/125914778</guid><author>yx444535180</author><pubDate>Fri, 22 Jul 2022 09:55:50 +0800</pubDate><description><![CDATA[代码已在上文给出，有很多文章说加配置spring.mvc.pathmatch.matching-strategy=ant_path_matcher就行，我遇到的情况就不行，查到资料说是因为依赖了spring-boot-starter-actuator，只能多配置一个BeanspringfoxHandlerProviderBeanPostProcessor，配完后又出现依赖冲突，之后再解决冲突（pom排查冲突包），就正常启动了。看似简单的集成，花了三天时间才搞定，记录一下踩过的坑，希望大家能避开。...]]></description><category></category></item><item><title><![CDATA[ResponseBodyAdvice接口使用导致的报错及解决]]></title><link>https://blog.csdn.net/yx444535180/article/details/125911407</link><guid>https://blog.csdn.net/yx444535180/article/details/125911407</guid><author>yx444535180</author><pubDate>Thu, 21 Jul 2022 14:47:34 +0800</pubDate><description><![CDATA[ResponseBodyAdvice用于在返回值写入响应之前，将body的内容重新封装，直接上代码。]]></description><category></category></item><item><title><![CDATA[spring-cloud-starter-oauth2 密码模式认证过程]]></title><link>https://blog.csdn.net/yx444535180/article/details/125637718</link><guid>https://blog.csdn.net/yx444535180/article/details/125637718</guid><author>yx444535180</author><pubDate>Tue, 12 Jul 2022 17:17:55 +0800</pubDate><description><![CDATA[上文讲到在密码模式下
OAuth2主要用于校验客户端合法性、产生token、校验token
Sercurity主要用于用户名密码校验、接口权限控制
OAuth2与Sercurity整合之后，校验顺序：
获取token请求：校验客户端合法性——校验用户名密码——产生token
受保护的接口请求：校验token——校验接口权限
下面就来看下，每个步骤在源码中是如何实现的客户端合法性校验，第一步校验client_id、client_secret，就是客户端id和密码；第二步校验grant_type；第三步校验sc]]></description><category></category></item><item><title><![CDATA[spring-cloud-starter-oauth2使用]]></title><link>https://blog.csdn.net/yx444535180/article/details/119924836</link><guid>https://blog.csdn.net/yx444535180/article/details/119924836</guid><author>yx444535180</author><pubDate>Sat, 02 Jul 2022 15:58:39 +0800</pubDate><description><![CDATA[**OAuth2主要用于校验客户端合法性、产生token、校验token**
**Sercurity主要用于用户名密码校验、接口权限控制**
因此OAuth2与Sercurity整合之后，校验顺序：
校验客户端合法性——校验用户名密码——产生token——校验token——校验接口权限............]]></description><category></category></item><item><title><![CDATA[SpringBoot源码学习四——MVC主流程下]]></title><link>https://blog.csdn.net/yx444535180/article/details/125372579</link><guid>https://blog.csdn.net/yx444535180/article/details/125372579</guid><author>yx444535180</author><pubDate>Mon, 27 Jun 2022 16:03:35 +0800</pubDate><description><![CDATA[处理@RequestMapping，拦截器链处理，执行接口，匹配@ResponseBody，封装返回值。
监听器——过滤器——拦截器]]></description><category></category></item><item><title><![CDATA[RabbitMQ笔记]]></title><link>https://blog.csdn.net/yx444535180/article/details/125404949</link><guid>https://blog.csdn.net/yx444535180/article/details/125404949</guid><author>yx444535180</author><pubDate>Wed, 22 Jun 2022 15:31:13 +0800</pubDate><description><![CDATA[RoutingKey与BindingKey的作用，RabbitMQ实现消费者组，SpringBoot自动生成队列名称并创建]]></description><category></category></item><item><title><![CDATA[SpringBoot源码学习三——MVC主流程上]]></title><link>https://blog.csdn.net/yx444535180/article/details/125148650</link><guid>https://blog.csdn.net/yx444535180/article/details/125148650</guid><author>yx444535180</author><pubDate>Mon, 20 Jun 2022 15:37:14 +0800</pubDate><description><![CDATA[SpringBoot容器选择，DispatcherServlet装配与初始化，加载到Tomcat，init方法执行]]></description><category></category></item></channel></rss>