IOC和AOP以及spring框架的的面试题

文章详细介绍了Java中String类的常用方法,包括indexOf(),charAt(),replace()等,并对比了String、StringBuffer和StringBuilder的可变性、线程安全性和性能差异。此外,还阐述了Spring框架的核心功能,如控制反转(IOC)和面向切面编程(AOP),以及Spring的事务管理类型和优势。
摘要由CSDN通过智能技术生成

String 类的常用方法都有那些?

aindexOf():返回指定字符的索引。

bcharAt():返回指定索引处的字符。  

creplace():字符串替换。

dtrim():去除字符串两端空白。

esplit():分割字符串,返回一个分割后的字符串数组。    

fgetBytes():返回字符串的 byte 类型数组。

glength():返回字符串长度。

htoLowerCase():将字符串转成小写字母。   

itoUpperCase():将字符串转成大写字符。

gsubstring():截取字符串。

kequals():字符串比较。

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的

a可变性:String类中使用字符数组保存字符串,private  final   char   value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串, char[] value,这两种对象都是可变的。

b线程安全性:String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步       锁,所以是非线程安全的。

c性能:每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer 每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

对于三者使用的总结:如果要操作少量的数据用 = String,单线程操作字符串缓冲区 下操作大量数据 = StringBuilder,多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

Spring框架

1.什么是spring框架?

spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,是一个分层的javaEE一站式轻量级开       源框架

2.spring的作用

方便解耦,简化开发,AOP编程支持,声明式事务支持,集成Junit更加方便的进行分层测试,方便集成各种优秀框架

3.什么是IOC

控制反转,把创建对象的权利交给spring

4.什么是DI

属性的依赖注入,spring在通过IOC创建对象的时候,如果对象还有属性,就一并给赋值进去DI是在IOC的基础上进行对象的属性       注入

5.依赖注入的三种实现方式?

构造器注入,Setter方法注入,接口注入

6.解释Spring支持的几种bean的作用域

a、singleton : bean在每个Spring ioc 容器中只有一个实例。b、prototype:一个bean的定义可以有多个实例。

c、request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

d、session:在一个HTTP   Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring    ApplicationContext情形下有效。

e、global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的作用域是Singleton.

7.Spring支持的事务管理类型

a、编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。

b、声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

8.你更倾向用那种事务管理类型?

大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。       声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。

9.解释AOP

在软件业,AOP为Aspect   Oriented    Programming的缩写,意味:面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续.将一些共性的内容进行抽取,在需要用到的地方,以动态代理的方式进行插入.在不修       改源码的基础上,还能对源码进行前后增强。

10.什么是通知?有哪五种类型的通知?

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP框架触发的代码段。

Spring切面可以应用五种类型的通知:

a、before:前置通知,在一个方法执行前被调用。

b、after: 在方法执行之后调用的通知,无论方法执行是否成功。

c、after-returning: 仅当方法成功完成后执行的通知。

d、after-throwing: 在方法抛出异常退出时执行的通知。

e、around: 在方法执行之前和之后调用的通知。

 Spring的概述

     Spring 是完全面向接口的设计,降低程序耦合性,主要是事务控制并创建bean实例对象。在ssh整合时,充当黏合剂的作用。IOC(Inversion of Control) 控制反转/依赖注入,又称DI(Dependency Injection) (依赖注入)  

IOC的作用:产生对象实例,所以它是基于工厂设计模式的

Spring IOC的注入

    通过属性进行注入,通过构造函数进行注入,

    注入对象数组     注入List集合   

    注入Map集合      注入Properties类型

 Spring IOC 自动绑定模式:

          可以设置autowire按以下方式进行绑定

             按byType只要类型一致会自动寻找,            

                     按byName自动按属性名称进行自动查找匹配.

AOP 面向方面(切面)编程

AOP是OOP的延续,是Aspect Oriented Programming的缩写,

    意思是面向方面(切面)编程。

注:OOP(Object-Oriented Programming ) 面向对象编程

 AOP  主要应用于日志记录,性能统计,安全控制,事务处理(项目中使用的)等方面。

 Spring中实现AOP技术:

     在Spring中可以通过代理模式来实现AOP

     代理模式分为:

           静态代理:一个接口,分别有一个真实实现和一个代理实现。

           动态代理:通过代理类的代理,接口和实现类之间可以不直接发生联系,而             可以在运行期(Runtime)实现动态关联。

    动态代理有两种实现方式,可以通过jdk的动态代理实现也可以通过cglib

    来实现而AOP默认是通过jdk的动态代理来实现的。jdk的动态代理必须要有

    接口的支持,而cglib不需要,它是基于类的。

Spring AOP事务的描述:

在spring-common.xml里通过<aop:config>里面先设定一个表达式,设定对service里那些方法  如:对add* ,delete*,update*等开头的方法进行事务拦截。我们需要配置事务的传播(propagation="REQUIRED")特性,通常把增,删,改以外的操作需要配置成只读事务(read-only="true").只读事务可以提高性能。之后引入tx:advice,在tx:advice引用 transactionManager(事务管理),在事务管理里再引入sessionFactory,sessionFactory注入 dataSource,最后通过<aop:config> 引入txAdvice。

Spring实现ioc控制反转描述:

原来需要我们自己进行bean的创建以及注入,而现在交给

spring容器去完成bean的创建以及注入。

所谓的“控制反转”就是 对象控制权的转移,

从程序代码本身转移到了外部容器。

官方解释:

控制反转即IoC (Inversion of Control),

它把传统上由程序代码直接操控的对象的调用权交给容器,

通过容器来实现对象组件的装配和管理。

所谓的“控制反转”概念就是对组件对象控制权的转移,

从程序代码本身转移到了外部容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值