面试的内容

本文围绕Java展开,介绍了SpringMVC工作流程,用户请求经前端控制器、处理器映射器等处理后返回视图。还讲解了JVM类加载机制、volatile特性、泛型优势、锁的分类、Exception与Error区别、HashMap结构及扩容规则等信息技术相关的核心知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringMVC的工作流程

在这里插入图片描述
首先我们的用户请求到前段控制器,前段控制器收到请求之后根据处理器的映射器,处理器的适配器根据url找到处理器也就是我们的后端处理器,后端处理器也就是controller对应的requestMapping那个方法,执行完业务逻辑之后会返回一个ModelView到我们的前端控制器dispatcherServlet,再去调用视图解析器去解析,然后返回一个视图给前端控制器,前端控制器再渲染给用户的浏览器

类加载机制

在这里插入图片描述

JVM
在这里插入图片描述
1.说到jvm首先就是类加载器,他说我们jvm的入口负责把我们的字节码文件加载到jvm当中去形成大的Class对象。
2.其次就是我们的执行引擎,他是把我们java这种高级语言解释转变为计算机语言也就是0,1去操作计算机
3.然后就是我们的运行是数据区,包括方法区,堆,栈,程序计数器。
4.栈 虚拟机栈是我们jvm里线程私有的一个区域,他主要是保存我们方法的局部变量以及对象的引用地址。
5.PC寄存器 他也是线程私有的 用来存放下一条指令的地址。cpu在多个线程之间来回切换然后这个主要是记录到执行到哪里了
6.堆 它是主要存储我们对象的地方,又分为新生区和老年区,新生区分为Eden区和幸存者0和幸存者1区比例为8:1:1。当我们的经过一定数量的gc之后我们的对象会进入到老年区。

volatile

有序性(禁止指令重排)
可见性 (修改过后会通知其他线程)
并不能保证原子性

为什么要使用泛型,用Object不行吗?

用泛型可以使我们的方法更加的灵活。
1、无须类型强转,提高效率,避免了强转出错。

2、通配符"?"的使用提高了程序的阅读性。

3、限制通配符(<? extends T>、<? super T>)提高了程序的健壮性。

公平锁与非公平锁:
未抢占到锁的线程有序等待的叫公平锁,反之是非公平锁。排队公平 插队不公平。

Exception与Error的区别

首先异常分为编译时异常和运行时异常,比如IOException和sqlException在编写代码的时候会强制我们抛出fileNotFoundException和IOException等异常。空指针等异常就属于运行时异常。Exception可以我们程序员手动处理增加我们代码的健壮性,但是一般error是jvm层面的错误,不受程序员控制。

HashMap

1.链表的长度大于8并且容量大于等于64就会变成红黑树 一个treeNode节点的大小是Node节点的2倍,小于6变回链表
2.集合的初始化容量必须是2的幂次方 默认是16

这是因为put元素时是直接把hash值与length-1 hash & (length-1) 当为长度为2的幂次方时候length-1 他的位运算时候低位全都是1, 这样减少了hash冲突,让我们的元素均匀的分配在我们的数组里
1010 1010 0101 0101
0000 0000 0000 1111 位运算后的结果是0101

自动转为2的幂次方源码

扩容 reSize

1.8以后不用ReHash了,存的时候是数组(长度-1)& hash值。现在 长度& hash值判断高低位在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值