java面试题-web

来源:互联网 发布:付费交友软件靠谱吗 编辑:程序博客网 时间:2024/06/05 10:08

1.web容器加载过程

在java web项目启动时,容器会读取配置文件web.xml,加载顺序与web.xml中内容的先后顺序无关。配置文件加载的先后顺序为:<context-param><listener><filter><servlet>

1.web项目启动时,首先读取配置文件中的<listener>和<context-param>两个节点

<context-param>元素包含web应用servlet上下文初始化参数的声明。

<listener>元素用来注册一个监听器类。事件监听程序在应用的启动和关闭session的创建与销毁属性的新增移除和更改对象被绑定到session中或从session中删除时得到通知。

2、容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都共享这个上下文,将<context-param>转化为键值对,并交给ServletContext

3、容器创建<listener>中的类实例创建监听器。已经得到context-param的值,可以在监听类中初始化一些内容。注意这个时候WEB项目还没有完全启动完成

4、容器创建<filter>中的类实例创建过滤器。

5、容器创建<servlet>中的类实例创建servlet。load-on-startup元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数值小的先被加载如果值相等,容器自动选择加载。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候加载。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet


2.Servlet生命周期

servlet生命周期是由Web容器负责的,servlet生命周期分为三个阶段:

1、初始化阶段:根据load-on-startup的配置进行装载和创建servlet实例对象,调用servlet实例对象的init()方法。Servlet是单实例的,对于同一种业务请求只有一个实例

2响应客户请求阶段客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配servlet的请求映射路径(在web.xml中指定),创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。servlet 容器调用service()方法对请求处理。Servlet生成响应内容并将其传给服务器服务器将响应返回给客户端

3终止阶段当WEB应用被终止或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。


3.浏览器加载html过程

1.用户输入网址(假设是第一次访问,曾经访问过的页面可能存在缓存),浏览器向服务器发出请求,服务器返回html文件。当浏览器获得一个html文件时,会自上而下加载,并在加载过程中进行解析渲染;

2.浏览器开始加载html代码,发现<head>标签内有一个<link>标签引用外部CSS文件浏览器发出获取CSS文件请求并继续往下加载,CSS文件下载完成后将和以前下载的所有样式表一起进行解析,解析过程中,停止页面所有往下元素的载。解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染;

3.浏览器继续加载html中<body>部分的代码,并且已经拿到CSS文件,开始渲染页面;

4.浏览器在代码中发现一个<img>标签引用了图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要重新渲染这部分代码;

5.浏览器发现<script>标签,浏览器发出获取js文件请求后停止往下加载,js文件下载完成后执行javascript代码。脚本如果执行了改变页面的操作(改需求了)style.display=none浏览器重新渲染这部分代码;javascript让浏览器换了一下<link>标签的CSS路径(不改需求了直接重做),浏览器向服务器请求新的CSS文件,重新渲染页面。脚本执行完后继续加载直到加载完全部内容。


4.浏览器渲染页面过程

1、浏览器会将HTML解析成一个DOM Tree,DOMTree的构建过程是一个深度遍历过程:当前节点的所有子节点都构建好后才会去构建当前节点的下一个兄弟节点。 

2、将CSS解析成 CSS Rule Tree 。
3、根据DOM树和CSSOM来构造 Rendering Tree。
5、再下一步就是绘制,遍历render树,并使用UI后端层绘制每个节点。

4有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系。下一步操作称之为Layout,就是计算出每个节点在屏幕中的位置。 

渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,还会同时下载其余内容。

基本概念:

DOM Tree浏览器将HTML解析成树形的数据结构。

CSS Rule Tree浏览器将CSS解析成树形的数据结构。

Rendering Tree:DOM和CSSOM合并后生成Rendering Tree。

layout:有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。

painting:按照算出来的规则,把内容画到屏幕上。

reflow(回流)当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染。reflow 会从 <html> 这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置。reflow几乎是无法避免的。现在界面上流行的一些效果,比如树状目录的折叠、展开(实质上是元素的显示与隐藏)等,都将引起浏览器的reflow。鼠标滑过、点击只要这些行为引起了页面上某些元素的占位面积、定位方式、边距等属性的变化,都会引起它内部、周围甚至整个页面的重新渲染。通常我们都无法预估浏览器到底会reflow哪一部分的代码,它们都彼此相互影响着。

repaint(重绘)如果只是改变了某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的repaint,重画某一部分。Reflow要比Repaint更花费时间,也就更影响性能。所以在写代码的时候,要尽量避免过多的Reflow。


5.Web工作原理

TCP/IP协议

互联网的关键技术就是TCP/IP协议(Transmission Control Protocol传输控制协议/Internet Protocol网际协议)。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。TCP/IP 就是TCP和IP两个协议在一起协同工作,有上下层次的关系。

