天天看点

其他面试习题汇总

- 面试总结

1、java线程跑出异常,主线程能够捕捉到吗?

答:

http://www.cnblogs.com/chenfei0801/archive/2013/04/23/3039286.html(参考文章)

在java多线程程序中,所有线程都不允许跑出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。这源于jvm的设计理念:线程是独理执行的代码片段,线程的问题应该自己来解决,而不要委托到外部。因此,当线程抛出异常后,线程会终结,而对于主要线程和其他线程完全不受影响。

如果我们需要捕获其线程的unchecked异常该如何办?Java SE5之后,Thread.UncaughtExceptionHander是一个新增的异常处理器。Thread.UncaughtExceptionHander.uncaughtException()方法会在线程因未捕获的异常而面临死亡是被调用。

2、进程与线程的区别?

http://www.cnblogs.com/obama/archive/2013/04/12/3016509.html(参考)

http://blog.csdn.net/wolenski/article/details/7969908(参考)

    a.进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位

    b.进程有独立的地址空间,比如在linux下面启动一个新的进程,系统必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种非常昂贵的多任务工作方式。而运行一个进程中的线程,它们之间共享大部分数据,使用相同的地址空间,因此启动一个线程,切换一个线程远比进程操作要快,花费也要小得多。当然,线程是拥有自己的局部变量和堆栈(注意不是堆)的,比如在windows中用_beginthreadex创建一个新进程就会在调用CreateThread的同时申请一个专属于线程的数据块(_tiddata)。

    c.线程之间的通信比较方便。统一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点。而进程之间的通信只能通过进程通信的方式进行。

    d.由b,可以轻易地得到结论:多进程比多线程程序要健壮。一个线程死掉整个进程就死掉了,但是在保护模式下,一个进程死掉对另一个进程没有直接影响。

    e.线程的执行与进程是有区别的。每个独立的线程有有自己的一个程序入口,顺序执行序列和程序的出口,但是线程不能独立执行,必须依附与程序之中,由应用程序提供多个线程的并发控制。

3、内存溢出与解决方案?

4、java创建对象都有哪几种方式?

答:

 ● 用new语句创建对象

 ● 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法

 ● 调用对象的clone()方法

 ● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.

5、TCP协议和UDP协议的区别是什么?

 ● TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手简历连接,回话结束之后也要结束连接。而UDP是无连接的。

 ● TCP协议保证数据按顺序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送达。

 ● TCP所需资源多,TCP首部需20个字节,UDP首部字段只需要8个。

 ● TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率。

 ● TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。

 ● TCP时面向字节流的服务,而UDP面向的是报文的服务。

继续阅读