javase 面试的可能问题

Java基础方面:

1、作用域public,private,protected,以及不写时的区别

答:区别如下:

作用域          当前类      同一package 子孙类      其他package

public           √             √                 √            √

protected       √             √                 √            ×

friendly         √             √                  ×           ×

private          √             ×                  ×           ×

不写时默认为friendly

2、ArrayList和Vector的区别,HashMap和Hashtable的区别

答:就ArrayList与Vector主要从二方面来说.

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

就HashMap与HashTable主要从三方面来说。

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

3、char型变量中能不能存贮一个中文汉字?为什么?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?

答:父类:

packagetest;

publicclass FatherClass

{

   publicFatherClass()

 {

  System.out.println("FatherClassCreate");

 }

}

子类:

packagetest;

importtest.FatherClass;

publicclass ChildClassextendsFatherClass

{

 publicChildClass()

 {

  System.out.println("ChildClassCreate");

 }

 publicstaticvoidmain(String[]args)

 {

  FatherClassfc=newFatherClass();

  ChildClasscc=newChildClass();

 }

}

输出结果:

C:>javatest.ChildClass

FatherClassCreate

FatherClassCreate

ChildClassCreate

6、内部类的实现方式?

答:示例代码如下:

packagetest;

publicclass OuterClass

{

 privateclassInterClass

 {

  publicInterClass()

  {

   System.out.println("InterClassCreate");

  }

 }

 publicOuterClass()

 {

  InterClassic=newInterClass();

  System.out.println("OuterClassCreate");

 }

 publicstaticvoidmain(String[]args)

 {

  OuterClassoc=newOuterClass();

 }

}

输出结果:

C:>javatest/OuterClass

InterClassCreate

OuterClassCreate

再一个例题:

publicclassOuterClass{

 privatedoubled1=1.0;

   //insertcodehere

}

Youneedtoinsertaninnerclassdeclarationatline3.Whichtwoinnerclassdeclarationsare

valid?(Choosetwo.)

A.classInnerOne{

    publicstaticdoublemethoda(){returnd1;}

  }

B.publicclassInnerOne{

    staticdoublemethoda(){returnd1;}

  }

C.privateclassInnerOne{

    doublemethoda(){returnd1;}

  }

D.staticclassInnerOne{

    protecteddoublemethoda(){returnd1;}

  }

E.abstractclassInnerOne{

    publicabstractdoublemethoda();

  }

说明如下:

一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故A、B错

二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;returnd1出错。

故D错

三.非静态内部类的非静态成员可以访问外部类的非静态变量。故C正确

四.答案为C、E

7、垃圾回收机制,如何优化程序?

希望大家补上,谢谢

8、float型floatf=3.4是否正确?

答:不正确。精度不准确,应该用强制类型转换,如下所示:floatf=(float)3.4

9、介绍JAVA中的CollectionFrameWork(包括如何写自己的数据结构)?

答:CollectionFrameWork如下:

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)

Map提供key到value的映射

10、Java中异常处理机制,事件机制?

11、JAVA中的多形与继承?

希望大家补上,谢谢

12、抽象类与接口?

答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。

13、Java的通信编程,编程题(或问答),用JAVASOCKET编程,读服务器几个字符,再写入本地显示?

答:Server端程序:

packagetest;

importjava.net.*;

importjava.io.*;

publicclassServer

{

 privateServerSocketss;

 privateSocketsocket;

 privateBufferedReaderin;

 privatePrintWriterout;

 publicServer()

 {

  try

  {

   ss=newServerSocket(10000);

   while(true)

   {

    socket=ss.accept();

    StringRemoteIP=socket.getInetAddress().getHostAddress();

    StringRemotePort=":" socket.getLocalPort();

    System.out.println("Aclientcomein!IP:" RemoteIP RemotePort);

    in=newBufferedReader(new

InputStreamReader(socket.getInputStream()));

    Stringline=in.readLine();

    System.out.println("Cleintsendis:" line);

    out=newPrintWriter(socket.getOutputStream(),true);

    out.println("YourMessageReceived!");

    out.close();

    in.close();

    socket.close();

   }

  }catch(IOExceptione)

  {

   out.println("wrong");

  }

 }

 publicstaticvoidmain(String[]args)

 {

  newServer();

 }

};

