JAVA WEB面试总结
本文目录:
1. 什么是cookie
2. 什么是session
3.什么是Servlet,Servlet生命周期方法
4.JSP隐含对象
5.JSP的四个域对象的作用范围
6.转发和重定向的区别
7.Post和Get请求的区别
8.拦截器与过滤器的区别
9.https与http区别
1. 什么是cookie
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理.
1.1 Cookie特点:
a. 修改跟删除只能覆盖更新;
b. 不能跨域;
c. 保存在浏览器端;
d. 使用key-value保存。
1.2 工作流程:

1.3 cookie api

2. 什么是session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以.
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
2.1 session 特点
- 各个线程的session隔离;
- 浏览器第一次访问时创建保存在服务端;静态地址访问不会创建session;
- 同一个session多次访问时记录最后访问时间。
2.2 session api
//获取Session对象
request.getSession()
request.getSession(boolean create)
//获取SessionId
getId()
//获取当前session对象的创建时间
getCreationTime()
//获取最后一次访问该session对象的时间
getLastAccessedTime()
//设置Session最大时效
setMaxInactiveInterval()
//获取Session最大时效
getMaxInactiveInterval()
//判断当前Session对象是不是新建的
/**
如果客户端请求消息中返回了一个与Servlet程序当前获得的HttpSession对象的会话标识号相同的会话标识号,则认为这个HttpSession对象不是新建的。
*/
isNew()
//销毁当前Session对象
invalidate()
//属性相关
setAttribute()
3.什么是Servlet,Servlet生命周期方法
用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容, Servlet 可以用 javax.servlet 和 javax.servlet.http 包创建。
生命周期:
- Servlet 通过调用 init () 方法进行初始化。只会执行一次
- Servlet 调用 service() 方法来处理客户端的请求。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
4.JSP隐含对象

|
隐含对象 |
所属的类 |
说明 |
|
request |
javax.servlet.http.HttpServletRequest |
客户端的请求信息 |
|
response |
javax.servlet.http.HttpServletResponse |
网页传回客户端的响应 |
|
session |
javax.servlet.http.HttpSession |
与请求有关的会话 |
|
out |
javax.servlet.jsp.JSPWriter |
向客户端浏览器输出数据的数据流 |
|
application |
javax.servlet.ServletContext |
提供全局的数据,一旦创建就保持到服务器关闭 |
|
pageContext |
javax.servlet.jsp.PageContext |
JSP页面的上下文,用于访问页面属性 |
|
page |
java.lang.Object |
同Java中的this,即JSP页面本身 |
|
config |
javax.servlet.servletConfig |
Servlet的配置对象 |
|
exception |
java.lang.Throwable |
针对错误网页,捕捉一般网页中未捕捉的异常 |
|
对象名称 |
API |
|
Request |
setAttribute/getAttribute/getParameter /getRequestURI/getRemotePort |
|
response |
addCookie/encodeRedirectURL/sendError |
|
out |
clear |
|
session |
getMaxInactiveInterval/invalidate/getId/ getCreationTime |
|
application |
getServerInfo/getContext |
|
pageContext |
getRequest/getResponse/getServletContext/ getSession/setAttribute |
|
exception |
getMessage |
|
config |
getInitParameter/getServletName |
|
page |
代表jsp编译后的servlet,能调用servlet里的方法 |
5.JSP的四个域对象的作用范围
|
域 |
作用范围 |
|
PageContext域 |
当前JSP页面范围 |
|
request域 |
一次请求 |
|
session域 |
一次会话 |
|
application域 |
整个web应用 |
6.转发和重定向的区别
|
名称 |
请求次数 |
url地址是否改变 |
共享数据 |
新地址要求 |
|
转发 |
1 |
否 |
是 |
同一个应用下的地址 |
|
重定向 |
2 |
是 |
否 |
任意地址 |
7.Post和Get请求的区别

从传输的角度看,post和get都是不安全的,只有https是安全的。
get的最大长度限制是因为浏览器和web服务器限制了URL的长度。
POST 方法会产生两个 TCP 数据包?
答:HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送,不是必然行为。
8.拦截器与过滤器的区别
区别:
l Filter基于servlet,拦截器基于spring框架。拦截器可以访问spring里的事务、server对象等,过滤器不能
l 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
l 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
l 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
l 深度不同:拦截器能够深入到方法前后、异常抛出前后,弹性更好,filter只在serlvet前后起作用。
下面通过分析springmvc中拦截器、过滤器、service()方法(分发不同的servlet给不同的controller),dispatc()的执行顺序来加深理解,如下图:

