"面试题整理"
面试准备是每个IT专业人士职业生涯中不可或缺的一部分,这份文档整理了多个关键的面试知识点,涵盖数据库、SQL优化、数据删除操作、NoSQL存储、Spring框架以及Java集合框架等方面。以下是对这些知识点的详细阐述:
1. **数据库分页**:
- **MySQL分页**:MySQL中使用`LIMIT`关键字来实现分页查询。例如,`SELECT * FROM table LIMIT offset, limit`,其中`offset`表示从哪一行开始,`limit`表示要获取的行数。
- **Oracle分页**:Oracle中通常使用`ROWNUM`伪列配合子查询来实现分页,或者使用更现代的`OFFSET ... FETCH`语法。
2. **SQL优化问题**:
- SQL优化主要包括查询语句的重构、索引的合理创建与使用、避免全表扫描、减少JOIN操作等,目的是提高查询速度和系统性能。
3. **DELETE与TRUNCATE TABLE**:
- **DELETE**:删除表中的数据,如果遇到约束冲突会抛出错误,可以指定WHERE子句进行条件删除,支持事务回滚,但速度较慢。
- **TRUNCATE TABLE**:快速删除表中所有数据,不记录单个删除操作,不触发触发器,对标识列计数器重置,不支持回滚,且在有外键约束的情况下可能无法执行。
4. **Redis数据存储与类型**:
- Redis是一个内存数据库,提供五种基本数据类型:字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(sorted set)。
- 优点包括高性能、高并发读写、易于备份和恢复,常用于缓存和消息队列等场景。
5. **Spring框架注解**:
- **@ResponseBody**:将方法的返回值直接写入HTTP响应体,常用于RESTful API,将结果转换为JSON或其他格式发送给客户端。
- **@RequestMapping**:用于映射HTTP请求到控制器的方法,可以设置URL路径、HTTP方法等属性。
6. **Java集合框架**:
- **ArrayList、LinkedList和Vector**:它们都实现了List接口。
- **ArrayList**:基于动态数组实现,适合随机访问,插入和删除元素相对较慢。
- **Vector**:与ArrayList类似,但所有方法都是同步的,因此线程安全,但性能较差。
- **LinkedList**:基于双向链表,适合于频繁的插入和删除操作,但随机访问效率低。
7. **访问修饰符**:
- **final**:修饰类时,禁止其他类继承;修饰方法时,方法不能被重写;修饰变量时,变量变为常量,一旦赋值后不可更改。
8. **SpEL表达式**:
- **#{...}**:Spring Expression Language (SpEL) 的占位符,用于在运行时评估表达式,常用于Spring的AOP和Bean配置。
- **${...}**:这是普通的属性占位符,常见于Spring配置文件中,用于读取属性文件的值,它在容器初始化时进行替换,而不是在运行时。
以上内容是面试中可能会遇到的关键技术点,理解并掌握这些知识点能帮助求职者在面试中展现出扎实的技术基础。