2009-02-16 16:09:00
20.简要介绍抽象类和接口的异同点。
答:相同点:都不能直接实例对象,可以创建对象引用,它可以指向子类对象,在多态性上是一样的
不同点:抽象类用abstract class定义,除了可以有抽象方法还可以有非抽象方法(也可以全部是非抽象方法例如适配器),接口用interface定义其所有方法必须是公有抽象的。接口可用以多实现,而抽象类则只能单继承。
21.列举3个以上最常见到的runtime exception。
答:分母为零,下标越界,传递空引用,
22.为了正常运行程序,所有的异常都需要程序员自己捕获并处理吗?(作简要说明)
答:不一定。对于RuntimeException,有时不需要程序员自己去捕获,一般IO异常才需要程序员自己捕获。
23.当try块后跟多个catch块时应注意什么?
答:此时需要注意,所有的具体异常都是由Exception派生而来所以要把具体的异常写在前面,而把Exception异常写在最后
24.举例说明finally块的在何时使用。
答:当一段代码无论在程序是否出现异常都必须执行时需要用finally来定义这块代码。
但当程序用System . exit(0);退出时不执行finally定义的这块代码
100美元哪里去了?
3个朋友住进了一家宾馆。结账时,账单总计3 000美元。3个朋友每人分摊1 000美元,并把这3 000美元如数交给了服务员,委托他代到总台交账。但在交账时,正逢宾馆实施价格优惠,总台退还给服务员500美元,实收2 500美元。服务员从这500美元退款中扣下了200美元,只退还3个客人300美元。3个客人平分了这300美元,每人取回了100美元。这样,3个客人每人实际支付900美元,共支付2 700美元,加上服务员扣的200美元,共计2 900美元,那么这100美元的差额到哪里去了?
答案:这道题纯粹是文字游戏,但是如果你的头脑不够清晰,很可能把你搞糊涂了。客人实际支付2 700美元,就等于总台实际结收的2 500美元加上服务员克扣的200美元。在这2 700美元上加上200美元是毫无道理的,而在这2 700美元上加退回的300美元,这是有道理的,因为这等于客人原先交给服务员的3 000美元。
面试例题2:
击鼠标比赛现在开始!参赛者有拉尔夫、威利和保罗。
拉尔夫10秒钟能击10下鼠标,威利20秒钟能击20下鼠标,保罗5秒钟能击5下鼠标。以上各人所用的时间是这样计算的:从第一击开始,到最后一击结束。
他们是否打平手?如果不是,谁最先击完40下鼠标?
解析:n秒钟击n下鼠标其实是击第一下鼠标时才开始计时的,实际上击n-1下需要n秒钟,那么若击40下鼠标,拉尔夫需要(40-1)/(9/10)=39/0.9秒,威利需要(40-1)/(19/20)=39/0.95秒,保罗需要(40-1)/(4/5)=39/0.8秒,因此威利先击完。
答案:威利先击完。
面试例题3:
父亲打电话给女儿,要她替自己买一些生活用品,同时告诉她,钱放在书桌上的一个信封里。女儿找到信封,看见上面写着98,以为信封内有98元,就把钱拿出来,数也没数放进书包里。在商店里,她买了90元的东西,付款时才发现,她不仅没有剩下8元,反而差了4元。回到家里,她把这事告诉了父亲,怀疑父亲把钱点错了。父亲笑着说,他并没有数错,错在女儿身上。
问:女儿错在什么地方?
答案:拿倒了,86看成是98了。
面试例题4:
有一种小虫,每隔2秒钟分裂一次。分裂后的2只新的小虫经过2秒钟后又会分裂。如果最初某瓶中只有一只小虫,那么2秒后变2只,再过2秒后就变4只……2分钟后,正好满满一瓶小虫。假设这个瓶内最初放入2只这样的小虫。
问:经过多少时间后,正巧也是满满的一瓶?
答案:经过1分58秒时间,也正巧是满满一瓶。因为从一只虫蜕变为2只虫只需2秒钟。在瓶内只有一只虫子的情况下,经过2秒钟后就变成2只。这时的情况和瓶内一开始就有2只虫子的情况是一样的。出现这两种情况的时间差是2秒钟。所以,经过1分58秒后,也正好是满满一瓶。
说出ArrayList,Vector, LinkedList的存储性能和特性
@@@
oracle题目 数据库中有3个表 teacher 表,student表,tea_stu关系表。
teacher 表 teaID name age
student 表 stuID name age
teacher_student表 teaID stuID
要求用一条sql查询出这样的结果
1.显示的字段要有老师id age 每个老师所带的学生人数
2 只列出老师age为40一下学生age为12以上的记录
abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明
方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它
指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,
否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有
方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口
定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的
任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到
接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
1.MVC的各个部分都有那些技术来实现?如何实现?
答:MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
2.J2EE是什么?
答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
26.简要介绍throw和throws的区别。
答:throws是异常的抛出申明,就是用来通知调用者要抛出异常,而throw是抛出异常。
27.简要说明当超类中的方法有异常声明,它的子类如果覆盖了该方法,子类方法异常声明该注意什么?
答:当超类中的方法有异常声明时如果子类覆盖该方法,子类方法异常声明要注意只能抛出相同的异常或者抛出该异常的子类,不能抛出新的异常。
28.final, finally, finalize的区别?
答:final表示不能被改变(申明一个变量表示这是一个常量,申明一个方法表示这个方法不能被重写,申明一个类表示这个类不能派生子类);finally表示若程序没有用System.exit(0)退出,无论是否出现异常它的花括号内的语句块都执行;finalize是在垃圾回收器启用之前自动调用进行垃圾回收的方法。
29.简要说明过滤流类特点。
答:使用节点流作为输入或输出,它必须使用一个已经存在的流连接创建。若已经存在的这个流也是一个过滤流则可扩充其功能。
30.简要介绍Applet是如何保证安全性的。
答:Applet被限制在自己的运行环境(沙箱)中运行,不能运行任何本地可执行程序,不能对本地文件系统进行读写,也不能和其他机器进行通信 ,因此对本地系统而言Applet是安全的。
31.简要介绍Application 和Applet的区别。
答:Applet是小应用程序:在Internet服务中被访问,传输,自动被安装,并且作为Web文档的一部分运行,Applet不需要main方法,也不用编写构造方法
Application是应用程序:在本地计算机上运行,要用main方法提供入口执行,
32.简要介绍Applet的执行过程。
答:Applet类的getGraphics()方法或paint()方法得到图形上下文,然后利用Graphics类对象实现窗体内部的输出。
33.简要介绍java的委托事件模型。
答:当一个事件源产生一个事件的时候,事件监听器会先进行查询该事件属于哪一种事件,然后交给相应的事件处理器进行处理。
34.简要介绍如何创建自己监听器类。
答:监听器是一个接口,所以要创建监听器就必须实现接口内的所有抽象方法,当有些方法不用关心时,可用空实现将其实现,或者用适配器类直接对所关心的方法进行重写(只有一抽象方法的监听器没有相对应的适配器类)。
35.什么是布局管理器?请至少列出3种。
答:布局管理器是用来设置容器内组件的位置形式的类,有以下几种
BorderLayout:可把组件放在东,南,西,北,中几个位置
FlowLayout:层式布局管理器,它将组件一行一行的进行分配
GridLayout:可把组件设置在大小都相等的网格中
CardLayout:对象是容器的布局管理器,它将容器中的所有组件看作重叠的卡片。
GridBagLayout:网格包布局管理器,它可以让一个组件不止占一行一列。
36.简要说明如何在窗体上添加菜单。
答:需要先建立菜单条(MenuBar)并添加在窗体中,然后再建立菜单(Menu)添加进菜单条,最后建立菜单项(MenuItem)添加进菜单中,建立用new,添加用add。
37.简单介绍进程和线程的区别。
答:进程是一个程序在其自身地址空间中的执行活动,而线程是进程中的一个单一的控制流程。一个进程中可以有多个线程。
38.创建线程类有几种方法?并简单介绍。
答:有两种方法,一种方法是将类声明为 Thread 的子类,还有一种方法是创建一个类用其实现Runnable接口。
39.简单介绍线程状态。
答:线程有四种状态:
新生状态:线程已经被建立但是还没有被执行的状态。
可执行状态:线程处于就绪状态,随时可以被执行,或已经开始执行。
阻塞状态:由于使用了 sleep等方法使线程进入睡眠或等待的阻塞状态。
死亡状态:该状态表示线程已经退出。
40.sleep() 、jion()和 wait() 有什么区别?
答:sleep()是休眠的意思,当一个线程执行到sleep()语句时便进入休眠状态,待休眠时间结束,线程继续执行;jion()是用来告诉系统,当一个线程已经执行完毕;wait()是始线程等待,用以线程间的通信,该方法要用notify() 或notifyAll()方法唤醒。
41.简要介绍java如何使用synchronized实现线程同步。
答:有两种方法,第一种是在你要执行同步的的方法前加上synchronized关键字,将其申明为同步方法;另一种是同步块:将synchronized关键字放在需要同步的代码前面
42.简要介绍java如何使用wait()、notify() 和notifyAll()方法实现线程间通信。
答:当一个线程调用了wait()方法后该线程就会施放使用权进入等待状态,而其他线程将有机会运行,当该线程调用了notify()方法后该方法将通知刚才处于等待状态的线程使其被唤醒,该线程将有机会重新获得运行的权力。而notifyAll()是一次性将所有处于等待状态的线程都唤醒。