那些有趣的代码(三)--勤俭持家的 ArrayList
那些有趣的代码(二)--偏不听父母话的 Tomcat 类加载器
看 Tomcat 的源码越看越有趣。Tomcat 的代码总有一种处处都有那么一点调皮的感觉。今天就聊一聊 Tomcat 的类加载机制。
了解过 JVM 的类加载一定知道,JVM 类加载的双亲委派机制。但是 Tomcat 却打破了 JVM 固有的双亲委派加载机制。
那些有趣的代码(一)--有点萌的 Tomcat 的线程池
最近抓紧时间看看了看tomcat 和 jetty 的源代码。发现了一些有趣的代码,这里和大家分享一下。
Tomcat 作为一个老牌的 servlet 容器,处理多线程肯定得心应手,为了能保证多线程环境下的高效,必然使用了线程池。
但是,Tomcat 并没有直接使用 j.u.c 里面的线程池,而是对线程池进行了扩展,首先我们回忆一下,j.u.c 中的线程池的几个核心参数是怎么配合的:
- 如果当前运行的线程,少于corePoolSize,则创建一个新的线程来执行任务。
- 如果运行的线程等于或多于 corePoolSize,将任务加入 BlockingQueue。
- 如果 BlockingQueue 内的任务超过上限,则创建新的线程来处理任务。
- 如果创建的线程超出 maximumPoolSize,任务将被拒绝策略拒绝。
这个时候我们来仔细看看 Tomcat 的代码:
首先写了一个 TaskQueue 继承了非阻塞无界队列 LinkedBlockingQueue<Runnable>
并重写了的 offer 方法:
从需求第三定律说起--为什么知乎的回答质量下降了
恭喜知乎 F 轮融资成功,今天不谈技术,谈谈别的。
如何利用 Spring Hibernate 高级特性设计实现一个权限系统
我们的业务系统使用了一段时间后,用户的角色类型越来越多,这时候不同类型的用户可以使用不同功能,看见不同数据的需求就变得越来越迫切。
如何设计一个可扩展,且易于接入的权限系统.就显得相当重要了。结合之前我实现的的权限系统,今天就来和大家探讨一下我对权限系统的理解。
这篇文章会从权限系统业务设计,技术架构,关键代码几个方面,详细的阐述权限系统的实现。
我的2018年总结
2018年结束了,这一年成长是的一年。
从 LongAdder 中窥见并发组件的设计思路
最近在看阿里的 Sentinel 的源码的时候。发现使用了一个类 LongAdder 来在并发环境中计数。这个时候就提出了疑问,JDK 中已经有 AtomicLong 了,为啥还要使用 LongAdder ? AtomicLong 已经是基于 CAS 的无锁结构,已经有很好的并发表现了,为啥还要用 LongAdder ?于是赶快找来源码一探究竟。
徒手撸框架--实现 RPC 远程调用
微服务已经是每个互联网开发者必须掌握的一项技术。而 RPC 框架,是构成微服务最重要的组成部分之一。趁最近有时间。又看了看 dubbo 的源码。dubbo 为了做到灵活和解耦,使用了大量的设计模式和 SPI机制,要看懂 dubbo 的代码也不太容易。
按照《徒手撸框架》系列文章的套路,我还是会极简的实现一个 RPC 框架。帮助大家理解 RPC 框架的原理。
广义的来讲一个完整的 RPC 包含了很多组件,包括服务发现,服务治理,远程调用,调用链分析,网关等等。我将会慢慢的实现这些功能,这篇文章主要先讲解的是 RPC 的基石,远程调用 的实现。
相信,读完这篇文章你也一定可以自己实现一个可以提供 RPC 调用的框架。