博客园 - 猫毛·波拿巴
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=61414
2023-05-04T00:28:07Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
feed.cnblogs.com
https://www.cnblogs.com/longfurcat/p/13821198.html
【杂谈】JS相关的线程模型整理 - 猫毛·波拿巴
1.JS是单线程吗? 是的,到目前为止JS语言没有多线程的API,它的执行引擎只支持单线程,也就是一个JavaScript进程内只有一个线程。 2.与DOM的交互为什么不可以是多线程? 我觉得是可以的,但是如果有多线程可以操作DOM,则必须引入一个同步机制来保证线程安全。想象一个这样一个场景,用户提
2020-11-08T08:56:00Z
2020-11-08T08:56:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】1.JS是单线程吗? 是的,到目前为止JS语言没有多线程的API,它的执行引擎只支持单线程,也就是一个JavaScript进程内只有一个线程。 2.与DOM的交互为什么不可以是多线程? 我觉得是可以的,但是如果有多线程可以操作DOM,则必须引入一个同步机制来保证线程安全。想象一个这样一个场景,用户提 <a href="https://www.cnblogs.com/longfurcat/p/13821198.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/13510106.html
【源码】RocketMQ如何实现获取指定消息 - 猫毛·波拿巴
概要 消息查询是什么? 消息查询就是根据用户提供的msgId从MQ中取出该消息 RocketMQ如果有多个节点如何查询? 问题:RocketMQ分布式结构中,数据分散在各个节点,即便是同一Topic的数据,也未必都在一个broker上。客户端怎么知道数据该去哪个节点上查? 猜想1:逐个访问broke
2020-08-15T15:14:00Z
2020-08-15T15:14:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】概要 消息查询是什么? 消息查询就是根据用户提供的msgId从MQ中取出该消息 RocketMQ如果有多个节点如何查询? 问题:RocketMQ分布式结构中,数据分散在各个节点,即便是同一Topic的数据,也未必都在一个broker上。客户端怎么知道数据该去哪个节点上查? 猜想1:逐个访问broke <a href="https://www.cnblogs.com/longfurcat/p/13510106.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/12864491.html
【源码】RingBuffer(二)——消费者 - 猫毛·波拿巴
消费者如何读取数据? 前一篇是生产者的处理,这一篇讲消费者的处理 我们都知道,消费者无非就是不停地从队列中读取数据,处理数据。但是与BlockedQueue不同的是,RingBuffer的消费者不会对队列进行上锁,那它是怎样实现的呢? 概括地说,就是通过CAS原子性地得到一个可消费的序号,然后再根据
2020-05-12T14:34:00Z
2020-05-12T14:34:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】消费者如何读取数据? 前一篇是生产者的处理,这一篇讲消费者的处理 我们都知道,消费者无非就是不停地从队列中读取数据,处理数据。但是与BlockedQueue不同的是,RingBuffer的消费者不会对队列进行上锁,那它是怎样实现的呢? 概括地说,就是通过CAS原子性地得到一个可消费的序号,然后再根据 <a href="https://www.cnblogs.com/longfurcat/p/12864491.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/12862602.html
【源码】RingBuffer(一)——生产者 - 猫毛·波拿巴
纯CAS为啥比加锁要快? 同样是修改数据,一个采用加锁的方式保证原子性,一个采用CAS的方式保证原子性。 都是能够达到目的的,但是常用的锁(例如显式的Lock和隐式的synchonized),都会把获取不到锁的线程挂起,相对于CAS的不挂起,多了挂起和唤醒的开销。 题外话:CAS与锁的关系 CAS只
2020-05-10T08:34:00Z
2020-05-10T08:34:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】纯CAS为啥比加锁要快? 同样是修改数据,一个采用加锁的方式保证原子性,一个采用CAS的方式保证原子性。 都是能够达到目的的,但是常用的锁(例如显式的Lock和隐式的synchonized),都会把获取不到锁的线程挂起,相对于CAS的不挂起,多了挂起和唤醒的开销。 题外话:CAS与锁的关系 CAS只 <a href="https://www.cnblogs.com/longfurcat/p/12862602.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/12814568.html
【杂谈】从实现角度看ChannelFuture - 猫毛·波拿巴
JDK中的Future特性 在介绍Netty的ChannelFuture之前,我们先来看看JDK中的Future是如何实现的。总的来说就是任务提交的时候会使用装饰器模式,将任务包装成一个FutureTask。当执行器执行该Task的时候,不仅仅会执行用户提交的任务,还会执行装饰器添加的额外操作,例如
2020-05-01T12:25:00Z
2020-05-01T12:25:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】JDK中的Future特性 在介绍Netty的ChannelFuture之前,我们先来看看JDK中的Future是如何实现的。总的来说就是任务提交的时候会使用装饰器模式,将任务包装成一个FutureTask。当执行器执行该Task的时候,不仅仅会执行用户提交的任务,还会执行装饰器添加的额外操作,例如 <a href="https://www.cnblogs.com/longfurcat/p/12814568.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/12643878.html
【杂谈】SpringBoot为啥不用配置启动类 - 猫毛·波拿巴
前言 在学习SparkJava、Vert.x等轻量级Web框架的时候,都遇到过打包问题,这两个框架打包的时候都需要添加额外的Maven配置,并指定启动类才能得到可执行的JAR包; 而springboot项目,似乎都不需要额外的配置,直接package就可以得到可执行的JAR包,这是怎么回事呢? Ve
2020-04-07T06:49:00Z
2020-04-07T06:49:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 在学习SparkJava、Vert.x等轻量级Web框架的时候,都遇到过打包问题,这两个框架打包的时候都需要添加额外的Maven配置,并指定启动类才能得到可执行的JAR包; 而springboot项目,似乎都不需要额外的配置,直接package就可以得到可执行的JAR包,这是怎么回事呢? Ve <a href="https://www.cnblogs.com/longfurcat/p/12643878.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/12643544.html
【API知识】SpringBoot项目中@EnableXXX的原理 - 猫毛·波拿巴
@EnableXX注解的使用场景 SpringBoot为开发人员提供了很多便利,例如如果想要定时功能,只要添加@EnableSchedule,即可配合@Schedule注解实现定时任务功能,不需要额外配置定时任务的处理线程,就可以直接使用(框架提供默认配置,在找不到用户自定配置的执行器时,使用默认配
2020-04-06T10:40:00Z
2020-04-06T10:40:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】@EnableXX注解的使用场景 SpringBoot为开发人员提供了很多便利,例如如果想要定时功能,只要添加@EnableSchedule,即可配合@Schedule注解实现定时任务功能,不需要额外配置定时任务的处理线程,就可以直接使用(框架提供默认配置,在找不到用户自定配置的执行器时,使用默认配 <a href="https://www.cnblogs.com/longfurcat/p/12643544.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/11494441.html
【杂谈】再看生产-消费模式 - 猫毛·波拿巴
生产者和消费者之间为什么隔着一个队列? 首先,生产者与消费者由于速度的不一致,所以需要一个空间用于缓冲。这可以将生产者与消费者解耦,生产者产出数据的时候,不需要把数据交到消费者手上才行,只要把数据丢入缓冲区就好。这样就可以各做各的。 为什么缓冲区是一个队列? 通常情况下,这个缓冲区的数据结构是一个有
2019-09-09T13:39:00Z
2019-09-09T13:39:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】生产者和消费者之间为什么隔着一个队列? 首先,生产者与消费者由于速度的不一致,所以需要一个空间用于缓冲。这可以将生产者与消费者解耦,生产者产出数据的时候,不需要把数据交到消费者手上才行,只要把数据丢入缓冲区就好。这样就可以各做各的。 为什么缓冲区是一个队列? 通常情况下,这个缓冲区的数据结构是一个有 <a href="https://www.cnblogs.com/longfurcat/p/11494441.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/11254199.html
【杂谈】Hash表与平衡树 - 猫毛·波拿巴
hash表与平衡树查询数据的时间复杂度是多少? hash表为O(1),平衡树为O(logn) 这个时间复杂度是如何得出的? 时间复杂度是按照最糟糕的情况来的。但即使是最糟糕的情况,hash表也只需要计算一次,就可以定位到数据(对于常见的实现,实际上是定位到桶,然后在桶内遍历)。而对于平衡树,例如AV
2019-07-27T02:59:00Z
2019-07-27T02:59:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】hash表与平衡树查询数据的时间复杂度是多少? hash表为O(1),平衡树为O(logn) 这个时间复杂度是如何得出的? 时间复杂度是按照最糟糕的情况来的。但即使是最糟糕的情况,hash表也只需要计算一次,就可以定位到数据(对于常见的实现,实际上是定位到桶,然后在桶内遍历)。而对于平衡树,例如AV <a href="https://www.cnblogs.com/longfurcat/p/11254199.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/11250827.html
【杂谈】如何对Redis进行原子操作 - 猫毛·波拿巴
什么时候需要进行需要原子操作? 很常见的例子,就是利用Redis实现分布式锁。 实现锁需要哪些条件? 我们知道要实现锁,就需要一个改变锁状态的方法。这个方法能原子地对锁的状态进行检查并修改。如果修改成功,则意味着获得了锁。对于硬件,它提供的就是test-and-set,compare-and-swa
2019-07-26T07:49:00Z
2019-07-26T07:49:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】什么时候需要进行需要原子操作? 很常见的例子,就是利用Redis实现分布式锁。 实现锁需要哪些条件? 我们知道要实现锁,就需要一个改变锁状态的方法。这个方法能原子地对锁的状态进行检查并修改。如果修改成功,则意味着获得了锁。对于硬件,它提供的就是test-and-set,compare-and-swa <a href="https://www.cnblogs.com/longfurcat/p/11250827.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/11107892.html
【杂谈】从底层看锁的实现2 - 猫毛·波拿巴
前言 我的上一篇博客的案例中,请求锁的线程如果发现锁已经被其他线程占用,它是通过自旋的方式来等待的,也就是不断地尝试直到成功。本篇就讨论一下另一种方式,那就是挂起以等待唤醒。 注:相关代码都来自《Operating System: Three Easy Pieces》这本书。 自旋哪里不好? 先说明
2019-06-30T02:56:00Z
2019-06-30T02:56:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 我的上一篇博客的案例中,请求锁的线程如果发现锁已经被其他线程占用,它是通过自旋的方式来等待的,也就是不断地尝试直到成功。本篇就讨论一下另一种方式,那就是挂起以等待唤醒。 注:相关代码都来自《Operating System: Three Easy Pieces》这本书。 自旋哪里不好? 先说明 <a href="https://www.cnblogs.com/longfurcat/p/11107892.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/11040683.html
【杂谈】从底层看锁的实现 - 猫毛·波拿巴
以下内容针对互斥锁。 为什么需要锁? 锁代表着对临界区的访问权限。只有获得锁的操作对象,才能进入临界区。 锁的本质是什么? 锁的本质是一个数据结构(或者说是一个对象),这个对象内保留着描述锁所需要的必要信息。如当前锁是否已被占用,被哪个线程占用。而锁的一些工具,函数库,实际上就是对一个锁对象的信息进
2019-06-17T08:54:00Z
2019-06-17T08:54:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】以下内容针对互斥锁。 为什么需要锁? 锁代表着对临界区的访问权限。只有获得锁的操作对象,才能进入临界区。 锁的本质是什么? 锁的本质是一个数据结构(或者说是一个对象),这个对象内保留着描述锁所需要的必要信息。如当前锁是否已被占用,被哪个线程占用。而锁的一些工具,函数库,实际上就是对一个锁对象的信息进 <a href="https://www.cnblogs.com/longfurcat/p/11040683.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10848925.html
【杂谈】高速缓存一致性与可见性 - 猫毛·波拿巴
这里的缓存指的是什么? 到处都可以有缓存,磁盘中的数据提前加载到内存中就是常见的“缓存”,而我们这里要说的是内存中的数据提前加载到CPU的缓存。每个CPU都有一定的缓存空间。 什么样的数据会存入缓存? 编译器或CPU可以明确知晓的,可能被经常访问的数据。例如一个在循环体中的变量,因为这个变量在循环结
2019-05-11T07:55:00Z
2019-05-11T07:55:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】这里的缓存指的是什么? 到处都可以有缓存,磁盘中的数据提前加载到内存中就是常见的“缓存”,而我们这里要说的是内存中的数据提前加载到CPU的缓存。每个CPU都有一定的缓存空间。 什么样的数据会存入缓存? 编译器或CPU可以明确知晓的,可能被经常访问的数据。例如一个在循环体中的变量,因为这个变量在循环结 <a href="https://www.cnblogs.com/longfurcat/p/10848925.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10799505.html
【杂谈】操作系统如何有效地掌控CPU - 猫毛·波拿巴
操作系统的本质 操作系统本质上也是一个进程,它与其他用户进程共享CPU。与普通进程不同的是,它具有硬件的所有访问权限。而用户进程默认对硬件是没有任何访问权限的,它只能通过系统调用,委托操作系统来完成这些操作。 问题 当操作系统在创建完一个进程后,会将CPU的控制权交给这个新创建的进程。上下文切换,大
2019-05-01T04:02:00Z
2019-05-01T04:02:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】操作系统的本质 操作系统本质上也是一个进程,它与其他用户进程共享CPU。与普通进程不同的是,它具有硬件的所有访问权限。而用户进程默认对硬件是没有任何访问权限的,它只能通过系统调用,委托操作系统来完成这些操作。 问题 当操作系统在创建完一个进程后,会将CPU的控制权交给这个新创建的进程。上下文切换,大 <a href="https://www.cnblogs.com/longfurcat/p/10799505.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10741369.html
【API知识】一种你可能没见过的Controller形式 - 猫毛·波拿巴
前言 这里分享一下我遇到的一个挺有意思的Controller形式,内容涉及@RequestMapping注解的原理。 实际案例 一、基本描述 项目甲中有多个模块,其中就有模块A和B。(这里的模块指的是Maven的多模块子项目),项目乙、丙、丁可以引用模块A来访问独立部署的模块B 模块A => 关于与
2019-04-20T08:19:00Z
2019-04-20T08:19:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 这里分享一下我遇到的一个挺有意思的Controller形式,内容涉及@RequestMapping注解的原理。 实际案例 一、基本描述 项目甲中有多个模块,其中就有模块A和B。(这里的模块指的是Maven的多模块子项目),项目乙、丙、丁可以引用模块A来访问独立部署的模块B 模块A => 关于与 <a href="https://www.cnblogs.com/longfurcat/p/10741369.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10705862.html
【详解】Tomcat是如何监控并删除超时Session的? - 猫毛·波拿巴
前言 偶然发现Tomcat会话时间的半小时,并不是说“会话创建后只有半小时的有效使用时间”,而是说“会话空闲半小时后会被删除”。索性就翻了一下源码。做了一番整理。 注:空闲时间,指的是同一个会话两次请求之间的间隔时间 Session相关类图 HttpSession就是大家Servlet层可以直接使用
2019-04-14T09:03:00Z
2019-04-14T09:03:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 偶然发现Tomcat会话时间的半小时,并不是说“会话创建后只有半小时的有效使用时间”,而是说“会话空闲半小时后会被删除”。索性就翻了一下源码。做了一番整理。 注:空闲时间,指的是同一个会话两次请求之间的间隔时间 Session相关类图 HttpSession就是大家Servlet层可以直接使用 <a href="https://www.cnblogs.com/longfurcat/p/10705862.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10657251.html
【API知识】RestTemplate的使用 - 猫毛·波拿巴
前言 在某种情况下,后台服务可能需要访问另一台服务器的REST接口。以前估计不少人用的都是HttpRequest类来着,结合Paser解析JSON格式的Body。现在Spring Boot的Web Starter就自带了RestTemplate,直接用它的就好了。最好不要再往项目里导新的依赖。这里做
2019-04-04T13:59:00Z
2019-04-04T13:59:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 在某种情况下,后台服务可能需要访问另一台服务器的REST接口。以前估计不少人用的都是HttpRequest类来着,结合Paser解析JSON格式的Body。现在Spring Boot的Web Starter就自带了RestTemplate,直接用它的就好了。最好不要再往项目里导新的依赖。这里做 <a href="https://www.cnblogs.com/longfurcat/p/10657251.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10639297.html
【杂谈】Tomcat 之 Lifecycle接口 - 猫毛·波拿巴
前言 此篇随笔记录《How Tomcat works》中关于Lifecycle接口的相关总结 Lifecycle接口的主要目的 核心:统一。 已知Tomcat的卡特琳娜(Catalina)由许多组件构成。当Catalina启动的时候,这些组件也要跟着一起启动,并且当Catalina关闭的时候,这些组
2019-04-01T14:49:00Z
2019-04-01T14:49:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 此篇随笔记录《How Tomcat works》中关于Lifecycle接口的相关总结 Lifecycle接口的主要目的 核心:统一。 已知Tomcat的卡特琳娜(Catalina)由许多组件构成。当Catalina启动的时候,这些组件也要跟着一起启动,并且当Catalina关闭的时候,这些组 <a href="https://www.cnblogs.com/longfurcat/p/10639297.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10574734.html
【杂谈】FilterChain相关知识整理 - 猫毛·波拿巴
前言 做后台的,Filter肯定没少配置,但是知晓其原理的可能不多。在这之前我也不懂,但这并不影响业务开发,同时也有其他的知识要学,所以一直就没看。这阵子有点闲,刚好在看《How Tomcat Works》的PipeLine相关内容。索性好好梳理一下FilterChain相关的知识。 类图 Filt
2019-03-21T13:22:00Z
2019-03-21T13:22:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 做后台的,Filter肯定没少配置,但是知晓其原理的可能不多。在这之前我也不懂,但这并不影响业务开发,同时也有其他的知识要学,所以一直就没看。这阵子有点闲,刚好在看《How Tomcat Works》的PipeLine相关内容。索性好好梳理一下FilterChain相关的知识。 类图 Filt <a href="https://www.cnblogs.com/longfurcat/p/10574734.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/longfurcat/p/10547834.html
【杂谈】Remember-Me的实现 - 猫毛·波拿巴
前言 此篇随笔记录了Remember-Me实现过程中出现的问题和解决方案,以及相关的思考。 正文 1. RememberMe是什么? RememberMe意为记住我,对应登录界面的那个勾选项。另一种说法,就是自动登录。 2. 那什么又是自动登录呢? 我们知道Tomcat或者其他Servlet容器的会
2019-03-17T09:30:00Z
2019-03-17T09:30:00Z
猫毛·波拿巴
https://www.cnblogs.com/longfurcat/
【摘要】前言 此篇随笔记录了Remember-Me实现过程中出现的问题和解决方案,以及相关的思考。 正文 1. RememberMe是什么? RememberMe意为记住我,对应登录界面的那个勾选项。另一种说法,就是自动登录。 2. 那什么又是自动登录呢? 我们知道Tomcat或者其他Servlet容器的会 <a href="https://www.cnblogs.com/longfurcat/p/10547834.html" target="_blank">阅读全文</a>