面试题30天打卡-day05

简介: 面试题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、死锁是什么?如何预防和避免死锁?

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


死锁产生的原因:


互斥条件:一个资源一次只能由一个进程使用。

请求和保持条件:当进程由于资源请求而被阻止时,它将保持已获取的资源。

不可剥夺条件:通过该过程获得的资源在用完之前不能被强行剥夺。

循环等待条件:多个进程之间形成循环等待资源关系。

预防和避免死锁


一次性申请所有的资源。

打破互斥条件

打破不可剥夺条件

打破请求和保持条件

打破循环等待条件

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

目录
相关文章
|
9月前
|
Java 数据库连接 数据库
面试题30天打卡-day06
面试题30天打卡-day06
25 0
|
9月前
|
消息中间件 存储 NoSQL
面试题30天打卡-day23
面试题30天打卡-day23
19 0
|
9月前
|
消息中间件 设计模式 关系型数据库
面试题30天打卡-day08
面试题30天打卡-day08
17 0
|
9月前
|
Java 关系型数据库 MySQL
面试题30天打卡-day03
面试题30天打卡-day03
17 0
|
11月前
|
缓存 JavaScript 前端开发
【面试题总结】
【面试题总结】
|
2月前
面试题
面试题
24 0
|
2月前
|
Kubernetes 调度 Docker
k8s面试题大全
本篇模拟面试官提问的各种docker,k8s问题,意在提高面试通过率,欢迎在评论区探讨,同步进步。
76 2
|
9月前
|
消息中间件 分布式计算 NoSQL
面试题30天打卡-day27
面试题30天打卡-day27
46 0
|
9月前
|
存储 NoSQL Java
面试题30天打卡-day24
面试题30天打卡-day24
26 0
|
11月前
|
编译器 C++ 容器
【C++】 面试题
C/C++ 岗位面试题目
52 0