首页 > 代码库 > Java web面试问题
Java web面试问题
*** WEB面试题***
1、javascript的typeof返回哪些数据类型
Object number function boolean underfind
2、CSS中margin和padding的区别
margin是外边距,属于元素之外,相邻元素的margin可以融合。
padding是内边距,在元素之内,相邻元素的padding不可融合。
3、JS主要数据类型?
答:主要的类型有number、string、object 以及 Boolean 类型,其他两种类型为 null 和 undefined。
4、如何显示/隐藏一个DOM元素?
更改元素的css style,设为display: none。
此外还可以将visibility设为hidden,透明度设为0,或长、宽设为0
5、列举浏览器对象模型DOM里常用的至少4个对象,并列举window对象的常用方法至
个
对象:Window document location screen history navigator
方法: Alert() confirm() prompt() open() close()
6、简述列举文档对象模型DOM里document的常用的查找访问节点的方法并做简单说明
Document.getElementById 根据元素id查找元素
Document.getElementByName 根据元素name查找元素
Document.getElementTagName 根据指定的元素名查找元素
7、什么是AJAX,为什么要使用AJAX(请谈一下你对AJAX的认识)
什么是AJAX:
AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。
Ajax
包含下列技术:
基于web标准(standards-based presentation)XHTML+CSS的表示;
使用DOM(Document Object Model)进行动态显示及交互;
使用XML 和XSLT 进行数据交换及相关操作;
使用XMLHttpRequest 进行异步数据查询、检索;
使用JavaScript 将所有的东西绑定在一起。
为什么要用AJAX:
Ajax应用程序的优势在于:
1.通过异步模式,提升了用户体验
2.优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
AJAX的优缺点
(1).AJAX的优点
<1>.无刷新更新数据。
AJAX最大优点就是能在不刷新整个页面的前提下与服务器通信维护数据。这使得Web应用程序更为迅捷地响应用户交互,并避免了在网络上发送那些没有改变的信息,减少用户等待时间,带来非常好的用户体验。
<2>.异步与服务器通信。
AJAX使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。优化了Browser和Server之间的沟通,减少不必要的数据传输、时间及降低网络上数据流量。
<3>.前端和后端负载平衡。
AJAX可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担,提升站点性能。
<4>.基于标准被广泛支持。
AJAX基于标准化的并被广泛支持的技术,不需要下载浏览器插件或者小程序,但需要客户允许JavaScript在浏览器上执行。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。
<5>.界面与应用分离。
Ajax使WEB中的界面与应用分离(也可以说是数据与呈现分离),有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率、也更加适用于现在的发布系统。
(2).AJAX的缺点
<1>.AJAX干掉了Back和History功能,即对浏览器机制的破坏。
<2>.AJAX的安全问题
<3>.对搜索引擎支持较弱
<4>.破坏程序的异常处理机制
<5>.违背URL和资源定位的初衷
<6>.AJAX不能很好支持移动设备
8、请介绍一下xmlHttpRequest对象?
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。
*** JAVA面试题***
1、 error和exception有什么区别
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
2、 Overload和Override的区别。Overloaded 的方法是否可以改变返回值的类型
答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型 。
3 、STRING与STRINGBUFFER 的区别。
答:STRING 的长度是不可变的,STRINGBUFFER 的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修 改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的 toString()方法 。
5、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有 length的属性。String有有length()这个方法
6、abstract class和interface 有什么区别( 继承与被继承,实现与被实现)
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。 Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义 static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
7、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但
前提是实体类必须有明确的构造函数
8、构造器Constructor 是否可被override
答:构造器Constructor 不能被继承,因此不能重写Overriding,但可以被重载Overloading
9、try {}里有一个return语句,那么紧跟在这个try后的 finally {}里的 code会不会被执行,什么时候被执行,在return 前还是后
答:会执行,在return前执行
10、谈谈final, finally, finalize 的区别
答:final—修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,
不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量或方法声明为 final,可以保证它们在使用中不被改变。被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话) finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都 继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
11、面向对象的特征有哪些方面
答:主要有以下三方面:
1.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
2.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
3.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽 象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
12、String是最基本的数据类型吗
答:基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用 StringBuffer 类
13、int 和 Integer 有什么区别
答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int 是 java 的原始数据类型,Integer是java 为int 提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类,
booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble。
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
14、java中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
答:字节流,字符流。字节流继承于 InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter 。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
15.名词解释:
Java 语言的软件开发工具包(SDK)。
JDK包含的基本组件包括:
javac – 编译器,将源程序转成字节码
jar – 打包工具,将相关的类文件打包成一个文件
javadoc – 文档生成器,从源码注释中提取文档
jdb – debugger,查错工具
java – 运行编译后的java程序(.class后缀的)
JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
JVM执行程序的过程 :
I.加载.class文件
II.管理并分配内存
III.执行垃圾收集
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因
16、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
17、String s = new String("xyz");创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象 。
18、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是 equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个
Set是否相等 。 equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但
前提是实体类必须有明确的构造函数
20、是否可以继承String类
答:String类是final类故不可以继承 (定义常量,定义的类不能被继承)
21、介绍JAVA 中的Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMapCollection 是最基本的集合接口,一个 Collection 代表一组 Object,即Collection的元素(Elements)
Map提供key到value的映射
22、抽象类与接口?
答:1)接口不能有构造方法,抽象类可以有
2)接口不能有方法体,抽象类可以有
3)接口不能有静态方法,抽象类可以有
4)在接口中凡是变量必须是public static final,而在抽象类中没有要求
5)接口不能有具体方法,不能有实例数据,但可以定义常量
6)抽象类不能被实例化,但可以创建抽象类的对象变量
23、运行时异常与一般异常有何异同
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中
可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
24、你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合 构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
25、java中实现多态的机制是什么?
答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
26、什么是java序列化,如何实现 java序列化?
答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现 Serializable 接口,该接口没有需要实现的方法implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流) 对象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
27、是否可以从一个static方法内部发出对非static方法的调用?
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;三.非静态内部类的非静态成员可以访问外部类的非静态变量。
答:不可以,如果其中包含对象的 method();不能保证对象初始化.
28、在JAVA中,如何跳出当前的多重嵌套循环?
答:用break; return 方法。
29、List、Map、Set三个接口,存取元素时,各有什么特点?
答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value 值,value 可多值。
30、说出一些常用的类,包,接口,请各举5 个
答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:java.lang java.awt java.io java.util java.sql 常用的接口:Remote List Map Document NodeList
31、float型float f=3.4是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4
32、java中实现多态的机制是什么?
答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现
33、编写S=”abcdefgh”的倒序输出
34、java八个基本数据类型
答:byte short int long float double Boolean char
35、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
36、除了使用new关键字创建对象意外,试列举另外两种创建实例的方式?
①new:Something somethingNew = new Something();
②clone: private Something obj; ....obj = (Something)this.clone();
值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException
③newInstance:somethingNew.getClass().newInstance()
******JSP部分面试题*******
1、forward 和redirect的区别
答:forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect 就是客户端请求,请求后服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所 有参数重新请求,所以 session,request参数都可以获取。
总结:
转发共享资源,重定向不会
转发路径不会改变,重定向会
转发是在服务器端操作,而重定向是在客户端其作用,转发一次请求一次响应,重定向是2次请求,2次响应
2、jsp有哪些内置对象?作用分别是什么?
答:JSP共有以下9 种基本内置组件(可与 ASP的6种内部组件相对应):
request 用户端请求,此请求会包含来自 GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
3、JSP中动态INCLUDE 与静态INCLUDE的区别?
答:动态INCLUDE用jsp:include 动作实现
<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数静态INCLUDE用include 伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file="included.htm" %>
4、Servlet生命周期
1.实例化 Servlet 容器创建 Servlet 的实例
2.初始化 该容器调用 init() 方法(只执行一次)
3.请求处理(服务) 如果请求 Servlet,则容器调用 service() 方法
4.服务终止(销毁) 销毁实例之前调用 destroy() 方法
5、jsp有哪些动作?作用分别是什么?
答:JSP共有以下6 种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个 JavaBean。
jsp:setProperty:设置JavaBean 的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为 Java插件生成OBJECT 或EMBED标记 、
6、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 { } }
7、什么情况下调用doGet()和doPost()?
答: Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
8、页面间对象传递的方法
答:request,session,application,cookie 等
9、Request对象的主要方法
答:
setAttribute(String name,Object):设置名字为name的 request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie对象,结果是一个 Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的 Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以 request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name 指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实
getParameterValues(String name):获得有name 指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的 IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关SessiongetServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
10、MVC的各个部分都有那些技术来实现?如何实现?
答:MVC 是 Model-View-Controller 的简写。
"Model"代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现);
"View" 是应用的表示面(由 JSP页面产生);
"Controller" 是提供应用的处理过程控制(一般是一个Servlet)。
通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
优点:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
缺点:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
缺点改进方法:
关于第一个缺点,完全可以通过系统的缓存机制来减小对性能的影响。第二个缺点,我想只能通过采用一些设计模式来得到改善吧。
11.动态增加表格
function addTable() {
/*创建一个表格对象*/
var myTable = document.createElement("table");
/*给表格添加类样式*/
myTable.className="table_solid";
/*给表格插入一行*/
var myRow = myTable.insertRow(0);
/*给行插入一个单元格*/
var myCell = myRow.insertCell(0);
/*给单元添加内容格*/
myCell.innerHTML="aaaaa";
/*获取div对象,将表格添加到div对象中*/
var mydiv = document.getElementById("mydiv");
mydiv.appendChild(myTable);
}
12.正则表达式表单验证(邮箱,手机号)
var reg = /^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;
var reg = /^1\d{10}$/;
13.Session和Cookie的区别
session是在服务器端保存用户信息,Cookie是在客户端保存用户信息
session中保存的是对象,Cookie保存的是字符串
session随会话结束而关闭,Cookie可以长期保存在客户端
Cookie通常用于保存不重要的用户信息,重要的信息使用session保存
14.JSTL标签
set:设置指定范围内的变量值
out:计算表达式并将结果输出显示
remove:删除指定范围内的变量
if:标签用于判断条件是否成,与Java中的If语句做用用相同
choose:和<c:when><c:otherwise>一起使用
15.Jsp内置对象
request对象 客户端请求,此请求会包含来自GET/POST请求的参数通过它才能了解到客户的需求,然后做出响应。
response对象 响应客户请求的有关信息
session对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个
out对象 它是JspWriter类的实例,是向客户端输出内容常用的对象
page对象 它是指向当前JSP页面本身,有点象类中的this指针,它是 java.lang.Object类的实例
application对象 它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭
exception对象 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。
pageContext对象 它提供了对JSP页面内所有的对象及名字空间的访问
config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的
******数据库部分面试题*******
1、编写sql语句 三表链接查询
用户id 用户名 帖子id 用户id 帖子标题 帖子id 回复数量
A(aid, aname) , B(bid, aid, title) C(bid, socre)
①查发贴数大于100的用户
②查发贴数量大于5的并且回复数大于100的用户
2、返回当前时间的sql
--获取当前日期(如:yyyy-mm-dd)
Select Datename(year,GetDate())+‘-‘+Datename(month,GetDate())+‘-‘+Datename(day,GetDate())
select DATENAME(YY,GETDATE()) --年份
select DATENAME(MM,GETDATE()) --月份
select DATENAME(DD,GETDATE()) --天
select dateName(hh,getdate()) --获取小时
select DATENAME(MI,GETDATE()) --获取分钟
select DATENAME(SECOND,GETDATE()) --获取秒
select DATENAME(WEEK,GETDATE()) --获取当前星期(周)是这一年中的第几个星期(周)
select DATENAME(WEEKDAY,GETDATE()) --星期几
3、表 A字段id,name, 表B 字段id ,username ,把b的username字段按两表id相等更新到name字段中,请写出sql
4、内联接,外联接查询区别?
内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接三种
5、什么叫视图?游标是什么?
答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
6、查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:
select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A
7、查询表A中存在ID重复三次以上的记录,完整的查询语句如下:
select * from(select count(ID) as count from table group by ID)T where T.count>3
8、如何只显示重复数据,或不显示重复数据
显示重复:select * from tablename group by id having count(*)>1
不显示重复:select * from tablename group by id having count(*)=1
9、写分页有哪些方法,你一般用什么方法?用SQL语句写一个分页?
如何用存储过程写分页?
在SQLSERVER中使用TOP分页,在ORACLE中用ROWNUM,或分析函数ROW_NUMBER
使用TOP:
select top 20,n.* from tablename n minus select top 10,m.* from tablename m
使用分析函数:
select * from
(select n.*,row_number() over(order by columnname) num from tablename n)
where num>=10 and num <=20;
使用过程时,只要将分页的范围用两个参数就可以实现。在ORACLE中,要将过程封装在包里,还要用动态游标变量才能实现数据集的返回。
10.具体数据库操作
一、基本的增删改查语句
(1) 数据记录筛选:
sql="select * from 表名 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 表名 where 字段名 like ‘%字段值%‘ order by 字段名 [desc]"
sql="select top 10 * from 表名 where 字段名 order by 字段名 [desc]"
sql="select * from 表名 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"
sql="select * from 表名 where 字段名 between 值1 and 值2"
SELECT * FROM table_name1 WHERE column1 LIKE ‘x%‘ //模糊查询
(2) 更新数据记录:
sql="update 表名 set 字段名=字段值 where 条件表达式"
sql="update 表名 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
(3) 删除数据记录:
sql="delete from 表名 where 条件表达式" //根据条件删除
sql="delete from 表名" //将表所有记录删除
(4) 添加数据记录:
sql="insert into 表名 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql="insert into 目标表名 select * from 源表名" (把源表名的记录添加到目标表名)
(5) 函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
例:
SELECT column1,AVG(column2)
FROM table_name
GROUP BY column1
HAVING AVG(column2) > xxx
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 表名 where 条件表达式"
set rs=conn.excute(sql)
用 rs("别名") 获取统的计值,其它函数运用同上。
二、表的建立和删除,主外键的创建
CREATE TABLE 表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 表名称 (永久性删除一个表)
1.建表
CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...)
2.修改表
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法)
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
说明:把主键的定义删除。
3.建立索引
CREATE INDEX index_name ON table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
4.删除
DROP table_name
DROP index_name
5.授权撤权
GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION] //授权REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] //撤权
6.添加主键
alter table student add constraint pk_student primary key(studentid);
7、添加外键
ALTER TABLE table_A ADD CONSTRAINT FK_name FOREIGN KEY(id) REFERENCES table_B(id);
三、数据类型DATATYPE
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数
点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。 //可考察char和varchar的区别
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
四、表的连接查询有几种:
可分为三种:内连接、外连接和交叉连接
①内连接:内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。
例:使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
②外连接:外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
例:下面使用左外连接将论坛内容和作者信息连接起来:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
例:使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
③交叉连接:交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例:titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
五、存储过程
1.创建一个存储过程,带输入参数、带输出参数
create or replace procedure proc_find_userinfo
(v_id number,v_name out varchar2)
as
Begin
select u.name into v_name
from news_user u where u.id=v_id;
end proc_find_userinfo;
declare
v_name varchar2(50);
begin
proc_find_userinfo(1, v_name);
dbms_output.put_line(v_name);
end;
六、数据库创建目录、用户、授权
/*创建目录(目录一定要存在,不然会报错)*/
create directory dump_dir as ‘e:\dump‘;
/*创建用户*/
create user tempuser identified by ok;
/*授予连接权限和开发人员权限*/
grant connect,resource to tempuser;
/*授予用户操作dump_dir的权限*/
grant read,write on directory dump_dir to tempuser;
七、创建序列
create sequence student_id_seq
start with 1
increment by 1
nomaxvalue
cache 10;
八、创建表空间
create tablespace temp_tablespace
datafile ‘temp_tablespace.dbf‘
size 100M
autoextend on;
Java web面试问题