面试收集: http://blog.csdn.net/u012516166/article/details/76184403html
熟悉J2EE技术体系,熟练使用Spring、Struts二、Hibernate、SpringMVC等开源框架并了解工做原理前端
J2EE:java
J2EE是一套全然不一样于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提升可移植性、安全与再用价值。mysql
J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,包含13种核心技术规范:linux
J2EE事务并发访问主要能够分为两类,分别是同一个系统事务和跨事务访问的并发访问控制,其中同一个系统事务能够采起乐观锁以及悲观锁策略,而跨多个系统事务时则须要乐观离线锁和悲观离线锁nginx
Spring: https://www.ibm.com/developerworks/cn/java/wa-spring1/index.html程序员
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了建立、配置和管理 bean 的方式,如图 1 所示。web
组成 Spring 框架的每一个模块(或组件)均可以单独存在,或者与其余一个或多个模块联合实现。每一个模块的功能以下:面试
BeanFactory
,它是工厂模式的实现。BeanFactory
使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring 框架的功能能够用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象能够在不一样 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。ajax
Spring: 面向切面编程(AOP)和控制反转 (IOC) 容器
AOP(Aspect-OrientedProgramming,面向切面编程),即将多个类的公共行为封装到一个可重用模块
一、概念:AOP是创建在Java的反射基础之上,具体是指散落在程序中的公共部分提取出来,作成了切面类,这样作的好处在于代码的可重用。一旦涉及到该功能的需求发生变化,只要修改该代码就行。AOP的实现主要是由JDK的动态代理(代理接口:Proxy利用InvocationHandler动态建立一个符合某一接口的实例,生成目标类的代理对象)与CGLIB代理(代理类:须要定义一个MethodInterceptor接口的子类)。
二、意义:加强类的功能(在目标对象的方法执行之间和执行以后)。
三、原理:主要是动态代理和反射机制实现的;
补充和完善OOP(Object-Oriented Programing,面向对象编程)。OOP引入封装、继承和多态性等概念来创建一种对象层次结构,用以模拟公共行为的一个集合。
当咱们须要为大量不一样类的对象引入公共行为的时候,就不是OOP所擅长的事情了。
散布在各处功能性的代码被称为横切(cross-cutting)代码,在OOP设计中,会致使大量代码的重复,而不利于各个模块的重用。
AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即切面。
就须要将与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减小系统的重复代码,下降模块间的耦合度,并有利于将来的可操做性和可维护性。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。
业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特色是,他们常常发生在核心关注点的多处,而各处都基本类似。好比权限认证、日志、事务处理。
IOC(Inversion of Control),控制反转,即调用类的时候只须要 类调用时,注释 @Autowired,就会在spring容器中登记,不须要实例化,类的建立、销毁都由 spring来控制;
“控制反转”,是一种设计思想。即:将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。之前建立对象的主动权和建立时机是由本身把控的,而如今这种权力转移到第三方。
IOC能指导咱们如何设计出松耦合、更优良的程序。传统应用程序都是由咱们在类内部主动建立依赖对象,从而致使类与类之间高耦合,难于测试;有了IoC容器后,把建立和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,因此对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得很是灵活。
依赖注入:DI(Dependency Injection)
组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并不是为软件系统带来更多功能,而是为了提高组件重用的频率,并为系统搭建一个灵活、可扩展的平台。经过依赖注入机制,咱们只须要经过简单的配置,而无需任何代码就可指定目标须要的资源,完成自身的业务逻辑,而不须要关心具体的资源来自何处,由谁实现。
所谓IoC,对于spring框架来讲,就是由spring来负责控制对象的生命周期和对象间的关系。
全部的类都会在spring容器中登记,告诉spring你是个什么东西,你须要什么东西,而后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其余须要你的东西。全部的类的建立、销毁都由 spring来控制,也就是说控制对象生存周期的再也不是引用它的对象,而是spring。对于某个具体的对象而言,之前是它控制其余对象,如今是全部对象都被spring控制,因此这叫控制反转。
使用Spring注解配置IOC
Spring和注入相关的常见注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component。
Autowired是自动注入,自动从spring的上下文找到合适的bean来注入
Resource用来指定名称注入
Qualifier和Autowired配合使用,指定bean的名称
Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。
Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。
项目中,经过在applicationContext.xml中配置扫描注解便可
Autowired和Resource是用来修饰字段,构造函数,或者设置方法,并作注入的。
@Autowired 注释,它能够对类成员变量、方法及构造函数进行标注,完成自动装配的工做。 经过 @Autowired的使用来消除 set ,get方法。
当 Spring 容器启动时,被@Autowired的字段将将扫描 Spring 容器中全部 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。
例如:
ctripcfadapter项目模块中,UserInfoFacade由@Autowired 注释,可自动建立对象。
Struts2:
1.概念:轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。
2.与Servlet对比
优势:业务代码解耦,提升开发效率
缺点:执行效率偏低,须要使用反射、解析XML等技术手段,结构复杂
3.不一样框架实现MVC的方式
Servlet:
Spring:
Struts2:
一、springmvc基于方法开发的,struts2基于类开发的。
二、单例和多例的区别:springmvc在映射的时候,经过形参来接收参数的,是将url和controller方法映射,映射成功后,springmvc生成一个handlers对象,对象中只包括一个method,方法执行结束的时候,形参的数据就销毁,
因此springmvc能够进行单例开发,而且建议使用。
可是structs接收的参数是经过类的成员变量来接收的,这些变量在多线程访问中,是共享的,而不是像springmvc那样,方法结束以后,形参自动销毁,且没法使用单例,只能使用多例。
这样的话,在structs中,随着方法的添加,不少的成员变量,维护到最后的时候根本就不知道这个成员变量被哪一个方式所使用,因此springmvc开发相似于service开发。
三、通过实际测试,structs速度慢,在与使用structs标签,若是使用structs建议使用jstl。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情:
MyBatis的主要设计目的就是让咱们对执行SQL语句时对输入输出的数据管理更加方便,因此方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。
对比:
一、hibernate 入门门槛高,是一个标准的ORM矿建(对象关系映射),不须要程序写sql,sql语句自动生成,对sql语句进行优化、修改比较困难。
mybatis专一于sql自己,须要程序员本身编写sql语句,sql修改、优化比较方便。是一个不彻底的ORM框架,虽然程序员本身写sql,mybatis也能够实现映射(输入映射,输出映射)
应用场景方面:
二、hibernate适用于需求变化很少的中小型项目,好比:后台管理系统,orm、oa......
mybatis适用于需求变化较多的项目,好比:互联网项目。
熟悉JQuery、JavaScript/Ajax、WebServers等前端技术
Web Service也叫XML Web Service WebService是一种能够接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通信技术。是:经过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并经过UDDI进行注册。
熟悉SVN、Maven、Junit工具
Maven:项目对象模型(POM)、经过pom.xml 来配置管理引用 jar 包,能够创建仓库:本地仓库、中央仓库(远程)
Junit : Java语言的单元测试框架
熟悉Oracle、SQL Server、MySql数据库,比较差异
SQL是一种语言;MySql,Oracle和SQL Server是指数据库系统。
一、servlet执行流程
客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request、response对象传递给找到的servlet,servlet根据request就能够知道是谁发出的请求,请求信息及其余信息,当servlet处理完业务逻辑后会将信息放入到response并响应到客户端。
二、springMVC的执行流程
Spring MVC 是一个模型 - 视图 - 控制器(MVC)的Web框架创建在中央前端控制器servlet(DispatcherServlet)
springMVC是由dispatchservlet为核心的分层控制框架。首先客户端发出一个请求web服务器解析请求url并去匹配dispatchservlet的映射url,若是匹配上就将这个请求放入到dispatchservlet,dispatchservlet根据mapping映射配置去寻找相对应的handel,而后把处理权交给找到的handel,handel封装了处理业务逻辑的代码,当handel处理完后会返回一个逻辑视图modelandview给dispatchservlet,此时的modelandview是一个逻辑视图不是一个正式视图,因此dispatchservlet会经过viewresource视图资源去解析modelandview,而后将解析后的参数放到view中返回到客户端并展示。
三、Java设计模式思想(单列模式,工厂模式,策略模式,共23种设计模式)
a) 单例模式:单例模式核心只须要new一个实例对象的模式,好比数据库链接,在线人数等,一些网站上看到的在线人数统计就是经过单例模式实现的,把一个计时器存放在数据库或者内存中,当有人登录的时候取出来加一再放回去,有人退出登录的时候取出来减一再放回去,可是当有两我的同时登录的时候,会同时取出计数器,同时加一,同时放回去,这样的话数据就会错误,因此须要一个全局变量的对象给所有人使用,只须要new出一个实例对象,这就是单例模式的应用,而且单例模式节省资源,由于它控制了实例对象的个数,并有利于gc回收。
b) 策略模式:就是将几个类中公共的方法提取到一个新的类中,从而使扩展更容易,保证代码的可移植性,可维护性强。好比有个需求是写鸭子对象,鸭子有叫,飞,外形这三种方法,若是每一个鸭子类都写这三个方法会出现代码的冗余,这时候咱们能够把鸭子中的叫,飞,外形这三个方法提取出来,放到鸭父类中,让每一个鸭子都继承这个鸭父类,重写这三个方法,这样封装的代码可移植性强,当用户提出新的需求好比鸭子会游泳,那么对于咱们oo程序员来说就很是简单了咱们只须要在鸭父类中加一个游泳的方法,让会游泳的鸭子重写游泳方法就能够了。
c) 工厂模式:简单的工厂模式主要是统一提供实例对象的引用,经过工厂模式接口获取实例对象的引用。好比一个登录功能,后端有三个类,controller类,interface类,实现接口的实现类。当客户端发出一个请求,当请求传到controller类中时,controller获取接口的引用对象,而实现接口的实现类中封装好了登录的业务逻辑代码。当你须要加一个注册需求的时候只须要在接口类中加一个注册方法,实现类中实现方法,controller获取接口的引用对象便可,不须要改动原来的代码,这种作法是的可拓展性强。
1.简单工厂 又叫作静态工厂方法(StaticFactory Method)模式,
2.工厂方法(Factory Method)
3.单例(Singleton)
4.适配器(Adapter)
5.包装器(Decorator)
6.代理(Proxy)
7.观察者(Observer)
8.策略(Strategy)
9.模板方法(Template Method)
四、冒泡排序、二分查找
a) 冒泡
public static void mp(int a[]) {
int swap = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
if (a[j] > a[i]) {
swap = a[i];
a[i] = a[j];
a[j] = swap;
}}}
System.out.println(Arrays.toString(a));
}
b)二分查找public static int ef(int a[], int tag) {
int first = 0;
int end = a.length;
for (int i = 0; i < a.length; i++) {
int middle = (first + end) / 2;
if (tag == a[middle]) {
return middle;
}
if (tag > a[middle]) {
first = middle + 1;
}
if (tag < a[middle]) {
end = middle - 1;
}}
return 0;
}
六、对ajax的理解
a) Ajax为异步请求,即局部刷新技术,在传统的页面中,用户须要点击按钮或者事件触发请求,到刷新页面,而异步技术为不须要点击便可触发事件,这样使得用户体验感加强,好比商城购物车的异步加载,当你点击商品时无需请求后台而直接动态修改参数。
九、父类与子类之间的调用顺序(打印结果)
a) 父类静态代码块
b) 子类静态代码块
c) 父类构造方法
d) 子类构造方法
e) 子类普通方法
f) 重写父类的方法,则打印重写后的方法
十一、多线程
a)一个进程是一个独立的运行环境,能够看作是一个程序,而线程能够看作是进程的一个任务,好比QQ是一个进程,而一个QQ窗口是一个线程。
b)在多线程程序中,多线程并发能够提升程序的效率,cpu不会由于某个线程等待资源而进入空闲状态,它会把资源让给其余的线程。
c)用户线程就是咱们开发程序是建立的线程,而守护线程为系统线程,如JVM虚拟中的GC
d)线程的优先级别:每个线程都有优先级别,有限级别高的能够先获取CPU资源使该线程从就绪状态转为运行状态。也能够自定义线程的有限级别
e)死锁:至少两个以上线程争取两个以上cpu资源,避免死锁就避免使用嵌套锁,只须要在他们须要同步的地方加锁和避免无限等待
hibernate的核心思想
a) Hibernate的核心思想是ROM对象关系映射机制。它是将表与表之间的操做映射成对象与对象之间的操做。也就是从数据库中提取的信息会自动按照你设置的映射要求封装成特定的对象。因此hibernate就是经过将数据表实体类的映射,使得对对象的修改对应数据行的修改。
Arraylist与linkedlist的区别
a) 都是实现list接口的列表,arraylist是基于数组的数据结构,linkedlist是基于链表的数据结构,当获取特定元素时,ArrayList效率比较快,它经过数组下标便可获取,而linkedlist则须要移动指针。当存储元素与删除元素时linkedlist效率较快,只须要将指针移动指定位置增长或者删除便可,而arraylist须要移动数据。
数据库优化
a) 选择合适的字段,好比邮箱字段能够设为char(6),尽可能把字段设置为notnull,这样查询的时候数据库就不须要比较null值
b) 使用关联查询( left join on)查询代替子查询
c) 使用union联合查询手动建立临时表
d) 开启事物,当数据库执行多条语句出现错误时,事物会回滚,能够维护数据库的完整性
e) 使用外键,事物能够维护数据的完整性可是它却不能保证数据的关联性,使用外键能够保证数据的关联性
f) 使用索引,索引是提升数据库性能的经常使用方法,它能够令数据库服务器以比没有索引快的多的速度检索特定的行,特别是对于max,min,order by查询时,效果更明显
g) 优化的查询语句,绝大多数状况下,使用索引能够提升查询的速度,但若是sql语句使用不恰当的话,索引没法发挥它的特性。
jvm的优化
a) 设置参数,设置jvm的最大内存数
b) 垃圾回收器的选择
2六、高并发处理
a) 了解一点高并发性问题,好比一W人抢一张票时,如何保证票在没买走的状况下全部人都能看见这张票,显然是不能用同步机制,由于synchronize是锁同步一次只能一我的进行。这时候能够用到锁机制,采用乐观锁能够解决这个问题。乐观锁的简单意思是在不锁定表的状况下,利用业务的控制来解决并发问题,这样即保证数据的可读性,又保证保存数据的排他性,保证性能的同时解决了并发带来的脏读数据问题。
2七、事物的理解
a) 事物具备原子性,一致性,持久性,隔离性
b) 原子性:是指在一个事物中,要么所有执行成功,要么所有失败回滚。
c) 一致性:事物执行以前和执行以后都处于一致性状态
d) 持久性:事物多数据的操做是永久性
e) 隔离性:当一个事物正在对数据进行操做时,另外一个事物不能够对数据进行操做,也就是多个并发事物之间相互隔离。
1、mybiats foreach标签
2、mybatis ExecutorType.BATCH 在同一事务范围内,分批commit insert batch :http://blog.csdn.net/wlwlwlwl015/article/details/50246717
提及Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系以下图所示:
运行期环境表明着Java平台,开发人员编写Java代码(.java文件),而后将之编译成字节码(.class文件),再而后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。
Collections.sort(names, (String a, String b) -> { return b.compareTo(a); }); Collections.sort(names, (String a, String b) -> b.compareTo(a)); Collections.sort(names, (a, b) -> b.compareTo(a));
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其余一些公司及我的共同开发而成。因为有了Sun 的参与和支持,最新的Servlet 和JSP 规范老是能在Tomcat 中获得体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。由于Tomcat 技术先进、性能稳定,并且免费,于是深受Java 爱好者的喜好并获得了部分软件开发商的承认,成为目前比较流行的Web 应用服务器。目前最新版本是7.0。
Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统经常使用的功能;并且它还在不断的改进和完善中,任何一个感兴趣的程序员均可以更改它或在其中加入新的功能。
Resin是CAUCHO公司的产品,是一个很是流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
Resin是CAUCHO公司的产品,是一个很是流行的支持servlets 和jsp的引擎,速度很是快。Resin自己包含了一个支持HTTP/1.1的WEB服务器。虽然它能够显示动态内容,可是它显示静态内容的能力也很是强,速度直逼APACHE SERVER。许多站点都是使用该WEB服务器构建的。
Resin也能够和许多其余的WEB服务器一块儿工做,好比Apache server和IIS等。Resin支持Servlets 3.0标准和JSP 1.2标准。熟悉ASP和PHP的用户能够发现用Resin来进行JSP编程是件很容易的事情。
Resin支持负载平衡(Load balancing),能够增长WEB站点的可靠性。方法是增长服务器的数量。好比一台SERVER的错误率是1%的话,那么支持负载平衡的两个Resin服务器就可使错误率降到0.01%。
Resin 最新使用的是 4.0 的版本、Tomcat 是 9.0。
1.先从是否收费上进行比较:
Resin做为我的开发是免费的,若是须要将开发产品做为商业产品发布是须要收费的。
Tomcat是开源的,免费。
2.Resin 在一台机器上配置多个运行实例时,稍显麻烦,不像Tomcat复制多份,修改个端口便可,彻底独立。
3.在最新的 Resin 3.1 / 3.2 中,会自动对URL进行解码处理,致使原来在Tomcat 和 Resin 3.0 上运行正常的程序,到了新版本会有部分乱码的现象。
两者在稳定性上都没有任何问题、性能在访问量不大的话,都没有多大的差异。目前选择Tomcat的较多。
NoSQL,泛指非关系型的数据库,NoSQL数据库的四大分类表格分析
定义:JMS即Java消息服务(JavaMessage Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通讯。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
简介:JMS是一种与厂商无关的 API,用来访问消息收发服务(消息中间件)。它相似于JDBC(Java DatabaseConnectivity):这里,JDBC 是能够用来访问许多不一样关系数据库的API,而JMS一样提供与厂商无关的访问方式来访问消息收发服务,许多厂商目前都支持JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,这只是几个例子。 JMS 使您可以经过消息收发服务从一个 JMS 客户机向另外一个JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,能够将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。
定义:MQ全称为消息队列(Message Queue), MQ是一种应用程序与应用程序之间的通讯方法。应用程序经过消息队列来通讯,而无需专用链接来连接它们。消息传递指的是程序经过在消息队列中收发数据进行通讯,而不是经过直接调用彼此来通讯。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM的WEBSPHERE MQ。
MQ特色:MQ的消费-生产者模型的一个典型的表明,一端往消息队列中不断的写入消息,而另外一端则能够读取或者订阅队列中的消息。
使用场景:在项目中,将一些无需即时返回且耗时的操做提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提升了系统的吞吐量。
JMS是一个用于提供消息服务的技术规范(API),它制定了在整个消息服务提供过程当中的全部数据结构和交互流程。而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的消息服务提供者。MQ的实现能够基于JMS,也能够基于其余规范或标准,其中ActiveMQ就是基于JMS规范实现的消息队列。
一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件能够更简洁,更有层次,更易于实现缓存等机制。
REST即Representational State Transfer的缩写,可译为"表现层状态转化”。REST最大的几个特色为:资源、统一接口、URI和无状态。
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它能够是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。资源总要经过某种载体反应其内容,文本能够用txt格式表现,也能够用HTML格式、XML格式表现,甚至能够采用二进制格式;图片能够用JPG格式表现,也能够用PNG格式表现;JSON是如今最经常使用的资源表示格式。
RESTful架构风格规定,数据的元操做,即CRUD(create, read, update和delete,即数据的增删查改)操做,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也能够用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操做的接口,仅经过HTTP方法,就能够完成对数据的全部增删查改工做。
能够用一个URI(统一资源定位符)指向资源,即每一个URI都对应一个特定的资源。要获取这个资源,访问它的URI就能够,所以URI就成了每个资源的地址或识别符。通常的,每一个资源至少有一个URI与之对应,最典型的URI即URL。
所谓无状态的,即全部的资源,均可以经过URI定位,并且这个定位与其余资源无关,也不会由于其余资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,若是查询工资是须要登陆系统,进入查询工资的页面,执行相关操做后,获取工资的多少,则这种状况是有状态
的,由于查询工资的每一步操做都依赖于前一步操做,只要前置操做不成功,后续操做就没法执行;若是输入一个url便可获得指定员工的工资,则这种状况是无状态
的,由于获取工资不依赖于其余资源或状态,且这种状况下,员工工资是一个资源,由一个url与之对应,能够经过HTTP中的GET
方法获得资源,这是典型的RESTful风格。
负载均衡 http://conf.ctripcorp.com/pages/viewpage.action?pageId=148259144
SOA 2.0平台架构主要划分为设计开发时平台和运行时平台两大部分:
设计开发时平台主要有代码生成工具和服务资产库组成,主要涉及的角色包括:
架构师和SOA开发者首先在服务资产库中注册服务,而后业务需求定义服务接口合同(WSDL),而后开发者经过代码生成工具从WSDL生成出服务端(或者客户端)代码,
并根据具体业务实现服务的业务逻辑和作单元集成测试,服务在经过测试人员测试后会被最终部署到生成环境。
运行时平台主要有服务端和客户端框架组成,同时包括服务监控和安全策略控制部件,运行时主要涉及的角色是:
服务端和客户端框架会将运行时性能以dashboard的方式展现出来,供运维人员监控服务的性能和健康情况,同时运维人员
可根据须要对服务进行动态配置和进行安全设置。
服务注册表(Registry)是设计开发时和运行时平台之间的一个桥梁,它按期同步服务资产库(Repository)中的服务路由信息并作本地缓存,
服务客户端在运行时经过服务注册表进行动态地服务路由查询。
为保证服务质量,防止级联失败(Cascade Failure),SOA 2.0服务框架还包括一个称为电路保护器(CircuitBreaker)的容错部件,
当服务器过载时,电路保护期负责限流(Rate Limiting)以防止服务性能进一步恶化。
咱们.java文件在编译后会变成.class文件,这就像是个镜面,自己是.java,在镜中是.class,他们实际上是同样的;那么同理,咱们看到镜子的反射是.class,就能经过反编译,了解到.java文件的原本面目。即为反射。
官方给出的概念:反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查而且对内部的成员进行操做。例如它容许一个java的类获取它全部的成员变量和方法而且显示出来。
百度面试题
1.介绍项目,围绕项目问了一些问题
2.算法3题:
1).KMP匹配子串
2).给定100万个字符串,求出现频率最高的10个
3).实现java parseInt
4.linux问题:删除nginx进程,删除全部名称中含有nginx的进程,查找某个文件夹中包含某个字符串的全部文件名
5.数据库索引问题
6.java里面锁的种类,实现方式