java

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。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,493评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,958评论 18 399
  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 4,862评论 1 0
  • 1、.java源文件: 一个以”.java“为后缀的源文件:只能有一个与文件名相同的类,可以包含其他类。 2、类方...
    Hughman阅读 5,473评论 1 9
  • 2017年9月10日,日拱一卒,积硅步,精进未来的自己。 100天,33本书,打卡第50天。《干法》 常有人问我,...
    凡尘花仙子阅读 1,215评论 1 4