0.就一句话,背多分
以下面试题都是学校从学长学姐那收集来的,整理不易,暂时分为 11 个模块,以后会陆续更新增加题目,你们有好的真实的题目也可以留言,我会加进去,大家一起加油,剑指offer
一、HTML&CSS部分
1、HTML中定义表格的宽度用80px和80%的区别是什么?
PX标识像素,%标识整个页面的宽度百分比
2、CSS样式定义优先级顺序是?
内联样式最高优先权,然后是内部样式,然后才是外部样式
3、div和span的区别?
DIV和 SPAN 元素最大的特点是默认都没有对元素内的对象进行任何格式化渲染。主要用于应用样式表(共同点)。
两者最明显的区别在于DIV是块元素,而SPAN是行内元素(也译作内嵌元素)。
详解:1.所谓块元素,是以另起一行开始渲染的元素,行内元素则不需另起一行,测试一下下面的代码你会有更形象的理解:
测试紧跟前面的"测试"显示
4、CSS选择器包括?
1)类别选择器 用“.”来标识
2)标签选择器 用HTML标签来标识
3)ID选择器 用“#”号来标识
4)通配符选择器 用“*”号来标识
5、用css3语法中,如何实现一个矩形框的圆角效果和50%红色透明效果?,请写出关键脚本
div{
width:200px;
height:200px;
border-radius: 30px;
opacity: 0.5;/*火狐 */
/* filter:alpha(opacity=50); IE */
background-color:red;
}
6、Div与Table的区别
1) div大大缩减页面代码,提高页面浏览速度,table代码量繁多,页面浏览效率慢。
2) div结构清晰,可读性非常强,也容易被搜索引擎搜索到,优化了搜索引擎,Table结构复杂,可读性差。
3)div 缩短改版时间。只要简单的修改几个CSS文件就可以改变很多页面。Table要想改变的话,需要一个页面一个页面的去修改。
4)div表现和内容相分离,非常符合w3c标准。
5)table制作效率高于div
6)table浏览器兼容性高于div,我们常用的IE6.0,IE7.0火狐Firefox浏览器对div css设置上非常挑剔。
7、行级标签转块级标签,块级标签转行级标签
行级转块级:display:block
块级转行级:float:left
二、Java基础部分
1、java中有哪些基本类型?
byte、short、int、long、float、double、char、boolean
2、java为什么能够跨平台运行?
因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。
3、String是基本数据类型吗?我可不可以写个类继承于String?
不是,Strng是引用类型;String是final的类,是不可以被继承的。
4、谈谈&和&&的区别?
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作.。
5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么?
switch里面的条件必须是能隐式的转化成为Int的故long和String不行,byte可以;使用Switch时候还应注意它的穿透,即每个case后要跟break;
6、short s1=1;s1=s1+1;有什么错?short s1 = 1;s1+=1 有什么错?
对于short s1 = 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
7、char为什么能存贮一个汉字?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了全世界所 有的字体。
9、final关键字的用法?
final用于修饰类、属性、方法
final修饰的类,不能被继承
final修饰的属性,是常量,值不可以改变
final修饰的方法,不可以被重写
10、静态变量和实例变量的区别?
静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。
11、面向对象的基本特征是什么?
1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意 与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2)继承:子类拥有父类一切非私有的属性和方法。
3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面 向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装 的对象,这些对象通过一个受保护的接口访问其他对象。
4)多态性:同一种事物的不同种表现形式。
12、作用域public,private,protected,以及不写时的区别?
作用域 当前类 同包 子孙类 其他
public√ √ √ √
protected√ √ √ ×
default√ √ × ×
private√ × × ×
不写时默认为default。
13、Overload和Override的区别。
(Overload)重载:发生在同一个类之中,方法名相同、参数列表不同,与返回值无关、与final无关、与修饰符无关、与异常无关。
(Override)重写:发生在子类和父类之间,方法名相同、参数列表相同、返回值相同、不能是final的方法、重写的方法不能有比父类方法更为严格的修饰符权限、重写的方法所抛出的异常不能比父类的更大。
如果父类私有的方法,子类拥有方法签名相同的方法,子类不属于重写父类的方法,该方法属于子类的新方法。
14、构造器可不可以被重载或重写?
构造器不能被继承,故不能被重写、但可以被重载。
15、Java中有没有多继承?
java中没有多继承,但是可以多实现,即一个类实现多个接口。
虽然没有多继承,但是java中接口可以近似的实现多继承,那就是接口;接口和接口之间可以进行多继承。
16、抽象类和接口的区别?
1)抽象类继承与object接口不继承object.
2)抽象类有构造器,接口中没有构造器。
3)抽象类中可以有普通成员变量和常量,接口中只能有常量,而且只能是public static final 不写默认。
4)抽象类中可以有抽象方法,也可以由普通的方法,接口中只能有抽象的方法而且修饰符只能是public abstract 不写默认。
5)抽象类中可以有final的方法,接口中不能有final的方法。
6)抽象类只能是单继承,多实现,接口是可以多继承其他接口,但是不能实现接口,和不能继承其他类。
7)抽象类中可以有静态的方法,接口中不可以。
17、java中实现多态的机制是什么?
重写、重载、父类的声明指向子类的对象。
19、String和StringBuffer的区别?StringBuffer和StringBuilder区别?
String是不可变的,对String类的任何改变都会返回一个新的String 对象。
StringBuffer是可变的,对StringBuffer中的内容修改都是当前这个对象。
String重写了equals方法和hashCode方法,StringBuffer没有重写equals方法。String是final的类。StringBuffer不是。
String创建的字符串是在常量池中,创建的变量初始化一次,如果再对该字符串改变会产生新的字符串地址值,StringBuffer是在堆中创建对象,当对字符串改变时不会产生新的字符串地址值,如果对字符串进行频繁修改的话建议使用StringBuffer,以节省内存。
StringBuffer和StringBuilder,StringBuffer是线程安全的,StringBulider是线程不安全的。当不考虑并发问题时候,请使用StringBulider。
21、数组中有没有length()方法,String中有没有length()方法?
数组中没有length()方法,但是有length属性,String中有length()方法
23、final, finally, finalize的区别。
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成final类型。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用
24、‘==’和equals的区别?
‘==’比较的是两个变量的内容和在内存中的地址值是否全部相等,如果要比较两个基本数据类型那必须用’==’
equals如果没有重写,则和’==’的意义一样,如果重写了,则会会按照重写的内容进行比较,javaBean规定当重写equals时候必须重写hashCode,如果不重写会出现对象相同但是hashCode不同,这样会出现问题,eg:HashSet存储元素时候是按照hashCode,如果重写equals不重写hashCode会导致同一个对象,存储了两次。
25、JAVA中Object类中有哪些常用方法?
1.getClass():获取类的class对象。
2、hashCode:获取对象的hashCode值
3、equals():比较对象是否相等,比较的是值和地址,子类可重写以自定义。
4、clone():克隆方法。
5、toString():如果没有重写,应用对象将打印的是地址值。
6、notify():随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
7、notifyall():解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
8、 wait():导致线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
9、finalize():对象回收时调用
26、heap和stack有什么区别。
java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
27、GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
28、什么是内部类?分为哪几种?
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。
29、为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。
使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
30、内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!
如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员,例如,下面的代码:
class Outer
{
static int x;
static class Inner
{
void test()
{
syso(x);
}
}
}
答题时,也要能察言观色,揣摩提问者的心思,显然人家希望你说的是静态内部类不能访问外部类的成员,但你一上来就顶牛,这不好,要先顺着人家,让人家满意,然后再说特殊情况,让人家吃惊。
31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或实现其他接口。不仅是可以,而是必须!
33、数字转字符有多少种方式,分别是什么
1)String.valueOf()
2)""+数字
3)Integer.toString()
34、Java创建对象有几种方式
1)new关键字
2)反射
3)克隆
4)反序列化
35、写出验证Email的正则表达式
public static boolean checkEmail(String email) {
if(email == null || "".equals(email)) {
return false;
}
boolean temp = email.matches("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
return temp;
}
39、说出十种常见的异常
java.lang.NullPointerException空指针异常
java.lang.ClassNotFoundException类找不到异常
java.lang.ArithmeticException 数学运算异常
java.lang.ArrayIndexOutOfBoundsException 数组下标越界
java.lang.ClassCastException类型转换异常
java.lang.NumberFormatException数字转换异常
java.sql.SQLException操作数据库异常
java.io.IOException输入输出流异常
java.io.FileNotFoundException文件找不到异常
java.lang.InstantiationError实例化异常
40什么是检查性异常和非检查性异常?
1、检查性异常和非检查性异常最主要的区别在于其处理异常的方式:检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。
2、所有的检查性异常都继承自java.lang.Exception;所有的非检查性异常都继承自java.lang.RuntimeEx ception。
3、常见的运行时异常:空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等;
常见的检查性异常:输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)等
41、Java的异常处理机制是什么?
[if !supportLists]1、 [endif]java异常包括Exception(异常)和error(错误)。她们都继承自throwable。
Error一般指JVM出现的问题,程序无法做处理。Exception是程序本身可以处理的异常,分为运行时异常和非运行时异常。
[if !supportLists]2、 [endif]非运行时异常程序必须进行处理,要么try catch块进行捕获,要么通过throws 声明抛出,否则编译不通过,也称作可检查异常。运行时异常runtimeException,一般为不可检查异常,运行时才会报的错误。程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
[if !supportLists]3、 [endif]用户自己亦可以自定义异常信息。编写自己的异常类时需要记住下面的几点。
[if !supportLists]l [endif]所有异常都必须是Throwable的子类。
[if !supportLists]l [endif]如果希望写一个检查性异常类,则需要继承Exception类。
[if !supportLists]l [endif]如果你想写一个运行时异常类,那么需要继承RuntimeException类
自己编写的异常可以更好的进行全局异常处理。
4、异常通常配合日志log4j来记录异常信息。
扩展阅读:http://blog.csdn.net/hguisu/article/details/6155636
42、一个静态方法,里面可不可以用this和super关键字
不能,因为this代表的是调用这个方法的对象的引用,super代表当前父类对象的引用,而静态方法是属于类的,不属于对象,静态优先于对象,静态方法成功加载后,对象还不一定存在。
三、JavaScript/JQuery/Ajax部分
1、用js和jQuery怎么进行表单验证
Js验证表单,可以通过document对象获取表单中输入框的内容进行验证。
jQuery验证表单:可以通过jQuery选择器获取表单中输入框的内容进行验证,
现在基于jQuery第三方验证框架非常多,也可以通过jQuery第三方验证框架进行验证。
3、列举javaScript的3种主要数据类型,2种复合数据类型和2种特殊数据类型。
主要数据类型:string, boolean, number
复合数据类型:function, object
4、谈谈你的JS的理解?
JavaScript是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。它的基本结构形式与C、C++、VB、Delphi十分类似。但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。它与HTML标识结合在一起,从而方便用户的使用操作。 2)基于对象的语言。 JavaScript是一种基于对象的语言,同时以可以看作一种面向对象的。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。 3)简单性 JavaScript的简单性主要体现在:首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计, 从而对于学习Java是一种非常好的过渡。其次它的变量类型是采用弱类型,并未使用严格的数据类型。 4)安全性 JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。 5)动态性的 JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。 6)跨平台性 JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。从而实现了“编写一次,走遍天下”的梦想。实际上JavaScript最杰出之处在于可以用很小的程序做大量的事。无须有高性能的电脑,软件仅需一个字处理软件及一浏览器,无须WEB服务器通道,通过自己的电脑即可完成所有的事情。
5、ajax的优点?
使用ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
6、简述一下ajax调试代码查找错误的方法?
这是js调试代码存在已久的问题,简单的我们可以使用浏览器提供的错误提示框,还有可以使用DW CS4提供的纠正错误,或者通过专业的插件,如firebug等
7、简述ajax中Js脚本缓存问题该如何解决?
这个问题是大家遇到最常见的问题之一,因为修改了js内容调试的时候并不能显示新写代码的结果,是因为Js为了加速页面执行,当前页面会使用缓存保持当前调用的相同的连接,为了开发时调试方便可以在连接地址后面增加一个随机函数.
[if !supportLists]8、 [endif]同步和异步怎么理解?分别在什么情况下使用。
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
当我们需要获取的内容只占整个页面很小一部分时,或者需要不刷新整个页面的情况下更新一些数据时,可以考虑使用异步请求去做。
9、java后台如何接收ajax数据?
1、可以通过request. getParameter(“”)获取,
2、如果传递的是json对象的话,则需要在js中将json对象通过转换为String,再传递。后台用request. getParameter(“”)接收后再转换为jsonObject。
3、如果使用的是struts2或者springmvc 可以直接用对象来接收。框架会根据你的json数据自动封装到对于的对象中。
10、为什么要有jquery?
1)jQuery是JavaScript的轻量级框架,对JavaScript进行了很好的封装,很多复杂的JavaScript代码不用写了,直接调用就可以,使开发简单、高效。
2)jQuery强大的选择器封装了DOM,操作网页元素更简单了。
3)在大型JavaScript框架中,jQuery对性能的理解最好,大小不超过30KB。
4)完善的ajax有着出色的浏览器兼容性,任何浏览器使用ajax都能兼容。
5)基于jQuery开发的插件目前已经有大约数千个。开发者可使用插件来进行表单确认、图表种类、字段提示、动画、进度条等任务。
11、jQuery选择器有多少种?
基本:
$("#myELement")ID选择器 $("div") 标签选择器$(".myClass") 类选择器$("*") 通配符选择器
层级选择器
过滤选择器
子元素选择器
13、你是如何使用jquery中的ajax的?
如果是常规的ajax程序的话,使用load()、$.get()、$.post(),一般我会使用的是$.post()方法,如果需要设定,beforeSend(提交前回调函数),error(失败后处理),success(成功后处理),及complete(请求完成后处理)毁掉函数等,这个时候我会使用$.ajax()
14、jquery中的$.get和$.post请求区别?
1)$.get方法使用get方法来进行一步请求,$.post是使用post方法来进行请求。
2)get请求会讲参数跟在url后进行传递,而post请求则是作为Http消息的实体.内容发送给web服务器的,这种传递是对用户不可见的。
3)get方式传输的数据大小不能超过2kb而post请求要大的多
4)get方式请求的数据会被浏览器缓存起来,因此有安全问题
15、jquery中如何操作样式的?
addClass()来追加样式,removeClass()来删除样式,toggle()来切换样式。
16、如何设置和获取HTML和文本的值?
Html()方法,类似于innerHTML属性,可以用来读取或者设置某个元素中的HTML内容,text()类似于innerText属性,可以用来读取或这是某个元素的文本内容,val()可以用来设置和获取元素的值。
17、Jquery能做些什么?
1)获取页面元素
2)修改页面的外观
3)修改页面的内容
4)响应页面的操作
5)为页面添加动态效果
6)无需刷新页面,即可从服务器获取信息
7)简化常见的javascript的任务
18、在ajax中data主要有哪几种?
html拼接、json数组、form表单经过serialize()序列化的
19、jQuery中ajax由几部分组成?
1)请求url
2)请求参数
3)请求类型,get或post
4)回调函数
5)传输类型,html或json等
20、js和jQuery获取value值得区别
Js获取输入框的value值:
var value = document.getElementById(“输入框ID属性”).value;
jQuery获取输入框的value值:
var value = $(“input”).val();
var value = $(“input”).attr(“value”);
四、jsp/servlet部分
1、Tomcat的优化经验
1、内存优化
Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。
JAVA_OPTS参数说明
-server 启用jdk 的 server 版;
-Xms java虚拟机初始化时的最小内存;
-Xmx java虚拟机可使用的最大内存;
-XX: PermSize 内存永久保留区域
-XX:MaxPermSize 内存最大永久保留区域
服务器参数配置:
现公司服务器内存一般都可以加到最大2G ,所以可以采取以下配置:
JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
2、并发优化
配置tomcat安装目录下的configs/server.xml,调整连接器connector的并发处理能力
1) [endif]配置示例
protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000" minProcessors="100" maxProcessors="1000" enableLookups="false" URIEncoding="utf-8" acceptCount="1000" redirectPort="8443" disableUploadTimeout="true"/> 2)参数说明 maxThreads 客户请求最大线程数 minSpareThreads Tomcat初始化时创建的 socket 线程数 maxSpareThreads Tomcat连接器的最大空闲 socket 线程数 enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名 redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口 acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads ) connectionTimeout 连接超时 minProcessors 服务器创建时的最小处理线程数 maxProcessors 服务器同时最大处理线程数 URIEncoding URL统一编码 3、缓存优化 1)参数说明 c ompression 打开压缩功能 compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB compressableMimeType 压缩类型 connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间 [if !supportLists]2) [endif]Tomcat中的配置示例 protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000" minProcessors="100" maxProcessors="1000" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" connectionTimeout="20000" URIEncoding="utf-8" acceptCount="1000" redirectPort="8443" disableUploadTimeout="true"/> 2、Tomcat根目录下有哪些文件 1)config 配置文件存放的路径 2)webapps 项目部署的目录 3)bin tomcat运行需要的脚本与jar包的目录 4)lib 运行项目时所需要的jar包的目录 5)work 部署项目的缓存目录 6)temp 临时文件存放的目录 7)logs 记录日志的目录 3、什么是TOMCAT,怎样启动停止,配置文件,日志文件的存储。 tomcat其实是一种web服务器,java编写的web项目可以部署在其上,用户在客户端请求时,都是先将请求发送到tomcat上,tomcat再将请求发送到对应的项目上。 启动tomcat 在Windows下:进入bin目录,双击startup.bat 在Linux下:cd进入bin目录,sh startup.sh 在开发工具eclipse中,右键选择Debug Server或者Run Server 停止tomcat 在Windows下:进入bin目录,双击shutdown.bat 在Linux下:cd进入bin目录,sh shutdown.sh 在开发工具eclipse中,选择服务器stop Server 配置文件在tomcat的config文件夹下 日志文件在logs文件夹下 4、解释一下什么是servlet;什么是servlet容器; 在web容器中运行的服务器端java程序,主要用于响应HTTP请求。Servlet一般用于mvc中的控制器部分。 用来管理servlet生命周期的应用程序如(tomcat webloc等) 5、说一说Servlet的生命周期,执行过程? Servlet生命周期分为实例化、初始化、响应请求调用service()方法、消亡阶段调用destroy()方法。 执行过程如下: 1)当浏览器发送一个请求地址,tomcat会接收这个请求 2)tomcat会读取项目中的web.xml中的配置 3)当请求地址符合servlet-mapping标签映射的地址,会进入这个servlet 4)servlet首先会实例化(构造),然后初始化执行init()方法,init()方法至始至终执行一次,servlet对象是单实例 5)根据请求的方式是get或post,在service()方法中调用doget()或dopost()方法,完成此次请求 6)当服务器停止,会调用destroy()方法,销毁实例 6、实例化servlet有几种方式 Servlet实例化有两种,如下: 1)第一次请求时,实例化servlet对象 2)在web.XML文件中的 7、谈谈你对http协议的理解 http是超文本传输协议(Hyper Text Transfer Protocol),是用于从WWW服务器传输超文本到本地浏览器的传送协议。 HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。大多承载于TCP协议之上。 工作流程: 一次HTTP操作称为一个事务,其工作过程可分为四步: 1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。 2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。 3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。 4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。 如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。 8、HTTP请求的GET与POST方式的区别 Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下: 1)Get是用来从服务器上获得数据,而Post是用来向服务器上传数据; 2)Get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL; 3)Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的; 4)Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post; 5)Get限制Form表单的数据集必须为ASCII字符,而Post支持整个ISO10646字符集; 6)Get是Form的默认方法。 9、forward 和redirect的区别? forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 总结:forward是程序内部跳转,不会跳出tomcat服务器,redirect可以外部跳转,从一个服务器跳转到另一个服务器。 10、servlet中怎么定义forward 和redirect 转发:request.getRequestDispatcher (“demo.jsp"). forward(request, response); 重定向:response.sendRedirect(“demo.jsp"); 11、过滤器有哪些作用? 可以验证客户是否来自可信的网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置的信息,可以过滤掉客户的某些不应该出现的词汇,可以验证用户是否登录,可以验证客户的浏览器是否支持当前的应用,可以记录系统的日志等等。 12、JSP的常用指令? <%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%> isErrorPage:是否能使用Exception对象;isELIgnored:是否忽略EL表达式; <%@include file=”filename”%> <%@taglib prefix=”c”uri=”http://……”%> 13、JSP和Servlet中的请求转发分别如何实现? JSP中的请求转发可利用forward动作实现: Serlvet中实现请求转发的方式为: getServletContext().getRequestDispatcher(path).forward(req,res)。 14、JSP乱码如何解决? 1)JSP页面乱码 <%@ page contentType=”text/html ; charset=utf-8”%> 2)表单提交中文时出现乱码 request.setCharacterEncoding(“utf-8”); 3)数据库连接出现乱码 是数据库连接中加入useUnicode=true&characterEncoding=utf-8; 15、session 和 application的区别? 1)两者的作用范围不同: Session对象是用户级的,而Application是应用程序级别的 一个用户一个session对象,每个用户的session对象不同,在用户所访问的网站多个页面之间共享同一个session对象 一个Web应用程序一个application对象,每个Web应用程序的application对象不同,但一个Web应用程序的多个用户之间共享同一个application对象。 两者的生命周期不同: session对象的生命周期:用户首次访问网站创建,用户离开该网站 (不一定要关闭浏览器) 消亡。也可以在web.xml中设置session的过期时间。当超出过期时间后亦会消亡。 application对象的生命周期:启动Web服务器创建,关闭Web服务器销毁。 16、jsp有哪些内置对象?作用分别是什么? JSP共有以下9种基本内置组件 request:用户端请求,此请求会包含来自GET/POST请求的参数; response:网页传回用户端的回应; pageContext:网页的属性是在这里管理; session:与请求有关的会话期; application:servlet正在执行的内容; out:用来传送回应的输出; config:servlet的构架部件; page:JSP网页本身; exception:针对错误网页,未捕捉的例外 17、Jsp有哪些动作?作用分别是什么? JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记 18、JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:include动作实现, 静态INCLUDE用include伪码实现,使用jsp指令引用<%@ include file=included.htm %>,不会检查所含文件的变化,适用于包含静态页面,先将内容先包含到主页面然后在一起编译,只编译一次。 19、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 20、页面传递对象的方法? request、session、application、cookie等 21、Cookied和session区别? 1)cookie数据存放在客户的浏览器上,session数据放在服务器上。 2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。 3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。 4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。 22、Filter的生命周期与执行过程 生命周期如下: 1、执行构造方法,实例化 2、执行init方法,初始化 3、执行doFilter方法,过滤用户请求 4、当tomcat关闭时,执行destroy方法,进行销毁 构造方法与init方法在tomcat启动时就执行,至始至终只执行一次, filter对象是单实例 执行过程如下: 1、浏览器发送一个请求,会到达tomcat 2、tomcat会根据项目中的web.xml中的Filter过滤路径配置,过滤请求 3、过滤到用户请求会进入Filter类中的doFilter方法 4、在doFilter方法中实现业务逻辑,最后调用doFilter(request, response) 传递用户请求 5、到达用户请求的页面 23、Tomcat系统内存怎么配置 Windows 在tomcat的bin/catalina.bat最前面加入set JAVA_OPTS=-Xms128m -Xmx350m Linux: 在tomcat目录下的bin/catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m' -Xms:初始值-Xmx:最大值-Xmn:最小值 24、JSTL标签库包含哪些? 1、核心库(逻辑库) 用于页面上业务逻辑处理 2、函数库 利用jstl内置函数,获取结果 3、格式化库 格式化时间、格式化数字 4、SQL库(几乎不用) 操作数据库