[Interview]Java 面试宝典系列之 JavaWeb

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Interview]Java 面试宝典系列之 JavaWeb相关的知识,希望对你有一定的参考价值。

文章目录

1. cookie 和 session 的区别是什么?

不同点cookiesession
存储位置客户端服务器
容量限制大小 <=4KB 且数量 <= 20 个无限制
存储方式只能保存 ASCII 字符串,需要转码任何类型
安全性客户端可见,不安全安全
生命周期定制化设置关闭会话窗口即失效
服务器压力不占用服务器资源消耗服务器资源
浏览器支持需要浏览器支持禁用 cookie 时 url 重写,携带 JSESSIONID
跨域支持支持不支持

2. cookie 和 session 各自适合的场景是什么?

  • cookie:对于普通数据,优先考虑存放在 cookie 里,这样会减少对服务器资源的占用(免用户名、密码登录)

  • session:存储用户的登录信息

3. 请介绍 session 的工作原理

session 依赖于 cookie。当客户端首次访问服务器时,服务器会为其创建一个 session 对象,该对象具有一个唯一标识 JSESSIONID,并且在响应阶段,服务器会创建一个 cookie,并将 SESSIONID 存入其中,作为响应头响应给客户端,此后客户端的请求都会携带 JSESSIONID 参数在请求头中

4. get 请求与 post 请求有什么区别?

  1. GET 在浏览器回退时是无害的,而 POST 会再次提交请求
  2. GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置
  3. GET 产生的 URL 地址可以被 Bookmark,而 POST 不可以
  4. GET 请求只能进行 url 编码,而 POST 支持多种编码方式
  5. GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留
  6. GET 请求在 URL 中传送的参数是有长度限制的,而 POST 没有
  7. 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制
  8. GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息
  9. GET 参数通过 URL 传递,POST 放在 Request body 中

5. get 请求的参数能放到 body 里面吗?

GET 请求是可以将参数放到 Body(请求体)里面的,官方并没有明确禁止,但给出的建议是这样不符合规范,无法保证所有的实现都支持。这就意味着,如果你试图这样做,可能出现各种未知的问题,所以应该当避免。

6. post 不幂等是为什么?

幂等性:对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的;也就是说,如果一个网络重复执行多次,产生的效果是一样的,那就是幂等(idempotent)的。

HTTP 方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。POST 所对应的 URI 并非创建的资源本身,而是资源的接收者。比如:POST http://www.forum.com/articles 的语义是在 http://www.forum.com/articles 下创建一篇帖子,HTTP 响应中应包含帖子的创建状态以及帖子的 URI。两次相同的 POST 请求会在服务器端创建两份资源,它们具有不同的 URI。所以,POST 方法不具备幂等性。

7. 页面报 400 错误是什么意思?

400 状态码标识请求的语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。通常情况下,是本次请求中包含有错误的参数,此时应该排查前端传递的参数。

8. 请求数据出现乱码该怎么处理?

请求乱码的原因是,客户端编码与服务器解码方案不一致,可以有如下几种解决办法:

  1. 将获得的数据按照客户端编码转成 byte,再将 byte 按服务端编码转成字符串,这种方案对各种请求方式均有效,但是十分的麻烦
  2. 在接受请求数据之前,显示声明实体内容的编码与服务器一致,这种方式只对 POST 请求有效(CharacterEncodingFilter)
  3. 修改服务器的配置文件,显示声明请求路径的编码与服务器一致,这种方式只对 GET 请求有效(URIEncoding=UTF-8)

9. 调用接口时要记录日志,该怎么设计?

可以定义一个记录日志的组件,并通过 AOP 将其织入到接口的调用中。这种方式对接口无需做任何改造,业务代码中也无需增加任何调用的逻辑,完美地消除了记录日志和业务代码的耦合度。

以上是关于[Interview]Java 面试宝典系列之 JavaWeb的主要内容,如果未能解决你的问题,请参考以下文章

[Interview]Java 面试宝典系列之 Spring Boot

[Interview]Java 面试宝典系列之 Java 多线程

[Interview]Java 面试宝典系列之 MyBatis

[Interview]Java 面试宝典系列之 Java 集合类

[Interview]Java 面试宝典系列之 JavaWeb

[Interview]Java 面试宝典系列之 Spring MVC