Client端程序:

packagetest;

importjava.io.*;

importjava.net.*;

publicclassClient

{

 Socketsocket;

 BufferedReaderin;

 PrintWriterout;

 publicClient()

 {

  try

  {

   System.out.println("TrytoConnectto127.0.0.1:10000");

   socket=newSocket("127.0.0.1",10000);

   System.out.println("TheServerConnected!");

   System.out.println("PleaseentersomeCharacter:");

   BufferedReaderline=newBufferedReader(new

InputStreamReader(System.in));

   out=newPrintWriter(socket.getOutputStream(),true);

   out.println(line.readLine());

   in=newBufferedReader(newInputStreamReader(socket.getInputStream()));

   System.out.println(in.readLine());

   out.close();

   in.close();

   socket.close();

  }catch(IOExceptione)

  {

   out.println("Wrong");

  }

 }

 publicstaticvoidmain(String[]args)

 {

  newClient();

 }

};

14、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?如在COLLECTION框架中,实现比较要实现什么样的接口?

答:用插入法进行排序代码如下

packagetest;

importjava.util.*;

class InsertSort

{

 ArrayListal;

 publicInsertSort(intnum,intmod)

 {

  al=newArrayList(num);

  Randomrand=newRandom();

  System.out.println("TheArrayListSortBefore:");

  for(inti=0;i<num;i )

  {

   al.add(newInteger(Math.abs(rand.nextInt())mod 1));

   System.out.println("al[" i "]=" al.get(i));

  }

 }

 publicvoidSortIt()

 {

  IntegertempInt;

  intMaxSize=1;

  for(inti=1;i<al.size();i )

  {

      tempInt=(Integer)al.remove(i);

    if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())

    {

     al.add(MaxSize,tempInt);

     MaxSize ;

     System.out.println(al.toString());

    }else{

     for(intj=0;j<MaxSize;j )

     {

      if

(((Integer)al.get(j)).intValue()>=tempInt.intValue())

      {

       al.add(j,tempInt);

       MaxSize ;

       System.out.println(al.toString());

       break;

      }

     }

    }

  }

  System.out.println("TheArrayListSortAfter:");

  for(inti=0;i<al.size();i )

  {

   System.out.println("al[" i "]=" al.get(i));

  }

 }

 publicstaticvoidmain(String[]args)

 {

  InsertSortis=newInsertSort(10,100);

  is.SortIt();

 }

}

JAVA类实现序例化的方法是实现java.io.Serializable接口

Collection框架中实现比较要实现Comparable接口和Comparator接口

15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC 汉的半个”。

答:代码如下:

packagetest;

class SplitString

{

 StringSplitStr;

 intSplitByte;

 publicSplitString(Stringstr,intbytes)

 {

  SplitStr=str;

  SplitByte=bytes;

  System.out.println("TheStringis: SplitStr ;SplitBytes=" SplitByte);

 }

 publicvoidSplitIt()

 {

  intloopCount;

  

loopCount=(SplitStr.length()SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

Byte 1);

  System.out.println("WillSplitinto" loopCount);

  for(inti=1;i<=loopCount;i )

  {

   if(i==loopCount){

    

System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));

   }else{

    

System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));

   }

  }

 }

 publicstaticvoidmain(String[]args)

 {

  SplitStringss=newSplitString("test中dd文dsaf中男大3443n中国43中国人

0ewldfls=103",4);

  ss.SplitIt();

 }

}

16、JAVA多线程编程。用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。

希望大家补上,谢谢

17、STRING与STRINGBUFFER的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值