考察点:HTTP请求前端
①get请求用来从服务器上得到资源,而post是用来向服务器提交数据;
②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,而且二者使用"?"链接,而各个变量之间使用"&"链接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
③get传输的数据要受到URL长度限制(1024字节);而post能够传输大量的数据,上传文件一般要使用post方式;
④使用get时参数会显示在地址栏上,若是这些数据不是敏感数据,那么可使用get;对于敏感数据仍是应用使用post;
⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。java
考察点:重定向程序员
forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,而后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,因此它的地址栏中仍是原来的地址。redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器从新去请求那个地址,所以从浏览器的地址栏中能够看到跳转后的连接地址,很明显redirect没法访问到服务器保护起来资源,可是能够从一个网站redirect到其余网站。forward更加高效,因此在知足须要时尽可能使用forward(经过调用RequestDispatcher对象的forward()方法,该对象能够经过ServletRequest对象的getRequestDispatcher()方法得到),而且这样也有助于隐藏实际的连接;在有些状况下,好比须要访问一个其它服务器上的资源,则必须使用重定向(经过HttpServletResponse对象调用其sendRedirect()方法实现)。web
考察点:HTTP请求数据库
(1)在客户端, Get 方式在经过 URL 提交数据,数据 在URL中能够看到;POST方式,数据放置在HTML HEADER内提交。编程
(2)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。浏览器
(3)安全性问题。正如在( 1 )中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。因此,若是这些数据是中文数据并且是非敏感数据,那么使用 get ;若是用户输入的数据不是中文字符并且包含敏感数据,那么仍是使用 post 为好。缓存
安全的和幂等的。所谓安全的意味着该操做用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回一样的结果。完整的定义并不像看起来那样严格。换句话说, GET 请求通常不该产生反作用。从根本上讲,其目标是当用户打开一个连接时,她能够确信从自身的角度来看没有改变资源。好比,新闻站点的头版不断更新。虽然第二次请求会返回不一样的一批新闻,该操做仍然被认为是安全的和幂等的,由于它老是返回当前的新闻。反之亦然。 POST 请求就不那么轻松了。 POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该经过 POST 请求实现,由于在注解提交以后站点已经不一样了(比方说文章下面出现一条注解)。安全
考察点:J2EE服务器
web 容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,没必要关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵照J2EE规范中的WEBAPPLICATION 标准。咱们把遵照以上标准的WEB服务器就叫作J2EE中的WEB容器。
Web container:实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。
EJB容器:Enterprise java bean 容器。更具备行业领域特点。他提供给运行在其中的组件EJB各类管理功能。只要知足J2EE规范的EJB放入该容器,立刻就会被容器进行高效率的管理。而且能够经过现成的接口来得到系统级别的服务。例如邮件服务、事务管理。一个实现了J2EE体系结构中EJB组件规范的容器。这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务,配置,和其余的服务。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下本身的索引,从而知足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通信。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各类分布式事务服务。应用程序只需调用其提供的接口便可。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者经过各类部署和自定义实现本身的个性安全控制策略。
RMI/IIOP: (Remote Method Invocation /internet对象请求中介协议)他们主要用于经过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,咱们能够在本地计算机上实现对其直接调用。固然这是要经过必定的规范才能在异构的系统之间进行通讯。RMI是JAVA特有的。RMI-IIOP出现之前,只有RMI和 CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI和CORBA的优势,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java 的缺点和CORBA的复杂性。
考察点:Java架构
- 分层:分层是处理任何复杂系统最多见的手段之一,将系统横向切分红若干个层面,每一个层面只承担单一的职责,而后经过下层为上层提供的基础设施和服务以及上层对下层的调用来造成一个完整的复杂的系统。计算机网络的开放系统互联参考模型(OSI/RM)和Internet的TCP/IP模型都是分层结构,大型网站的软件系统也可使用分层的理念将其分为持久层(提供数据存储和访问服务)、业务层(处理业务逻辑,系统中最核心的部分)和表示层(系统交互、视图展现)。须要指出的是:(1)分层是逻辑上的划分,在物理上能够位于同一设备上也能够在不一样的设备上部署不一样的功能模块,这样可使用更多的计算资源来应对用户的并发访问;(2)层与层之间应当有清晰的边界,这样分层才有意义,才更利于软件的开发和维护。
- 分割:分割是对软件的纵向切分。咱们能够将大型网站的不一样功能和服务分割开,造成高内聚低耦合的功能模块(单元)。在设计初期能够作一个粗粒度的分割,将网站分割为若干个功能模块,后期还能够进一步对每一个模块进行细粒度的分割,这样一方面有助于软件的开发和维护,另外一方面有助于分布式的部署,提供网站的并发处理能力和功能的扩展。
- 分布式:除了上面提到的内容,网站的静态资源(JavaScript、CSS、图片等)也能够采用独立分布式部署并采用独立的域名,这样能够减轻应用服务器的负载压力,也使得浏览器对资源的加载更快。数据的存取也应该是分布式的,传统的商业级关系型数据库产品基本上都支持分布式部署,而新生的NoSQL产品几乎都是分布式的。固然,网站后台的业务处理也要使用分布式技术,例如查询索引的构建、数据分析等,这些业务计算规模庞大,可使用Hadoop以及MapReduce分布式计算框架来处理。
- 集群:集群使得有更多的服务器提供相同的服务,能够更好的提供对并发的支持。
- 缓存:所谓缓存就是用空间换取时间的技术,将数据尽量放在距离计算最近的位置。使用缓存是网站优化的第必定律。咱们一般说的CDN、反向代理、热点数据都是对缓存技术的使用。
- 异步:异步是实现软件实体之间解耦合的又一重要手段。异步架构是典型的生产者消费者模式,两者之间没有直接的调用关系,只要保持数据结构不变,彼此功能实现能够随意变化而不互相影响,这对网站的扩展很是有利。使用异步处理还能够提升系统可用性,加快网站的响应速度(用Ajax加载数据就是一种异步技术),同时还能够起到削峰做用(应对瞬时高并发)。";能推迟处理的都要推迟处理"是网站优化的第二定律,而异步是践行网站优化第二定律的重要手段。
- 冗余:各类服务器都要提供相应的冗余服务器以便在某台或某些服务器宕机时还能保证网站能够正常工做,同时也提供了灾难恢复的可能性。冗余是网站高可用性的重要保证。
考察点:session
Hibernate的对象有三种状态:瞬时态(transient)、持久态(persistent)和游离态(detached),如第135题中的图所示。瞬时态的实例能够经过调用save()、persist()或者saveOrUpdate()方法变成持久态;游离态的实例能够经过调用 update()、saveOrUpdate()、lock()或者replicate()变成持久态。save()和persist()将会引起SQL的INSERT语句,而update()或merge()会引起UPDATE语句。save()和update()的区别在于一个是将瞬时态对象变成持久态,一个是将游离态对象变为持久态。merge()方法能够完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或建立新的持久化对象。对于persist()方法,按照官方文档的说明:① persist()方法把一个瞬时态的实例持久化,可是并不保证标识符被马上填入到持久化实例中,标识符的填入可能被推迟到flush的时间;② persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句,当须要封装一个长会话流程的时候,persist()方法是颇有必要的;③ save()方法不保证第②条,它要返回标识符,因此它会当即执行INSERT语句,无论是在事务内部仍是外部。至于lock()方法和update()方法的区别,update()方法是把一个已经更改过的脱管状态的对象变成持久状态;lock()方法是把一个没有更改过的脱管状态的对象变成持久状态。
考察点:web service
从表面上看,Web Service就是一个应用程序,它向外界暴露出一个可以经过Web进行调用的API。这就是说,你可以用编程的方法透明的调用这个应用程序,不须要了解它的任何细节,跟你使用的编程语言也没有关系。例如能够建立一个提供天气预报的Web Service,那么不管你用哪一种编程语言开发的应用均可以经过调用它的API并传入城市信息来得到该城市的天气预报。之因此称之为Web Service,是由于它基于HTTP协议传输数据,这使得运行在不一样机器上的不一样应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。
SOA(Service-Oriented Architecture,面向服务的架构),SOA是一种思想,它将应用程序的不一样功能单元经过中立的契约联系起来,独立于硬件平台、操做系统和编程语言,使得各类形式的功能单元可以更好的集成。显然,Web Service是SOA的一种较好的解决方案,它更多的是一种标准,而不是一种具体的技术。
考察点:请求类型
经过请求对象(ServletRequest)的setCharacterEncoding(String)方法能够设置请求的编码,其实要完全解决乱码问题就应该让页面、服务器、请求和响应、Java程序都使用统一的编码,最好的选择固然是UTF-8;经过响应对象(ServletResponse)的setContentType(String)方法能够设置响应内容的类型,固然也能够经过HttpServletResponsed对象的setHeader(String, String)方法来设置。
考察点:客户端/服务器模式
C/S是Client/Server的缩写。服务器一般采用高性能的PC、工做站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端须要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面彻底经过WWW浏览器实现,一部分事务逻辑在前端实现,可是主要事务逻辑在服务器端实现。浏览器经过Web Server 同数据库进行数据交互。
C/S 与 B/S 区别:
硬件环境不一样:
C/S 通常创建在专用的网络上, 小范围里的网络环境, 局域网之间再经过专门服务器提供链接和数据交换服务.
B/S 创建在广域网之上的, 没必要是专门的网络硬件环境,例与电话上网, 租用设备. 信息本身管理. 有比C/S更强的适应范围, 通常只要有操做系统和浏览器就行
2.对安全要求不一样
C/S 通常面向相对固定的用户群, 对信息安全的控制能力很强. 通常高度机密的信息系统采用C/S 结构适宜. 能够经过B/S发布部分可公开信息.
B/S 创建在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。
3.对程序架构不一样
C/S 程序能够更加注重流程, 能够对权限多层次校验, 对系统运行速度能够较少考虑.
B/S 对安全以及访问速度的多重的考虑, 创建在须要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使B/S更加成熟.
4.软件重用不一样
C/S 程序能够不可避免的总体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
B/S 对的多重结构,要求构件相对独立的功能. 可以相对较好的重用.就入买来的餐桌能够再利用,而不是作在墙上的石头桌子
5.系统维护不一样
C/S 程序因为总体性, 必须总体考察, 处理出现的问题以及系统升级. 升级难. 多是再作一个全新的系统
B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上本身下载安装就能够实现升级.
6.处理问题不一样
C/S 程序能够处理用户面固定, 而且在相同区域, 安全要求高需求, 与操做系统相关. 应该都是相同的系统
B/S 创建在广域网上, 面向不一样的用户群, 分散地域, 这是C/S没法做到的. 与操做系统平台关系最小.
7.用户接口不一样
C/S 可能是创建的Window平台上,表现方法有限,对程序员广泛要求较高
B/S 创建在浏览器上, 有更加丰富和生动的表现方式与用户交流. 而且大部分难度减低,减低开发成本.
8.信息流不一样
C/S 程序通常是典型的中央集权的机械式处理, 交互性相对低
B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。
考察点:资源请求方式
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,因此它的地址栏中仍是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器从新去请求那个地址,通常来讲浏览器会用刚才请求的全部参数从新请求,因此session,request参数均可以获取。
考察点:web访问
一、cookie数据存放在客户的浏览器上,session数据放在服务器上。
二、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
三、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
四、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。