java初级常见面试题,面试过后的面经,仅供参考!

本文详细探讨了Java中的`equals()`与`==`的区别,JDK8 HashMap的变化,SpringMVC DispatcherServlet的工作流程,以及MySQL的ACID特性。还涉及Redis的缓冲异常处理,hashCode和equals的关系,final关键字的应用,String、StringBuffer和StringBuilder的对比,方法重载与重写的定义,SpringBean的生命周期,sleep()和wait()的异同,Redis数据类型,@Transactional的作用范围,MySQL索引的原理,Spring作用域,以及SQL查询的优化方法。此外,还讨论了脏读、不可重复读和幻读等事务概念,Spring事务传播机制,事务失效的原因,以及如何在项目中使用事务。
摘要由CSDN通过智能技术生成

1.请简要谈⼀下Java中的equals与==的区别?

(1) ==是运算符,而equals()是方法

(2) 基本数据类型中,==比较的是他们的数据是否相等,而在引用数据类型中==比较的是地址值;equals()方法更多的比较的是值的具体内容,前提是让要比较的双方重写equals()方法,否则,调用的是Object类中的equals(),而Object类中的equals()就是调用的==运算符;在包装类,以及特殊的 类中例如String,Date,File... ,底层默认重写了equals(),所以可以直接比较;

2. JDK8中的HashMap做了什么改变?

1> 由原来的 数组 + 链表 ,换为 数组 + 链表 + 红黑树

2> jdk7中实例化HashMap时底层会创建一个长度为16的entry[]数组,而jdk8中实例化时不会创建数组,而在put第一个键值对的时候才会创建长度为16 node[]的数组

3>在添加数据时,通过hashCode值的特定算法算出在数组中存放的位置,如果此位置没有元素,则添加成功,如果有元素,则以链表的方式存储在当前位置,这里jdk7和8有区别,7是头插,8是尾插;头插效率高,而尾插需要遍历,效率低一点;

4> jdk8中当链表的长度 > 8,并且数组长度大于64的时候,该列链表转换为红黑树存储

3. 请按顺序选出SpringMVC中 DispatcherServlet 正确的⼯作流程

A:当⽤户向服务器发送请求时,会被 DispatcherServlet 拦截。

B:DispatcherServlet 根据 ModelAndView 对象来调⽤适合的视图解析器 ViewResolver。

C:DispatherServlet 解析⽤户访问的 URL,并调⽤处理器映射器 HandlerMapping。

D:处理器映射器 HandlerMapping 映射到对应的后端处理器 Handler(注 意这⾥只是找到了对应的 Controller 类,并没有执其中的⽅法),Handler 对象以及 Handler 对象相关的拦截器对象会被封装到 HandlerExecutionChain 对象中返回给DispatcherServlet。

E:ViewResolver 解析 Model 和 View 返回具体的 view 给 DispatcherServlet。

F:DispatcherServlet 对 view 进⾏渲染,返回具体的视图给客户端显示, 如 JSP,JSON、XML、PDF等。

G:DispatcherServlet 根据后端处理器 Handler 对象来调⽤适合的处理器 适配器。

H:HandlerAdapter 调⽤ Handler 对象执⾏ Handler 中的⽅法,在 Handler 的⽅法中,可以做⼀些额外的⼯作,如消息转换(如 JSON、XML 和 Java 对象的互转)、数据转换(如 String 和 Integer、Double的互 转)、数据格式化(如⽇期)、数据校验(后端校验),最终返回 ModelAndView 对象给 DispatcherServlet,该对象包含视图名和数据模型。

A > C > D > G > H > B > E > F

4.MySQL的ACID分别代表什么?

  • 原子性(Atomicity,或称不可分割性)

  • 一致性(Consistency)

  • 隔离性(Isolation)

  • 持久性(Durability)

原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

一致性:事务必须使数据库从一个一致性状态变换为另一个一致性状态

隔离性:事务的隔离性是指一个事务的执行不能被其他事务干扰,即事务内部的操作和使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间具有隔离性

持久性:一个事务一旦被提交,他对数据库中的数据的改变是永久性的,接下来的其他操作或数据库故障不应该对他有任何影响

5. Redis的缓冲异常有哪些以及应对⽅案,能简要描述⼀下吗?

缓存穿透

缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。

  1. 非法请求的限制,主要是指参数校验、鉴权校验等,从而一开始就把大量的非法请求拦截在外,这在实际业务开发中是必要的手段。

  2. 缓存空值或者默认值,如果从缓存取不到的数据,在数据库中也没有取到,那我们仍然把这个空结果进行缓存,同时设置一个较短的过期时间。通过这个设置的默认值存放到缓存,这样第二次到缓存中获取就有值了,而不会继续访问数据库,可以防止有大量恶意请求是反复用同一个key进行攻击。

  3. 使用布隆过滤器快速判断数据是否存在。那什么是布隆过滤器呢,简单来说,就是可以引入了多个相互独立的哈希函数,保证在给定的空间和误判率下,完成元素判重。因为我们知道,存在hash碰撞这样一种情况,那如果只使用一个hash函数,则碰撞冲突的概率明显会变大,那为了减少这种冲突,我们可以多引入几个hash函数,而布隆过滤器算法的核心思想就是利用多个不同的hash函数来解决这样一种冲突。它的优点是空间效率高,查询时间短,远超其他算法,而它的缺点就是会存在一定的误识别率࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值