Java常见的一些经典面试题(附答案解析)( 三 )


2.LinkedList底层通过双向链表实现 , 取元素时需要进行前项或后项的遍历 , 插入元素时只需要记录本项的前后 项即可 , 所以插入快查询慢;
3.ArrayList和LinkedList底层方法都没有加synchronized关键词 , 多线程访问时会出现多个线程先后更改数据造成得到的数据是脏数据;多线程并发操作下使用Vector来代替 , Vector底层也是数组 , 但底层方法都加synchronized关键字使线程安全 , 效率较ArrayList差;
三、HashMap和HashTable有什么区别?其底层实现是什么?CurrentHashMap的锁机制又是如何?如果想将一个Map变为有序的,该如何实现?
1.区别:(1)HashMap没有实现synchronized线程非安全 , HashTable实现了synchronized线程安全;(2)HashMap允许key和value为null , 而HashTable不允许
2.底层原理:数组+链表实现
3.ConcurrentHashMap锁分段技术:HashTable效率低下的原因 , 是因为所访问HashTable的线程都必须竞争同一把锁 , 那假如容器中有多把锁 , 每一把锁用于锁住容器中的一部分数据 , 那么当多线程访问容器中不同的数据时 , 线程间就不会存在锁竞争 , 从而提高并发访问率;ConcurrentHashMap使用的就是锁分段技术 , 首先将数据分成一段一段的存储 , 然后给每一段数据配一把锁 , 当一个线程占用锁访问其中一个数据时 , 其他段的数据也能被其他线程访问;
4.实现TreeMap
框架部分一、什么是SpringSpring是一个轻量级的开源框架 , 是为了解决企业应用开发的复杂性而创建的;提供IOC来帮助我们创建对象及管理对象之间的依赖关系 , 提供AOP来帮我们完成日志的打印、异常的处理、事物的管理等操作 , 提供JDBC、ORM来完成持久层的操作 , 内置SpringMvc控制层框架
二、spring优点1:方便解耦 , 简化开发;2:方便的对程序进行拦截、运行、监控等功能;3:提供声明式事物;4:属于一个万能的框架 , 跟很多框架都是百搭;
三、什么是IOC?什么是AOP?(1)IOC称为控制反转是指在程序运行时自动注入依赖对象;底层实现原理:反射机制(2)AOP称为面向切面编程 , 就是程序中有很多各不相干的方法 , 在这些方法中加入某种系统功能的代码;例如加入日志、加入异常处理、加入事物管理底层实现原理:动态代理
四、反射机制:在程序运行时根据指定的类名获取类的信息;主要作用:1.在运行时构造一个类的对象;2.判断一个类所具有成员变量和方法;3.调用一个对象的方法;4.生成动态代理;
五、动态代理:利用Java反射技术 , 在运行时创建一个实现某些给定接口的新类(又分为JDK动态代理和Cglib动态代理)主要作用:1.可以隐藏委托类(就是被代理类)的具体实现2.可以实现客户与委托类间的解耦 , 在不修改委托类代码的情况下能够做一些额外的处理JDK动态代理和Cglib动态代理的区别?JDK动态代理只能对实现了接口的类生成代理 , 为不能针对类Cglib动态代理是针对类实现代理 , 主要是对指定的类生成一个子类 , 覆盖其中的方法(集成)
【Java常见的一些经典面试题(附答案解析)】六、什么是DI机制?依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念 , 具体的讲:当某个角色需要另外一个角色协助的时候 , 在传统的程序设计过程中 , 通常由调用者来创建被调用者的实例 。 但在spring中创建被调用者的工作不再由调用者来完成 , 因此称为控制反转 。 创建被调用者的工作由spring来完成 , 然后注入调用者 , 因此称为依赖注入;
七、Spring的Ioc注入方式有几种?一、Set注入二、构造器注入三、接口注入spring注入方便管理 , 依赖注入或者说是控制反转 , 说白了就是使用了配置文件 , 这种思想的唯一好处就是增加了模块的重用性灵活性 。
八、hibernate的工作原理1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打开Sesssion5.session.beginTransaction();//创建事务Transation6.persistent operate持久化操作7.session.getTransaction().commit();//提交事务8.关闭Session9.关闭SesstionFactory


推荐阅读