面试题30天打卡-day05

1、Java 中 hashCode 和 equals 方法是什么?它们和 == 各有什么区别?

在 Java 中,hashCode 和 equals 方法都是 Object 类的方法。它们的作用分别如下:

  • hashCode 方法返回对象的哈希码,用于支持基于哈希表的集合,如 HashMap、HashSet 等。如果两个对象的 equals 方法返回 true,则它们的 hashCode 方法必须返回相同的值,反之则不需要。
  • equals 方法用于比较对象是否相等。默认情况下,equals 方法使用的是 == 操作符,即只有两个对象引用指向同一个对象时才会返回 true。但是,大部分情况下,我们需要重写 equals 方法来实现自己定义的相等规则。

两者之间的区别在于,hashCode 方法返回的是一个 int 类型的数值,而 equals 方法返回的是一个 boolean 类型的值。

hashCode 方法用于快速比较两个对象是否不同,因为如果它们的哈希码不同,那么它们肯定不相等。equals 方法则用于判断两个对象是否真正相等,这个判断比较复杂,需要根据对象的实际情况来定义。

另外,需要注意的是,== 操作符用于比较两个对象的引用是否相等,即它们是否指向同一个对象。而 equals 方法则用于比较两个对象的值是否相等。

在 Java 中,对象的值比较往往需要根据对象的实际情况来定义,因此一般需要重写 equals 方法。

我的回答

hashCode() 方法得到是对象的哈希值。

equals() 用于比较值是否相等。

equals 和 == 的区别:

  • 当 == 两边都是基本的数据类型时,就是在比较数值是否相等
  • 当 == 两边为对象(引用)类型时,就是比较这两个对象所指向堆中的对象地址是否相同,一般叫做比较内存地址。
  • equals()方法不能用于判断基本类型的变量,只能用来判断两个对象是否相等,底层通过 == 进行比较两个对象,而且返回的是布尔值。

hashCode 和 equals 区别:

hashCode()和equals()这两个方法都是用于比较两个对象是否相等的。

  • 使用 hashCode 进行比较效率更高。
  • 两对象equals的值相等,那么hashCode值也相等。
  • 重写equals()方法时,必须要重写hashCode()方法。重写equals()方法时候,没有重写hashCode()方法的话,可能导致equals()方法判断这两个对象hashCode值不相等。

2、Spring 的两大核心概念是什么?简单讲一下你对它们的理解

Spring的两大核心为IoC(Inversion of Control,控制反转)和 AOP (Aspect Oriented Programming,面向切面编程)

IoC:即控制反转,也可以说是DI(Dependency Injectio) 依赖注入。当我们需要一个对象的时候,我们不再在类的内部进行创建,而是通过Spring容器来获取。

AOP:即面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块即为“切面”,减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理等。

3、死锁是什么?如何预防和避免死锁?

死锁:两个或者两个以上的进程在执行过程中,因为争夺资源而造成一种互相等待的现象,如果没有外力干涉,他们将一致处于死锁状态。

死锁产生的原因:

  • 互斥条件:一个资源一次只能由一个进程使用。
  • 请求和保持条件:当进程由于资源请求而被阻止时,它将保持已获取的资源。
  • 不可剥夺条件:通过该过程获得的资源在用完之前不能被强行剥夺。
  • 循环等待条件:多个进程之间形成循环等待资源关系。

预防和避免死锁

  1. 一次性申请所有的资源。
  2. 打破互斥条件
  3. 打破不可剥夺条件
  4. 打破请求和保持条件
  5. 打破循环等待条件

4、什么是 BOM 和 DOM?分别列举一些它们的函数

DOM(Document Object Model )文档对象模型:通过DOM可以来任意来修改网页中各个内容

  • 通过id查询元素节点:document.getElementById(“id属性值”);
  • 根据元素的name、类名值查询一组元素节点对象:document.getElementsByName(“name属性值”);
  • 根据标签名来查询一组元素节点对象:document.getElementsByTagName(“标签名”);
  • 通过 CSS 选择器查找 HTML 元素:querySelectorAll()

BOM:(Browser Object Mode) 浏览器对象模型,BOM通过JS来操作浏览器,在BOM中为提供了一组对象,用来完成对浏览器的操作BOM对象,允许 JavaScript 与浏览器对话

  • window.innerHeight 浏览器窗口的内部高度(包括滚动条)
  • window.innerWidth 浏览器窗口的内部宽度(包括滚动条)
  • window.open() 打开新窗口
  • window.close() 关闭窗口
  • window.moveTo() 移动当前窗口
  • window.load() 当文档内容加载完毕再触发该事件,旧的注册事件方式

5、说说你对Node.js 的理解?优缺点?应用场景?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 进行服务器端编程。Node.js 拥有事件驱动、非阻塞I/O的特性,能够处理高并发的请求,因此它被广泛应用于实时应用、Web应用和API的开发。

以下是 Node.js 的优缺点:

优点:

  • 事件驱动和非阻塞I/O的特性能够处理高并发的请求,提高了程序的性能和响应速度;
  • 使用 JavaScript 进行开发,具有丰富的开源模块和组件,可以大大提高开发效率;
  • 支持跨平台,可以在 Windows、Linux、MacOS 等多个操作系统上运行;
  • 可以进行快速原型开发和实时调试。

缺点:

  • Node.js 对于计算密集型的任务和多线程编程支持不够好,适合于 I/O 密集型任务;
  • 因为 Node.js 是基于事件驱动和回调机制的,开发时需要特别注意回调地狱和异步操作的异常处理,否则容易导致代码难以维护。

Node.js 的应用场景主要包括以下几个方面:

  • Web 开发:使用 Node.js 可以快速搭建Web服务器,进行Web开发;
  • 实时应用:Node.js 支持事件驱动和非阻塞I/O,可以用于实时数据传输和消息通信等领域;
  • 命令行工具:Node.js 可以用于编写命令行工具和脚本;
  • 微服务:Node.js 支持跨平台和轻量级开发,可以用于编写微服务。

总之,Node.js 具有很多优点,如高并发处理能力、跨平台性、丰富的开源组件等,但也需要注意其局限性,开发者需要在实践中根据具体需求合理选用技术。

你可能感兴趣的:(#,面试题,java,spring,mybatis)