1、java常用的异常处理机制?
Java常用的异常处理机制有以下几种:
1)try-catch-finally 语句:用于捕获和处理异常。将可能抛出异常的代码放在try块中,然后在catch块中处理异常。无论是否发生异常,finally块中的代码都会被执行。
try {
// 可能抛出异常的代码
} catch (ExceptionType1 e) {
// 处理ExceptionType1类型的异常
} catch (ExceptionType2 e) {
// 处理ExceptionType2类型的异常
} finally {
// 无论是否发生异常,都会执行的代码
}
2)throw 关键字:用于手动抛出异常。当程序遇到某种特定情况时,可以使用throw关键字抛出一个异常对象。
if (条件) {
throw new Exception("异常信息");
}
3)throws关键字:用于声明方法可能抛出的异常类型。当一个方法可能抛出异常,但不处理该异常时,可以在方法签名后使用throws关键字声明异常类型,让调用者处理异常。
public void methodName() throws ExceptionType1, ExceptionType2 {
// 可能抛出异常的代码
}
4)自定义异常类:可以创建一个继承自Exception或RuntimeException的自定义异常类,用于表示程序中特定的错误或异常情况。
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
2、异常的两个子类
Java的异常类都是java.lang.Throwable的子类。它派生了两个子类:Error(错误)和 Exception(违例) 。Error表示程序无法处理的异常,通常不应该抛出或捕获这类异常。Exception表示程序可能处理的异常,包括受检异常和非受检异常。受检异常是指编译器要求必须处理的异常,例如IOException、SQLException等。非受检异常是指编译器不要求必须处理的异常,例如NullPointerException、ArrayIndexOutOfBoundsException等。
3、项目的日志,日志分哪些级别?
在项目中,日志分为五个级别:TRACE、DEBUG、INFO、WARN 和 ERROR。其中,TRACE级别的日志记录最详细的信息,DEBUG级别的日志记录是最详细的调试信息,INFO级别的日志记录是一般的运行信息,WARN级别的日志记录是警告信息,ERROR级别的日志记录是错误信息。
4、equals和==的区别?
- 在Java中,==和equals()的区别如下:
- ==比较的是两个对象的值是否相等,而equals()比较的是两个对象引用所指向的内容是否相等。
- ==比较的是两个对象的引用地址,而equals()比较的是两个对象的内容。
- 如果一个类没有重写equals()方法,那么调用equals()方法就相当于调用了它的父类的equals()方法。如果一个类重写了equals()方法,那么就需要根据具体情况来判断是否需要使用equals()方法来比较两个对象。
5、简单说一下java的IO流
Java IO流 是一种流式的数据输入/输出模型,它提供了一种高效的方式来处理输入/输出数据。Java IO流分为字节流 和 字符流 两种类型。字节流是以字节为最小单位进行读写的,而字符流则是以字符为最小单位进行读写的。Java IO流中包含了许多类,如InputStream、OutputStream、Reader、Writer等,每个类都有其特定的用途。例如,FileInputStream和FileOutputStream用于文件的读取和写入,BufferedReader和BufferedWriter则可以对数据进行缓冲,提高读写效率。
6、给了一个处理json文件的场景题
7、java中有哪些集合类?
Java中的集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题 。
常用的集合类有List、Set、Map等。其中List是有序、可重复的集合,Set是无序、不可重复的集合,Map是键值对形式的集合 。
8、哪个是线程安全,哪个是线程不安全的?
Java中的集合类有线程安全和不安全的之分。线程安全是指在多线程环境下,集合类的行为符合预期,不会出现数据丢失、数据错误等问题。而不安全的集合类则可能会在多线程环境下出现数据丢失、数据错误等问题 。
常用的线程安全的集合类有Vector、HashTable、Properties等,而常用的线程不安全的集合类有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等 。
9、线程池有哪些作用?
线程池是一种池化的技术,类似的还有数据库连接池、HTTP 连接池等等。池化的思想主要是为了减少每次获取和结束资源的消耗,提高对资源的利用率。比如在一些偏远地区打水不方便的,大家会每段时间把水打过来存在池子里,这样平时用的时候就直接来取就好了。线程池同理,正是因为每次创建、销毁线程需要占用太多系统资源,所以我们建这么一个池子来统一管理线程。用的时候从池子里拿,不用了就放回来,也不用你销毁,是不是方便了很多?
线程池的作用主要有以下几点:
- 避免创建过多的线程时引发的内存溢出问题。
- 降低资源消耗。
- 复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。
- 控制同时运行的线程数量,避免线程过多导致系统资源占用过高,甚至崩溃的问题发生。
10、java的垃圾回收机制gc?
参考文章《JVM调优之深入了解GC》
11、mysql场景题,查一个学生表里面学生的总数,查学生表里面姓张的学生,查成绩最大的那个学生。
1)查一个学生表里面学生的总数:
SELECT COUNT(*) FROM 学生表;
2)查学生表里面姓张的学生:
SELECT * FROM 学生表 WHERE 姓名 LIKE '张%';
3)查成绩最大的那个学生:
SELECT * FROM 学生表 WHERE 成绩 = (SELECT MAX(成绩) FROM 学生表);
12、Linux中常用的命令?(这里我说了vim)
Vim 是一个强大的文本编辑器,它在终端中运行,并且有着丰富的功能和快捷键。以下是一些 Vim 的常见命令: