Java Web面试题及答案(99%面试官都会问到)

Java Web面试题及答案(99%面试官都会问到)-mikechen

Java Web面试题是Java面试经常问到的内容,下面重点详解常见的Java Web面试题及答案。

什么是 MVC 模型?

可以用如下的图形来表示MVC模式三者之间的关系:
Java Web面试题及答案(99%面试官都会问到)-mikechen

1.模型(Model)

模型封装了数据及对数据的操作,可以直接对数据库进行访问,不依赖视图和控制器,也就是说模型并不关注数据如何展示,只负责提供数据。GUI 程序模型中数据的变化一般会通过观察者模式通知视图,而在 web 中则不会这样。

2.视图(View)

视图从模型中拉取数据,只负责展示,没有具体的程序逻辑。

3.控制器(Controller)

控制器用于控制程序的流程,将模型中的数据展示到视图中。

 

JSP和Servlet是什么关系?

JSP全称Java Server Pages,一种Java Servlet,主要用于实现Java web应用程序的用户界面部分。

 

JSP工作原理

具体如下图所示:

Java Web面试题及答案(99%面试官都会问到)-mikechen

JSP的工作流程,大致分为如下4步:

1)当用户访问一个JSP页面时,首先会向Servlet容器,比如:向Tomcat发出请求;

2)如果是第一次请求页面,则Servlet容器首先要把JSP页面,比如:test.jsp转化为Servlet代码,比如:test.java,再将其转化为test.class文件。

3)然后,JSP容器负责调用从JSP转换来的Servlet,这些Servlet负责提供服务相应用户请求。

比如:客户端发送表单,要求servlet:具体的表单.java来处理,则容器会建立一个线程,调用具体的表单.java来处理该请求。

如果用户有多个请求,则容器会建立多个线程处理多个请求。

4)容器执行字节码文件(具体的表单.java字节码),并将其结果返回到客户端,一般返回的方式html格式文件。

 

Servlet的生命周期

Servlet的生命周期,如下图所示:

Java Web面试题及答案(99%面试官都会问到)-mikechen

包含:

  1. 初始化init
  2. 请求;
  3. 响应;
  4. 终止;

这4个过程。

 

Session与Cookie的区别?

Session与Cookie的区别,主要体现在如下3点:

1.存储位置区别

Session存储数据在服务器端,Cookie存储在客户端。

2.数据大小区别

Session没有数据大小限制,Cookie有限制。

3.数据安全区别

Session数据安全,Cookie相对于不安全,因为存储在客户端。

 

Http长连接和短连接区别?

在HTTP/1.0中默认使用短连接,即客户端和服务器每进行一次HTTP操作,就建立一次连接。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。

如下所示:

Connection:keep-alive

从HTTP/1.1起,默认使用长连接,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

 

Struts的工作原理?

谈到Struts就不得不提到MVC设计模式,MVC即Model-View-Controller的缩写,它是web应用当中的常用的设计模式。

具体如下图所示:

Java Web面试题及答案(99%面试官都会问到)-mikechen

MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化,Struts是MVC的一种实现。

1)控制(Controller)

在Struts中ActionServlet起着一个控制器(Controller)的作用,这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点,它截取和分发这些请求到相应的动作类,这些动作类都是Action类的子类。

另外控制组件也负责用相应的请求参数填充 Action Form,通常称之为FromBean,并传给动作类:通常称之为ActionBean。

动作类实现核心商业逻辑,所有这些控制逻辑利用Struts-config.xml文件来配置。

 

2)视图(JSP)

主要是由Jsp来控制页面输出的。它接收到Action Form中的数据,利用html,taglib,bean,logic等显示数据。

 

3)模型(JavaBean)

在Struts中,主要存在三种bean,分别是:Action,ActionForm,EJB或者Java Bean。ActionForm用来封装客户请求信息,Action取得ActionForm中的数据,再由EJB或者Java Bean进行处理。

 

 

SpringMVC执行流程是什么?

Java Web面试题及答案(99%面试官都会问到)-mikechen

(1)用户发送请求发送给前端控制器

(2)前端控制器收到请求调用处理器映射器

(3)处理器映射器找到具体得处理器,生成处理器对象以及处理器拦截器并返回给前端控制器

(4)前端控制器调用处理器适配器

(5)处理器适配器经过适配调用具体得处理器

(6)处理器执行完成并返回结果给前端控制器

(7)前端控制器接受到结果,并讲结果传给视图解析器

(8)视图解析器解析后返回具体得view

(9)前端根据view进行渲染视图,并且响应用户

什么是XSS攻击?如何避免?

Java Web面试题及答案(99%面试官都会问到)-mikechen

跨站脚本(cross site script)简称为XSS,XSS是指恶意攻击者利用网站,没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码。

XSS的根源主要是没完全过滤客户端提交的数据 ,所以重点是要过滤用户提交的信息。

常见的解决方案,如下:

  1. 只允许用户输入我们期望的数据。 例如:age用户年龄只允许用户输入数字,而数字之外的字符都过滤掉;
  2. 对数据进行Html Encode 处理: 用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理;
  3. 过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, &quot for
  4. 过滤js事件的标签。例如 “onclick=”, “onfocus” 等等;

 

CSRF攻击?如何避免?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF。

XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站,与XSS攻击相比,CSRF更具危险性。

防止CSRF的解决方案,包含如下:

  1. 重要数据交互采用POST进行接收,当然是用POST也不是万能的,伪造一个form表单即可破解;
  2. 使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF;
  3. 验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链;
  4. 为每个表单添加令牌token并验证;

以上就是常见的Java Web面试题及答案,更多的Java面试题及答案,请查看:1000+Java面试题及答案详解

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读mikechen更多原创技术文章👇

阿里架构 |双11秒杀 |微服务 |云原生 |Docker |K8S |Kafka |分布式架构 |高并发架构

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法