java基础总结---第一季

来源:互联网 发布:java.util.base64 编辑:程序博客网 时间:2024/05/21 06:25
1、string为什么是final,一是安全,而是效率,final的value是private的final数组,string中更多的是调用底层的方法,本地方法调用,如果设置非final类型,
那么你就可应改变string中的方法,底层直接交流,这是非常危险。

2、class.forName(className)内部实际调用,class.forName(className,true,classLoader()),true表示需要初始化,默认进行初始化。
classLoader.loadClass(className)内部实际调用,classLoader.loaderClass(className,false),不需要链接,也就进行初始化。

3、阻塞队列和非阻塞队列

4、java内存模型和gc算法   空间剩余40%时,逐渐增大的最大限制;空间剩余70以上时间,逐渐减小到最小限制。

5、多次start线程会报IllegalThreadStateException状态线程非法异常。

6、hashMap的工作原理  hashMap的非线程同步的 hashTable是线程同步的
   HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,
   让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,
   对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。

   当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。
   默认的负载因子是0.75,当超过时,会进行扩容,bucket会增加到原来的两倍,会进行重新rehashing。

7、 ConcurrentHashMap和HashMap的区别
    HashMap和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当HashMap的大小增加到一定的时候,性能会急剧下降,
    因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,
    而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。

8、start和run的区别
   start真正意义是开启一个新的线程。start开启的线程处于就绪状态,当获得时间片时,线程就去调用run方法去执行,而run方法只是一个普通的方法而已。
原创粉丝点击