**
Java面试宝典
**
一、 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%红色透明效果?,请写出关键脚本
<style>
div{
width:200px;
height:200px;
border-radius: 30px;
opacity: 0.5;/* 火狐 */
/* filter:alpha(opacity=50); IE */
background-color:red;
}
</style>
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
块级转行级:display:inline
二、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编码字符集中包含了全世界所 有的字体。
8、用最效率的办法算出2乘以8等于几?
2<<3 位移运算是最底层的运算,他直接操作的是二进制,故效率最快。
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中实现多态的机制是什么?
重写、重载、父类的声明指向子类的对象。
18、int和integer的区别?
int是java的基本数据类型,integer是1.4版本后提供的基本类型包装类,当两者作为成员变量时,初始值分别为;int是0;integer是null;其中integer提供了一些对整数操作的方法,还定义了integer型数值的最值,其他基本类型也有对应的包装类,基本类型包装类的出现,使得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。
20、String s=new String(“xyz”);创建了几个String Object?
两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。
21、数组中有没有length()方法,String中有没有length()方法?
数组中没有length()方法,但是有length属性,String中有length()方法
22、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
这道题很有争议,我是通过debug模式分为两种情况进行测试的.
1)finally中没有return时候:
会先执行try里面的,return会执行但是没有真正的return此时去执行了finally里面的,然后再返回来执行return.
2)finally中有return时候(其实这种情况不符合编程规范,会报黄线警告):
会先执行try里面的,return会执行但是没有真正的return此时去执行了finally里面的,然后执行finally里面的return,直接返回。
23、final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成final类型。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用
24、‘==’和equals的区别?
1、 基本数据类型:两个基本数据类型变量比较只能用==,比较的是值
2、 引用类型:== 比较的是指针,equals没有重写与==没有区别,重写了equals方法比较的是两个对象的内容,在javaBean规定当重写equals时候必须重写hashCode,两个对象的equals相等,hashCode也必须相等,如果不相等就会造成相同的对象在HashSet存储中存储两次
25、error和exception有什么区别?
error表示恢复不是不可能但是很困难的情况下的一种严重问题,例如内存溢出,虚拟机错误等,exception是一种设计和实现问题,如果程序运行正常,从不会发生的情况。error是可以避免的,exception是不可避免的。
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() {
System.out.println(x);
}
}
}
答题时,也要能察言观色,揣摩提问者的心思,显然人家希望你说的是静态内部类不能访问外部类的成员,但你一上来就顶牛,这不好,要先顺着人家,让人家满意,然后再说特殊情况,让人家吃惊。
31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或实现其他接口。不仅是可以,而是必须!
32、使用java命令查看java虚拟机版本
java –version
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;
}
36、空指针异常是怎样的?怎么解决
空指针异常会抛出: java.lang.NullPointerException
解决方法:判断使用对象是否为null
if(obj != null) {
}
37、Asp与Java有什么不一样?
1、ASP是微软公司从自有技术发展出来的,一般仅能用于Windows平台,并总是作为微软Internet Information Server的强有力的基本特性出现,其开放性较差。
Java是Sun公司推出具有夸平台性的开发语言,能在Windows平台于Linux平台运行,开发简便、安全性极高,java所有源码都是开放的。
2、用java开发业务教复杂的程序,相对来说要轻松一些,java有丰富的开源框架和套现设计模式。
ASP只有.net框架,与java开源框架如:spring、Struts、hibernate、mybatis等比较会差一些。
3、java使用oracle数据库,都能夸平台,一般高端机都运行在Linux或Unix下,注定oracle是大型数据库。
ASP使用SQL Server数据库,运行在Windows平台下,而Windows能够安装的硬件是有限的,SQL Server数据库只能是中型数据库。
4、java运行需要JVM翻译,所以java执行效率没有.net高
综述,.net适合做网站,中型的!java适合做后台,企业系统,大型网站!
38、面向对象与面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。
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、一个静态方法,里面可不可以用this和super关键字
不能,因为this代表的是调用这个方法的对象的引用,super代表当前父类对象的引用,而静态方法是属于类的,不属于对象,静态优先于对象,静态方法成功加载后,对象还不一定存在。
三、JavaScript/JQuery/Ajax部分
1、用js和jQuery怎么进行表单验证
Js验证表单,可以通过document对象获取表单中输入框的内容进行验证。
jQuery验证表单:可以通过jQuery选择器获取表单中输入框的内容进行验证,
现在基于jQuery第三方验证框架非常多,也可以通过jQuery第三方验证框架进行验证。
2、Java和Javascript区别在哪?
Java与JavaScript是目前比较流行的两种语言,单从表面上看,两者名称很相似,于是许多初学者容易将二者混淆,或者直接归为一类,其实不然,虽然两者有着紧密的联系,但确是两个完全不同的语言。接下来,笔者仅就她们的几个主要差别归纳起来。
一.开发厂商
众所周知,Java是SUN公司推出的程序设计语言,特别适合于Internet应用程序开发,其前身是Oak语言,而JavaScript则是NetScape公司的产品,是为了扩展NetScape Navigator功能而开发的一种可嵌入Web页面中的解释性语言,其前身是Live Script。由于Java的普及,NetScape和SUN两家公司签订合同后才将其命名为JavaScript。
二.面向对象与基于对象
Java是一种真正的纯面向对象编程语言,在Java中,一切都是对象;JavaScript是一种脚本语言,由于她本身提供了非常丰富的内部对象供程序员使用,因而它是基于对象的语言。
三.开发和运行环境的不同
若希望利用Java编写程序并使之运行,必须事先在系统内安装相应版本的JDK和JVM,保证代码能够得到编译和运行的环境;而编写JavaScript则相对简单,只需使用某种HTML文档编辑器甚至某种字符编辑器(如Notepad)即可,然后打开浏览器即可运行。
四.变量的区别
Java中使用变量在编译之前必须声明其数据类型,因而她采用的是强类型变量;JavaScript则不用在变量前声明类型,而是由解释器在运行时自动检查,所以她是弱类型变量。
五.标签的不同
利用Java写出的Applet小程序,在HTML中用……来标识;JavaScript程序在HTML中运行,其代码在标签内。
六.解释与编译
Java源代码在执行前被编译,因而在网络应用中,必须要求客户端安装有解释平台,也就意味着Java应用不与HTML文档集成(Applet小程序例外);JavaScript是一种解释性语言,其代码在发往客户端之前不需编译,而是将其嵌入到HTML文档中,一起发送给客户端,由浏览器解释执行。
另外,JavaScript仅是一种解释性语言,并没有复杂的语法和规则,更不支持如Java里的继承这样的性质,因此也比Java更加容易学习。
3、列举javaScript的3种主要数据类型,2种复合数据类型和2种特殊数据类型。
主要数据类型:string, boolean, number
复合数据类型:function, object
特殊数据类型: Null 空对象 Undefined 未定义
4、谈谈你的JS的理解?
JavaScript是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。它的基本结构形式与C、C++、VB、Delphi十分类似。但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。它与HTML标识结合在一起,从而方便用户的使用操作。
1)基于对象的语言。
JavaScript是一种基于对象的语言,同时以可以看作一种面向对象的。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。 2)简单性
JavaScript的简单性主要体现在:首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计, 从而对于学习Java是一种非常好的过渡。其次它的变量类型是采用弱类型,并未使用严格的数据类型。
3)安全性
JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。
4)动态性的
JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。
5)跨平台性
JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。从而实现了“编写一次,走遍天下”的梦想。实际上JavaScript最杰出之处在于可以用很小的程序做大量的事。无须有高性能的电脑,软件仅需一个字处理软件及一浏览器,无须WEB服务器通道,通过自己的电脑即可完成所有的事情。
5、ajax的优点?
使用ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
6、简述一下ajax调试代码查找错误的方法?
这是js调试代码存在已久的问题,简单的我们可以使用浏览器提供的错误提示框,还有可以使用DW CS4提供的纠正错误,或者通过专业的插件,如firebug等
7、简述ajax中Js脚本缓存问题该如何解决?
这个问题是大家遇到最常见的问题之一,因为修改了js内容调试的时候并不能显示新写代码的结果,是因为Js为了加速页面执行,当前页面会使用缓存保持当前调用的相同的连接,为了开发时调试方便可以在连接地址后面增加一个随机函数.
8、Ajax应用和传统的web应用有何不同?
在传统的javascript中,如果想得到服务器端数据库或文件上的信息,或者发送客户端信息到服务器,需要建立一个HTML form然后Post或者get提交数据到服务端。用户需要点击submit 来发送或者接受数据信息,然后等待服务器响应请求,页面重写加载,因为服务器每次都要返回一个新的页面,所以传统的web应用有可能会很慢而且用户交互不友好。
使用ajax就可以使javascript通过XMLHttpRequest对象直接与服务器进行交互。通过HTTPRequest,一个web页面可以发送一个请求道web服务器并且接受web服务器返回的信息(不需要加载任何界面),展示给用户的还是同一个页面,用户感觉不到页面刷新,也看不到Javascript后台进行的发送请求和接受的响应。
9、javascript的作用?
表单验证、网页特效、网页游戏
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") 类选择器
$("*") 通配符选择器
层级选择器
过滤选择器
子元素选择器
12、jquery选择器有哪些优势?
简单的写法(‘#id’)用来代替document.getElementById()。
支持css选择器。
完善的处理机制,就算写错了Id也不会报错。
13、你是如何使用jquery中的ajax的?
如果是常规的ajax程序的话,使用load()、 . g e t ( ) 、 .get()、 .get()、.post(),一般我会使用的是 . p o s t ( ) 方 法 , 如 果 需 要 设 定 , b e f o r e S e n d ( 提 交 前 回 调 函 数 ) , e r r o r ( 失 败 后 处 理 ) , s u c c e s s ( 成 功 后 处 理 ) , 及 c o m p l e t e ( 请 求 完 成 后 处 理 ) 毁 掉 函 数 等 , 这 个 时 候 我 会 使 用 .post()方法,如果需要设定,beforeSend(提交前回调函数),error(失败后处理),success(成功后处理),及complete(请求完成后处理)毁掉函数等,这个时候我会使用 .post()方法,如果需要设定,beforeSend(提交前回调函数),error(失败后处理),success(成功后处理),及complete(请求完成后处理)毁掉函数等,这个时候我会使用.ajax()
14、jquery中的 . g e t 和 .get和 .get和.post请求区别?
1) . g e t 方 法 使 用 g e t 方 法 来 进 行 一 步 请 求 , .get方法使用get方法来进行一步请求, .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的优化经验
去掉对web.xml的监视,把jsp提前编辑成Servlet。
有富余物理内存的情况,加大tomcat使用的jvm的内存
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文件中的之间添加1,tomcat启动时就会实例化servlet对象
7、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的默认方法。
8、请写一个Servlet的基本架构。
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
}
}
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动作实现:<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对象的生命周期:用户首次访问网站创建,用户离开该网站 (不一定要关闭浏览器) 消亡。
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动作实现,<jsp:include page=included.jsp flush=true />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 ,先将嵌入的jsp页面编译,然后把编译后的内容放入到主页面进行处理,编译两次。
静态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、Cookie和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库(几乎不用) 操作数据库
五、数据库部分
1、触发器的作用?
触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
2、什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
调用:
1)可以用一个命令对象来调用存储过程。
2)可以供外部程序调用,比如:java程序。
3、存储过程的优缺点?
优点:
1)存储过程是预编译过的,执行效率高。
2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。
3)安全性高,执行存储过程需要有一定权限的用户。
4)存储过程可以重复使用,可减少数据库开发人员的工作量。
缺点:移植性差
4、存储过程与函数的区别
存储过程 | 函数 |
---|---|
用于在数据库中完成特定的操作或者任务(如插入、删除等) | 用于特定的数据(如选择) |
程序头部声明用procedure | 程序头部声明用function |
程序头部声明时不需描述返回类型 | 程序头 |