JAVASE面试题
1.抽象类和接口的区别
抽象类重在对象的本质,接口则是对象的附加行为
抽象类是按需实现 ,接口必须全部实现
一个类只能继承一个抽象类 ,但是能多实现接口
抽象类中能定义普通的方法 ,接口中不能定义普通的方法
应用的场景 :
抽象类:
在设计类时,如果有些方法我们能确定,而有些方法不能确定,这时候我们就可以把该类声明成抽象类
接口: 我们在定义相互调用规则时,可以使用接口。面向接口进行编程的明显好处,就是能极大降低软件系统的相互耦合性,接口的定义者按照接口进行调用,而实现者去实现接口
2.list , set, map 的区别,HashMap和Hashtble
list是有顺序,能重复 ,有索引
set是没有顺序, 不能重复 ,无索引
map 是键值对的方式存储
HashMap效率高,线程不安全
HashTabe效率低 , 线程安全
①ArrayList:底层是数组结构,查询快,增删慢,不同步。
②LinkedList:底层是链表结构,增删快,查询慢,不同步
3 ,值传递 和引用传递
值传递 ,是拷贝了一份 ,原来的数据不会改变
引用传递 , 是共用一份 ,原来的数据 会改变
4 ,Collection和Collections的区别:
Collections:java.util下的工具类,实现对集合的查找、排序、替换、线程安全化等操作。
Collection:是java.util下的接口,是各种单列集合的父接口,实现此接口的有List和Set集合,存储对象并对其进行操作。
5,创建多线程方式
方式一:继承Thread
方式二:实现Runnable
6 ,进程和线程的区别
线程是进程的一个执行单元 ,也是进程调度的实体,一个进程,可以有多个线程
7 ,堆和再的区别
堆存放的是对象,
在存放的是变量 ,
8、线程的同步:
同步代码块:synchronized(对象){},将需要同步的代码放在大括号中,括号中的对象即为锁。
同步函数:放于函数上,修饰符之后,返回类型之前。
9、wait和sleep的区别:(执行权和锁区分)
wait:
可指定等待的时间,不指定须由notify或notifyAll唤醒。
线程会释放锁。(基类是Object)
sleep:
必须制定睡眠的时间,时间到了自动处于临时(阻塞)状态。
仍持有锁,不会释放执行权。(基类是Thread)