文章目录

  • JavaWeb面试题
    • Servlet的生命周期
    • jsp和Servlet的区别
    • Jsp九大内置对象
    • 四大域对象
    • Cookie和Session的区别
    • 什么是Token
    • session与token区别
    • get和post的区别
    • 转发和重定向
    • Servlet是线程安全的吗
    • Servlet执行流程
    • 三次握手和四次挥手
    • TCP和UDP的区别
    • 如何解决跨域问题?
    • 什么是 CSRF 攻击?如何防御CSRF 攻击
    • http和https的基本概念
    • http和https的区别?
    • 一次完整的HTTP请求所经历几个步骤?
    • 常用HTTP状态码是怎么分类的?
    • HTTP1.0和HTTP1.1和HTTP2.0的区别
    • 什么是长连接和短连接
    • 长连接短连接的操作过程

JavaWeb面试题

Servlet的生命周期

-1 web Client 向servlet服务器,发出Http请求
-2 servlet接受web Client的请求
-3 servlet容器创建一个HttpRequest 对象,将Web Client请求的信息封装到这个对象中
-4 servlet容器创建一个HttpResponset对象
-5 servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet对象
-6 HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
-7 HttpServlet调用HttpResponst 对象的有关方法,生成响应数据
-8 Servlet容器把 HttpServlet的响应结果给Web Client简单的说:init    service   destroy

jsp和Servlet的区别

-1 jsp的本质是Servlet jvm只能识别java的类,不能识别jsp的代码
-2 jsp更擅长表现与页面显示,Servlet更擅长与逻辑控制
-3 servlet中没有内置对象,jsp中有九大内置对象

Jsp九大内置对象

变量名 真实类型 作用
pageContext PageContext 当前页面共享数据,获取其他8个内置对象
request HttpServletRequest 一次请求访问的多个资源共享数据(请求转发)
reponse HttpServletReponse 响应对象
session HttpSession 一次会话的多个请求间共享数据
application ServletContext 所有用户间共享数据
page Object 当前Servlet对象(this)
out JspWriter 输出对象把数据输出到页面上
config ServletConfig Servlet的配置对象
exception Throwable 异常对象
重点掌握个对象request:  请求对象response: 响应对象out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似response.getWriter()和out.write()的区别:* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。* response.getWriter()数据输出永远在out.write()之前

四大域对象

域对象名称 范围 级别 备注
PageContext 页面范围 最小,只能在当前页面用 因范围太小,开发中用的很少
ServletRequest 请求范围 一次请求或者当前请求转发用 请求转发之后,再次转发时请求域丢失
HttpSession 会话范围 多次请求数据共享时使用 多次请求共享数据,但不同的客户端不能共享
Servletcontext 应用范围 最大,整个应用都可以使用 尽力少用,如果对数据有修改需要做同步处理

PageContext对象

  • 是jsp独有的,Servlet没有
  • 是四大域对象之一的页面域对象,可以操作其他三个域对象中的属性
  • 可以获取其他八个隐式对象
  • 生命周期随着jsp的创建而存在,随着jsp的结束而消失,每个jsp页面都有一个PageConte

Cookie和Session的区别

Cookie(客户端,不是很安全)

  • Cookie是由服务端创建,由若干个键值对组成的数据,并且随着响应以文件的形式将Cookie数据保存在客户端本地。当浏览器再次访问服务器时会携带Cookie数据,从而实现多次请求的数据共享。

  • 作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以提高效率

  • Cookie的使用

    • 数量限制,每个网站最多20个cookie,大小不超过4kb,所有网站的cookie不超过300个

Session(服务端,安全)

  • 第一次请求的时候,服务器会创建一个带有id的Session的对象,然后服务器会把session的id以cookie的形式发送给客户端,第二次请求的时候根据id判断是否是同一个session对象,从而实现数据共享。

什么是Token

Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

session与token区别

  • session机制存在服务器压力增大,CSRF跨站伪造请求攻击,扩展性不强等问题;
  • session存储在服务器端,token存储在客户端
  • token提供认证和授权功能,作为身份认证,token安全性比session好;
  • session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上,token适用于项目级的前后端分离(前后端代码运行在不同的服务器下)

get和post的区别

get post
后退,刷新 数据重新提交
书签 不可以收藏书签
历史 参数不可以保存在浏览器历史中
对数据长度的限制 没有限制
安全性 安全
可见性 数据不会限制在URL中

转发和重定向

转发:服务端行为,地址不变,数据共享,效率高public void forward(HttpServletRequest req, HttpServletResponse resp)
重定向:客户端行为,地址发送改变,数据不共享,效率低   resp.sendRedirect(req.getContextPath()+"/servletDemo07");

