面试题02

List和Set集合的区别?

都是继承Collection接口。
List:元素有放入顺序,可以重复,类似于数组,检索的效率高,删除和插入的效率低,会引起元素的位置的改变。
Set:元素无放入顺序,不可以重复。类似于链表,检索效率低,删除和插入的效率高,插入删除不会引起元素的位置的改变。

HashSet是如何添加元素保证不重复的?

HashSet:比较元素是否相等,需要比较hashCode()和equals方法()。
HashSet执行add()方法时会源码会调用HashMapadd() 方法,也可以看出添加进行的元素是作为HashMap的key.(比较key会调用hashCode和equals方法)

3 HashMap是线程安全的吗?为什么不是线程安全的?

不是线程安全的。
假如两个线程,线程A和线程B都在插入数据,然后通过经过哈希计算后得到的哈希值是一样的,且该位置还没有其他的数据,所以两个线程都会进入我在上面标记的1的代码中。出现数据覆盖。

4.对象的四种引用?

**强引用:**只要引用存在垃圾回收器永远不会回收。
软引用:非必须引用,内存溢出之前进行回收。
弱引用:第二次垃圾回收时回收。
虚引用:垃圾回收时回收。

java实现反射的三种方法?

  1. 通过new一个对象实现反射
  2. 通过Class.forName()加上路径实现反射
  3. 通过类名实现反射机制
public class Get {
    
     //获取反射机制三种方式 public static void main(String[] args) throws ClassNotFoundException { //方式一(通过建立对象) Student stu = new Student(); Class classobj1 = stu.getClass(); System.out.println(classobj1.getName()); //方式二(所在通过路径-相对路径) Class classobj2 = Class.forName("fanshe.Student"); System.out.println(classobj2.getName()); //方式三(通过类名) Class classobj3 = Student.class; System.out.println(classobj3.getName()); } }

5.Collection和Collections的区别?

java.lang.Collection是一个集合对象的接口,提供了一系列的接口和方法。
Collections是它的一个帮助类,里面封装了一系列的
static
方法,可以直接调用和使用。比如反转reverse()
替换fill(),copy().

6.Arrays.sort()和Collection.sort()的区别?

事实上Collections.sort方法底层就是调用的array.sort方法,import java.lang.reflect.Constructor;public class ReflectTest {
    
        public static void main(String[] args) throws Exception {
    
             Class clazz = null;        clazz = Class.forName("com.jas.reflect.Fruit");        Constructor<Fruit> constructor1 = clazz.getConstructor();        Constructor<Fruit> constructor2 = clazz.getConstructor(String.class);         Fruit fruit1 = constructor1.newInstance();        Fruit fruit2 = constructor2.newInstance("Apple");    }}class Fruit{
    
        public Fruit(){
    
            System.out.println("无参构造器 Run...........");   }    public Fruit(String type){
    
            System.out.println("有参构造器 Run..........." + type);   } }public static void sort(Object[] a) {
    
            if (LegacyMergeSort.userRequested)            legacyMergeSort(a);        else            ComparableTimSort.sort(a, 0, a.length, null, 0, 0);   }//void java.util.ComparableTimSort.sort()static void sort(Object[] a, int lo, int hi, Object[] work, int workBase, int workLen) {        assert a != null && lo >= 0 && lo <= hi && hi <= a.length;        int nRemaining  = hi - lo;        if (nRemaining < 2)            return;  // Arrays of size 0 and 1 are always sortedlegacyMergeSort(a):归并排序 ComparableTimSort.sort():Timsort排序Timsort排序是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法

7.JDK1.5之后 提出了泛型?什么是泛型,泛型的通配符。

泛型是一种参数化的集合,它限制你的添加进集合的类型。多态也可以看作是泛型的机制。
泛型用法:泛型可以表示interface,method(),和通配符中。
上界通配符:<? extends ClassType>该通配符为ClassType的所有类型。它表示任何类型都是ClassType类型的子类。
下界通配符:<? supper ClassType> 该通配符为ClassType的所有超类型。它表示任何类型的父类都是ClassType.

数据库的三范式?

第一范式字段具有原子性,不可以在再分
第二范式:要求表中的每个行可以被唯一的识别。需要加上一个列存储每个列的唯一标识。
第三范式:要求数据库表中不包含其它表中的已经包含的非主关键字信息。

猜你喜欢

转载自blog.csdn.net/houzhicongone/article/details/119923349