1、集合:
Vector、Hashtable是线程安全的集合对象,
ArrayList、Vector对象的底层是由数组实现的,
LinkedList是线程不安全的,底层是由链表实现的,
Map 是键值对集合,HashMap和Hashtable都是map的实现类,Hashtable线程安全,不可以存放null。HashMap线程不安全,可以存放null,
2、Spring:
1)低侵入式的轻量级容器框架,
2)解耦、易于扩展和维护,
3)核心:IoC和AOP,
4)提供了丰富的模块(JDBC、ORM、WEB、TEST、事务....),便于集成其他优秀框架,
3、IoC:
1)Inversion of Controller :控制反转
2)对象创建交给spring的bean工厂来代理创建,
3)实现了代码的解耦,便于维护
4、AOP:
1)Aspect-Oriented Programming 面向切面编程
2) 将重用的功能代码提取出来,(关注点代码和业务代码)
3)将功能按需插入到切面,比如:事务管理、权限控制、日志记录、性能统计等,
4)提高了代码的维护性,减少了工作量,
5)关键词: Aspect、JoinPoint、Advice、arount、before、after、afterThrowling、Annotation、
5、SpringMVC的请求流程:
第一步:发送请求到前端控制器:DispatherServlet,
第二步:前端控制器请求HandlerMapping查找Handler可以根据Xml配置、注解等进行查找,
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler,
第五步:处理器适配器执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器想前端控制器返回ModelAndView,
第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(JSP、FreeMarker、Thyemleaf等),
第九步:视图解析器像前端控制器返回View、
第十步:前端控制器进行试图渲染,将数据模型填充到request域里面,
第十一步:前端控制器响应用户的请求结果。
6、SpringMVC和Struts2的对比:
1)Struts2是类级别的拦截,一个类对应一个request上下文、springmvc是基于方法级别的拦截,一个方法对应一个request上下文,方法跟url相对应,容易实现restful风格的请求路径。
2)springmvc的方法之间是独立的,独享request response资源数据,而struts2的类方法可以共享变量,
3)springmvc集成Ajax,使用方便,提供@ResponseBody
7、代理模式
基本作用:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.
静态代理:
静态代理总结:
1.可以做到在不修改目标对象的功能前提下,对目标功能扩展.
2.缺点:
因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.
动态代理之 JDK代理---必须实现接口
类加载器、ClassLoader loader,
接口的类型(泛型实现)、Class<?>[] interfaces,
InvocationHandler :事件处理
动态代理之Cglib代理
可以不用实现接口