Java面试题

2019-03-04  本文已影响0人  taijielan
final, finally,finalize的区别:

java中引用有几类:
java的GC机制:

Java程序的垃圾回收机制也就是GC机制,其作用是及时释放程序中没有使用的对象所占用的内存。

ArrayList 和LinkList的区别和联系。

List,Set,Map之间的区别

List的实现类有3种:
Set的实现类有2种
map的实现类有4种

ArrayList的扩容

ArrayList底层是通过数组来存储数据的,ArrayList的默认数组长度是10 ,也可以根据ArrayList的构造函数指定数组的长度,正常情况下ArrayList每次扩容的长度都是上一次的1.5倍,特殊情况如果扩容1.5倍不够,那么直接扩大到需要的长度大小。

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

LinkedHashMap的原理

LinkedHashMap继承了HashMap,数据的存储是数组和双向链表的方式实现。查询数据的顺序和你插入数据的顺序有关。通过双向链表的方式维护元素的顺序。linkedHashMap是线程不安全的
一般在LruCache中做图片缓存。
有俩种储存数据的方法,一种是插入顺序存储,一种是访问数据的方式存储。accessOrder为false表示插入数据的方式,accessOrder为true表示访问数据的方式,

String的原理

String 存取数据的方式通过一个不可变(final修饰的类)的数组来存储,数组的长度不确定,没有默认的长度,传入多少就是多少,如果进行拼接会通过new String 重新构建一个String。使用字符串常量池时,每当我们用字面量(String s =“”1)创建字符串常量的时候,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,就将该字符串对象的地址赋值给该引用”s”,如果该字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中,并且将此字符串的地址赋值给引用“s”。

String不可变的好处

Java中 注解的使用
注解可以理解为一定程度上的标签。
注解的作用:程序中使用注解可以简化代码提高编程的效率。
注解的原理:注解的本质是继承Annotation的特殊接口。其具体实现类似java的动态代理,通过反射获取注解时,返回的是java运行时生成的动态代理类对象。
元注解类型

java中Error和Exception的区别

继承自Throwable, Error是程序中无法处理的,Exception表示在程序可以提前处理的。

Http 和https的区别:
常用的对称加密和非对称加密,以及区别
使用https加密协议(结合使用对称加密和非对称加密,因为对称加密的处理效率比非对称高,但是非对称加密更加安全)
Bitmap是存放在native层还是存放在java层的?

在android 2.3 之前的版本,图像的数据是存放在native heap的,所以在java heap读不到图像的内存数据,不过在3.0之后的版本,bitmap对象就直接分配到java层了,这样便于管理和调试,可以复用一个bitmap对象,而不必回收它,不过当前的bitmap的大小要和原来的bitmap大小相同,不过在4.4之后的版本,复用的bitmap对象的大小只要不超过原来的大小就行了。bitmap是存放在d alvik heap中的,只有这样才能解释的通为什么bitmap会导致OOM。

Vector和ArrayList的区别?

首先ArrayList和Vector都是链表结构的。
Vector使用synchronized关键字,是线程安全的,ArrayList不是线程安全的,Vector比HashMap更加有效率。

HashTable和HashMap的区别?

HashTable是线程安全的,HashMap是线程非安全的,所以在线程多的情况下使用HashTable.

一个英文字母占一个字节,一个汉子占2个字节
http请求有哪几种,有什么不同?

http总共有2种,一种是Get,一种是Post,他们的不同点是:

TCP/UDP的区别
CountDownLatch

Java并发的工具类,能够使一个或者多个Thread等待其他线程执行完成后再执行。

Java 的内存区域及存放的内容。
getDeclaredMethods 和getMethods方法的区别:

getMothods返回一个类的中的所有公共方法的数组 ,这个公共方法数组包含自己的,也包含继承下来的。
getDeclaredMethods放回一个类中所有的公开的,非公开的,私有的,和默认的方法数组,但是不包含父类继承下来的。

String ,StringBuild,StringBuffer

String 拼接字符串时每次都会创建新的对象,适合少量拼接使用,速度最慢
StringBuffer 线程安全,适合多线程使用,比String快
StringBuilder 线程不安全,适合单线程使用,速度最快

“equals”与“==”、“hashCode”的区别和使用场景

==比较的是俩个对象的值是否相等,
equals比较的是俩个对象的地址是否相同。
默认的,Object 类的 hashCode()方法返回对象存储的内存地址的 hash值。

Error和Exception的区别

Error 是错误,程序中发生错误后JVM不可以处理也不可以恢复。OutOfMemoryError,NoClassDefFoundError
Exception是异常 分为检查异常和非检查异常,检查异常可以使用try catch语句捕捉,非检查异常可以不用处理,检查异常IOException,非检查异常ArrayIndexOutOfBoundsException

上一篇 下一篇

猜你喜欢

热点阅读