黑马程序员技术交流社区

标题: 经典的面试题..不用谢! [打印本页]

作者: 秦文强    时间: 2015-1-26 21:32
标题: 经典的面试题..不用谢!
1. 数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有,String有。
2. 是否可以继承String类?
答:String类是final类所以不可以继承。
3.
public class OuterClass {  
private double d1 = 1.0;  
//insert code here ~~ line 3  
}
从下列选项中选择两个正确的答案放在 line 3 中(C E)

A.
class InnerOne{
public static double methoda() {return d1;}
}
B.
public class InnerOne{
static double methoda() {return d1;}
}
C.
private class InnerOne{
double methoda() {return d1;}
}
D.
static class InnerOne{
protected double methoda() {return d1;}
}
E.
abstract class InnerOne{
public abstract double methoda();
}
4. STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,一旦一个String对象被创建,包含在这个实例中的内容(“字符串”)不可以被更改,直至这个对象被销毁,因此,指向一个 String对象的变量实质上是一个常量,String对象也被称为常量对象;STRINGBUFFER的长度是可变的,可以通过StringBuffer的append()、insert()、reverse()、setCharAt()、setLength()等方法,可以对这个字符串中的内容修改。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
5.编程题:写一个满足Singleton模式的类出来。
public class SingletonTest  
{  
private static SingletonTest sp;  
private SingletonTest() {}  
public static SingletonTest getInstance()  
{  
if (sp==null)  
{ sp=new SingletonTest(); }  
return sp;  
}

1. 在Java中一个类被声明为final类型,表示了什么意思?

答:表示该类不能被继承,意味着它不能再派生出新的子类,不能作为父类被继承,是顶级类。

2. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:两个错误都是一样的,后者只是加法的写法不一样,两个错误都是因为s1是short型而1是整型相加后数据类型就变为整型了,与s1定义为short型有矛盾,必须进行强制类型转换才正确。

3. 题目如下:
//父类:

public class FatherClass  
   {  
public FatherClass()  
{  
System.out.println(“FatherClass Create“);  
}  
}
//子类:

public class ChildClass extends FatherClass  
{  
public ChildClass()  
{  
System.out.println(“ChildClass Create“);  
}  
public static void main(String[] args)  
{  
FatherClass fc = new FatherClass();  
ChildClass cc = new ChildClass();  
}  
}
//请问输出结果为:
FatherClass Create+  
FatherClass Create  
ChildClass Create

5.. Collection框架中实现比较要实现什么接口?
答:要实现Comparable接口,并实现这个接口的唯一方法cpmparaTo(),接受一个Object对象,在这个方法中可以定义对象的排序规则。

6. 介绍Java中的Collection 框架结构 , 并画出来。

答案在附件。

7. 谈谈final, finally的区别。

答:final是修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract,又被声明为final。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

Finally是在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话),只要有finally语句块,无论程序如何运行,它都必然被执行到。
8. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有三种实现方法,分别为:

① 实现Runnable接口,覆盖Run()方法。
② 继承Thread,覆盖Run()方法。
③ 继承TimerTask,覆盖Run()方法。




1. Error与Exception有什么区别?
答:Error(错误)表示系统级的错误和程序不必处理的异常,是Java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
2.abstract class和interface有什么区别?
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

3. 用Java SOCKET编程,实现简单的Echo功能
如: 客户端从键盘输入 hi (当用户输出exit 退出程序),服务端响应为 hi(服务器要求为多线程)
解:服务器程序:

import Java.io.*;
import Java.net.*;
public class MyServer extends Thread{
private Socket cq ;
public MyServer(Socket cq)
{
this.cq = cq;
}
public void run()
{
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(cq.getInputStream()));
PrintWriter out=new PrintWriter(cq.getOutputStream());
while(true)
{
String str=in.readLine();
System.out.println(str);
out.println(“message: “+str);
out.flush();
if(str.equals(“exit“))
break;
}
}
catch(IOException e)
{
System.out.println(e.message());
}
}
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(8009);
while(true)
{
Socket s=server.accept();
new MyServer(s).start();
}
}
}
客户端程序:
import Java.net.*;  
import Java.io.*;  
public class MyClient{  
public static void main(String[] args)throws Exception  
{  
Socket server=new Socket(“localhost“,8009);  
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));  
PrintWriter out=new PrintWriter(server.getOutputStream());  
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  
while(true)  
{  
String str=br.readLine();  
out.println(str);  
out.flush();  
if(str.equals(“exit“)){  
break;  
}  
System.out.println(in.readLine());  
}  
server.close();  
}  
}

