知识点记录

1.并发、并行、串行的区别

并发:允许两个任务彼此干扰。统一时间点、只有一个任务运行,交替执行。

并行:在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行。

串行:在时间上不可能发生重叠,前一个任务没执行完,下一个任务就只能等待。

2.synchronized(内置锁)和 ReentrantLock(可重入锁)区别

  1. 用法不同:synchronized 可以用来修饰普通方法、静态方法和代码块,而 ReentrantLock 只能用于代码块

  2. 获取锁和释放锁的机制不同:synchronized 是自动加锁和释放锁的,而 ReentrantLock 需要手动加锁和释放锁

  3. 锁类型不同:synchronized 是非公平锁,而 ReentrantLock 默认为非公平锁,也可以手动指定为公平锁(new ReentrantLock(true) 可以创建公平锁)。

  4. 响应中断不同:ReentrantLock 可以响应中断,解决死锁的问题,而 synchronized 不能响应中断。

  5. 底层实现不同:synchronized 是 JVM 层面通过监视器实现的,而 ReentrantLock 是基于 AQS 实现的。

线程死锁是指由于两个或多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行

3.谈谈你对AQS的理解,AQS如何实现可重⼊锁?
AQS是⼀个JAVA线程同步的核心组件。是JDK中很多锁⼯具的核心组件

AQS的锁是先尝试CAS乐观锁去获取锁,获取不到,才会转换为悲观锁

在AQS中,维护了⼀个信号量state丶加锁线程变量和⼀个线程组成的双向链表队列。

  • 其中,这个线程队列,就是⽤来给线程排队的
  • 加锁线程变量就是当前加锁的线程
  • ⽽state就像是⼀个红绿灯,⽤来控制线程排队或者放⾏的。
    • 这个加锁的过程,直接就是用CAS操作将state值从0变为1。
    • 预计为0,修改+1

4.BeanFactory和ApplicationContext的区别

相同:

1.Spring提供了两种IOC的容器,一个是beanFactory,一个是ApplicationContext。他们都是java接口,

        ApplicationContext  implement  BeanFactory extends ListableBeanFactory

2.他们都可以用来配置XML属性,也支持属性的自动注入。

3.BeanFactory和ApplicationContext 都提供了一种获取bean的方式,getBean(“beanName”)

不同:

1.实例化时机不同,BeanFactory是调用getBean是实例化,而ApplicationContext 是在容器启动的时候就实例化单例bean(除非显示标注prototype)

2.BeanFactory不支持国际化,ApplicationContext 支持

3.ApplicationContext能够实现监听器并注入到Spring容器中

       实现:  a. ApplicationContext.publishEvent(继承ApplicationEvent的对象)发布通知

                    b.定义监听类 implements ApplicationListener<事件类>;

                    c.applicationContext.xml:中配置bean

                    d.调用@Service类的方法(通过@ContextConfiguration配置xml路径,@Autowired来注入,调用方法)

4.BeanFactory的一个核心实现是XMLBeanFactory,而ApplicationContext的一个核心实现是ClassPathXmlApplicationContext

在SpringMVC中得到的容器都叫WebApplicationContext,里面有getServletContext方法,从而使用servletcontext接口的一些方法

5.如果使用自动注入并使用BeanFactory,需要使用API注册AutowiredBeanPostProcessor(@Autowired),

       如果使用ApplicationContext,则需要使用xml来配置

总结:BeanFactory提供的基本的IOC和DI的功能,而ApplicationContext对其进行了扩展,实现了更高级的功能(国际化,事件监听,底层资源访问加载多个Resource)。

5.RocketMQ为什么速度快

是因为使用了顺序存储异步刷盘零拷贝

6.tcp三次握手和四次挥手

TCP的三次握手与四次挥手详解_Ysming88的博客-CSDN博客_tcp三次握手和4次挥手的过程

三次握手原理:

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;

第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;

第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。

四次挥手原理:

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;

第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;

第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;

第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

其中:FIN标志位数置1,表示断开TCP连接。

7.HTTP和TCP的区别

1、TCP对应与传输层、而HTTP对应于应用层,所以HTTP协议是建立在TCP协议之上的;

2、HTTP底层是利用TCP协议传输的,所以支持http也就一定支持TCP;

3、TCP是网络传输协议, HTTP是超文本传输协议;

        TCP是底层协议,定义的是数据传输和连接方式的规范。
        HTTP是应用层协议,定义的是传输数据的内容的规范。

4、HTTP是无状态的短链接,而TCP是有状态的长连接;

TCP对应于传输层,HTTP对应于应用层,从本质上来说,二者没有可比性。

8.类加载器双亲委派模型

JVM中存在三个默认的类加载器

1.BootStrapClassLoader负责加载标准库中的类(String, ArrayList, Random, Scanner..)

2.ExtensionClassLoader负责加载JDK扩展的类.(现在很少会用到)

3.ApplicationClassLoader 负责加载当前项目目录中的类~~

ApplicationClassLoader 的父加载器是ExtensionClassLoader,ExtensionClassLoader的父加载器BootstrapClassLoader。

JVM在加载一个类时,会调用ApplicationClassLoader 的loadClass方法来加载这个类。不过在这个方法中,会先使用ExtensionClassLoader的loadClass方法来加载类。

同样ExtensionClassLoader的loadclass会使用BootstrapClassLoader来加载类。如果BootstrapClassLoader加载到了就直接成功。

如果BootstrapClassLoader没有加载到,那么ExtensionClassLoader就会自己尝试加载该类。如果没有加载到,那么则会由ApplicationClassLoader 来加载这个类。

所以,双亲委派指的是jvm在加载类时,会委派给ExtensionClassLoader和BootstrapClassLoader进行加载,如果没加载到才有自己进行加载。

9.内存溢出(Out Of Memory---OOM)和内存泄漏(Memory Leak)

内存溢出:程序申请内存时,没有足够的内存供申请者使用

内存泄漏:程序在申请内存,使用结束后,没有释放已申请的内存空间

二者的关系,内存泄漏的堆积最终会导致内存溢出,内存溢出就是你要的内存空间超过了系统实际分配给你的空间

10.mybatis一级缓存和二级缓存

https://www.cnblogs.com/anquing/articles/17636899.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值