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(此方法存在安全性问题)