Android on 华为云DevCloud
700
2022-05-30
临近秋招,备战暑期实习,祝大家每天进步亿点点!==打卡 Day05==!
本篇总结的是javaweb相关的面试题,后续会每日更新~
剧透:明日更新 JVM 面试题,相关知识不牢固的先去补一补哦 O(∩_∩)O~
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210522175819650.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU5MTk4MA==,size_16,color_FFFFFF,t_70#pic_center =400x400)
1、JSP 和 Servlet 有什么区别?
JSP 经编译后就变成了Servlet(JSP 的本质就是 Servlet,JVM只能识别 Java 的类,不能识别 JSP 的代码,Web 容器将JSP 的代码编译成 JVM 能够识别的 Java 类)。
JSP 更擅长表现于页面显示,Servlet 更擅长于逻辑控制。
Servlet 中没有内置对象,JSP 中的内置对象都是必须通过 HttpServletRequest 对象,HttpServletResponse 对象以及HttpServlet 对象得到。
JSP 是Servlet 的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,JSP 中的 Java 脚本如何镶嵌到一个类中,由 JSP 容器完成。而Servlet 则是个完整的 Java 类,这个类的 Service 方法用于生成对客户端的响应。
==注:JSP 现在公司用的少了,面试不作为重点,但是 Servlet 还是要了解一些东西的!==
2、说一下 jsp 的 4 种作用域?
page 代表与一个页面相关的对象和属性
request 代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。
session 代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
application 代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
3、请说一下 session 的工作原理?
Session 是一个存在服务器上的类似于一个散列表格式的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。类似于一个大号的 map (服务器端的一个集合),里面的 键(key) 存储的是用户的 sessionid,用户向服务器发送请求的时候会带上这个sessionid,这时就可以从中取出对应的值了。
4、session 和 cookie 有什么区别?
Cookie 和 Session 的区别?
Cookie 的概念:客户端会话技术,服务器端将数据保存到客户端。
Session 的概念:服务器端会话技术,在一次会话的多次请求间共享数据,(客户端)将数据保存在服务器端的对象中(HttpSession)。
存储位置不同:Cookie 存储在客户端浏览器,Session 存储在服务器端。
存储容量不同:Cookie 存储数据的容量很小(通常为 4KB 左右),对同一个域名下的总 Cookie 数量也有限制(20个),而 Session 的存储容量较大。
安全性不同:Cookie 的安全性较低,而 Session 安全性较高。
Cookie 和 Session 的生命周期不同:
当浏览器关闭后,Cookie 数据被销毁。
当服务器关闭时,Session 数据被销毁。或者 Session 对象调用invalidate() 主动销毁,也可以设置定时销毁 Session对象。
Cookie 和 Session 的使用案例:
Cookie :
记住上一次访问时间。
在不登录的情况下,完成服务器对客户端的身份识别。
存少量的不太敏感的数据。
Session:
存储登录验证码。
用户登录的信息。
5、如果客户端禁止 cookie 能实现 session 还能用吗?
Cookie 与 Session,一般认为是两个独立的东西,Session 采用的是在服务器端保持状态的方案,而 Cookie 采用的是在客户端保持状态的方案。但为什么禁用 Cookie 就不能得到Session呢?
因为 Session 是用Session ID 来确定当前对话所对应的服务器 Session,而Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了Session ID,也就得不到服务器端的 Session了。
6、forward 和 redirect 的区别?
forward 请求转发是一次请求,redirect 重定向是两次请求;
重定向的第二个请求一定是 GET 请求;
请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用;
请求转发后浏览器地址栏不会有变化,而重定向会有变化,因为重定向是两个请求;
请求转发对Servlet01和Servlet02的请求方法是相同的,即要么都是GET,要么都是POST,因为请求转发是一个请求;
直接上图更好对比区别:
7、什么是 XSS 攻击,如何避免?
XSS 攻击,即跨站脚本攻击(Cross Site Scripting),它是 web 程序中常见的漏洞。
原理:
攻击者往 web 页面里插入恶意的 HTML 代码(JavaScript、Css、Html 标签等),当某个用户浏览该页面时,嵌入其中的 HTML 代码会被执行,从而达到恶意攻击用户的目的。如盗取用户 cookie 执行一系列操作,破坏页面结构、重定向到其他网站等。
案例:恶意的在某个网站的登录页面加 HTML 代码(JavaScript、Css、Html 标签等),当用户输入账号密码登录后,这段恶意的 HTML 代码会被执行,从而获取用户的账号密码信息。
预防思路 :
web 页面中可由用户输入的地方,对输入的数据转义、过滤处理。
后台输出页面的时候,也需要对输出内容进行转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库)。
前端对 html 标签属性、css 属性赋值的地方进行校验。
参考文章:什么是 XSS 攻击,如何避免?
8、什么是 CSRF 攻击,如何避免?
CSRF:Cross Site Request Forgery(跨站点请求伪造)。
CSRF 攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。
案例:就好比用户A,在自己电脑上通过自己的账号密码登录了 B 网站(登录用户身份标识被 XX 网站信任),当 A 在浏览网页时候,不经意间打开了钓鱼网站 X,这时候 X 就可借着 B 网站对用户 A 的信任标识,以用户 A 的身份去访问 B 网站,并对其进行攻击!
预防方法:
添加并验证 token
添加自定义 http 请求头
使用 post 请求
敏感操作添加验证码
参考文章:什么是 CSRF 攻击,如何避免?
9、说下原生 jdbc 操作数据库流程?
第一步: Class.forName()加载数据库连接驱动;
第二步: DriverManager.getConnection()获取数据连接对象;
第三步:根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、 PreparedStatement ;
第四步:执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXxx();
第五步:关闭结果集、关闭会话、关闭连接。
10、如何避免 sql 注入?
预编译 SQL(使用 PreparedStatement),参数化查询方式,避免 SQL 拼接。
校验参数的数据格式是否合法(可以使用正则或特殊字符的判断)。
对进入数据库的特殊字符进行转义处理,或编码转换。
总结的面试题也挺费时间的,文章会不定时更新,有时候一天多更新几篇,如果帮助您复习巩固了知识点,还请三连支持一下,后续会亿点点的更新!
Java
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。