Java面试题——第七篇(Java Web)

ops/2024/11/15 6:17:52/

1.forward和redirect区别

forward和redirect代表了两种请求转发方式:直接转发和间接转发

  • 直接转发方式(forward):客户端和浏览器只发出一次请求,服务器在处理这个请求的过程中,将请求转发给另一个资源或组件进行处理。
  • 简介转发方式(redirect):实际上是两次HTTP请求,服务端在响应第一次请求的时候,让浏览器再向另一个URL发出请求,从而达到转发的目的。

2. NIO特点

事件驱动模型,单线程处理多任务,非阻塞IO、零拷贝、多路复用大大提高了Java网络应用的可伸缩性和实用性,基于Reactor线程模型。

3. 什么是Cookie和Session

  • 什么是Cookie
    HTTP Cookie是服务器发送到用户浏览器并保存在本地的一小块数据。它会在浏览器下一次向同一个服务器再次发起请求时携带并发送到服务器上。通常,用于告知服务端两个请求是否来自同一个浏览器,如保持用户登录状态。
  • 什么是Session
    Session代表着服务器和客户端一次会话的过程。Session对象存储特定用户会话所需的属性及配置信息。

4. Cookie和Session如何配合

用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建session,请求返回时将此Session的唯一标识信息sessionId返回给浏览器,浏览器接收到服务器返回的sessionId后,将此信息存入cookie,同时cookie记录此sessionId属于哪个域名。
当用户第二次访问服务器的时候,请求自动判断此域名下是否存在cookie信息,如果存在自动将cookie信息发送给服务端,服务端从cookie中取出sessionId,再根据sessionId查找对应的session信息,如果没有找到说明用户没有登录或者登录失效。
根据以上流程,SessionId是连接Cookie和Session的桥梁。大部分系统也是基于此验证用户登录状态。

5. 如果客户端禁止Cookie,Session还能用吗

可以用,session只是依赖cookie存储sessionId,如果cookie禁用了,还可以使用url中添加sessionId的方式保证session能正常使用。

6. 如何考虑分布式session问题

  1. 客户端存储:直接将信息存储在cookie中,cookie是存储在客户端上的一小段数据,客户端通过http协议和服务器端进行cookie交互,通常用来存储一些不敏感信息。
  2. Nginx ip_hash策略:服务端使用Nginx代理,每个请求按照IP的hash分配,这样来自同一IP固定访问一个后台服务器。
  3. 共享session :服务端无状态话,将用户session信息使用缓存中间件(如Redis)统一管理。

7. 什么是跨站脚本(XSS)攻击,如何避免

XSS攻击是攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当用户浏览网站时,这段HTML代码会自动执行,从而达到攻击目的。XSS攻击类似于SQL注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询、修改、删除数据的目的,而在XSS攻击中,通过插入恶意脚本,实现对用户浏览器的控制,获取用户信息。XSS是Web程序中常见的漏洞。
防范思路:
对输入和URL参数进行过滤
对输出到页面的数据进行适当的编码或者转义,以防止恶意脚本的执行。

8. 什么是跨站请求伪造(CSRF)攻击,如何避免

CSRF称为跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器请求,向一个用户曾经访问过的网站发送出去,使得目标网站接收并误以为是用户真实操作而去执行命令。
如何避免

  • 验证HTTP Referer:字段记录了HTTP请求的来源地址。
  • 使用验证码:关键操作页面加上验证码

http://www.ppmy.cn/ops/111677.html

相关文章

关于less的基本使用

1、介绍及概述 1.1、解释 less 是方便开发人员书写CSS的一门预处理语言。浏览器只认识html /css /js格式的文件,所以直接引入.less文件,没有任何的效果,需要把less文件转换成css文件 1.2、概述 CSS弊端: 没有逻辑性、变量、函…

C++中string类的使用

目录 1.auto和范围for 1.1auto关键字 1.2范围for 2.string类常用接口说明 2.1默认成员函数 2.1.1构造函数(constructor) 2.1.2赋值运算符重载(operator()) 2.2string类对象的访问及遍历操作(Iterators and Element access) 2.3string类对象的容量操作(Capacity) 2.3.1…

Python Web应用的测试技巧

Python Web应用的测试技巧 目录 🎯 单元测试与集成测试的基础与区别🔧 使用 pytest 进行高效测试🛠️ Flask 和 Django 的内置测试框架详解🚀 使用 tox 实现跨环境测试🧪 Mock 和 Faker 在测试中的应用技巧 &#x1…

Django创建模型

1、根据创建好应用模块 python manage.py startapp tests 2、在models文件里创建模型 from django.db import modelsfrom book.models import User# Create your models here. class Tests(models.Model):STATUS_CHOICES ((0, 启用),(1, 停用),# 更多状态...)add_time mode…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(三)

简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产力。…

论文内容分类与检测系统源码分享

论文内容分类与检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Unity 粒子系统参数说明

一、Particle System 1. Duration(持续时间) 粒子系统运行一次所需的时间。它决定粒子系统持续播放的时间长度。 2. Looping(循环播放) 如果启用,粒子系统将在播放完一次后自动重新开始播放,直到你停止它…

【GO开发】MacOS上搭建GO的基础环境-Hello World

文章目录 一、引言二、安装Go语言三、配置环境变量(可跳过)四、Hello World五、总结 一、引言 Go语言(Golang)因其简洁、高效、并发性强等特点,受到了越来越多开发者的喜爱。本文将带你一步步在Mac操作系统上搭建Go语…