总结面试题

HashMap HashTable的区别

答:HashMap 继承AbstractMap   而 HashTable继承的是Dictionary

         HashMap 效率高 但是线程不安全 HashTable 效率低 但是 线程安全
         HashMap 是从1.2版本开始有的   HashTable是从1.0开始的
         HashMap键值对可以为空  HashTable 的键值对不能位空
VectorArrayList 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

}       }

重写的重载的区别?

重载是多个同名函数存在具有不同的参数个数/类型

重载的时候 方法名要一样,但是参数个数和类型不一样,及参数顺序不同,返回值类型可以相同可以不相同 与访问修饰符无关,无法以返回值区别重载的标准

 

重写的时候 方法名 ,参数列表相同,返回值必须相同,访问修饰符必须要大于被重写的访问修饰符 重写方法不能抛出更加宽泛的异常,可以抛出非检查异常

连接数据库的步骤?

  1. 加载数据库驱动
  2. 获得链接对象,并指定URL,数据库服务器地址以及数据库名 urer password
  3. 测试链接是否成功
  4. 关闭资源

Object类的12个方法:

答:Object() clone() equals() finalize()

         Getclass()  hashcode ()  notify()  notifyAll()   tostring()

         Wait()  wait(long)  wait(long int)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值