一,集合
从数据结构出发
1,集合与集合的区别
list,set,map的区别:
list,set是继承与collection接口,map不是
特点:
list:有序有下标可重复
set:无序的无下标不可重复
map:键值对形式存在
2,集合子类的区别
2.1,Arraylist与linkedlist的区别:
ArrayList:数据结构是数组
linkedlist:数据结构是链表
特点:ArrayList查询修改较快,新增删除较慢
linkedlist查改慢,新增删除较快
参考如下图:Arraylist
Linkedlist
2.2,hashset与treeset的区别:
hashset:数据结构是哈希表
treeset:数据结构是二叉数
hashset中存储的对象判重,底层是跟hashcode,equals方法相关
treeset:可以排序,需要定义排序规则
java.lang.comparable:自然排序接口
java.util.comparable:比较器接口
2.3,hashmap与hashtable的区别:
数据结构都是哈希表
hashmap是线程不安全的,方法前没有被synchronized修饰
hashtable是线程安全的,方法前有被synchronized修饰
2.4,hashmap与treemap的区别:
HashMap<Student,Teacher> hashmap = new HashMap();
new Student(1,"zhangsan")
new Student(1,"zhangsan")
hashmap:数据结构是哈希表
treemap:数据结构是二叉数
hashmap中存储的对象判重,底层是跟hashcode,equals方法相关
treemap:可以排序,需要定义排序规则
java.lang.comparable:自然排序接口
java.util.comparable:比较器接口
3,集合的底层原理
list如何去重:
调用contains方法,以及重写equals完成的
set如何去重:
跟hashcode,equals相关
二,线程
概念:最小的运行单元
线程与进程的区别:多对一的关系,一个进程可以对应多个线程,一个线程是属于一个进程
如何实现:extends Thread,implement runnable
线程的状态:就绪,初始化,运行,阻塞,销毁
状态的转换:start,wait,run方法中的线程内容是运行完毕的
常用方法及区别:
run,start的区别?
run指的是线程运行的内容,start指定是开启线程
sleep,wait的区别?
sleep是休眠,到了一定时间会自动唤醒,wait是需要人为的唤醒
死锁:
两个及以上线程共同抢占锁资源,有锁a与锁b,形成互锁,线程呈现僵持状态,抢占服务器资源的现象
三,面向对象
1,类属性与对象属性的区别/static?
类属性是共有的
对象属性是独有的,每个对象的属性都是单独存在的
2,方法的重写与重载?
重写:同名同参
重载:同名不同参
3,构造器是否可以被重写?
不可用
Class person{
}
}
class Student{
Student(){
super();
}
}
4,final修饰的类,方法,属性的特点?
final代表最终
类:不能被继承
方法:不能被重写
属性:指向不能发送变化
5,抽象类与接口的区别?
5.1,定义关键字不同
5.2,继承或实现的关键字不同
5.3,子类扩展的数量不同
5.4,多态?
Person p = new Student();
四,异常
1,如何出现栈内存溢出?
递归
2,runtimeException与Exception的区别?
runtimeException是需要声明或者捕捉的,Exception则相反
3,异常与错误的区别?
异常通常是由程序导致的,是可以修复的,而错误则不然
4, 异常的处理方式?
捕捉跟声明
五,IO流
1,字节流:InputStream,OutputStream
2,字符流:Reader,Writer
3,文件拷贝
4,深拷贝与浅拷贝