• 临近秋招,备战暑期实习,祝大家每天进步亿点点!打卡 Day05!
  • 本篇总结的是javaweb相关的面试题,后续会每日更新~
  • 剧透:明日更新 JVM 面试题,相关知识不牢固的先去补一补哦 O(∩_∩)O~


1、JSP 和 Servlet 有什么区别?

  • JSP 经编译后就变成了ServletJSP 的本质就是 Servlet,JVM只能识别 Java 的类,不能识别 JSP 的代码,Web 容器将JSP 的代码编译成 JVM 能够识别的 Java 类)。
  • JSP 更擅长表现于页面显示,Servlet 更擅长于逻辑控制。
  • Servlet 中没有内置对象,JSP 中的内置对象都是必须通过 HttpServletRequest 对象,HttpServletResponse 对象以及HttpServlet 对象得到。
  • JSPServlet 的一种简化,使用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 还能用吗?

CookieSession,一般认为是两个独立的东西,Session 采用的是在服务器端保持状态的方案,而 Cookie 采用的是在客户端保持状态的方案。但为什么禁用 Cookie 就不能得到Session呢?

因为 Session 是用Session ID 来确定当前对话所对应的服务器 Session,而Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了Session ID,也就得不到服务器端的 Session了。

总结一句话(来自评论区大佬的反馈):SessionID就是在Cookie里面,禁用了Cookie就得不到SessionID,就拿不到Session。

这里在推荐一篇文章:cookie被禁止后怎样使用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 种方式 StatementPreparedStatement
  • 第四步:执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXxx()
  • 第五步:关闭结果集、关闭会话、关闭连接。

10、如何避免 sql 注入?

  • 预编译 SQL(使用 PreparedStatement),参数化查询方式,避免 SQL 拼接。
  • 校验参数的数据格式是否合法(可以使用正则或特殊字符的判断)。
  • 对进入数据库的特殊字符进行转义处理,或编码转换。

总结的面试题也挺费时间的,文章会不定时更新,有时候一天多更新几篇,如果帮助您复习巩固了知识点,还请三连支持一下,后续会亿点点的更新!


为了帮助更多小白从零进阶 Java 工程师,从CSDN官方那边搞来了一套 《Java 工程师学习成长知识图谱》,尺寸 870mm x 560mm,展开后有一张办公桌大小,也可以折叠成一本书的尺寸,有兴趣的小伙伴可以了解一下,当然,不管怎样博主的文章一直都是免费的~

(Java实习生)每日10道面试题打卡——JavaWeb篇相关推荐

  1. 【备战面试】每日10道面试题打卡——线程篇(二)

    ⭐️写在前面 这里是温文艾尔的学习之路

  2. (Java实习生)每日10道面试题打卡——Java基础知识篇2

    临近秋招,备战暑期实习,祝大家每天进步亿点点! 本篇总结的是Java基础知识相关的面试题,后续会每日更新~ 1.请你说一下Java中的IO流?以及他们的分类和作用? IO 流的分类: 按照数据流的方向 ...

  3. (Java实习生)每日10道面试题打卡——Java基础知识篇

    临近秋招,备战暑期实习,祝大家每天进步亿点点! 本篇总结的是Java基础知识相关的面试题,后续会每日更新~ 1.请你说一下什么是面向对象? Java是面向对象的编程语言,不同于C语言是面向过程的.对于 ...

  4. (Java实习生)每日10道面试题打卡——Java简单集合篇

    临近秋招,备战暑期实习,祝大家每天进步亿点点! 本篇总结的是Java集合知识相关的面试题,后续会每日更新~ 1. 请问如何使ArrayList保证线程安全? 答案如下: // 方式一: // sync ...

  5. 【备战面试】每日10道面试题打卡——Java基础篇(二)

    ⭐️写在前面 这里是温文艾尔的学习之路

  6. 【前端】—每日5道面试题打卡(十六)

    [前端]-每日5道面试题打卡(十六) 每天进步1% 不多 就1% 一.输出今天的日期,以 YYYY-MM-DD 的方式,比如今天是 2021 年7 月 22 日,则输出2021-07-22 ? 二.希 ...

  7. 【前端小小白】—每日5道面试题打卡(十五)

    [前端小小白]-每日5道面试题打卡(十五) 每天进步1% 不多 就1% 一.数组的方法有哪些? var list = [1,2,3];list.pop();//删除数组的最后一个元素 var list ...

  8. Java:关于main方法的10道面试题

    转载自 Java:关于main方法的10道面试题 1.main方法是做什么用的? 2.不用main方法如何运行一个类? 3.main方法如何传递参数?传递参数的类型是什么?能不能改变该参数类型? 4. ...

  9. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

最新文章

  1. 软件工程:需求分析的20条法则
  2. WINCE6.0+S3C2443的启动过程---eboot4
  3. mysql最小费用最大流问题_算法笔记_140:最小费用最大流问题(Java)
  4. SpringCloud之微服务
  5. systemverilog队列
  6. C#判断指定文件是否存在
  7. mysql 查询视图是否存在_sql server判断数据库、表、列、视图是否存在
  8. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!
  9. 福利 | 限时免费体验 Google 官方 Android 课程
  10. kuangbin专题五并查集总结
  11. 智能化系统之门禁系统
  12. leetcode第197场周赛 之 5211概率的最大路径
  13. 复杂材料棱柱体单站RCS
  14. 利用turtle模块画一棵树,包括枝干和树叶,并涂上颜色
  15. 【虫师--系列15】性能测试知多少---系统架构分析
  16. 从零开始写一个RTSP服务器(一)RTSP协议讲解
  17. linux刻录文件,linux中刻录iso到光盘
  18. 我来读代码之三(d-podium)
  19. word删除空格、修复“断行”
  20. Auto.js调试:使用雷电模拟器的网络模式进行调试

热门文章

  1. 微信小程序-音视频剪辑
  2. iPhone X电池性能如何:双电池与无线充电的博弈
  3. STM32内部参考电压的使用
  4. stm32 精确电压测量法(内部参考电压)
  5. 项目落地 - 智能焊机,钢塑管(物联网技术应用)
  6. python logging日志模块以及多进程日志
  7. 海量数据、丰厚奖金,美团外卖推荐技术评测邀你来战!
  8. linux中nginx卸载命令,linux服务器nginx的卸载与安装教程
  9. 2023年创业必火的十个行业是哪些?创业必赚钱!
  10. ISO8583报文工具类(组装和解析报文)