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轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素
场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. ...
随机推荐
- Linux---进程控制类命令
1.查看系统中的进程命令 (1)ps (2)top 2.控制系统中的进程命令 (1)kill (2)killall (3)nice (4)renice 3.进程后台运行命令 (1)& 4.进程 ...
- 201871010121-王方-《面向对象(java)程序设计对象》第十周学习总结
王方第九周Java实验总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- 代码审计-extract变量覆盖
<?php $flag='xxx'; extract($_GET); if(isset($shiyan)) { $content=trim(file_get_contents($flag)); ...
- 283.移动零 关于列表list与remove原理*****(简单)
题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 注意,该题目要求不开辟行的数组空间,在原数据上进行操作. 示例: 输入: [0,1,0,3,12 ...
- 莫烦TensorFlow_02 Session的两种方法
import tensorflow as tf matrix1 = tf.constant([[3,3]]) # 1X2 matrix2 = tf.constant([[2], [2]]) produ ...
- 洛谷 P1182 数列分段 Section II
洛谷 P1182 数列分段 Section II 洛谷传送门 题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. ...
- LG1198/BZOJ1012 「JSOI2008」最大数 线段树+离线
问题描述 LG1198 BZOJ1012 题解 我们把所有操作离线,设一共有\(n\)个插入操作. 于是提前建立\(n\)个数,全部设为\(-INF\) 接着逐个处理操作即可. \(\mathrm{C ...
- Install docker to Redhat 7
1) sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 2) s ...
- 日常歌颂zyj
今年的中秋节... 我貌似遇到了一个灰常 灰常灰常优秀的 大哥哥~~ (貌似是条高二狗) 最开始在贴吧颓废... 然后... 开始逐条的回复... 开始去,,, 逐步查看,,, 发现这个优秀的楼主会 ...
- Linux性能优化实战学习笔记:第十三讲
问题1:性能工具版本太低,导致指标不全 解决方案1: 这是使用 CentOS 的同学普遍碰到的问题.在文章中,我的pidstat 输出里有一个 %wait 指标,代表进程等待 CPU 的时间百分比, ...