今天在做面试题,看到又问hashmap和hashset的区别。
-
HashMap的底层数据结构
HashMap
在 Java 中的底层数据结构是一个数组和链表(或红黑树)的组合。具体来说,它是基于一个数组结构,数组中的每个元素是一个链表的头节点。当发生哈希冲突时,即不同的键映射到同一个数组索引位置,这些键值对就会以链表的形式存储在这个位置上。从 Java 8 开始,当链表的长度超过一定阈值(默认为 8),链表会转换成红黑树,以提高搜索效率。 -
put方法过程
HashMap
的put
方法的基本步骤如下:- 计算键的哈希值,然后通过哈希算法确定这个键值对应该存储在数组的哪个位置。
- 如果该位置没有元素,直接新建一个节点存储键值对。
- 如果该位置已经有元素(即发生了哈希冲突),则:
- 如果该位置的元素是树节点(链表转换成红黑树后),则在树中插入键值对。
- 如果该位置的元素是链表,遍历链表,如果找到相同键的节点,则更新该节点的值;如果没有找到,则在链表尾部添加新的节点。
- 如果数组的负载因子超过阈值(默认为 0.75),则进行扩容操作,即创建一个新的更大的数组,并将所有元素重新映射到新数组上。
-
讲一下SpringAOP,项目中有用到吗,用来干什么 Spring AOP(面向切面编程)是 Spring 框架的一个模块,它允许你在不修改业务逻辑代码的情况下,对程序的特定部分进行横向切入。AOP 通过“切面”和“通知”来实现,切面定义了横切的关注点,而通知定义了切面何时何地被应用。
- 项目中的应用:在项目中,我使用 Spring AOP 来进行日志记录、事务管理、权限检查等横切关注点的处理。例如,通过 AOP 可以在方法执行前后自动记录日志,或者在方法执行前后进行权限验证,而不需要在每个业务逻辑方法中手动编写这些代码。
- 用途:Spring AOP 常用于日志记录、事务管理、权限检查、性能监控等方面。
-
讲一下SpringMVC的过程 Spring MVC 是一个基于 Java 的实现了 MVC 设计模式的 Web 框架,用于构建 Web 应用程序。它的处理过程大致如下:
- 客户端请求:用户通过浏览器发送 HTTP 请求到服务器。
- 前端控制器(DispatcherServlet):接收到请求后,Spring MVC 的前端控制器将请求委托给适当的处理器(Controller)。
- 处理器映射(HandlerMapping):确定哪个 Controller 的哪个方法将处理请求,并生成处理器对象及处理器拦截器(如果有)。
- 处理器适配器(HandlerAdapter):负责将处理器映射提交的Controller和handler映射成Controller方法的执行。
- Controller:Controller 方法执行业务逻辑处理,并返回一个模型和视图。
- 视图解析器(View Resolver):解析 Controller 返回的逻辑视图名为具体的视图。
- 视图(View):负责渲染返回的数据。
- 返回响应:将渲染好的视图返回给客户端。