Servlet是线程安全的吗

Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。 解决的办法是尽量不要在实现servlet接口的类中定义实例变量,而是要把变量分别定义在doGet()和doPost()方法内。虽然使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。注意:多线程的并发的读写Servlet类属性会导致数据不同步。但是如果只是并发地读取属性而不写入,则不存在数据不同步的问题。因此Servlet里的只读属性最好定义为final类型的。

Servlet执行流程

web客户向Servlet容器发出HTTP请求;Servlet容器解析web的HTTP请求.Servlet容器创建一个HttpRequest对象,在这个对象中封装了http请求信息;Servlet容器创建一个HttpResponse对象;Servlet容器(如果访问的该servlet不是在服务器启动时创建的,则先创建servlet实例并调用init()方法初始化对象)调用HttpServlet的service()方法,把HttpRequest和HttpResponse对象为service方法的参数传给HttpServlet对象;HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;HttpServlet调用HttpResponse的有关方法,生成响应数据;Servlet容器把HttpServlet的响应结果传给web客户.

三次握手和四次挥手

三次握手:(1)客户端向服务器发出连接请求等待服务器确认(2)服务器向客户端返回一个响应告诉客户端收到了请求(3)客户端向服务器再次发出确认信息,此时连接建立
四次挥手:(1)客户端向服务器发出取消连接请求(2)服务器向客户端返回一个响应,表示收到客户端取消请求(3)服务器向客户端发出确认取消信息(向客户端表明可以取消连接了)(4)客户端再次发送确认消息,此时连接取消

TCP和UDP的区别

1、TCP :面向连接,UDP :面向无连接
2、TCP :传输效率低,UDP :传输效率高(有大小限制,一次限定在64kb之内)
3、TCP:可靠,UDP :不可靠

如何解决跨域问题?

跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。所谓同源指的是:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。解决方案:1:使用ajax的jsonp2:nginx 转发:利用nginx反向代理,将请求分发到部署相应项目的tomcat服务器,当然也不存在跨域问题。3:使用cors:写一个配置类实现WebMvcConfigurer接口或者配置FilterRegistrationBean

什么是 CSRF 攻击?如何防御CSRF 攻击

CSRF(Cross-site request forgery) 跨站请求伪造。CSRF 攻击是在受害者毫不知情的情况下,以受害者名义伪造请求发送给受攻击站点,从而在受害者并未授权的情况下执行受害者权限下的各种操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段在请求地址中添加 token 并验证在 HTTP 头中自定义属性并验证

http和https的基本概念

-HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于计算机之间传输文字,图片,音频,视频等超文本数据的协议,它可以使浏览器更加高效,使网络传输减少
-HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,HTTPS就是从HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护-HTTPS协议的主要作用:建立一个信息安全通道,来保证数据传输的安全确认网站的真实性

http和https的区别?

区别 HTTP HTTPS
协议 运行在 TCP 之上,明文传输,客户端与服务器端都无法验证对方的身份 身披 SSL( Secure Socket Layer )外壳的 HTTP,运行于 SSL 上,SSL 运行于 TCP 之上, 是添加了加密和认证机制的 HTTP
端口 80 443
资源消耗 较少 由于加解密处理,会消耗更多的 CPU 和内存资源
证书 无需证书 需要证书,而证书一般需要向认证机构购买
加密机制 共享密钥加密和公开密钥加密并用的混合加密机制安全性弱由于加密机制,安全性强
安全性 由于加密机制,安全性强

一次完整的HTTP请求所经历几个步骤?

根据域名和 DNS 解析到服务器的IP地址 (DNS + CDN)通过ARP协议获得IP地址对应的物理机器的MAC地址浏览器对服务器发起 TCP 3 次握手建立 TCP 连接后发起 HTTP 请求报文服务器响应 HTTP 请求,将响应报文返回给浏览器短连接情况下,请求结束则通过 TCP 四次挥手关闭连接,长连接在没有访问服务器的若干时间后,进行连接的关闭浏览器得到响应信息中的 HTML 代码, 并请求 HTML 代码中的资源(如js、css、图片等)浏览器对页面进行渲染并呈现给用户

常用HTTP状态码是怎么分类的?

状态码 类别 描述
1xx 信息状态码 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功状态码 成功,操作被成功接收并处理
3xx 重定向状态码 重定向,需要进一步的操作以完成请求
4xx 客户端错误状态码 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误状态码 服务器错误,服务器在处理请求的过程中发生了错误

HTTP1.0和HTTP1.1和HTTP2.0的区别

HTTP1.0 :无状态,无连接
HTTP1.1:长连接,请求管道化,增加缓存处理,增加Host字段,支持断点传输
HTTP2.0:二进制分帧,多路复用(连接共享),头部压缩,服务器推送

