JavaWeb面试题

写在前面

最近快面试了,收集相关的面试题,也是对自己知识的总结


1. forward和redirect的区别?

浏览器 url 地址显示不同
服务端通过 forward 返回,浏览器 url 地址不会发生变化;服务器通过 redirect 返回,浏览器会重新请求, url 地址会发生变化

前后台两者页面跳转的处理方式不同
forward 跳转页面,是服务端进行页面跳转加载(include)新页面,直接返回到浏览器;redirect 跳转页面,是服务端返回新的 url 地址,浏览器二次发出 url 请求

参数携带情况不一样
forward 跳转页面,会共享请求的参数到新的页面;redirect 跳转页面,属于一次全新的 http 请求,无法共享上一次请求的参数

http 请求次数不同
forward 1次;redirect 2次

新目标地址范围不同
forward 必须是同一个应用内的某个资源;redirect 的新地址可以是任意地址

2. jsp的4种作用域?

page (当前页面作用域):相当于 Java 关键字中 this。在这个作用域中存放的属性值,只能在当前页面中取出。对应 PageContext 类

request (请求作用域):范围是从请求创建到请求消亡这段时间,一个请求可以涉及的多个页面。jsp:forward 和 jsp:include 跳转到其他页面,也在作用域范围。对应 ServletRequest 类

session (会话作用域):范围是一段客户端和服务端持续连接的时间,用户在会话有效期内多次请求所涉及的页面。session 会话器,服务端为第一次建立连接的客户端分配一段有效期内的属性内存空间。对应 HttpSession 类

application (全局作用域):范围是服务端Web应用启动到停止,整个Web应用中所有请求所涉及的页面。当服务器开启时,会创建一个公共内存区域,任何客户端都可以在这个公共内存区域存取值。对应 ServletContext 类

3. session和cookie有什么区别?

session 是在服务器端记录信息;cookie 是在浏览器端记录信息
session 保存的数据大小取决于服务器的程序设计,理论值可以做到不限;单个 cookie 保存的数据大小不超过4Kb,大多数浏览器限制一个站点最多20个cookie
session 可以被服务器的程序处理为 key - value 类型的任何对象;cookie 则是存在浏览器里的一段文本
session 由于存在服务器端,安全性高;浏览器的 cookie 可能被其他程序分析获取,所以安全性较低
大量用户会话服务器端保存大量 session 对服务器资源消耗较大;信息保存在 cookie 中缓解了服务器存储用信息的压力

4. session的工作原理?

1、什么是 session
session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息。

2、session 的生命周期
创建
浏览器访问服务器的 servlet(jsp)时,服务器会自动创建 session,并把 sessionid 通过 cookie 返回到浏览器。

销毁
服务器会默认给 session 一个过期时间,即从该 session 的会话在有效时间内没有再被访问就会被设置过超时,需要重新建立会话。
如 tomcat 的默认会话超时时间为30分钟。

5. Servlet的生命周期

初始化阶段,调用init方法,在Servlet的生命周期中只调用一次

响应客户请求阶段,service方法是Servlet的核心,Servlet请求都会调用Servlet对象的service()方法。而且会传递给这个方法一个请求ServletRequest对象和一个响应ServletResponse对象。service()方法默认功能是调用与HTTP请求对应的do功能(doGet,doPost)。

destroy()方法,在Servlet的生命周期中也只调用一次,当服务器不再需要Servlet实例或重新装入时,会调用destroy()方法,Servlet会释放资源后处于卸载状态。

6. 浏览解析URL的过程

在浏览器地址栏输入网址

浏览器获取url进行域名解析。

进行TCP三次握手建立连接

tcp/ip连接建立后,浏览器向服务器发送http请求,服务器处理请求并返回相应的资源(HTML)

客户端接收全部内容后,四次挥手断开连接

浏览器解析HTML后开始显示HTML

7. Ajax同步与异步

同步:同步是指一个线程在执行某个请求,如果请求需要一段时间才能返回信息,那么这个线程会一直等待下去,直到请求获取返回信息,线程才继续执行下去

异步:异步是指我们发出一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在这个过程中,我们可以继续执行其他操作,不管它怎么发出请求,不关心他怎么处理数据

举例子:通俗地讲,也就是说,同步需要按部就班地走完一整个流程,完成一整个动作,打个比方:同步的时候,你在写程序,然后你妈妈叫你马上拖地,你就必须停止写程序然后拖地,没法同时进行。而异步则不需要按部就班,可以在等待那个动作的时候同时做别的动作,打个比方:你在写程序,然后你妈妈让你马上拖地,而这时你就贿赂你弟弟帮你拖地,于是结果同样是拖好地,你可以继续敲你的代码而不用管地是怎么拖的哈哈。

发送邮件的时候,采用异步发送。总结得来说,就是看需要的请求的数据是否是程序继续执行必须依赖的数据

8. get和post请求有哪些区别?

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

GET参数通过URL传递,POST放在Request body中。

它们的本质都是 TCP 链接,并无区别。但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中可能会有所不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值