1. 什么是反射机制?说说反射机制的优缺点、应用场景?
Java 反射机制是指在运行时动态地获取类的信息、创建对象以及调用对象的属性和方法的机制。Java 反射机制提供了运行时检查 Java 类型信息的能力,让 Java 程序可以通过程序获取其本身的信息。
Java 反射机制的优点:
可以动态地获取类的信息,不需要在编译时就知道类的信息。
可以动态地创建对象,不需要在编译时就知道对象的类型。
可以动态地调用对象的属性和方法,可以在运行时动态地改变对象的行为。
Java 反射机制的缺点:
由于反射是动态的,所以它的运行效率较低,不如直接调用方法或属性。
由于反射是动态的,所以它会破坏 Java 的封装性,可能会使代码变得复杂和不稳定。
Java 反射机制的应用场景:
动态代理。动态代理可以使用反射机制在运行时动态地创建代理对象,而不需要在编译时就知道接口的实现类。
单元测试。JUnit 等单元测试框架可以使用反射机制在运行时动态地获取类和方法的信息,实现自动化测试。
配置文件加载。许多框架(如 Spring)使用反射机制来读取和解析配置文件,从而实现依赖注入和面向切面编程等功能。
RPC框架,RPC框架就是动态的生成类对象,然后调用方法的。
2. 数据库索引是什么,有什么作用,什么场景适合使用索引?
数据库索引是一种数据结构,用于提高数据库表的查询效率。索引可以帮助数据库快速定位和检索存储在表中的数据,从而加快数据查询的速度。在数据量比较大时,使用索引可以极大地提高数据检索的效率。
索引的作用是通过构建一个额外的数据结构(B-tree、哈希表等)来加速数据的检索。它是在数据库表上创建的一种数据结构,它包含一些指向表中数据的指针,可以快速地定位到满足查询条件的数据行,从而提高查询效率。索引可以包含一个或多个列,可以使用单列索引、组合索引、全文索引等多种方式来创建。
适合使用索引的场景包括:
频繁查询的列,如主键、外键等。
经常作为查询条件的列,如WHERE、ORDER BY、GROUP BY 等语句中的列。
经常需要连接的列,如多表联合查询时的列。
数据量较大的表,通过索引可以加快数据检索速度。
索引的优点是可以提高数据库的查询速度,缩短数据检索的时间,提高系统的性能。但是索引也有一些缺点,包括:
占用额外的存储空间,增加了存储成本。
建立索引需要时间,增加了系统的开销。
数据库的更新操作(增删改)会导致索引的重建,影响系统的性能。
拓展:
在平时使用的时候有没有遇到过索引失效的情况呢? 说说什么情况会让索引失效
索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。
计算、函数、类型转换(自动或手动)导致索引失效
不等于(!= 或者<>)索引失效
like以通配符%开头索引失效
OR前后的条件列没有进行索引,那么索引会失效
。。。
你是怎么知道这个查询是否使用到了索引的?
使用 EXPLAIN + 查询语句,可以看到该查询的执行计划,会表明使用了哪些索引。
知道索引覆盖和索引下推吗?什么是回表?
3. HTTP 有哪些常见的状态码?
HTTP(超文本传输协议)常见的状态码有以下几种:
1xx(信息类状态码):指示已经接收到请求,正在继续处理。
2xx(成功状态码):指示请求已经被接收、理解和接受。
200 OK:请求已成功处理。
201 Created:请求已经被实现,而且有一个新的资源已经依据请求的需要而建立。
204 No Content:服务器已经成功处理了请求,但是没有返回任何实体内容。
3xx(重定向状态码):需要进行附加操作以完成请求。
301 Moved Permanently:请求的网页已永久移动到新位置。
302 Found:请求的网页已经临时移动到新位置。
304 Not Modified:客户端发送了一个带条件的请求,服务器端允许请求访问资源,但是请求未满足条件。
4xx(客户端错误状态码):请求包含错误语法或不能被执行。
400 Bad Request:请求报文存在语法错误。
401 Unauthorized:表示发送的请求需要有通过 HTTP 认证的认证信息。
403 Forbidden:表示对请求资源的访问被服务器拒绝。
404 Not Found:请求的资源不存在。
5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。
500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致无法完成对请求的处理。
502 Bad Gateway:充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。
503 Service Unavailable:服务器暂时处于超负载或正在停机维护,无法处理请求。
状态码是服务器对客户端请求结果的反馈,根据状态码可以快速定位问题所在,进行相应的处理。