Java常见面试题

1. 请列举过滤器常用的应用?

1)可以验证客户是否来自可信的网络

     2)可以对客户提交的数据进行重新编码

     3)可以从系统里获得配置的信息

     4)可以过滤掉客户某些不应该出现的词汇

     5)验证客户是否登录

     6)验证客户的浏览器是否支持当前的应用

    7)可以记录系统的日志

2、实例化servlet有几种方式

有两种方式:

1)第一次请求时,实例化servlet对象

2)在web.xml文件中,在servlet标签中添加loadon-startup标签,tomcat启动时就会实例化servlet对象

3、你在项目中用到了XML技术的哪些方面?如何实现的?

用到了数据存储、信息配置两方面。

1)在做数据交换平台时,可以将数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接受者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。

2)在做软件配置时,可以将软件的各种配置参数都存储在XML文件中

4、Vector,ArrayList, LinkedList的区别是什么?

1)Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的

形式进行存储。

2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有

重复元素。

3、Vector线程同步,ArrayList、LinkedList线程不同步。

4、LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、

Vector适合查找,不适合指定位置的插入、删除操作。

5、ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector

则是100%,因此ArrayList更节省空间。

5、请简述Servlet的生命周期

  大致分为4部:Servlet类加载-->实例化-->服务-->销毁       

1、Web Client向Servlet容器(Tomcat)发出Http请求。

2、Servlet容器接收Client端的请求。

3、Servlet容器创建一个HttpRequest对象,将Client的请求信息封装到这个对象中。

4、Servlet创建一个HttpResponse对象。

5、Servlet调用HttpServlet对象的service方法,把HttpRequest对象和HttpResponse对象作为参数传递给HttpServlet对象中。

6、HttpServlet调用HttpRequest对象的方法,获取Http请求,并进行相应处理。

7、处理完成HttpServlet调用HttpResponse对象的方法,返回响应数据。

8、Servlet容器把HttpServlet的响应结果传回客户端。

       其中的3个方法说明了Servlet的生命周期:

1、init():负责初始化Servlet对象。

2、service():负责响应客户端请求。

3、destroy():当Servlet对象推出时,负责释放占用资源

6、访问修饰符 public、private、protected、default 在应用设计中的作用

 

同一个类

同一个包

不同包的子类

不同包的非子类

private

            √

 

 

 

default

            √

                √

 

 

protected

            √

                √

                    √

 

public

            √

                √

                    √

                            √

7、java中实现多态的机制是什么

重写和重载

方法的重写Overriding和重载Overloading是Java多态性的不同表现。

1)重写Overriding是父类与子类之间多态性的一种表现,如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

2)重载Overloading是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

8、请描述Cookie和Session的作用,区别和各自的应用范围

Session:

1)        Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 

2)        它的生存期是用户持续请求时间再加上一段时间(一般是30分钟左右)。

3)        Session中的信息保存在Web服务器内容中,当 Session超时或被关闭时将自动释放保存的数据信息。由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低。对于小量的数据,使用Session对象保存还是一个不错的选择

Cookie:

1)  Cookie 用于保存客户浏览器请求服务器页面的请求信息

2)  程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置。如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止。如果将Cookie对象的Expires属性设置为Maxvalue,则表示Cookie永远不会过期。

3)  Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.

4)  由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性

9、请列举JSP的内置对象及方法

1) request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header数据的有用方法。 

2) response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) 

3) out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 

4) pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 

5) session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存储单个用户的状态信息

6) applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 

7) config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 

8) page表示从该页面产生的一个servlet实例

10、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入 
1) 使用PreparedStatement可以提升代码的可读性和可维护性,可以尽最大可能提高性

能。因为Statement每次执行一个SQL命令都会对其编译,但PreparedStatement

则只编译一次。

2) 另一方面PreparedStatement可以极大提高安全性:它对传递过来的参数进行了强制

参数类型转换,确保插入或查询数据时,与底层数据库格式匹配。 
3) SQL注入:就是通过将sql命令插入到web表单提交或输入域名或页面请求的查询字

符串,最终达到欺骗服务器执行恶意SQL命令。如sql命令:select id fromtest where name=’1’ or 1=1; drop table test,使用PreparedStatement就可以避免这种问题

11、JSP中的四种作用域

JSP中的四种作用域包括page、request、session和application,具体来说:
1) page代表与一个页面相关的对象和属性。

 2 )request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。

3) session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。

4) application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域

12、JSP中动态include和静态include的区别?

1)静态include:语法:<%@ includefile="文件名"%>,相当于复制,编译时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。

 2)动态include:语法:<jsp:includepage="文件名">,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。

13、Collection 和 Collections的区别?

1) Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
    2) Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的

搜索、排序、线程安全化等操作

14、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

1) JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的视图表达。JSP编译后是"类servlet"。

2)Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

3)JSP侧重于视图,Servlet主要用于控制逻辑

15、网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办?

session默认保存在内存中,内存资源宝贵,session数据量大导致内存利用率高,以下方案解决session内存存储问题:

1)可以设置session超时时间,达到超时时间session自动清空
   <session-config>

<session-timeout>20</session-timeout>

</session-config>  

2)将session中的数据序列化到硬盘中

3)不使用session,使用cookie(此方法存在安全性问题)