IP协议是计算机用来相互识别一种通信机制,每台计算机都有一个IP用来在internet上标识这台计算机。IP负责在因特网上发送和接收数据包,将每个包路由至它的目的地。IP消息(或者其他数据)被分割为小的独立包,并通过因特网在计算机之间传送。

TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有被改变。TCP在IP地址之上引端口(port),它允许计算机通过网络提供各种服务。当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求,在双方“握手”之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信,占用两个计算机之间整个的通信线路。TCP用于从应用程序到网络的数据传输控制。

TCP 负责应用软件(比如浏览器)和网络软件之间的通信,IP负责计算机之间的通信。TCP将数据分割并装入IP包,然后在它们到达的时候将它们重组。IP负责将包发送至接受者。

HTTP协议

HTTP(HyperText Transfer Protocol)超文本传输协议是一种无状态遵循请求/响应(Request/Response)模型的协议。HTTP是基于TCP协议之上的协议

HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。

HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接当一个客户端向服务器端发出请求,服务器返回响应,连接就被关闭了。所有HTTP连接都被构造成一套请求和应答。

HTTP工作过程

1、地址解析如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm从中分解出协议名、主机名、端口、对象路径等部分

协议名:http

主机名:localhost.com需要域名系统DNS解析域名localhost.com,得主机的IP地址

端口:8080

对象路径:/index.htm

把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

2、封装成TCP包,建立TCP连接在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的。HTTP是比TCP更高层次的应用层协议根据规则,只有低层协议建立之后才能进行更层协议的连接,因此首先要建立TCP连接     

3、客户机发送请求命令建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求行请求头空行消息体。

4、服务器响应服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、响应、响应描述,后边是响应头和消息体。服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此结束,接着它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

5、服务器关闭TCP连接一般情况下,一旦Web服务器向浏览器发送了请求数据它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-aliveTCP连接在发送后将仍然保持打开状态于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。


6.get、put、post、delete含义与区别

HTTP协议定义与服务器交互的不同方法方法标记指示了在被Request-URI指定的资源上执行的方式。  GET ,POST ,PUT ,DELETEHTTP定义了与服务器交互的最基本的4种方法对应的意思是对资源的查,改,增,删操作。

OPTIONS:获取“请求/响应链上关于此请求里的URI(Request-URI)指定资源的通信选项信息。此方法允许客户端去判定请求资源的选项或需求或者服务器的能力。

GET获取请求URI(Request-URI)指定的信息(以实体的格式)。GET用于信息获取,而且应该是安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一URL的多个请求应该返回同样的结果。

GET请求的数据会附加在URL之后传输数据会受到URL长度的限制,一般为1024字节。GET 请求可保留在浏览器历史记录中可被收藏为书签可被缓存这能减少web服务器的负担。

HEADHEAD方法和GET方法一致,除了服务器不能在响应里返回消息主体。用于判断某个资源是否存在

POST来请求原始服务器接受请求中封装的实体作为从属于请求行中的Request-URI标识的副属。用来向服务器提交数据,表示可能修改服务器上的资源

POST请求会把请求的数据放置在HTTP请求包的包体中理论上不会受大小限制POST请求不会被缓存不会保留在浏览器历史记录中不能被收藏为书签

PUT方法请求以提供的Request-URI存储封装的实体。与POST相似,PUT通常指定了资源的存放位置,用于更新数据。

PATCH对PUT方法的补充,用来对已知资源进行局部更新

DELETE请求原始服务器删除Request-URI 标识的资源。

TRACE用于引起远程请求消息的应用层回射。

CONNECT规范保留方法名。该方法用于代理,使之能够动态切换隧道(例如 SSL隧道)。


7、COOKIE和SESSION区别

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

Cookie:在 HTTP 协议下,服务器或脚本用来维护客户工作站上信息的一种方式。Cookie 是由Web服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie信息

如果不设置过期时间则表示这个 Cookie生命周期为浏览器会话期间只要关闭浏览器cookie就消失。 如果设置了过期时间浏览器会把cookie保存在硬盘上关闭再打开浏览器这些cookie 依然有效直到超过过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享。

SessionSession是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端访问服务器时,服务器把客户端信息以某种形式记录在服务器上。客户端再次访问时只需要从该Session中查找该客户的状态。

HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id。Session 依据该Cookie来识别是否为同一用户。

Session在用户第一次访问服务器的时候自动创建。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间。服务器会把长时间内没有活跃的Session从内存删除。Session的使用比Cookie方便,但是过多的Session存储在服务器内存中,会对服务器造成压力。


原创粉丝点击