什么是长连接和短连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连
接,任务结束就中断连接而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加
入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连
接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会
永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现
长连接需要客户端和服务端都支持长连接

长连接短连接的操作过程

短连接的操作步骤是:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连
接长连接的操作步骤是:建立连接——数据传输...(保持连接)...数据传输——关闭连接

JavaWeb面试题相关推荐

  1. JavaWeb笔试题

    JavaWeb笔试题 JavaWeb相关 1.编码问题(Get\POST) 2.集合(map)  List 有序(存取), Set无序 3.常用类(String.servlet.异常类.集合.Thre ...

  2. Java题目筛选器_【024期】JavaWeb面试题(五):Filter和Listener

    开篇介绍 大家好,我是Java最全面试题库的提裤姐,今天这篇是JavaWeb系列的第五篇,主要总结了JavaWeb中Filter和Listener相关的问题,在后续,会沿着第一篇开篇的知识线路一直总结 ...

  3. JavaWeb面试题2020(15题)

    前言: 作者:CodeCow · 阿牛,微信搜索公众号 "CodeCow ",我们一起干"java" 正文: 1.网络编程首先要解决什么问题? (1)如何准确的 ...

  4. javaweb面试题(全)

      目录 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?............ 8 2.Java有没有goto?.................. ...

  5. JavaWeb面试题(持续)

    1.Tomcat的优化经验 答:去掉对web.xml的监视,把JSP提前编辑成Servlet:有富余物理内存的情况下,加大Tomcat使用的JVM内存. 2.什么是Servlet? 答:可以从两个方面 ...

  6. [JAVA]JavaWeb面试题

    1.Tomcat的优化经验 答:去掉对web.xml的监视,把JSP提前编辑成Servlet:有富余物理内存的情况下,加大Tomcat使用的JVM内存. 2.什么是Servlet? 答:可以从两个方面 ...

  7. java实现登陆面试题_【Javaweb】笔面试题 ---(1)(示例代码)

    Javaweb 面试题:理解才是最重要的,而不是原封不动的背下来 一.请简述doget和dopost它们的区别 1) get是从服务器上获取数据,post是向服务器传送数据. 2) 在客户端,Get方 ...

  8. Java面试题汇总及答案2021最新(序列化含答案)

    Java面试题汇总及答案2021最新(序列化含答案) 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Jav ...

  9. JAVA基础——toString()方法,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  10. Linux纯干货知识总结|面试专用

    学习Linux的重要性相信不用我多说大家也明白,以下是小编总结的常用Linux基础知识以及面试常问的Linux命令,希望能帮助大家更规范地理解和使用- 绝对路径和相对路径 绝对路径 以正斜杠开始 完整 ...

最新文章

  1. 清华官宣:前百度总裁张亚勤正式加盟清华大学
  2. python3 中递归的最大次数
  3. opencv机器学习线性回归_全面讲解手推实战机器学习之线性回归
  4. 好用的数据分析工具能顶半个BI团队?大佬力荐这款工具值得体验
  5. javascript 之数据类型--01
  6. java proxy
  7. Linux内存管理:TLB flush操作
  8. prim算法_最小生成树(Kruskal和Prim算法)
  9. python colorama 横向打印_让python的print变得更好看——prettytable和colorama
  10. 解决异常:Premature end of chunk coded message body: closing chunk expected
  11. python用于cad_使用Python实现AutoCAD自动化
  12. eos源码赏析(七):EOS智能合约入门之共识机制初探
  13. scikit-learn广义线性模型之最小二乘法
  14. 文件或目录损坏且无法读取 删除不了 错误0x80070091:目录不是空的 解决方案
  15. 维度建模——维度建模与数据仓库概述
  16. Python100行-贪吃蛇小游戏
  17. OkHttp3超时设置和超时异常捕获
  18. 2008年GCT考试真题A卷答案
  19. 计算机硬盘的ppt,计算机硬盘存储.ppt
  20. 计算机的未来功能,未来机器人,将具备越来越多的功能

热门文章

  1. ubuntu17.04 UHD 驱动出错
  2. 身份证前6位城市代码
  3. 施耐德PLC Unity Pro xl 软件使用二
  4. Visual Studio 2012下载安装方法
  5. R语言基于ggplot绘制多条ROC曲线
  6. ARINC 429 过滤介绍
  7. 高速PCB电路板的信号完整性设计
  8. Magisk 最新版本 V24.1 源码编译踩坑集锦
  9. 扩展欧几里得算法(求逆元)总结
  10. Linux 2.6.19.x 内核编译配置选项简介