三月份周考大纲

1、StringBuffer、StringBuilder、String 区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。
1.首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:
1 String str=“abc”; 2 System.out.println(str); 3 str=str+“de”; 4
System.out.println(str);
2. 再来说线程安全 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的 如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
3. 总结一下   String:适用于少量的字符串操作的情况   StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况 2、HashMap和Hashtable的区别
HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
新科耐死d
1、HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
2、HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java
5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。 康科瑞特
3、另一个区别是HashMap的迭代器(Iterator)是fail-fast(飞累fre斯特)迭代器,而Hashtable的enumerator(衣牛么瑞特)迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,(异常e科思呸深)但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
4、由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
5、HashMap不能保证随着时间的推移Map中的元素次序是不变的。

3、Hibernate中session 对象的常用方法 find(String queryString) 查询返回list结果集
,根据HQL查询字符串来返回实例集合find方法在执行时会先查找缓存,如果缓存找不到再查找数据库,如果再找不到就会返回null。
save(Object entity) 添加 保存新的实例 saveOrUpdate(); 添加或修改 有id是修改 没id 是更新
delete(Object entity); 删除 删除指定的持久化实例 update(Object entity); 修改更新实例的状态
实例必须为持久化状态 get(Class entityClass,Serializable id)根据ID查询 根据主键加载特定持久化实例
load();根据唯一标识获得 对象 延迟加载 4、Hibernate主键生成策略并分别描述
1).Increment:先查询出最大id,在此基础上加1;hibernate框架会自动处理 2).Sequence(Orade)
:oracle 数据库会自动处理 3).Assigned:人工指派(重复插入数据时会违反数据唯一性)
4).native:(数据库本地生成策略,适用多个数据库),适用于mysql.oracle,sqlserver,如果是orade数据库则默认使用的序列名为hibernate-sequence
5).uuid:生成一个32位,不会重复的主键,可以达到真正的跨数据库(通常来说对应的应该是string数据类型)
6).foreign:通常在一对一主键的时候使用,基于外键的主键生成策略

5、IoC的理解 Spring
是完全面向接口的设计,降低程序耦合性(为什么),主要是事务控制并创建bean实例对象。在ssh整合时,充当黏合剂的作用。IOC(Inversion
of Control) 控制反转/依赖注入,又称DI(Dependency Injection) (依赖注入) 从架构来讲默认
注入组件都是单例,有效降低java 吃内存的问题。Spring大大降低了 java 语言开发相互的内存。这是项目中使用spring的
主要原因。 IOC的作用:产生对象实例,所以它是基于工厂设计模式的 Spring IOC的注入
   通过属性进行注入,通过构造函数进行注入,工厂注入 Spring IOC 自动绑定模式:
可以设置autowire按以下方式进行绑定
按byType只要类型一致会自动寻找,
按byName自动按属性名称进行自动查找匹配.

6、AOP的理解 AOP 面向方面(切面)编程 AOP是OOP的延续,是Aspect Oriented
Programming的缩写,意思是面向方面(切面)编程。(为啥是OOP的延续) 注:OOP(Object-Oriented
Programming ) 面向对象编程 AOP 主要应用于日志记录,性能统计,安全控制,事务处理(项目中使用的)等方面。
Spring中实现AOP技术: 在Spring中可以通过代理模式来实现AOP代理模式分为:
静态代理:一个接口,分别有一个真实实现和一个代理实现。(代码 缺点)
动态代理:通过代理类的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联。(优点)。动态代理有两种实现方式,可以通过jdk的动态代理实现也可以通过cglib
来实现而AOP默认是通过jdk的动态代理来实现的。jdk的动态代理必须要有接口的支持,而cglib不需要,它是基于类的。 概念解释:
切面(Aspect): 有切点(PointCut)和通知(Advice)组成,它既包括横切逻辑的定义,也包括了连接点的定义。
切点(Pointcut):一个切点定位多个类中的多个方法。
通知也叫增强(Advice):由方位和横切逻辑构成,所谓的方位指的是前置通知,后置通知,返回后通知,环绕通知,抛出异常后通知
连接点(JoinPoint):由切点和方位构成,用来描述在在哪些类的指定方法之前或之后执行 所谓的方位包括: 前置通知(Before
advice):在连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。
返回后通知(After returning advice): 在连接点(join
point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 抛出异常后通知(After throwing
advice):在方法抛出异常退出时执行的通知。 后置通知(After (finally)
advice):当连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 环绕通知(Around
Advice):包围一个连接点(join
point)的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行

7、SpringMVC框架
springMVC是一个基于注解型的MVC框架。它的核心控制器是dispatcherServlet,在web.xml中配置。用户发起的请求都会被核心控制器拦截,进入springMVC的核心配置文件spring-servlet.xml。在这个xml中,主要配置的是注解的开启和扫描信息。首先要开启注解模式,annotation-driven。并且指定注解所在的路径,通过component-scan标签的base-package来设置。当请求到达后,springMVC会根据请求的action名称,通过ActionMapping去找到对应的action类中的requestMapping注解,这个注解中有一个value值,需要与请求的名称保持一致。所以请求可以到达action层。当然,springMVC也有自己的拦截器Interceptor。如果需要完成自定义拦截器,则需要写一个类,去继承handlerInterceptor类。重写里面的preHandler方法,在这方法中,通过返回true或者fasle来决定请求继续执行还是被拦截。定义好拦截器类以后,需要将拦截器配置到spring-servlet中去。springMVC中,获得参数的方式很简单,只需要在方法的参数列表中定义相关的局部变量就可以了。也可以通过requestParam的注解对参数进行更具体的配置,比如require为true时,要求这个参数必须传递。如果要求传递而没有传值,则报403错误。除了这样的配置以外,requestMapping也有相关的属性配置,比如requestType可以设置成GET或者是POST,指定请求的格式必须是Get请求还是post请求。如果需要传递的是对象类型参数,直接在参数列表中定义相关的对象,页面的参数名称必须要和类型的属性保持一致。(与strust2的传值方式稍微不同,没有对象.属性的方式)action接收参数后,则调用service业务逻辑层,完成业务操作。最后,springMVC进行页面跳转时,也很灵活,可以通过string返回一个字符串,也可以通过ModelAndView来进行跳转。ModelAndView中有一个setViewName方法,可以指定跳转的路径,还有一个addObject方法,可以将对象或者集合带到页面进行数据展示。如果是通过string类型跳转,则可以通过request.setAttribute()方法往页面传参。获得request的方式可以直接在参数列表中定义request对象获得,当然response也一样。
在spring-servlet中定义了一个试图解析器,统一配置了跳转路径的前缀和后缀名。 8、SpringMVC的工作流程
整个处理过程从一个HTTP请求开始:
1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息。
2.DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)。
3.调用相应处理器中的处理方法,处理该请求后,会返回一个ModelAndView。
4.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。

9、SpringMVC的优点
1.它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是?java组件.并且和Spring提供的其他基础结构紧密集成.
2.不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
3.可以任意使用各种视图技术,而不仅仅局限于JSP
4.支持各种请求资源的映射策略
5.它应是易于扩展的 10、SpringMVC 的常用注解 1、@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
2、@PathVariable 用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
3、@ModelAttribute和 @SessionAttributes
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
@SessionAttributes即将值放到session作用域中,写在class上面。 使用 @ModelAttribute 和
@SessionAttributes 传递和保存数据
4、@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue
= “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。 5、@ResponseBody 作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;一般结合ajax使用此注解

你可能感兴趣的:(java概念集)