总结:优先使用拦截器
9.https与http区别
总结:
|
名称 |
传输方式 |
ca证书? |
有无状态 |
|
http1.0 |
超文本明文传输 |
否 |
无 |
|
https |
Ssl加密传输 |
是 |
有 |
|
http2.0 |
超文本明文传输 |
否 |
有(新增了有状态的组件) |
http工作流程:
第一步:建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接
第二步:客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)
第三步:客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕
第四步:服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK
第五步:服务器向客户端发送应答头信息
第六步:服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端
第七步:服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
为了提高安全性和效率HTTPS结合了对称和非对称两种加密方式。
https工作流程:
第一步:客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
第三步:客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
第五步:Web服务器利用自己的私钥解密出会话密钥。
第六步:Web服务器利用会话密钥加密与客户端之间的通信。
加密算法:
- 单向散列:对信息进行散列加密,得到固定长度的密文,包括:MD5/SHA;
- 对称加密:加密、解密使用同一个秘钥,包括:DES/RC
- 非对称加密:分为公钥、私钥,私钥保存在服务器端,公钥加密的只有私钥能解,反之也是,包括:RSA
JAVA WEB面试总结的更多相关文章
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
- java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试
本内容摘自 java web轻量级开发面试教程 https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80% ...
- java web面试
1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理. 原博http://blog.csdn.net/shuaishenkkk/article/d ...
- JAVA面试精选【Java web部分一】
Java的基础知识点就太多了,要说也不能穷尽,这个主要是靠自己在平时的积累和项目的开发经验,外边考的多的一般是继承,多态,线程,集合等等,但是笔试或者是面试中很有可能问许多集体的内容,比如hashMa ...
- Java Web架构知识整理——记一次阿里面试经历
惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...
- java web方面的面试问题,Spring MVC方面的面试问题,摘自java web轻量级开发面试教程
本文摘自java web轻量级开发面试教程: https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80%E ...
- java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会
看到一本较好的实践性比较强的书,java web轻量级开发面试教程,里面的一些内容很有实践意义. 问题点 很难获得面试机会的原因 学历不符,比如要求是本科以上,但学历是大专 学历是硬指标,所以达不到学 ...
- Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试
如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...
- java web轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素
场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. ...
随机推荐
- AssetBundleMaster_ReadMe_CN
在开始使用之前, 建议先导入到一个空的工程里, 通过ReadMe的一步步引导使你对整个框架以及文件结构进行熟悉, 之后再考虑导入到现有工程中使用, 完整看完教程大概需要2个小时左右. 先看看文件夹结构 ...
- python-新建文件夹
import tensorflow as tf import os categories = ['folder1', 'folder2'] for folderName in categories: ...
- Python进阶-XII serialize(序列化)、序列化模块
一.serialize 序列化 1.什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在 ...
- 阿里云重置CentOS的root默认密码
问题 今天使用阿里云开了一个云服务器,系统为 CentOS ,远程连接登录时不知道默认root密码 解决方法 在 控制台-实例-操作 中选择 更多-密码/秘钥-重置实例密码 即可
- 4.Vue双向绑定
1.什么是双向数据绑定 Vue.js 是一个 MVVM 框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化.这也算是 Vue.js 的精髓之处了 ...
- stringstream字符串流的妙用
现在有一个数组,其值为从1到10000的连续增长的数字.出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼 ...
- 【转】jsp 页面 按回车键 触发事件
转载: https://blog.csdn.net/ludongshun2016/article/details/59536779. 第一种: <script type="text/J ...
- Ensight——Fluent重叠网格解决方案【翻译】
原文链接:https://support.ceisoftware.com/hc/en-us/articles/360000664191-Overset-Grid-Solutions-from-Flue ...
- 企业级Nginx负载均衡与keepalived高可用实战(一)Nginx篇
1.集群简介 1.1.什么是集群 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器. ...
- 【网络知识之四】HTTP/2
一.HTTP/1.1存在的问题 1.TCP 连接数限制2.线头阻塞 (Head Of Line Blocking) 问题3.Header 内容多,而且每次请求 Header 不会变化太多,没有相应的压 ...