HashMap 和HashTable的区别
答:HashMap 继承AbstractMap 而 HashTable继承的是Dictionary
HashMap 效率高 但是线程不安全 HashTable 效率低 但是 线程安全
HashMap 是从1.2版本开始有的 HashTable是从1.0开始的
HashMap键值对可以为空 HashTable 的键值对不能位空
Vector和ArrayList 和LinkedList 的区别?
答: 版本号:Vector 是从1.0版本开始有的 另外两个是从1.2版本开始的
线程安全:Vector效率低但是 线程安全 linkedlist 和Arraylist 线程不安全
扩容机制: Arraylist初始值是10个 然后1.5倍的速度扩容 vector是2倍速度扩容
底层实现:前两个是数组 后面的是链表
抽象类和接口的区别?
答: 1格式 抽象类是abstract calss 接口是interface
2抽象类是类,具有类的方法和属性既有抽象方法又有普通方法 接口是特殊的类定义的属性都是常量 方法都是抽象方法
3他们都不能直接实例化对象,都是其子类或者实现类创建对象
4 一个类可以通过Implement实现多个接口 但是extends只能继承一个抽象类
5 abstract class 的方法abstract不可以省略 interface的方法abstract可以省略 连public都可以省略
集合类!!!!!
Set:
Hashset (实际是Hashmap) 底层是数组+链表
允许为空,且不能重复,元素乱序存储
Treeset: 底层是红黑树
Treeset不允许为null,有序存储
Map: 用于存储键值对不允许键重复 但允许值重复
Hashtable: 版本号1.0
Key value 不能为空 支持线程同步但同时导致速度变慢
Hashmap :底层是数组+链表
最多允许一条记录的键为null,允许多条记录的值为null
不支持线程同步
LinkedHashMap:
保存了记录的插入顺序 用迭代器遍历Linked Hash Map时先插入的先记录,遍历时比Hashmap 慢。
Treemap:
实现了sortmap接口,默认按照键值的升序排序
不允许key值为空
非线程同步
ConcurrentHashMap:
线程安全并且锁分离 concurrenthashmap内部使用segment表示不同部分,每个段就是一个小hashtable
线程同步
答:同步代码块 synchronized{}
同步方法 public synchronized 数据类型 方法名(){}
特殊域变量volatile 实现线程同步(保证内存可见性 禁止指令重排)
实用重入锁实现同步Reentrantlock类是可重入.互斥。实现Lock接口的锁
常用的方法 获得锁 释放锁
产生死锁必要的条件?
答:互斥条件:一个资源每次只能被一个进程使用
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
不剥夺条件:进程已获得的资源在未使用完时不能强行剥夺
循环等待条件:若干进程之间形成一种头尾相接循环等待资源关系
写一个单例模式 懒汉式 和饿汉式
单例模式:就是让一个类只能创建一个对象
思路: 不能再外界创建对象,构造方法私有化
虽然在外界不能创建对象但是可以在类的内部创建
定义一个静态的方法,将创建的Boy返回
饿汉式:
public class Boy {
Private static Boy boy =new Boy();
Public Boy(){}
Public static Boy getBoy(){
Return boy;
}
}
---------------------------------------
Public class TestBoy {
Public static void main(args[]){
Boy boy1=Boy.getBoy();
Boy boy2=Boy.getBoy();
system.out .printIn(boy1);
system .out.printIn(boy2);
}
}
懒汉式
Public class Girl(){
Private static Girl girl;
Private Girl(){}
Public static synchronized Girl girl(){
if(null==girl){
girl=new Girl();
else{
system.out.printIn(“懒汉式的对象已经创建”)
}
}
Return girl
} }
重写的重载的区别?
重载是多个同名函数存在具有不同的参数个数/类型
重载的时候 方法名要一样,但是参数个数和类型不一样,及参数顺序不同,返回值类型可以相同可以不相同 与访问修饰符无关,无法以返回值区别重载的标准
重写的时候 方法名 ,参数列表相同,返回值必须相同,访问修饰符必须要大于被重写的访问修饰符 重写方法不能抛出更加宽泛的异常,可以抛出非检查异常
连接数据库的步骤?
- 加载数据库驱动
- 获得链接对象,并指定URL,数据库服务器地址以及数据库名 urer password
- 测试链接是否成功
- 关闭资源
Object类的12个方法:
答:Object() clone() equals() finalize()
Getclass() hashcode () notify() notifyAll() tostring()
Wait() wait(long) wait(long int)