包的定义与使用
1、包的定义:在.java文件首行用package 包名称即可。
包的导入:import 包.类(只能导入一个类),导入多个类用通配符 * ;
类使用class 和public class的区别: (1)public class 文件名必须与类名保持一致,如果希望一个类被其他类访问,则必须定义为public class。(2)class 文件名可以与类名不一致,在一个*.java中可以定义多个类,但这个类不允许被其他包访问。
2.设计模式:
单例设计模式:一个类只允许产生一个实例化对象。
饿汉式:只要加载了该类,就会产生一个对象。(线程安全的单例化模式)
class Message111{
private final static Message111 INSTANCE =new Message111();
private Message111(){ }
public static Message111 getInstance(){
return INSTANCE;
}
public void print(){
System.out.println("hehe");
}
}
public class Message{
public static void main(String[] args) {
Message111 message111=null;
message111=Message111.getInstance();
message111.print();
}
}
懒汉模式:去使用类的对象时才会产生实例化对象。(线程不安全的单例化模式)
class Message111{
private static Message111 instance;
private Message111(){ }
public static Message111 getInstance(){
if(instance==null){
instance=new Message111();
}
return instance;
}
public void print(){
System.out.println("hehe");
}
}
public class Message{
public static void main(String[] args) {
Message111 message111=null;
message111=Message111.getInstance();
message111.print();
}
}
面试题:设计一个单例程序,说明程序特点。
特点:构造方法私有化,外部无法产生新的实例化对象,只能通过static方法取得实例化对象。
异常与捕获
所有异常都是由Throwable继承而来的,Exception分为RuntimeException和IOException。
出现异常会导致程序终止执行。
可以用try…catch, try…finally,try…catch…finally对异常进行处理(不管程序出不出现异常finally修饰的语句都要执行)
面试题:throws与throw的区别:
throws关键字:该方法出现问题后不希望进行处理,就是用throws抛出。(在方法声明上使用,告诉用户本方法可能产生的异常,同时该方法可能不处理此异常)
throw关键字:人为进行异常的抛出,用于方法内部。
面试题:Exception与RuntimeException的区别,请列举几个常见的RuntimeException
(1)Exception是RuntimeException的父类,使用Exception定义的异常都要求必须使用异常处理,而使用RuntimeException定义的异常可由用户选择性的进行异常处理。
(2)常见的RuntimeException: ClassCastException、NullPointerException等。
自定义异常类可以继承的两种父类:Exception、RuntimeException.
时间复杂度、空间复杂度
时间复杂度:算法中基本操作的执行次数。
空间复杂度:一个算法在运行过程中临时占用存储空间大小的度量。
使用大O渐进法表示,推导大O阶的方法:(1.)用常数1取代运行时间中的所有加法常数。(2.)在修改后的运行次数函数后,只保留最高阶。(3.)如果最高阶系数不是1,则去除这个最高阶项的系数。
线性表和链表
线性表:n个具有相同特性的数据元素的有限序列
栈:是一种特殊的线性表,进行插入与删除的一端叫栈顶(Top永远指向可以存放数据元素的下标)栈中的元素遵守后进先出的原则。栈一般用数组实现。
队列:遵循先进先出的原则。进行删除操作的一端叫队头,进行插入操作的一端叫队尾。一般使用链表实现。
栈和队列面试题
- 括号匹配问题。(一个栈,遇到左括号入栈,遇到右括号出栈,看是否匹配)
- 用队列实现栈。(两个队列,出栈时将有数据的队列(除最后一个数据)出队列到另一个队列中)
- 用栈实现队列。(两个空栈,插入数据时给一个空栈入栈,删除数据时有元素的栈出栈,放在另一个空栈里再出栈)
- 实现一个最小栈。(两个栈MinStack、Stack)
- 设计循环队列。