• 面试面经|Java面试web面试题18道


    序言

    凡事预则立,不预则废。能读到这里的人,我相信都是这个世界上的“有心人”,还是那句老话:上天不负有心人!我相信你的每一步努力,都会收获意想不到的回报。

    Java Web

     1.JSP 和 servlet 有什么区别?

    JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。

    2. JSP 有哪些内置对象?作用分别是什么?

    JSP 有 9 大内置对象:

    • request:封装客户端的请求,其中包含来自 get 或 post 请求的参数;
    • response:封装服务器对客户端的响应;
    • pageContext:通过该对象可以获取其他对象;
    • session:封装用户会话的对象;
    • application:封装服务器运行环境的对象;
    • out:输出服务器响应的输出流对象;
    • config:Web 应用的配置对象;
    • page:JSP 页面本身(相当于 Java 程序中的 this);
    • exception:封装页面抛出异常的对象。

    3. 说一下 JSP 的 4 种作用域?

    • page:代表与一个页面相关的对象和属性。
    • request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。
    • session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
    • application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

    4. session 和 cookie 有什么区别?

    • 存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
    • 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。
    • 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。
    • 存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。

    5. 说一下 session 的工作原理?

    session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

    6. 如果客户端禁止 cookie 能实现 session 还能用吗?

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

    7. spring mvc 和 struts 的区别是什么?

    • 拦截级别:struts2 是类级别的拦截;spring mvc 是方法级别的拦截。
    • 数据独立性:spring mvc 的方法之间基本上独立的,独享 request 和 response 数据,请求数据通过参数获取,处理结果通过 ModelMap 交回给框架,方法之间不共享变量;而 struts2 虽然方法之间也是独立的,但其所有 action 变量是共享的,这不会影响程序运行,却给我们编码和读程序时带来了一定的麻烦。
    • 拦截机制:struts2 有以自己的 interceptor 机制,spring mvc 用的是独立的 aop 方式,这样导致struts2 的配置文件量比 spring mvc 大。
    • 对 ajax 的支持:spring mvc 集成了ajax,所有 ajax 使用很方便,只需要一个注解 @ResponseBody 就可以实现了;而 struts2 一般需要安装插件或者自己写代码才行。

    8. 如何避免 SQL 注入?

    • 使用预处理 PreparedStatement。
    • 使用正则表达式过滤掉字符中的特殊字符。

    9. 什么是 XSS 攻击,如何避免?

    XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。

    预防 XSS 的核心是必须对输入的数据做过滤处理。

    10. 什么是 CSRF 攻击,如何避免?

    CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。

    防御手段:

    • 验证请求来源地址;
    • 关键操作添加验证码;
    • 在请求地址添加 token 并验证。

    11.说下原生 jdbc 操作数据库流程?
    第一步: Class.forName()加载数据库连接驱动;
    第二步: DriverManager.getConnection()获取数据连接对象;

    第三步:根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、 PreparedStatement ;
    第四步:执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX();
    第五步:关闭结果集、关闭会话、关闭连接

    12.请简单描述下几个您熟悉JavaScript库,它们有哪些作用和特点?
    JavaScript 高级程序设计(特别是对浏览器差异的复杂处理),通常很困难也很耗时。为了应对这些调整,许多的 JavaScript库应运而生。这些 JavaScript 库常被称为 JavaScript 框架。

    jQuery:

    Ext JS - 可定制的 widget,用于构建富因特网应用程序(rich Internet applications)。

    Prototype

    MooTools。

    YUI - Yahoo! User Interface Framework,涵盖大量函数的大型库,从简单的 JavaScript 功能到完整的 internet widget。

    13.举例说明JAVA中如何解析xml,不同方式有和优缺点?
    答:1. DOM(Document Object Model)

    DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。

    【优点】

    ①允许应用程序对数据和结构做出更改。

    ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。

    【缺点】

    ①通常需要加载整个XML文档来构造层次结构,消耗资源大。

    2. SAX(Simple API for XML)

    SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。

    选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的是事件模型。

    DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

    SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

    【优势】

    ①不需要等待所有数据都被处理,分析就能立即开始。

    ②只在读取数据时检查数据,不需要保存在内存中。

    ③可以在某个条件得到满足时停止解析,不必解析整个文档。

    ④效率和性能较高,能解析大于系统内存的文档。

    【缺点】

    ①需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),文档越复杂程序就越复杂。

    ②单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据,不支持XPath。

    3. JDOM(Java-based Document Object Model)

    JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。

    JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

    JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。

    JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。

    【优点】

    ①使用具体类而不是接口,简化了DOM的API。

    ②大量使用了Java集合类,方便了Java开发人员。

    【缺点】

    ①没有较好的灵活性。

    ②性能较差。
    14.你在项目中哪些地方用到了XML?
    答: XML的主要作用有两个方面:数据交换(曾经被称为业界数据交换的事实标准,现在此项功能在很多时候都被JSON取代)和信息配置。在做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理。目前很多软件都使用XML来存储配置信息,很多项目中我们通常也会将作为配置的硬代码(hard code)写在XML文件中,Java的很多框架也是这么做的。

    15.如何设定JQuery异步调用还是同步调用?

    答案:调用jQuery中的ajax函数,设置其async属性来表明是异步还是同步,如下:

    $.ajax({ async:true//表示异步,false表示同步 })

    16.jQuery中有哪几种类型的选择器?

    答案:

    基本选择器

    层次选择器

    基本过滤选择器

    内容过滤选择器

    可见性过滤选择器

    属性过滤选择器

    子元素过滤选择器

    表单选择器

    表单过滤选择器

    17.JavaScript 中 null和 undefined 是否有区别?有哪些区别?

    答案:

    赋值角度说明:

    null 表示此处没有值,undefined表示此处定义了但是没有赋值

    从数据转换角度:

    Null在做数值转换时会被转换为0,undefined会被转换为NaN

    18.Servlet中的doPost和doGet方法有什么区别?它们在传递和获取参数上有什么区别?
    答案:

    区别:doPost用来处理post请求,doGet用来处理get请求,获取参数:获取的参数是相同的都是HttpServletRequest \HttpServletResponse
    更多完整详细面试题及答案注解更新中,或关注我私信领取完整版PDF,我是Java程序V,下次见

  • 相关阅读:
    Linux 挂载磁盘到指定目录
    阿里一面,说说你对Mysql死锁的理解
    全局定制elementui的确认框confirm
    influxdb导出数据
    @Autowired与@Resource区别
    Linux CentOS系统安装mysql8.0.31(tar方式)
    flink sql实战案例
    Verilog语言中case、casex、casez的用法和区别
    2022中兴捧月算法挑战赛(RAW图像去噪)——初赛到决赛总结与反思
    基于改进非局部均值的红外图像混合噪声去除方法
  • 原文地址:https://blog.csdn.net/Q54665642ljf/article/details/126189519