java面试集(2)
1.现在输入n个数字,以逗号,分开； 然后可选择升或者降序排序； 按提交键就在另一页面显示 按什么 排序,结果为, , 提供reset 2.请你写一段函数,将一个文本文件a.txt的内容以倒序的方式输出一遍,输出后的文件名仍为a.txt,并且当中不允许生成其它文件。(限用java语言) 3.p blic class ctest{ p blic static void main (string [] args) { system.o t.println(6 + 6 + "aa"+ 6 + 6)； } } 输出结果是什么？ 禁止上机验证 4.自选100字的文章 人工切分成单字和词组(按中文语言规范切分) 用话筒向计算机读入每句话 要求计算机按人工拆分的词组,切分出单字、词组和读音 建立和词字表对应的录音库 5.编写程序请用(java实现) 请用冒泡排序或者选择排序实现一个对一列数字的排序: {2,10,3,50,78,22,34,30,65}数字是动态输入的.请以类的形式实现. 6.在财务应用中一般会把一串阿拉伯数字组成的金额转换为中文大写的形式,请你用类方法的形式实现这个功能. 7."我假设是原始社会,有石头,2块石头互磨可以变成石刀,石刀可以去砍木头,木头被砍成木材,木材可以组成椅子,请你用oo的思想把这些事物和他们之间的关系表达出来,但是要考虑到以后可能我会增加以下几点: "1.有可能我还想让石刀去砍椅子,把椅子砍成木材,2.可能我还想让石头增加关系,例如互相砸,互相摔,而不只是磨,也可以变成石刀,3也许我又要多添一百种不同的事物,再多添120种不同的关系..." 8.运用vc、cforscounix、java工具开发基于简单的设备管理 设备管理的属性如下: 纪录文件名称为:atmconfig.txt 编号(4字节)ip地址(16字节)安装地址(20字节)联系人(10字节) .168.168.1北太平庄王一 .168.168.2马甸王二 .168.168.3牡丹园王三 .168.168.4和平里王四 各项纪录之间有空格分开(空格数量不定) 程序设计要求: n登记设备信息:根据从系统界面输入的atm编号、ip地址、安装地址和联系人,将它们保存到atmconfig文件中 n设备信息查询:根据输入的atm编号,从atmcinfig文件中查询相应的设备信息 n界面可以采用jsp开发、或swing方式 其中:设备编号必须进行校验:4为数字型,ip地址必须按照ip地址的规范进行校验 开发环境: java。 atm配置文件表的存放位置:d:atmetcatmconfig.txt 9.输出程序运行的结果: 1、 p blic class test2 extends test1 { { system.o t.print("1")； } test2 { system.o t.print("2")； } static { system.o t.print("3")； } { system.o t.print("4")； } p blic static void main(string[] args) { new test2； } } class test1 { test1 { system.o t.print("5")； } static { system.o t.print("6")； } } 2、 p blic class test3 extends test4 { int i=30； test3 { print； i=40； } p blic static void main(string[] args) { system.o t.println(new test3.i)； } void print { system.o t.println(i)； } } class test4 { int i=10； test4 { print； i=20； } void print { system.o t.println(i)； } } 来源: 10.下面程序运行会发生什么结果？如果有错误,如何改正？ (15分) interface a{ int x = 0； } class b{ int x =1； } class c extends b implements a { p blic void px{ system.o t.println(x)； } p blic static void main(string[] args) { new c.px； } } } 11.考考你的眼力: p blic string tostring{ ret rn this + "@" + this.hashcode； } 这个tostring方法实现有无不当的地方？(tostring方法其实可以按你想输出的任何内容输出一些该类的信息) java面试题(答案) 第一,谈谈final, finally, finalize的区别。 final？修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally？再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入finally 块(如果有的话)。 finalize？方法名。java 技术允许使用finalize 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize 方法以整理系统资源或者执行其他清理工作。finalize 方法是在垃圾收集器删除对象之前对这个对象调用的。第二,anonymo s inner class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)？匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。第三,static nested class 和 inner class的不同,说得越多越好(面试题有的很笼统)。 nested class (一般是c的说法),inner class (一般是java的说法)。java内部类与c嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http:  静态内部类(inner class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 第四,&和&&的区别。 &是位运算符。&&是布尔逻辑运算符。第五,hashmap和hashtable的区别。都属于map接口的类,实现了将惟一键映射到特定的值上。 hashmap 类没有分类或者排序。它允许一个 n ll 键和多个 n ll 值。 hashtable 类似于 hashmap,但是不允许 n ll 键和n ll 值。它也比 hashmap 慢,因为它是同步的。第六,collection 和collections的区别。 collections是个java. til下的类,它包含有各种有关集合操作的静态方法。 collection是个java. til下的接口,它是各种集合结构的父接口。第七,什么时候用assert。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为tr e。如果表达式计算为 false,那么系统会报告一个 assertionerror。它用于调试目的: assert(a  0)；  throws an assertionerror if a = 0 断言可以有两种形式: assert expression1 ； assert expression1 : expression2 ； expression1 应该总是产生一个布尔值。 expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 string 消息。断言在默认情况下是禁用的。要在编译时启用断言,需要使用so rce 1.4 标记: javac -so rce 1.4 test.java要在运行时启用断言,可使用-enableassertions 或者 -ea 标记。 要在运行时选择禁用断言,可使用 -da 或者-disableassertions 标记。 要系统类中启用断言,可使用-esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。 第八,gc是什么？ 为什么要有gc？ (基础)。 gc是垃圾收集器。java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: system.gc r ntime.getr ntime.gc第九,string s = new string("xyz")；创建了几个string object？两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。第十, nd(11.5)等於多少？  nd(-11.5)等於多少？  nd(11.5)返回(long)12, nd(-11.5)返回(long)-11；第十一,short s1 = 1； s1 = s1 + 1；有什么错？ short s1 = 1； s1 += 1；有什么错？ short s1 = 1； s1 = s1 + 1；有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1； s1 += 1正确。第十二,sleep 和wait 有什么区别？ 搞线程的最爱 sleep方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非 (a)"醒来"的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。 wait是线程交互时,如果线程对一个同步对象x 发出一个wait调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。第十三,java有没有goto？ goto？java中的保留字,现在没有在java中使用。第十四,数组有没有length这个方法？ string有没有length这个方法？数组没有length这个方法,有length的属性。 string有有length这个方法。第十五,overload和override的区别。overloaded的方法是否可以改变返回值的类型？方法的重写overriding和重载overloading是java多态性的不同表现。重写overriding是父类与子类之间多态性的一种表现,重载overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading)。overloaded的方法是可以改变返回值的类型。第十六,set里的元素是不能重复的,那么用什么方法来区分重复与否呢？ 是用==还是eq als？ 它们有何区别？ set里的元素是不能重复的,那么用iterator方法来区分重复与否。eq als是判读两个set是否相等。 eq als和==方法决定引用值是否指向同一对象eq als在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。第十七,给我一个你最常见到的r ntime exception。 arithmeticexception, arraystoreexception, b fferoverflowexception, b fferunderflowexception, cannotredoexception, cannotundoexception, classcastexception, cmmexception, conc rrentmodificationexception, domexception, emptystackexception, illegalarg mentexception, illegalmonitorstateexception, illegalpathstateexception, illegalstateexception, imagingopexception, indexo tofbo ndsexception, missingreso rceexception, negativearraysizeexception, nos chelementexception, n llpointerexception, profiledataexception, providerexception, rasterformatexception, sec rityexception, systemexception, undeclaredthrowableexception, unmodifiablesetexception, uns pportedoperationexception第十八,error和exception有什么区别？ error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。第十九,list, set, map是否继承自collection接口？ list,set是 map不是第二十,abstract class和interface有什么区别？声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized？都不能第二十二,接口是否可继承接口？ 抽象类是否可实现(implements)接口？ 抽象类是否可继承实体类(concrete class)？接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。第二十三,启动一个线程是用r n还是start？启动一个线程是调用start方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由jvm调度并执行。这并不意味着线程就会立即运行。r n方法可以产生必须退出的标志来停止一个线程。第二十四,构造器constr ctor是否可被override？构造器constr ctor不能被继承,因此不能重写overriding,但可以被重载overloading。第二十五,是否可以继承string类？ string类是final类故不可以继承。第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法？不能,一个对象的一个synchronized方法只能由一个线程访问。第二十七,try {}里有一个ret rn语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在ret rn前还是后？会执行,在ret rn前执行。第二十八,编程题: 用最有效率的方法算出2乘以8等於几？有c背景的程序员特别喜欢问这种问题。 2  3第二十九,两个对象值相同(x.eq als(y) == tr e),但却可有不同的hash code,这句话对不对？不对,有相同的hash code。 第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递？ 是值传递。java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在string上？ switch(expr1)中,expr1是一个整数表达式。因此传递给switch 和 case 语句的参数应该是 int、short、 char 或者 byte。long,string 都不能作用于swtich。第三十二,编程题: 写一个singleton出来。 singleton模式主要作用是保证在java应用程序中,一个类class只有一个实例存在。一般singleton模式通常有几种种形式:第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个p blic的getinstance方法获取对它的引用,继而调用其中的方法。p blic class singleton { private singleton{} 在自己内部定义自己一个实例,是不是很奇怪？ 注意这是private 只供内部调用 private static singleton instance = new singleton； 这里提供了一个供外部访问本class的静态方法,可以直接访问 p blic static singleton getinstance { ret rn instance； } } 第二种形式: p blic class singleton { private static singleton instance = n ll； p blic static synchronized singleton getinstance { 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 使用时生成实例,提高了效率！ if (instance==n ll) instance=new singleton； ret rn instance； } } 其他形式:定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些。 应用服务器与web server的区别？ java servlet api中forward 与sendredirect的区别？ forward方法可以使用原来的对象,而且速度较快。地址栏不变化。只能在本机内的页面间跳转。 redirect方法不可以使用原来的对象,而且速度较慢。地址栏变化。可以跳转到任何页面和机器。 :前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址；后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendredirect方法。 struts的应用(如struts架构) str ts框架的处理流程清楚的体现了mvc系统的特点, str ts controller actionservlet处理客户请求,利用配置的actionmapping对象把请求映射到action处理器对象进行处理。action处理对象访问actionform中的数据,处理和响应客户请求,它还调用后台的bean组件,这些组件封装了具体的业务逻辑。action处理器对象根据处理结果通知controller,controller进行下一步的处理。 str ts是采用java servletjavaserver pages技术,开发web应用程序的开放源码的framework。 采用str ts能开发出基于mvc(model-view-controller)设计模式的应用构架。str ts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的action对象。 二.jsp自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:xml处理、通过java reflection apis自动处理javabeans属性、国际化的提示和消息。 mvc的各个部分都有那些技术来实现？如何实现？ 答:mvc是model-view-controller的简写。"model" 代表的是应用的业务逻辑(通过javabean,ejb组件实现),"view" 是应用的表示面(由jsp页面产生),"controller" 是提供应用的处理过程控制(一般是一个servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 一个网页有以下l代码片断 窗体顶端 窗体底端 年龄:在a.jsp中,获取用户提交的age参数,如果年龄大于100或是小于等于0,则显示"年龄不正确"的信息,否则输出"你的年龄为:xx岁"的信息。请写出a.jsp中完成这部分处理的代码片断。(请注意处理过程中的一些异常exception)有以下jsp代码片断 if(istr e) { response.sendredirect("indexl")； } system.o t.println("继续执行")；我们希望,如果istr e为真,则中止程序运行,直接跳转到indexl。但是在程序执行过程中,会继续执行后面输出"继续执行"的代码呢？ jsp有哪些内置对象？作用分别是什么？ jsp共有以下9种基本内置组件 req est 用户端请求,此请求会包含来自getpost请求的参数 response 网页传回用户端的回应 pagecontext 网页的属性是在这里管理 session 与请求有关的会话期 application servlet 正在执行的内容 o t 用来传送回应的输出 config servlet的构架部件 page jsp网页本身 exception 针对错误网页,未捕捉的例外 jsp有哪些动作？作用分别是什么？ jsp共有以下6种基本动作 jsp:incl de:在页面被请求的时候引入一个文件。 jsp: sebean:寻找或者实例化一个javabean。 jsp:setproperty:设置javabean的属性。 jsp:getproperty:输出某个javabean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:pl gin:根据浏览器类型为java插件生成object或embed标记 jsp中动态include与静态include的区别？ 动态include用jsp:incl de动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态include用incl de伪码实现,定不会检查所含文件的变化,适用于包含静态页面 两种跳转方式分别是什么？有什么区别？ 说一说servlet的生命周期？ servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.servlet接口的init,service和destroy方法表达。 你使用的servlet和jsp的版本？ servlet的基本架构 p blic class servletname extends httpservlet { p blic void dopost(httpservletreq est req est, httpservletresponse response) throws servletexception, ioexception { } p blic void doget(httpservletreq est req est, httpservletresponse response) throws servletexception, ioexception { } } get与post提交的异同？