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 = /^\[email protected]\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;

时间: 2024-10-12 03:21:42

Java web面试问题的相关文章

Java Web架构知识整理——记一次阿里面试经历

惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里的面试机会,于是就试了试. 首先是电话面试,当时正在上班,人多口杂,好不容易找了个没人的地方开始面试.面试的方向是Java Web,面试官很nice,跟朋友一样,一开始问了些比较基础的东西,比如hashmap/hashtable的区别和优缺点,我答得还行,而且对于原理的东西还算讲的比较透彻. Jav

数据库面试技巧,通过JDBC展示自己专业性,摘自java web轻量级开发面试教程

这篇文章是我之前写的博文 数据库方面的面试技巧,如何从建表方面展示自己能力 和 面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程是一个系列的,通过面试官的视角和大家分享在数据库方面的面试经验,这些内容都来摘自  java web轻量级开发面试教程. 之前的两篇文章点击量都还行,也感谢管理员放入首页,这鼓舞到了我,也让我更有信心和大家分享我的经验. 我们知道,最终我们是要通过jdbc来连接并访问数据库的,也就是说,最近面试官一定会通过JDBC方面的技能来考核候选人

(java web后端方向)如何让你的简历为你争取到更多的面试机会,内容来自java web轻量级开发面试教程

我们在做培训时,会发现一个不合理的情况,一些程序员能力不错,在公司里也是技术牛人,但发出去的简历往往会石沉大海,没有回复.对于刚毕业的大学生或工作年限在2年之内的程序员,这个情况会更严重. 这种情况下,其实不是你的能力有问题,而是简历筛选人(往往是人事或技术面试官)无法从简历上看出你很牛,或者即使能从简历上感觉到你能力很强,但会感觉到你的能力和公司的需求不匹配.不管是哪种情况,结果都一个,你甚至得不到技术面试的机会. 笔者在这里,将根据面试多个候选人(至今有100以上)的经验,来向大家展示准备简

java web轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素

场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. 场景二,某个商品表里有几百万条商品信息,同时每天会在一个时间点,往其中更新大概十万条左右的商品信息,现在用where语句查询特定商品时(比如where name = 'XXX')速度很慢.为了提升查询效率可以建索引,但当每天更新数据时,又会重建索引,这是要耗费时间的. 这时就需要综合考虑,甚至可以在更新前删除

Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试

如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即便你说有过3年商业项目数据库操作的经验,那么别人也能相信. 相反,如果一个工作经验满3年的程序员或许动手编程能力不差,但无法在交流沟通过程中证明这点,或者干脆不知道怎么证明,那么对他的评价往往可能是"数据库层面,有过商业项目的经验,但只会些基本的增删改查(顶多再加上会视图存储过程等技术),无法独立担

面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程

上星期写了一个篇文章,数据库方面的面试技巧,如何从建表方面展示自己能力,承蒙管理员抬举,放入首页,也承蒙各位厚爱,两天内收获了将近770个点击,也一度进入48小时热榜. 为了感谢管理员和大家的支持,再根据我的面试经验原创一篇关于索引方面如何推销自己的文章.这内容也来自我写的书 java web轻量级开发面试教程. 如果我们需要招个Java方面的高级程序员,一方面看年限(本科3年),具体到数据库方面的技能要求,包括如下三个方面: 第一,是否会基本的增删改查,存储过程等技能,是否会用些group b

面试时,当你有权提问时,别客气,这是个逆转的好机会(内容摘自Java Web轻量级开发面试教程)

前些天,我在博客园里写了篇文章,如何在面试中介绍自己的项目经验,收获了2千多个点击,这无疑鼓舞了我继续分享的热情,今天我来分享另外一个面试中的甚至可以帮助大家逆转的技巧,本文来是从 java web轻量级开发面试教程从摘录的. -------------------------------------------------------------------------------------------------------------------------------- 1 问题的背景

Java web轻量级开发面试教程的前言

本文来是从 java web轻量级开发面试教程从摘录的. 为什么要从诸多的Java书籍里选择这本?为什么在当前网络信息量如此大的情况下还要买这本书,而不是自己通过查阅网络资料学习?我已经会开发Java Web程序了,有没有必要买这本书? 笔者有12年的Java经验,目前是某大型公司的架构师,知道软件公司对高级程序员的实际需求:而且笔者在大公司里有过5年的技术面试经验,面试过的人数上百,所以知道毕业生和初级程序员的普遍情况.笔者更有过5年多的Java培训经验,知道如何在短时间内把有毅力.有决心,但

根据实践经验,讲述些学习Java web能少走的弯路,内容摘自java web轻量级开发面试教程

在和不少比较上进的初级程序员打交道的过程中,我们总结出了一些能帮到合格程序员尽快进阶的经验,从总体上来讲,多学.多实践不吃亏.本文来是从 java web轻量级开发面试教程从摘录的. 1  哪些知识点可以延后了解 在Java Core方面,下表中的知识点你可以不学习或者到用的时候再学习. 知识点 学习的时机 界面开发方面的知识,比如Swing等 Java主要用在Web方面,很少有项目会用到这些UI部分的知识点.大家可以等实际用到时再学习 Socket编程方面 可以先了解概念,等有项目需求时再学习