java

作者: 不了不了吧 | 来源:发表于2018-01-04 11:33 被阅读0次

    1. String类为什么是final的。

      主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率,可能会降低程序的性能,所以String
    被定义成final。String被当做是一种基本数据类型,基础类型作为程序的基石。必须是不可继承的,这是为了安全性而考虑的
    ,很多java里面的类都是基于String的不可变性而设计的,例如HashSet,HashMap的key值不能重复,如果String能改变
    ,那么HashSet,HashMap就会出现重复的key。总结一句就是无规矩不成方圆,基础数据类型不可变是一种设计,保证了一种程序
    语言的安全性和效率。
    

    2. Spring之BeanFactory与ApplicationConText区别

    联系:
    1. BeanFactory和ApplicationConText都是Bean的工厂,都可以加载Bean
    2. ApplicationConText继承自BeanFactory
    区别:
    1. BeanFactory是延迟加载,当调用getBean时才会实例化Bean,ApplicationContext
       初始化的时候就创建了所有的Bean。
    2. BeanFactory不支持Spring的很多插件,如:aop功能、web功能
    3. ApplicationConText除了有BeanFactory的所有功能外,还支持国际化、资源访问、事件传播。
    

    3. Class.forName和classloader的区别

      1.class.forName()前者除了将类的.class文件加载到jvm中之外,
      还会对类进行解释,执行类中的static块
      2.而classLoader只干一件事情,就是将.class文件加载到jvm中
      ,不会执行static中的内容,只有在newInstance才会去执行static块。
    

    4.为什么sql数据库 用B树索引,而不是用其他树型数据结构?

        1. 从算法角度讲,平衡的二叉查找树比较次数和查找效率是高于B-Tree的。
        2. 数据库索引是存储在磁盘的,当数据量很大的时候,索引也会达到几个G,而磁盘的I/O速度是远
        远比不上内存的读写的,这时候磁盘的I/O的效率就非常重要了,一方面B-Tree相比于RB-Tree, 
        AVL-Tree更加低胖,高度低来降低磁盘的I/O效率,另外一方面利用计算机局部性原理(加载某个
        内存数据时候会加载附近的数据)和预读机制(鉴于程序运行时候需要的数据比较集中)通过将每
        个节点的大小设置为为页(主存和磁盘的数据交换单位,通常为4k)的大小。每个节点恰好只需要
        一次磁盘的I/O,数据利用率很高。
        3.B+Tree相比于B-Tree 去掉了节点的数据域,使节点有了更多的出度,非常适合外载存储。
        4. B-Tree被翻译成B-树和B树2种,但都叫B树,千万不能叫B减树
    

    5.java反射的性能优化

        1.如果调用构造方法实例化对象,可以把反射获取的构造缓存起来,性能提高10倍
         也可以直接用class的newInstance方式性能非常高,但是局限于newInstance只能调
         用无参构造方法,因为newInstance调用的是其内部的cacheConstructor。

    相关文章

      网友评论

          本文标题:java

          本文链接:https://www.haomeiwen.com/subject/tqqrnxtx.html