Java面试题涵盖了许多核心的Java技术和概念,这些知识点对于Java开发者来说至关重要。以下是一些详细解答:
1. **Linux 命令查找进程**:
在Linux中,可以使用`ps -ef`命令列出所有运行的进程,然后结合`grep`命令过滤出名字中包含"abcd"的进程。完整的命令是:`ps -ef | grep abcd`。
2. **Oracle数据库索引失效的情况**:
- **无查询条件**:如果查询没有使用任何索引列,索引将不会被使用。
- **空值查询**:B-tree索引不支持对NULL值的查询,如`comm IS NULL`。
- **函数操作**:当索引列在WHERE子句中使用了函数,且未创建函数索引,如`trunc(birthdate)`。
- **模糊查询**:使用`LIKE '%T'`会导致索引失效,因为Oracle无法利用索引进行全模式匹配。
- **NOT IN和NOT EXISTS**:这些否定条件会导致优化器绕过索引。
- **不等于操作**:如`colum <> 0`,可以通过转换为`colum>0 OR colum<0`来利用索引。
- **非第一位置的复合索引列**:单独引用复合索引的非第一列,索引可能无效。
- **数据类型不匹配**:如将数值与字符串比较,Oracle会尝试隐式转换,导致索引失效。
3. **创建线程的方式**:
创建Java线程有两种主要方法:
- **继承Thread类**:重写`run()`方法,然后创建Thread实例并调用`start()`。
- **实现Runnable接口**:实现`run()`方法,然后将Runnable对象传递给Thread的构造器,创建Thread并调用`start()`。
4. **ArrayList与LinkedList的区别**:
- **数据结构**:ArrayList基于动态数组,LinkedList基于链表。
- **查找效率**:ArrayList由于是连续存储,查找速度快,适合随机访问。
- **插入和删除效率**:LinkedList在插入和删除时表现更好,因为它只需要改变相邻元素的引用,而ArrayList需要移动大量元素。
5. **JVM内存管理**:
- **栈(Stack)**:存储基本类型变量、对象引用以及函数调用的局部变量,执行速度快,但空间有限。
- **堆(Heap)**:存放通过`new`关键字创建的对象实例,便于垃圾回收,但访问速度相对较慢。
- **静态区(Static Area)**:存储程序中的字面量和静态变量,生命周期与类相同,加载时分配,卸载时释放。
6. **Spring AOP**:
- **概念**:AOP是一种编程范式,用于处理系统的横切关注点,如日志、事务管理等,将它们从业务逻辑中分离出来。
- **实现原理**:Spring AOP主要通过动态代理实现,即在运行时生成一个代理对象,该代理对象在调用目标方法前后执行切面代码,无需修改源代码或字节码。
- **应用场景**:在实际开发中,AOP广泛用于声明式事务管理、日志记录、性能监控、缓存管理等多个方面,简化了代码结构,提高了代码的可维护性。
以上只是Java面试中常见的部分知识点,实际上,Java面试还可能涉及更多主题,如多线程同步、异常处理、集合框架、IO流、设计模式、JVM调优、数据库连接池等。准备面试时,应全面掌握这些基础及进阶知识。