Java面试之Java Web篇(2021更新)

1、什么是servlet,JSP 和 servlet 有什么区别?

  • 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。主要功能在于交互式地浏览和生成数据,生成动态Web内容。
  • JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。

2、说一下 JSP 的 4 种作用域?

  • 所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。
  • page:对象的作用范围仅限于用户请求的当前页面,当请求响应或者转发到一个新页面后释放。
  • request:对象的作用范围仅限于用户当前的请求,它可以跨越forward前后的两页。
  • session:作用于当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程,这个过程可能包含多个请求响应。跟某个用户相关的数据应该放在用户自己的 session 中。
  • application:作用于整个应用,就是指从应用启动,到应用结束。

3、说一下 session 的工作原理?

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

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

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

5、如何避免 SQL 注入?

  • 使用预处理 PreparedStatement,原理是给传入的过滤条件加一个双引号。
  • 使用正则表达式过滤掉字符中的特殊字符。

6、forward 和 redirect 的区别?

  • forward 是转发 和 redirect 是重定向:
  • 地址栏 url 显示:foward url 不会发生改变,redirect url 会发生改变;
  • 数据共享:forward 可以共享 request 域里的数据,redirect 不能共享,因为 forward 属于服务端行为,redirect 属于客户端行为,相当执行了两次HTTP请求;
  • 效率:forward 比 redirect 效率高。

7、简述 TCP 和 UDP 的区别?

  • TCP 和 UDP 是 OSI 模型中的运输层中的协议。TCP 提供可靠的通信传输,HTTP就是基于TCP协议,而 UDP 则常被用于让广播和细节控制交给应用的通信传输。
  • TCP 面向连接,UDP 面向非连接即发送数据前不需要建立链接;
  • TCP 提供可靠的服务(数据传输),UDP 无法保证;
  • TCP 面向字节流,UDP 面向报文;
  • TCP 数据传输慢,UDP 数据传输快;

8、简述 TCP 的三次握手

  • 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

9、OSI 的七层模型都有哪些?

  • 应用层:网络服务与最终用户的一个接口。如 HTTP、FTP 等。
  • 表示层:数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)。如 JPEG、ASCll、加密格式等。
  • 会话层:建立、管理、终止会话。(在五层模型里面已经合并到了应用层)。
  • 传输层:定义传输数据的协议端口号,以及流控和差错校验。如 TCP UDP。
  • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。如 IP(IPV4 IPV6)等。
  • 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)。
  • 物理层:建立、维护、断开物理连接。(由底层网络定义协议)

10、get 和 post 请求有哪些区别?

  • get 请求会被浏览器主动缓存,而 post 不会。
  • get 传递参数有大小限制,而 post 没有。
  • post 参数传输更安全,因为 get 的参数会明文限制在 url 上,post 不会。

11、如何实现跨域?

  • 服务器端运行跨域,设置 CORS 等于 *;
  • 在单个接口使用注解 @CrossOrigin 运行跨域;
  • 使用 jsonp 跨域。它是利用script标签的 src 连接可以访问不同源的特性,加载远程返回的“JS 函数”来执行的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值