每一个线程都有本身的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。而堆是全部线程共享的一片公用内存区域。对象都在堆里建立,为了提高效率线程会从堆中弄一个缓存到本身的栈,若是多个线程使用该变量就可能引起问题,这时volatile 变量就能够发挥做用了,它要求线程从主存中读取变量的值。程序员
堆:(对象)web
引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),须要经过new等方式来建立。ajax
堆内存主要做用是存放运行时建立(new)的对象。spring
(主要用于存放对象,存取速度慢,能够运行时动态分配内存,生存期不须要提早肯定)编程
栈:(基本数据类型变量、对象的引用变量)json
基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了做用域就会自动释放。跨域
(1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。数组
(2)Prototype:每次调用新建一个Bean实例。缓存
(3)Request:Web项目中,给每个 http request 新建一个Bean实例。安全
(4)Session:Web项目中,给每个 http session 新建一个Bean实例。
(5)GlobalSession:这个只在portal应用中有用,给每个 global http session 新建一个Bean实例。
所谓事务的传播行为是指,若是在开始当前事务以前,一个事务上下文已经存在,此时有若干选项能够指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了以下几个表示传播行为的常量:
TransactionDefinition.PROPAGATION_REQUIRED:若是当前存在事务,则加入该事务;若是当前没有事务,则建立一个新的事务。这是默认值。
TransactionDefinition.PROPAGATION_REQUIRES_NEW:建立一个新的事务,若是当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_SUPPORTS:若是当前存在事务,则加入该事务;若是当前没有事务,则以非事务的方式继续运行。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,若是当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,若是当前存在事务,则抛出异常。
TransactionDefinition.PROPAGATION_MANDATORY:若是当前存在事务,则加入该事务;若是当前没有事务,则抛出异常。
TransactionDefinition.PROPAGATION_NESTED:若是当前存在事务,则建立一个事务做为当前事务的嵌套事务来运行;若是当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
Struts2是类级别的,Spring是方法级别的
spring事务能够分为编程式事务和声明式事务
参考: http://blog.csdn.net/chenleixing/article/details/44570681
① Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截
② SpringMVC的方法之间基本上独立的,独享request response数据
③ 因为Struts2须要针对每一个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每一个Action使用,并保证线程安全,因此在原则上,是比较耗费内存的
④ 拦截器实现机制上,Struts2有以本身的interceptor机制,SpringMVC用的是独立的AOP方式
⑤ SpringMVC的入口是servlet,而Struts2是filter
⑥ SpringMVC集成了Ajax
⑦ SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感受太烦乱
⑧ Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高
⑨ Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展
⑩ SpringMVC开发效率和性能高于Struts2
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。
3.对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据。
(1):Vector是线程安全的,源码中有不少的synchronized能够看出,而ArrayList不是。致使Vector效率没法和ArrayList相比;
(2):ArrayList和Vector都采用线性连续存储空间,当存储空间不足的时候,ArrayList默认增长为原来的50%,Vector默认增长为原来的一倍;
HashMap和Hashtable都实现了Map接口,但决定用哪个以前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
简单回答springbean生命周期:
(1)实例化(必须的)构造函数构造对象
(2)装配(可选的)为属性赋值
(3)回调(可选的)(容器-控制类和组件-回调类)
(4)初始化(init-method=" ")
(5)就绪
(6)销毁(destroy-method=" ")
1A)客户端发出http请求,只要请求形式符合web.xml
文件中配置的*.action的话,就由DispatcherServlet
来处理。
1B)DispatcherServlet再将http请求委托给映射器
的对象来将http请求交给对应的Action来处理
2)映射器根据客户的http请求,再对比<bean name="/hello.action
若是匹配正确,再将http请求交给程序员写的Action
3)执行Action中的业务方法,最终返回一个名叫ModelAndView
的对象,其中封装了向视图发送的数据和视图的逻辑名
4)ModelAndView对象随着响应到到DispatcherServlet中了
5)这时DispatcherServlet收到了ModelAndView对象,
它也不知道视图逻辑名是何意,又得委托一个名叫
视图解析器的对象去具体解析ModelAndView对象
中的内容
6)将视图解析器解析后的内容,再次交由DispatcherServlet
核心控制器,这时核心控制器再将请求转发到具体的
视图页面,取出数据,再显示给用户
参考:http://blog.csdn.net/u014727260/article/details/72793459
① 代理(经过后台操做)
② JSONP(添加响应头,容许跨域 )
addHeader(‘Access-Control-Allow-Origin:*’);//容许全部来源访问
addHeader(‘Access-Control-Allow-Method:POST,GET’);//容许访问的方式
③ 在ajax的dataType方式改成“jsonp”
① 作分布式下的服务发现仍是使用eureka更好,也就是AP特性的分布式协调工具(zookeeper由于网络故障就没法返回可用的主机)
② zookeeper技术更加成熟,资料更多
③ Eureka。是spring cloud之下一个专门负责微服务服务注册和发现的组件,Eureka就是为了服务发现而设计的
④ Zookeeper。是用来保证分布式一致性的一个软件。不是为了服务发现注册而设计的,只不过它的特性也能够被二次开发成服务发现注册中心罢了
Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操做提供了一种简单的开发方式。
组件列: