一:面向对象的特征有哪些方面
1. 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2. 继承:继承是一种联结类的层次模型,并且才允的许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3. 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
二:int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
break 和continue的区别:
break:跳出循环,不再执行剩余部分。
continue:停止当次循环,回到循环起始处,进入下一次循环操作。continue语句之后的语句将不在执行。
三:说出ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
四:HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
五:Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
六:abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体
在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
七:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型,这样子才可以正确的编译) short s1 = 1; s1 += 1;(可以正确编译)1例 使用简单赋值运算, 2例 使用复合赋值运算,而简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算结果转型为其左操作数的类型! 这就是1例编译不通过,2例编译却能通过的原因.
八:Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor.
九:String s = newString("xyz");创建了几个String Object?
两个一个是”xyz”,一个是s对”xyz”的引用
十:接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。
十一:数组有没有length()这个方法? String有没有length()这个方法?数组没有length()这个方法,有length的属性。String有length()这个方法
十二:请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
十三:你所知道的集合类都有哪些?主要方法?
最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。
十四:char型变量中能不能存贮一个中文汉字?为什么?
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
可能的解释为一个中文占16位,两个字节
十五:覆盖和重载OverLoad与override的区别
首先从概念上,
重载Overload:表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
覆盖Override:表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
其次,一般的方法签名的格式如下,
方法签名:①访问权限+②返回值的类型+③方法名+④参数列表+⑤抛出的异常
具体的区别如下,
重载(overload) 发生场所:同一个类里,或者子类中 重载的两个方法之间的限制: 1.③方法名必须相同 2.④参数列表必须不同(参数的个数,类型,顺序) 3.①访问权限,②返回值的类型,⑤抛出的异常(类型,数目)都与重载无关 4.对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
覆盖(override) 发生场所:对接口方法的实现,或者在继承中子类覆盖父类的方法 覆盖的两个方法之间的限制: 1.③方法名必须相同 2.④参数列表也必须相同(参数的个数,类型,顺序) 3.②返回值的类型必须相同 4.覆盖的方法所抛出的异常 比被覆盖方法的所抛出的异常更少,或者一致,或者是其子类 5.子类方法的访问权限只能比父类的更大,不能更小。 6.被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
针对上面的比较,为了更清晰一些,列出以下表格
发生场所 |
①访问权限 |
②返回值类型 |
③方法名 |
④参数列表 |
⑤抛出的异常 |
|
重载(overload) |
同一个类里,或者子类中 |
与重载无关 ※1 |
与重载无关 |
必须相同 |
必须不同 |
与重载无关 |
覆盖(override) |
对接口方法的实现,或者在继承中子类覆盖父类的方法 |
只能比父类的更大,不能更小 ※2 |
必须相同 |
必须相同 |
必须相同 |
抛出的异常更少,或者一致,或者是其子类 |
※1:对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
※2:被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
覆盖:覆盖一个方法并对其重写,以求达到不同的做用!覆盖要注意一下几点:
1) 覆盖的方法标识必须要和被覆盖的方法标志完全匹配!
2) 覆盖方法的返回值必须和被覆盖方法的返回值一致!
3) 覆盖方法所抛得异常必须和被覆盖方法所抛得异常一致或者是其子类!
4) 被覆盖的方法不能为private,否则其子类只是定义了一个方法,并没有对其覆盖!
重写:定义一些名称相同的方法,通过传入参数的不同来区分这些方法,再调用 时,会根据不同的参数样式来选择合适的方法执行!重载要注意一下几点:
1)在使用重载时只能通过不同的参数样式,如:不同参数类型、不同参数个数、 不同参数顺序!
2)不能通过访问权限、返回类型、抛出异常来进行重载!
3)方法的异常类型和数目不会对重载构成影响!
4)对于继承来说,如果父类方法访问权限为private,那么就不能再子类对其重载,如果定义的话也只是定义一个新方法,而不会达到重载的效果
JAVA中String与StringBuffer的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结。
在java中有3个类来负责字符的操作。
1.Character是进行单个字符操作的,
2.String对一串字符进行操作。不可变类。
3.StringBuffer也是对一串字符进行操作,但是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
Stringstr = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
看看以下代码:
将26个英文字母重复加了5000次,
1. String tempstr ="abcdefghijklmnopqrstuvwxyz";
2. int times =5000;
3. long lstart1 =System.currentTimeMillis();
4. String str ="";
5. for (int i =0; i 6. str += tempstr; 7. } 8. long lend1 =System.currentTimeMillis(); 9. long time = (lend1 -lstart1); 10. System.out.println(time); 可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。 1. String tempstr ="abcdefghijklmnopqrstuvwxyz"; 2. int times =5000; 3. long lstart2 =System.currentTimeMillis(); 4. StringBuffer sb = newStringBuffer(); 5. for (int i =0; i 6. sb.append(tempstr); 7. } 8. long lend2 =System.currentTimeMillis(); 9. long time2 = (lend2 -lstart2); 10. System.out.println(time2); 得到的结果为16 有时还是 0 根据上面所说: str+= "here"; 所以str+= "here";可以等同于 StringBuffersb = new StringBuffer(str); sb.append("here"); str= sb.toString(); 所以上面直接利用"+"来连接String的代码可以基本等同于以下代码 1. String tempstr ="abcdefghijklmnopqrstuvwxyz"; 2. int times =5000; 3. long lstart2 =System.currentTimeMillis(); 4. String str =""; 5. for (int i =0; i 6. StringBuffer sb = newStringBuffer(str); 7. sb.append(tempstr); 8. str = sb.toString(); 9. } 10. long lend2 =System.currentTimeMillis(); 11. long time2 = (lend2 -lstart2); 12. System.out.println(time2); 十七:String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 十八:运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 十九:说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 二十:EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括SessionBean、Entity Bean、Message DrivenBean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。 EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless SessionBean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 StatelessSession Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless SessionBean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 二十一:&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 二十二:Collection和 Collections的区别。 Collection是集合类的上级接口,继承他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 二十三:final, finally, finalize的区别。 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 二十四:sleep() 和 wait() 有什么区别? sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 二十五:error和exception有什么区别? error 表示恢复不是不可能,但很困难的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 二十六:heap和stack有什么区别。 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素 二十七:forward 和redirect的区别? forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 二十八:forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 二十九:EJB与JAVA BEAN的区别? Java Bean 是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常JavaBean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 三十:GC是什么? 为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 三十一:Java有没有goto? java中的保留字,现在没有在java中使用。 三十二:启动一个线程是用run()还是start()? 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须有退出的标志来停止的一个线程。 三十三:应用服务器有那些? BEA WebLogicServer,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat 三十四:给我一个你最常见到的runtime exception。 ArithmeticException, ArrayStoreException,BufferOverflowException, BufferUnderflowException, CannotRedoException,CannotUndoException,ClassNotCastException,CMMException, ConcurrentModificationException,DOMException,EmptyStackException, IllegalArgumentException,IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,ImagingOpException,IndexOutOfBoundsException, MissingResourceException,NegativeArraySizeException, NoSuchElementException,NullPointerException,ProfileDataException, ProviderException, RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException, UnmodifiableSetException,UnsupportedOperationException 三十五:接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。 三十六:说出数据连接池的工作机制是什么? J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。 当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 三十八:数组有没有length()这个方法? String有没有length()这个方法? 数组没有length()这个方法,有length的属性。String有length()这个方法 三十九:是否可以继承String类? String类是final类故不可以继承。 四十:swtich是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 、byte。long,string 都不能作用于swtich ??四十一:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?会执行,在return前执行。 四十二:编程题: 用最有效率的方法算出2乘以8等於几? 2 << 3 在VC++中运行这个就可得到16,最好的方法 #include void main(){ printf("%d",2<<3); } 2<<3移位,也可在JAVA正确的运行 四十三:两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 不对,有相同的hashcode。 如果两个值相等,那么equals()方法相等,表示两个方法的对像相等,这表示,引用的对像的地址相等,这样就有相同的hashcode 四十四:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。 四十五:Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况 一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类。 四十六:垃圾回收的优点和原理。并考虑2种回收机制 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收 四十七:char型变量中能不能存贮一个中文汉字?为什么? 能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的 可能的解释为一个中文占16位,两个字节 四十八:多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 ,同步的实现方面有两种,分别是synchronized,wait与notify 四十九:线程的基本概念、线程的基本状态以及状态之间的关系:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:就绪,运行、挂起、结束。 五十:简述synchronized和java.util.concurrent.locks.Lock的异同? 主要相同点:Lock能完成synchronized所实现的所有功能。 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。 五十一:EJB的角色和三个对象 一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider) 、应用组合者(Application Assembler)、部署者(Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator)。 三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类 五十二:请对以下在J2EE中常用的名词进行解释(或简单描述) web容器: 给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEBAPPLICATION标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 EJB容器: Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。JNDI:(Java Naming &Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。 五十三:JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,final分别代表什么意义?在try块中可以抛出异常吗? Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口 在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息, 调用这个对象的方法可以捕获到这个异常并进行处理。 Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。 一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常, 这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 用try来指定一块预防所有“异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。 throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常” Finally为确保一段代码不管发生什么“异常”都被执行一段代码。可以在一个成员函数调用的外面写一个try语句, 在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。 五十四:排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。/ /使用快速排序方法对a[0 :n- 1 ]排序,从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点, 把余下的元素分割为两段left 和r ig h t,使得l e f t中的元素都小于等于支点,而right中的元素都大于等于支点,递归地使用快速排序方法对left 进行排序,递归地使用快速排序方法对right 进行排序,所得结果为l e f t + m i d d l e + r ig h t。 五十五:java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。字节流继承于InputStream \OutputStream,字符流继承于InputStreamReader\ OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。 五十六:MVC的各个部分都有那些技术来实现?如何实现? MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用 五十七:java中实现多态的机制是什么? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 五十八:什么是java序列化,如何实现java序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。 可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。 序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法, implements Serializable只是为了标注该对象是可被序列化的, 然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象, 接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。 五十九:说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer; 常用的包:java.lang java.awt java.io java.util java.sql; 常用的接口:Remote List Map Document NodeList 六十:编写 java文件的注意事项? 在记事本中编写java文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的java 文件名为Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。 六十一:如何编译java程序? 单击开始|运行命令,在命令行上输入cmd,按回车键(在window98中输入command,按回车键),即可打开一个命令窗口,将目录转换到编写java源程序所在的目录,输入javac filename.java 六十二:如何执行java程序? 同样在命令窗口中输入javafilename, 六十三:什么是类与对象? 所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。 类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。 六十四:属性与方法? 不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。 六十五:什么是封装? 只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。 Servlet的生命周期 Servlet的生命周期就是Servlet从创建出实例对象到其销毁的过程。 Servlet是一个容器,它负责创建实例来接受客户端的请求,并且以多线程的方式响应给客户。 Servlet生命周期之中一共经历了5各阶段: 1 类的加载 2 实例化(创建servlet实例对象) 3 初始化(调用init()方法) 4服务(调用service()方法,根据客户请求方式选择用doGet()或doPost()方法) 5 Servlet销毁(调用destroy()方法) 注意: Servlet在其整个生命周期中只创建了一个对象!!! Servlet和JSP的区别: JSP是 Servlet的扩展 由于JSP转译之后才变成Servlet,所以Servlet的速度比JSP快 (3)JSP的本质还是Servlet HTTP协议: 1.HTTP协议(Hypertext Transfer Protocol)超级文本传输协议; 2.HTTP的请求格式: 总共分为三部分: 请求方法,URL,HTTP协议的版本 请求头(requestHeader) 请求正文(requestContent) 3.HTTP的请求方式 1)get: 2)post: 一:JavaBean的标准动作 二:静态包含<%@ include>与动态包含 <%@ include file=”date.jsp” %> include编译指令是在jsp程序的转换时候将file属性所指定的内容嵌入,然后再编译 只生成一个class文件 Include不能带参数 同一个request对象 include指令在转换时候不会被编译,只有在客户端请求时才会被动态的编译载入 不同的request对象,可以取得包含它的页面的参数并添加了自己的参数 三:Sendredirect 和forward的区别 Sendredirect Forward 是不同的request 虽是不同对象,但是可取到上个页面的内容 Send后的语句可以执行,除非return Forward后的内容不会继续发送给客户端 需要到客户端的往返,可以转到任何页面 服务器内部转换 地址栏有变化 地址栏没有变化 可以传参数,直接跟在URL后面 不可传参 四:JavaBean的优点 可被多个页面重用 可以在多个应用程序中使用 可以跨平台 五:JavaBean的范围 JavaBean的scope属性,scope属性决定了JavaBean对象存在的范围 page:表示页面的范围;它是scope属性的默认值 request:表示请求范围:(服务器端响应一次客户请求的过程,从servlet容器接受一个客户请求开始,到返回响应结果结束) session:表示会话范围(session的生命的周期及会话范围) application:表示在web应用范围 六:web.xml顺序 七:EL表达式 1)EL表达式语言中隐含的对象 applicationScope:把web应用范围内的属性名和属性值进行映射 cookie:把客户请求中的cookie名和cookie对象进行映射 header:HTTP请求头部的项目名和项目值进行映射 headerValues:把HTTP请求头部的项目名和所有匹配的项目值的数组进行映射 initparam:把web应用的初始化参数名和参数值进行映射 pageContext:表示javax.servlet .jsp.PageContext对象 pageScope:把页面范围内的属性名和属性值进行映射 param:把客户请求中的请求参数名和参数值进行映射 paramValues:把客户请求中的请求参数名和所匹配的参数值数组进行映射 requestScope:把请求范围的属性名和属性值进行映射 sessionScope:把会话范围内的属性名和属性值进行映射 2)EL中的表示特定范围 pageScope,requestScope,sessionScope,applicationScope 3)表示HTTP请求中的特定数据 Header,headerValues,param,paramValues 表示pageContext对象 ${pageContext.servletContext} ${pageContext.request} ${pagecontext.response} ${pagecontext.session} 表示web应用的初始化参数的集合 ${initParam.driver} 在EL表达式里面无法直接访问jsp文件中的隐含对象必须例如${pageContext.request.requestURL} 八:自定义jsp标签 1.Servlet容器得到了Tag对象后会通过下面的步骤 Servlet容器调用Tag对象的setPageContext()和setParent()方法,把当前jsp页面的PageContext对象及父标签处理对象传给当前Tag。如果不存在父标签,把父标签处理对象设为null Servlet容器调用Tag对象的一系列set方法,设置Tag对象的属性。如果标签没有属性,则不需要这个步骤 Servlet容器调用Tag对象的doStartTag()方法 如果doStartTag()方法返回Tag.skip_body就不执行标签主体内容,如果doStartTag()方法返回Tag.EVAL_BODY_INCLUDE,就执行标签主体内容 Servlet容器调用Tag对象的doEndTag()方法 如果doEndTag方法返回Tag.SKIP_PAGE,就不执行标签后面的jsp代码。如果doEndTag方法返回Tag.EVAL_PAGE 2.Servlet容器得到IterationTag对象后,会调用下面的方法 1)Servlet容器调用IterationTag对象的setPageContext()和setParent()方法,把当前的jsp页面的PageContext对象及父标签处理对象传给当前IterationTag对象,如果不存在父标签,则把父标签处理对象设为NULL 2)servlet容器调用IterationTag对象一系列的set方法,设置IterationTag对象的属性。如果没有标签,则没有这个步骤 3)Servlet容器调用IterationTag对象的doStartTag方法; 4)如果doStartTag()方法返回Tag.skip_body就不执行标签主体内容,如果doStartTag()方法返回Tag.EVAL_BODY_INCLUDE,就执行标签主体内 5)如果执行了标签主体的内容,那么就调用doAfterBody方法 6)如果doAfterBody放回Tag.SKIP_BODY,就不再执行标签的主体内容如果返回Tag.EVAL_BODY_AGAIN,就继续重复执行标签的主体的内容 7)Servlet容器调用IterationTag对象的doEndTag()方法 8) 如果doEndTag方法返回Tag.SKIP_PAGE,就不执行标签后面的jsp代码。如果doEndTag方法返回Tag.EVAL_PAGE 九:JSTL语言: JSTL标签库包含五个不同的标签库 标签库名 前缀 URL 描 述 Core c http://java.sun.com/jsp/jstl/core 核心标签库,包括一般用途,条件,迭代和URL相关的标签 I18N fmt http://java.sun.com/jsp/jstl/fmt 国际化web应用标签,以及日期,时间,数字格式化的标签 Sql sql http://java.sun.com/jsp/jstl/sql 访问关系数据库 Xml x http://java.sun.com/jsp/jstl/xml 包含对xml文档进行操作的标签 Function fn http://java.sun.com/jsp/jstl/function 包含一组通用的el函数,el表达式中可以应用这些el函数 十:JSTL Core标签库 1.一般用途的标签 2.条件标签 3.迭代标签 4.URL相关标签 5.JSTL 国际化标签 6.JSTL 格式化标签 7.SQL标签库 会话跟踪机制 十一:会话跟踪技术主要包括:Cooike、session、影藏表单域、重写url。 Cookie会话: 创建Cookie: Cookie cookie = new Cookie(“name”,”Tom”); 将Cookie对象添加到HTTP响应中: Response.addCookie(cookie); 读取客户端Cookie: Cookie[] cookies = request.getCookie(); 例子: Cookie cookie = newCookie("name","value"); response.addCookie(cookie); Cookie cookie = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { out.println(“ for (int i = 0; i < cookies.length; i++) { cookie = cookies[i]; cookie.getName(); cookie.getValue(); } } Session会话: 获取session: HttpSession session = request.getSession(); 添加: Session.setAttribute(“name”,”tom”); RequestDispatcher rd=request.getRequestDispatcher(“/跳转的路径”); rd.forword(request,response); 然后在跳转的页面上通过: session.getAttribute(“name”);来获得值。 十二:隐藏表单域 将会话跟踪字段的隐藏表单域添加到 HTML 页面,但是不会 显示在客户端浏览器中。如: 十三:.URL重写 URL(统一资源定位)重写技术将一个唯一的会话 ID 添加到 URL 结尾,以标识该会话。例如,重写以下 URL 传递会话 ID:10 原始 URL:http://server:post/servlet/Rewritten 用附加信息重写的 URL: http://server:post/servlet/Rewritten/10 用添加的参数重写的 URL: http://server:post/servlet/Rewritten?sessionid=10 用自定义修改重写的 URL: http://server:post/servlet/Rewritten;$sessionid$10 十四:Jsp页面的构成元素 (1)静态模版:静态模版由HTML,CSS,JavaScript等静态网页元素组成; (2)指令:指令主要用来提供整个Jsp网页相关的信息,并且用来设定Jsp页面的相关属性。如:<%@......%>中的内容就是Jsp指令。 在Jsp中两个最重要的指令是:page指令,include指令 page指令用于设置 JSP 页面的属性,主要属性有:language(声明脚本语言的种类,目前只能为java);import(用于导入一个或多个包,同时导入多个java包时中间用“,”隔开);session(表示是否允许session会话,其值默认为true),buffer(设置缓冲区大小,默认是8kb);autoFlush(是否刷新缓冲区);isThreadSafe(设置Jsp文件是否能多线程使用);errorPage(指定接收Exception对象的Jsp页面的URL);isErrorPage(设置当前页面是否是一个error页面,是否接受一个Exception对象);contentType(设置页面类型和字符集,默认是”text/html;charset=ISO-8859-1”)。 include指令用于在运行时将 HTML文件或 JSP页面嵌入到另一个 JSP页面, include 指令语法<%@ include file = ”文件名” %> (3)表达式:表达式元素表示的事一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达式在Jsp文件的位置显示。如<%=java表达式%> (4)也叫Java Scriptlet,就是在Jsp中写在<%与%>之间的Java代码 (5)声明:在Jsp中声明函数或者方法。如<%!......%> (6)动作: Jsp动作利用XML语法格式的标记来控制web服务器引擎的行为。利用Jsp动作可以动态地插入文件,重用JavaBean组件,把用户重定向到另外的页面,为java插件生成HTML代码。 (7)注释:就是Jsp页面中的注释 (a):由于Jsp页面中可以写入java代码,那么在java代码中的注释遵循java注释规范://表示单行注释;/*…*/表示多行注释 在Jsp的非JavaScript中,注释有分为两种 (b):在HTML中的注释为 (c):Jsp 服务器端注释:<%--注释--%> (二)请求转发和重定向 请求转发:request.getRequestDispatcher(“/xx.jsp”).forward(request,response); 其特点是:地址栏无变化,始终是一个请求,转发的对象可以使本工程内的任何页面。 重定向:就相当于客户端向服务器请求时,服务器响应给客户端一个新的URL浏览器就把请求传递个一个新的页面 特点是:地址发生了变化,重定向的范围没有限制。 十五:JDBC 1.JDBC编程涉及的三个部分 (1)应用程序: 开发人员编写的客户端程序。在应用程序中调用JDBC API,将SQL语句发送到数据库并检索结果。 (2)驱动程序管理器 :JDBC将驱动程序管理器负责使用正确的JDBC驱动程序和连接信息访问数据库,在Java应用程序和数据库系统之间建立连接。 (3)驱动程序:驱动程序由数据库厂商提供,实现数据库驱动接口,能够把SQL指令正确的发送的数据库服务器。 2.JDBC的使用步骤 注册:DriverManager.registerDriver(driver);一般不使用。 加载:Class.forName(driver);driver:有效JDBC驱动程序名称。 连接:Connectioncon = DriverManager.getConnection(URL,login_name, login_password); url:连接路径,login_name:数据库登陆账户名,login_passwoer:登陆密码。 3.关于JDBC编程的重要类和接口 DriverManager类,Connection接口,Statement接口,PreparedStatement接口,ResultSet接口,SQLException类 一, DriverManager类 管理一组 JDBC 驱动程序的基本服务。 最常用的方法 getConnection(Stringurl,String user,String password) 试图建立到给定数据库 URL 的连接。 二, Connection 接口 与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。 Connection 对象的数据库能够提供描述其表、所支持的SQL 语法、存储过程、此连接功能等等的信息。 常用的方法 (1) createStatement()创建一个Statement 对象来将 SQL 语句发送到数据库。 (2) prepareStatement(String sql) 创建一个PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。 (3) close() 立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。 三,Statement接口定义了一组数据库操作的方法,可以通过这个接口的实现类对象执行指定的SQL命令,Connection.createStatement()方法可以得到Statement类型的对象。 Statement方法常用的方法有: (1)executeUpdate(sql)返回Int类型,执行给定 SQL 语句,该语句可能为 INSERT、UPDATE或 DELETE 语句,或者不返回任何内容的 SQL 语句。 (2)executeQuery(sql)返回单个 ResultSet 对象,执行给定的 SQL 语句,通常为静态 SQL SELECT 语句。 例如ResultSetrs = DriverManager.getConnection(url,name,pwd).createStatemet.executeQuery(sql); (3)execute();执行SQL语句,返回Boolean类型,可能返回多个结果。execute 方法执行 SQL 语句并指示第一个结果的形式。然后,必须使用方法getResultSet 或 getUpdateCount 来获取结果,使用getMoreResults 来移动后续结果。 (4)close() 立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。 四,PreparedStatement接口是Statement的子接口,扩展了Statement的功能,通过Connection.preparedStatament()方法获得PreparedStatement对象。 PreparedStatement接口使我们可以使用占位符(?)作为参数定义一条SQL语句,占位符是在SQL语句中出现的标记符,在SQL语句执行之前会被替换成实际的值。 常用方法: (1)int executeUpdate(sql) 执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE或 DELETE 语句;或者是无返回内容的 SQL 语句。 (2)ResultSet executeQuery()并返回该查询生成的 ResultSet 对象 (3)boolean execute()在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。 (4)setString(int parameterIndex, String x) 将指定参数设置为给定 Java String值。 (5)setInt(int parameterIndex, int x)将指定参数设置为给定 Java int 值。 五, ResultSet接口 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSet接口的常用方法: (1)close()立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。 (2)next()将光标从当前位置向前移一行。 (3)first()将光标移动到此 ResultSet 对象的第一行。 (4)last()将光标移动到此 ResultSet 对象的最后一行。 (5)getMetaData()获取此ResultSet 对象的列的编号、类型和属性。 (6)getMetaData().getColumnCount()得到元素个数 (7)getMetaData().getColumnName(i)得到元素名称 (8)getString(intcolumnIndex) 以Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。 (9)getInt(int columnIndex) 以 Java 编程语言中int 的形式获取此 ResultSet 对象的当前行中指定列的值。 ……….等等。 六,SQLException类 如果发生数据库访问错误,或者是已经关闭的对象上使用一些方法就会产生异常,此时需要使用try/catch进行处理或者是将其thow掉。 4.DriverManager,Connection,Statement,PreparedStatement,ResultSet之间的关系??? DriverManeger类通过getConnection()方法获得Connection对象, Connecton接口通过CreateStatement()方法获得Statement对象, 通过preparedStatement()方法获得PreparedStatement对象, Statement和PreparedStatement接口通过executeQuery()方法获得ResultSet对象。 5,JDBC调用数据库的基本步骤 导入必要的类,装入JDBC驱动程序,识别数据源,分配一个Connection对象,分配一个Statement对象,使用Statement执行一个查询,从返回的ResultSet对象中检索数据,关闭ResultSet,关闭Statement对象,关闭Connection对象 十六:Servlet接口中的方法 (1)publicvoid init(ServletConfig config) throws ServletException; Servlet引擎会在Servlet实例化之后,置入服务之前精确地调用init方法。在调用service方法之前,init方法必须成功退出。 (2)publicvoid service(ServletRequest request, ServletResponse response) throws ServletException,IOException; Servlet引擎调用这个方法以允许Servlet响应请求。这个方法在Servlet未成功初始化之前无法调用。在Servlet被初始化之前,Servlet引擎能够封锁未决的请求。 (3)publicvoid destroy();当一个Servlet被从服务中去除时,Servlet引擎调用这个方法。 (4) public ServletConfig getServletConfig() 返回一个ServletConfig对象,作为一个Servlet的开发者,你应该通过init方法存储ServletConfig对象以便这个方法能返回这个对象。为了你的便利,GenericServlet在执行这个接口时,已经这样做了。 (5) public String getServletInfo(); 允许Servlet向主机的Servlet运行者提供有关它本身的信息。返回的字符串应该是纯文本格式而不应有任何标志(例如HTML,XML等)。 十七:Servlet与CGI的区别? 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。在功能上,Servlet与CGI、NSAPI有点类似,但是,与他们不同的是:Servlet具有平台无关性。 Servlet具有平台无关性。 十八:Servlet与applets不同的地方是 它不运行在Web浏览器或其他图形化的用户界面上。Servlet通过servlet引擎运行在Web服务器中,以执行请求和响应,请求、响应的典型范例是HTTP协议。 十九:如何现实servlet的单线程模式 <%@ page isThreadSafe=”false”%> 二十:JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 二十一:servlet的init()方法和service()方法的区别 初始化时调用init()方法有请求到达时调用service()方法,service()根据请求的类型,调用doget()或depost()等方法。 二十二:什么情况下调用doGet()和doPost()? Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 二十三:servlet的配置 二十四:JSP中动态INCLUDE与静态INCLUDE的区别? 二十五:jsp指令有哪些? useBean,setProperty,getProperty,forward,plugin,include。 二十六: &和&&的区别 二十七:描述JSP和Servlet的区别、共同点、各自应用的范围 二十八:Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别? 二十九:一个Bean由三部分组成: 实现java.io.serializable接口; 提供无参数的构造方法; 提供getter()和setter()方法访问它的属性。 三十:JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 三十一:在jsp中,page指令的import属性用来引入需要的包或类。 三十二: 如果jsp页面执行时遇到自定义标签,遇到结束标签时将调用doEndTag方法以执行处理。 三十四:如何执行一个线程安全的JSP? 三十五:如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 三十六:在JSP中如何设置COOKIE? 三十七:在JSP中如何删除一个COOKIE? 三十九:使用useBean标志初始化BEAN时如何接受初始化参数 四十:使用JSP如何获得客户浏览器的信息? 四十一:在servlets和JSP之间能共享session对象吗? 四十三:如何设置cookie在某一时间后过期? 四十四:Jsp页面构成元素 1. 静态模板 由HTML、css、JavaScript等元素构成 2. 指令 设定网页元素的属性,用于提供整个jsp网页的相关信息 <%@ 指令名称 属性1=”属性值”属性2=”属性值” ...%> 语法1:<%@page contentype=”text/html”;charset=”utf-8”language=”java” import=”com.text.*”%>中的内容就是JSP指令; 语法2:<%@incluede file=”文件名” %> 用于在运行时将HTML文件或JSP页面嵌入到另一个JSP页面中,如:<%@ include file=”index.jsp”%> 3. 表达式 在脚本语言中定义,运行后自动转化为字符串,运用于jsp页面,<%=Java 表达式%>中的内容就是JSP指令 4. Java脚本 <%....%>中的内容就是Java的标本scriptlet,在脚本中可以声明变量、书写表达式、使用存在的对象,书写任何合法语句 5. 声明 在JSP中可以声明函数或者方法,如:<%! String hello(){….}%> 6. 动作 利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码,利用XML语法格式的标记来控制web服务器引擎的行为 7. 注释: JSP页面中的Java代码中遵循Java的注释规则: 如单行注释:// 多行注释:/*……..*/ 在非script区域中,HTML注释:
也就是46秒。
我们再看看以下代码
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试。
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();十六:java中的常用包
1) java.applet:包含一些用于创建Java小应用程序的类。
2) java.awt:包含一些用于编写与平台无关的图形界面(GUI)应用程序的类。
3) java.io:包含一些用作输入输出(I/O)处理的类。
4) java.lang:包含一些Java语言的基本类与核心类,如String、Math、Integer、System和Runtime,提供常用的功能,这个包中的所有类是被隐式导入的。
5) java.net:包含用于建立网络连接的类,与java.io同时使用完成与网络有关的读写。
6) java.util:包含一些实用工具类和数据结构类。
葵花宝典之jsp
找到的每个 cookie 的名称和值
");
答:动态INCLUDE用jsp:include动作实现
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
<%@ include file="included.htm" %>
答:jsp指令分为两大类型,page指令和动作指令
动作指令通常有:
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与。
尽管JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页很不直观;JSP由HTML代码和JSP标签构成可以方便地编写动态网页因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层。
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,
返回真值。
三十三:两种跳转方式分别是什么?有什么区别?
有两种,分别为:
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。
只需增加如下指令
<%@ page isThreadSafe="false" %>
把如下脚本加入到JSP文件的开始即可:
<%
response.setHeader("Cache-Control","no-store"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at theproxy server
%>
COOKIE是作为HTTPHEADER的一部分被发送的,如下方法即可设置:
<%
Cookie mycookie = new Cookie("aName","aValue");
response.addCookie(mycookie);
%>
<%
Cookie killMyCookie = new Cookie("mycookie", null);
killMyCookie.setMaxAge(0);
killMyCookie.setPath("/");
response.addCookie(killMyCookie);
%>
三十八:在一个JSP的请求处理中如何停止JSP的执行
如下例:
<%
if (request.getParameter("wen") != null) {
// do something
} else {
return;
}
%>
使用如下两标签即可:
使用request.getHeader(String)即可 。
当然可以,
HttpSession session = request.getSession(true);
session.putValue("variable","value");
四十二:如何获得当前的sessions数?
可以使用HttpSessionBindingListeners来跟踪 。
用Cookie.setMaxAge(int)
② 使用JavaScript通过在表单里加入隐藏域信息,然后用表单提交的方式把数据传递给JSP程序。
这个比较简单,直接在JavaScript脚本中用<%=strVar1%>就可以把jsp程序中的数据传递给JavaScript脚本使用了。
参考下面的脚本:
3、使用存储过程进行分页,页面使用javaScript分页
存储过程:
Create procedure proc_page
@pageSize int = 5,
@pageNum int =1
as
select top(@pageSize)* from userswhere id not in (select top(@pageSize *(@pageNum-1))* from users)
4、请用JavaScript写出提交表单的语句表单为 frm1
frm1.submit();
5、在javascript中如何判断一个变量是否是数值型?
答:判断变量是不是数字,用javascript的内置函数 isNaN()就可以了,isNaN()函数检验参数是否是一个数字,要注意的是不是数字返回true,是的话返回false。
6、form表单中的控件都由那些?
答:form表单包含
单行文本输入框(text)
单选按钮(radio)
复选框(checkbox)
重置按钮(reset)
多行文本框(textarea)
密码框(password)
下拉列表(select)
提交按钮(submit)
注意:hidden属性可以设置控件是否隐藏。
7、表单提交的方式有哪些?
答:表单提交方式比较:
l get的特点是信息暴露、长度不能超过255字节,但是速度快。
l post的特点信息隐藏、长度不限,但是速度较慢。
8、插入flash代码:src后面加flash路径
答:
9、如何将JavaScript嵌入网页?
a、使用
13、如何使用外部 JS 文件?
答:
a、外部 JavaScript 文件可以链接到 HTML 文档中
b、script 标签的 src(源文件)属性可用于包括此外部文件
14、javascript有何作用?(详细说明)
答:提供用户交互;动态更改内容;数据验证
15、javascript种如何声明定义变量?
答:用弱引用数据类型,var定义声明。如:var a;
16、form中的input有哪些类型?各是做什么处理使用的?
答:text,radio,checkbox,file,button,image,submit,reset,hidden。Submit是button的一个特列,也是button的一种,它把提交这个动作自动集成了。
如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成button,即取消其自动提交的行为,否则,将会造成提交两次的效果,对于动态网页来说,也就是对数据库操作两次。
Button具有name、value属性,能触发onclick事件。
Submit继承了button。
Submit增加了触发表单onsubmit事件的功能、增加了执行表单的submit()方法的功能。
Input type=submit按回车提交表单
Button提交的是innerTEXT。
17、table标签中border,cellpadding td标签中colspan,rowspan分别起什么作用?
答:boder 边界;cellpadding 边距
Cellpadding,是补白,是指单元格内文字与边框的距离。
Cellpadding,两个单元格之间的距离
Colspan跨列数
Rowspan跨行数
18、form中的input可以设置readonly和disable,请问这两项属性有什么区别?
答:readonly不可编辑,但可以选择和复制
Disable不能编辑复制选择
19、JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?(区别也会问到)
答:alert,confirm,prompt
20、当点击按钮时,如何实现两个td的值互换?
答:用javascript实现此功能。
分析:
这个题主要是考变量传值。其次是考如何取元素的值。
代码如下:
function submitbtn() {
var tText1 =document.getElementById('txt1');
var SubmitBtn1 =document.getElementById('submitBtn1');
var tText2 =document.getElementById('txt2');
var SubmitBtn2 =document.getElementById('submitBtn2');
SubmitBtn1.onclick = function() {
var temp = tText1.value;
tText1.value = tText2.value;
tText2.value = temp;
};
SubmitBtn2.onclick = function() {
var temp = tText2.value;
tText2.value = tText1.value;
tText1.value = temp;
};
}
window.onload = function() {
submitbtn();
}