JAVA面试题5.pdf
基础知识:1.C+或 Java中的异常处理机制的简单原理和应用。当JAVA程序违反了 JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2 种情况。一种是JAVA类库内置的语义检查。例如数组卜标越界,会引发IndexOutOfBoundsException;访问 null 的对象时会引发 NullPointerException.另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用thr。w 关键字引发异常。所有的异常都是java.lang.Thowable的子类。2.Java的接口和C+的虚类的相同和不同处。由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当 个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.个类可以实现多个接口。3.垃圾回收的优点和原理。并考虑2 种回收机制。Java语言中个显著的特点就是引入了垃圾回收机制,使C+程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。4.请说出你所知道的线程同步的方法。wait。:使一个线程处于等待状态,并且释放所持有的对象的lock。sleep。:使一个正在运行的线程处于睡眠状态,是个静态方法,调用此方法要捕捉InterruptedException 异常。notify。:唤醒个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。AHnotityO:唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程个对象的锁,而是让它们竞争。5.请讲一讲析构函数和虚函数的用法和作用。6.Error 与 Exception 有什么区另ij?Error表示系统级的错误和程序不必处理的异常,Exception表示需要捕捉或者需要程序进行处理的异常。7.在java中一个类被声明为final类型,表示了什么意思?表示该类不能被继承,是顶级类。8.描述一下你最常用的编程风格。9.heap和 stack有什么区 另 U。栈 是 种 线 形 集 合,其添加和删除元素的操作应在同段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素10.如果系统要使用超大整数(超过long长度范围),请 你 设 计 个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。public class Biglnt()int ArrOne=new ArrOneiooo;String intString=,H;public int Arr(String s)intString=s;for(int i=o;i o);/throws an Assertionerror if a ArrayList 和 Vector 的区另U,HashMap 和 Hashtable 的区别答:就ArrayList与Vector主要从二方面来说.一.同步性:Vector是线程安全的,也就是说是同步的,而AirayList是线程序不安全的,不是同步的二.数据增长:当需要增长时,Vector默认增长为原来培,而ArrayList却是原来的半就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二同步性:Hashtable是线程安全的,也就是说是同步的,而 HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或 value57、char型变量中能不能存贮一个中文汉字?为什么?答:是能够定义成为一个中文的,因为java中以unicode编码,个char占 16个字节,所以放一个中文是没问题的58、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口同步的实现方面有两种,分别是synchronized,wait与 notify59、垃圾回收机制,如何优化程序?希望大家补上,谢谢6o、float型float f=3.4是否正确?答:不正确。精度不准确,应该用强制类型转换,如下所示:floatf=(float)3.461介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?答:Collection FrameWork 如下:Collection卜 ListI|-LinkedListI|-ArrayListI LVectorLStackLSetMap卜 Hashtable|-HashMapLWeakHashMapCollection是最基本的集合接口,一个Collection代表组Object,即Collection的元素(Elements)Map提供key至 U value的映射62、Java中异常处理机制,事件机制?11、JAVA中的多形与继承?希望大家补上,谢谢63、抽象类与接口?答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是个标识(同时有多重继承的功能)。编程题:1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset答 案(1)public static String splitStringByComma(String source)if(source=null 11 source.trim().equals()return null;StringTokenizer commaToker=new StringTokenizer(source,n,H);String result=new StringcommaToker.countTokens();int i=o;while(commaToker.hasMoreTokens()resulti=commaToker.nextToken();i+;return result;循环遍历String数组Integer.parseInt(String s)变成 int 类型组成int数组Arrays.sort(int a),a数组升序降序可以从尾部开始输出2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(Y i o i i)-(一千零一拾一元整)输出。3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?答:父类:package test;public class FatherClasspublic FatherClassOSystem.out.printlnCFatherClass Create1,);子类:package test;import test.FatherClass;public class ChildClass extends FatherClasspublic ChildClass()System.out.println(ChildClass Create1*);)public static void main(String args)FatherClass fc=new FatherClassQ;ChildClass cc=new ChildClassO;)输出结果:C:java test.ChildClassFatherClass CreateFatherClass CreateChildClass Create4、内部类的实现方式?答:示例代码如下:package test;public class OuterClassprivate class InterClasspublic InterClassOSystem.out.printlnfInterClass Create);)public OuterClass()InterClass ic=new InterClassO;System.out.println(HOuterClass Create);public static void main(String args)OuterClass oc=new OuterClassO;)输出结果:C:java test/OuterClassInterClass CreateOuterClass Create再一个例题:public class OuterClass private double di=l.o;/insert code here)You need to insert an inner class declaration at line 3.Which two inner class declarations arevalid?(Choose two.)A.class InnerOnepublic static double methoda()return di;)B.public class InnerOnestatic double methoda()return di;)C.private class InnerOnedouble methoda()return di;D.static class InnerOneprotected double methoda()return di;E.abstract class InnerOnepublic abstract double methoda();说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故A、B 错二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d i出错。故 D 错三.非静态内部类的非静态成员可以访问外部类的非静态变量。故 C 正确四.答案为C、E5、Java的通信编程,编程题(或问答),用 JAVA SOCKET编程,读服务器儿个字符,再写入本地显示?答:Server端程序:package test;.*;import java.io.*;public class Serverprivate ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Server。tryss=new ServerSocket(ioooo);while(true)socket=ss.accept();String RemotelP=socket.getInetAddress().getHostAddress();String RemotePort=:“+socket.getLocalPort();System.out.println(A client come in!IP:+RemotelP+RemotePort);in=new BufferedReader(newInputStreamReader(socket.getInputStream();String line=in.readLine();System.out.println(Cleint send is:+line);out=new PrintWriter(socket.getOutputStream(),true);out.println(HYour Message Received!);out.close();in.close();socket.closeQ;)catch(lOException e)out.println(wrongn);)public static void main(String args)new Server();;Client端程序:package test;import java.io.*;.*;public class ClientSocket socket;BufferedReader in;PrintWriter out;public Client()trySystem.out.println(Try to Connect to 127.0.0.1:10000);socket=new Socket(ni27.o.o.in,10000);System.out.printlnfThe Server Connected!*);System.out.println(Please enter some Character:*);BufferedReader line=new BufferedReader(newInputStreamReader(System.in);out=new PrintWriter(socket.getOutputStream(),true);out.println(line.readLine();in=new BufferedReader(new InputStreamReader(socket.getInputStream();System.out.println(in.readLineO);out.close();in.close();socket.close();catch(IOException e)out.printing Wrong);public static void main(String args)new Client(););6、用 JAVA实现一种排序,JAVA类实现序列化的方法(二种)?如在COLLECTION框架中,实现比较要实现什么样的接口?答:用插入法进行排序代码如卜package test;import java.util.*;class InsertSortArrayList al;public InsertSort(int num,int mod)al=new ArrayList(num);Random rand=new Random();System.out.println(The ArrayList Sort Before:*);for(int i=o;inum;i+)al.add(new Integer(Math.abs(rand.nextInt()%mod+i);System.out.println(aln+i+,=+al.get(i);)public void Sortlt()Integer templnt;int MaxSize=i;for(int i=i;i=(Integer)al.get(MaxSize-i).intValue()al.add(MaxSize,templnt);MaxSize+;System.out.println(al.toStringO);else for(int j=o;j=tempInt.intValue()al.add(j,templnt);MaxSize+;System.out.println(al.toStringO);break;)System.out.println(The ArrayList Sort After:);for(int i=o;ial.size();i+)System.out.println(al,+i+,=,+al.get(i);public static void main(String args)InsertSort is=new InsertSort(io,ioo);is.SortltQ;JAVA类实现序例化的方法是实现java.io.Serializable接口Collection框架中实现比较要实现Comparable接口和Comparator接口