4. 编程题:列出某文件夹下的所有文件 (文件夹从命令行输入)。
解:
import Java.io.*;  
public class listFile  
{  
public static void main (String[] args)  
{  
String s=““;  
InputStreamReader ir=new InputStreamReader(System.in);  
BufferedReader in = new BufferedReader(ir);  
try {  
s = in.readLine();  
File f=new File(s);  
File[] files=f.listFiles();  
for(int i=0;i  
{  
if(files[i].isFile())  
{  
System.out.println(“文件:“+files[i]);  
}  
else
{  
System.out.println(“目录:“+files[i]);  
}  
}  
in.close();  
}  
catch (IOException e)  
{  
e.printStackTrace();  
}  
}  
}


25. 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
解:
import Java.io.*;  
class interceptString  
{  
String interceptStr;  
int interceptByte;  
public interceptString(String str,int bytes)  
{  
interceptStr=str;  
interceptByte=bytes;  
System.out.println(“字符串为:’“+interceptStr+“’;字节数为:“+interceptByte);  
}  
public void interceptIt()  
{  
int interceptCount; interceptCount=(interceptStr.length()%interceptByte==0)?        (interceptStr.length()/interceptByte):   (interceptStr.length()/interceptByte+1);  
System.out.println(“截取后断数为:“+interceptCount);  
for (int i=1;i〈=interceptCount ;i++ )  
{ if (i==interceptCount)  
{  
System.out.println(interceptStr.substring((i-1)*interceptByte,interceptStr.length()));  
} else
{  
System.out.println(interceptStr.substring((i-1)*interceptByte,(i*interceptByte)));  
}  
}  
}  
public static void main(String[] args)  
{  
String s=““;  
InputStreamReader ir=new InputStreamReader(System.in);  
BufferedReader in = new BufferedReader(ir);  
try {  
s = in.readLine();  
interceptString ss = new interceptString(s,4);  
ss.interceptIt();  
in.close();  
} catch (IOException e)  
{ e.printStackTrace();}  
}  
}

作者: Never、saydie    时间: 2015-1-26 21:35
来捧捧妇联主任的场!顶三十三个赞
作者: yueye13    时间: 2015-1-26 23:40
看了题,受益了
作者: 牛牛宝    时间: 2015-1-27 00:13
学习了,谢谢分享,有些地方还没有学到
作者: 奔跑的猴子    时间: 2015-1-27 00:15
谢谢分享
作者: 刘聪聪    时间: 2015-1-27 01:29
非常感谢楼主,看完了,发现自己知道的太少了。非常有帮助
作者: da_chuan    时间: 2015-1-27 01:44
继续分享。。
作者: 致青春    时间: 2015-1-27 11:12
谢谢,受益了,,,,
作者: enjoy    时间: 2015-1-27 11:18
不谢!!
作者: hahaer    时间: 2015-1-27 20:14
谢谢楼主
作者: 小马范    时间: 2015-1-27 20:59
short s1 = 1; s1 += 1;有什么错?    这个是没有错误的 ,s1 +=1  相当于 s1=(short)(s1+1)
作者: 夜半风    时间: 2015-1-27 21:04
楼主好人 我就不谢了
作者: 刘运召    时间: 2015-1-27 21:21
小马范 发表于 2015-1-27 20:59
short s1 = 1; s1 += 1;有什么错?    这个是没有错误的 ,s1 +=1  相当于 s1=(short)(s1+1) ...

我是初学者,我感觉这个也没问题啊
作者: 刘运召    时间: 2015-1-27 21:35
谢谢楼主分享      
作者: xiaoyi    时间: 2015-1-27 21:46
有个题目的答案是错的吧
s1+=1这句话是对的
作者: 还是菜鸟    时间: 2015-1-27 23:27
感谢楼主,收藏了
作者: 娃娃菜    时间: 2015-1-28 15:12
谢谢分享
作者: hanjun    时间: 2015-1-29 14:34
谢谢楼主,get!希望与努力同在,加油:)
作者: 時間_|_的灰    时间: 2015-1-29 15:20
感谢分享哈
作者: yueLife_1993    时间: 2015-1-29 16:08
谢谢楼主
作者: hiphopman    时间: 2015-1-29 17:51
谢谢分享!
作者: gzy    时间: 2015-1-29 18:06
谢谢分享
作者: 18942668193    时间: 2015-1-29 20:27
感谢楼主,我也马上面临考试
作者: janstk    时间: 2015-1-29 21:13
感谢分享!!
作者: mengxiang1993    时间: 2015-1-29 21:19
受益良多啊
作者: 流行VS泪痕    时间: 2015-1-29 22:03
不错,顶一下。收藏了。
作者: 纳海百川    时间: 2015-2-2 21:23
正能量是不是
作者: 不要低调    时间: 2015-2-2 21:52
这个必须赞一个:handshake
作者: 不要低调    时间: 2015-2-2 22:13
short s1 = 1; s1 += 1;应该没有错误吧,s1 += 1与s1 = s1 + 1是不同的;
s1 += 1相当于s1 = (short) (s1 + 1)有个强制类型转化的过程,所以short s1 = 1; s1 += 1应该是对的;
s1 = s1 + 1有个隐形类型提升的问题s1 + 1相当于(int)(s1 + 1),而是s1是short型,不能把int型赋值给short型,所以s1 = s1 + 1是错误的。
作者: outsider1020    时间: 2015-2-3 13:58
谢谢分享。。。。。。
作者: Joseph_liuxh    时间: 2015-2-3 14:28
感觉楼主的分享,网络编程的有帮助
其他的分享的太浮躁了!
作者: 好小伙    时间: 2015-2-3 14:45
查缺补漏!!!!
作者: challenge    时间: 2015-2-3 15:37
感谢分享。
作者: sebastianai    时间: 2015-2-3 19:08
多谢分享,多做练习才是学习之道啊
作者: 边晓炎    时间: 2015-2-3 19:32
多谢分享!
作者: mengxiang1993    时间: 2015-2-3 21:10
感谢楼主分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2