java面试之框架部分(未完待续)

1.说说Spring

Spring的核心是控制反转、依赖注入,Aop(面向切面)相当于把每个bean与bean之间的关系交给第 三方容器进行管理.

2.SpringIOCSpringAOP?

SpringIOC ,其实就是依赖注入、控制反转。相当于把每个bean与bean之间的关系交给第三方容器管理。而这个容器就是spring

SpringAOP 面向切面的编程,或AOP,是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。 SpringAop 就是用 Java的动态代理

3.Spring的底层实现机制是什么?

使用Dom4j(解析XML)+Java反射机制

Dom4j其实就是解析XML。使用反射机制实例化bean。

4.SpringAOP用到了什么代理?

JDK动态代理:对实现了接口的类生成代理

CGLib代理机制:对类生成代理

5.动态代理与静态代理区别?

静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 
动态代理:在程序运行时,运用反射机制动态创建而成。

6.Spring注入有那些方式?

      Set注入

      构造器注入

      静态工厂的方法注入

      实例工厂的方法注入

7.Spring有那些注解?

@Autowired(按类型注入)

@Service(标示为注入为服务层)

@Resource(按名称注入)

@Controller(标识控制器bean id)

@RequestMapping(表示映射URL路径)

8.简述Spring的优缺点?

优点:

  1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦

  2.可以使用容易提供的众多服务,如事务管理,消息服务等

  3.容器提供单例模式支持

  4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能

  5.容器提供了众多的辅助类,能加快应用的开发

  6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等

  7.spring属于低侵入式设计,代码的污染极低

  8.独立于各种应用服务器

  9.spring的DI机制降低了业务对象替换的复杂性

  10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

缺点:

使用到了大量反射机制。反射机制非常占内存

9.springmvc和spring的区别

https://www.cnblogs.com/xtdxs/p/6594191.html

10.说一下orm与jdbc的区别?

jdbc只是一个java操作数据库的规范接口而已

orm不过是一种思想,对象关系映射。

ORM:是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.

JDBC:是从底层访问数据库服务器。一般银行,金融行业为了安全起见,直接用JDBC访问

11.hibernate的三种状态?

在Hibernate中,对象有三种状态:临 时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。

处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject).

12.Hibernate的缓存机制

   Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。

(1).Hibernate一级缓存又称为“Session的缓存”。

Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。

一级缓存中,持久化类的每个实例都具有唯一的OID。

(2).Hibernate二级缓存又称为“SessionFactory的缓存”。

由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。

第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。

Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。

13.Mybatis与Hibernate区别?

Hibernate是面向对象的思想操作数据生成Sql语句,而mybatis是以纯sql操作数据

相对于mybatis容易优化.扩展性好,但是移植性差

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值