JavaWeb基础知识点之面试题

  1. jsp的静态包含和动态包含有生命区别

Ø 静态包含发生在:JSP—->java文件阶段。动态包含发生在:执行class文件阶段。动态加入。

Ø 静态包含:只生成一个java文件,动态包含:生成多个class文件。

  1. filter和servlet的区别是什么

Ø 从四个方面来区分:

Ø 概念:

Ø servlet是一种运行在服务器端的Java应用程序,独立于平台和协议,可以动态的生成web页面,它工作于客户端请求和服务器的中间层

Ø filter是一个可以复用的代码片段,可以用来转换请求,响应以及头信息,filter不能产生请求和响应,他只能在请求到达servlet之前对请求进行修改,或者在请求返回客户端之前对响应进行处理。

Ø 生命周期:

Ø servlet是在系统启动或者请求到达servlet时,通过init()方法进行初始化,一旦被装入了web服务器,一般不会从Web服务器删除,直到服务器关闭才会调用  destroy()方法进行销毁。每次请求,Request都会被初始化,响应请求后,请求被销毁。但是servlet不会随着请求的销毁而销毁

Ø 如果某个Servlet配置了 1 ,该Servlet也是在Tomcat(Servlet容器)启动时初始化。

Ø 如果Servlet没有配置1 ,该Servlet不会在Tomcat启动时初始化,而是在请求到来时初始化。

Ø filter是在系统启动的时候通过init()初始化的,每次请求都只会调用dofiter方法进行处理,服务器停止的时候调用destroy()进行销毁

Ø 注意:服务器关闭时,servlet和filter依次销毁

Ø 职责:

Ø servlet可以动态创建基于客户请求的页面;可以读取客户端发来的隐藏数据和显示数据;可以和其他的服务器资源进行通讯;通过状态代码和响应头向客户端返回数据。

Ø filter主要是对请求到达servlet之前对请求和请求头信息进行前处理,和对数据返回客户端之前进行后处理

Ø 区别:

Ø servlet的流程比较短,url来了之后就对其进行处理,处理完就返回数据或者转向另一个页面

Ø filter的流程比较长,在一个filter处理之后还可以转向另一个filter进行处理,然后再交给servlet,但是servlet处理之后不能向下传递了。

Ø filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等

  1. mysql的数据定义语句和单表操作的crud语句的基本写法

Ø 数量太多,不予展示。

这里写图片描述

29.Java 中会存在内存泄漏吗,请简单描述?

Ø 会。java导致内存泄漏的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄漏的发生场景。

Ø 1.集合类,集合类仅仅有添加元素的方法,而没有相应的删除机制,导致内存被占用。这一点其实也不明确,这个集合类如果仅仅是局部变量,根本不会造成内存泄漏,在方法栈退出后就没有引用了会被jvm正常回收。而如果这个集合类是全局性的变量(比如类中的静态属性,全局性的map等即有静态引用或final一直指向它),那么没有相应的删除机制,很可能导致集合所占用的内存只增不减,因此提供这样的删除机制或者定期清除策略非常必要。

Ø 2.单例模式。不正确使用单例模式是引起内存泄漏的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄漏。

注:此篇尚未更新完成,由于每篇只能写这么多,因此更新接下一篇,阅读地址:https://blog.csdn.net/qq_40714770/article/details/82502832

猜你喜欢

转载自blog.csdn.net/qq_40714770/article/details/82502763