ArrayList底层逻辑与实现

重点

扩容规则:底层是System.arraycopy()这个方法

  1. 每次扩容都是将新容量设置为1.5 * 旧容量
  2. 新容量如果小于需要的容量,将新容量设置为需要的容量
  3. 新容量如果大于可以分配的最大容量(整型最大值 - 8),新容量设置为(需要的容量小于最大分配容量)需要的容量或者设置为(需要的容量大于最大分配容量)整型最大值

懒加载机制:ArrayList初始化的时候并没有直接给数组分配容量,而是使用的一个空数组进行赋值,只有当第一次增加的时候才会真正的给数组进行容量分配。这样是为了防止用户初始化后没有进行使用导致内存的浪费。(只有用户调用无参构造方法的时候才是懒加载,其他两个构造函数是分配的另外一个空数组)

阅读更多

Java中的Thread

前言

想必各位都对线程这个词不陌生,我们都知道Java中可以通过Thread、Rannable、Callable和线程池来创建一个线程。但是一个线程的创建、运行到结束到底是一个什么样的过程呢?我们以一段代码为入口点来看看Java到底是如何弄的线程。

1
2
3
4
5
public static void main(String[] args) {
new Thread(() -> {
System.out.println("run...");
}).start();
}
阅读更多

Linux中TCP三次握手的实现

前言

网上三次握手八股文一大堆,我“为了面试”也去看了看,刚好那时候接触Linux比较多,突然想到TCP三次握手在Linux内核中是如何去实现的呢?是不是会有不同?然后我就开始了漫长的百度(ps: 我比较菜,还不能拿着Linux上千个源码文件去怼)、源码之路。终于弄清了Linux中TCP三次握手的大致过程。

阅读更多

SpringMVC大致过程

MVC

MVC是一种框架模式,将M和V的实现代码分离。

  1. M(Model):模型,业务规则。处理请求、返回数据,数据可以被多个视图使用。
  2. V(View):视图,就是你能看到并能交互的界面。
  3. C(Controller):控制器,负责接收用户的请求去调用哪个M去处理,然后再返回确定哪个V显示数据。


Servlet

为什么在这里讲一下Servlet?其实SpringMVC就是一个Servlet,所以弄清楚Servlet的过程,SpringMVC的就类似了。

我们现来看一下Servlet的类图关系。

阅读更多

Spring中Bean的生命周期

Bean是什么?

本来没有这一节的,但是写完源码之后,在想是否能够类比一下别的更具体的东西,然后想着想着突然想到了个Bean到底是什么?好像用了这么久的Spring,都还没想过这个问题。然后就去看看官网、书、博客等。就有了这一节。

官网的解释:

《Spring5核心原理与30个类手写实战》中的解释:
Bean对于Spring的意义就像Object对于OOP的意义一样。Spring在Java组件化(JavaBean、EJB等)开发理念下出现的。

个人理解
Bean是一个组件(对象),组成了我们的应用程序,通过IoC可以对其进行管理。就好比去吃自助餐里面的一道道菜。

阅读更多

SpringIOC大致流程

是什么?

​ 官方文档的解释是:IoC也称为依赖注入(DI)。在此过程中,对象仅通过构造函数参数,工厂方法的参数或在构造或从工厂方法返回后在对象实例上设置的属性来定义其依赖项(即,与它们一起使用的其他对象) 。然后,容器在创建bean时注入那些依赖项。从本质上讲,此过程是通过使用类的直接构造或诸如服务定位器模式之类的机制来控制其依赖关系的实例化或位置的Bean本身的逆过程(因此,其名称为Control Inversion)。

​ 简单来说:就是我们将一个个的bean对象交给IoC去管理,他会帮助我们去创建对象实例、填充属性、初始化、添加监听器等过程。

阅读更多

循环依赖

是什么?

简单的来说就是对象a的属性中引用了对象b,对象b的属性中引用了对象c……最后引用到a。

1
2
3
4
5
6
7
8
9
10
11
<bean id="a" class="com.zmm.test.A" lazy-init="false">
<property name="b" ref="b"/>
</bean>

<bean id="b" class="com.zmm.test.B" lazy-init="false">
<property name="c" ref="c"/>
</bean>

<bean id="c" class="com.zmm.test.C" lazy-init="false">
<property name="a" ref="a"/>
</bean>
阅读更多