面试题02
Posted SmallCuteMonkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题02相关的知识,希望对你有一定的参考价值。
List和Set集合的区别?
都是继承Collection接口。
List:元素有放入顺序,可以重复,类似于数组,检索的效率高,删除和插入的效率低,会引起元素的位置的改变。
Set:元素无放入顺序,不可以重复。类似于链表,检索效率低,删除和插入的效率高,插入删除不会引起元素的位置的改变。
HashSet是如何添加元素保证不重复的?
HashSet:比较元素是否相等,需要比较hashCode()和equals方法()。
HashSet执行add()方法时会源码会调用HashMap的 add() 方法,也可以看出添加进行的元素是作为HashMap的key.(比较key会调用hashCode和equals方法)
3 HashMap是线程安全的吗?为什么不是线程安全的?
不是线程安全的。
假如两个线程,线程A和线程B都在插入数据,然后通过经过哈希计算后得到的哈希值是一样的,且该位置还没有其他的数据,所以两个线程都会进入我在上面标记的1的代码中。出现数据覆盖。
4.对象的四种引用?
**强引用:**只要引用存在垃圾回收器永远不会回收。
软引用:非必须引用,内存溢出之前进行回收。
弱引用:第二次垃圾回收时回收。
虚引用:垃圾回收时回收。
java实现反射的三种方法?
- 通过new一个对象实现反射
- 通过Class.forName()加上路径实现反射
- 通过类名实现反射机制
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.
数据库的三范式?
第一范式:字段具有原子性,不可以在再分。
第二范式:要求表中的每个行可以被唯一的识别。需要加上一个列存储每个列的唯一标识。
第三范式:要求数据库表中不包含其它表中的已经包含的非主关键字信息。
以上是关于面试题02的主要内容,如果未能解决你的问题,请参考以下文章
经验总结:Java高级工程师面试题-字节跳动,成功跳槽阿里!