分布式计算(一)——Java进阶与Socket通讯

1.解释 RuntimeException。例举它的1-2个之类,并用一个小程序验证捕获并处理异常的过程。

错运行时异常都是 RuntimeException 类及其子类异常。这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理,但 程序应该从逻辑角度尽可能避免这类异常的发生。

NullPointerException 、 IndexOutOfBoundsException 等

分布式计算(一)——Java进阶与Socket通讯_第1张图片

 

 

 

2.在生产实践中,每个业务模块都会定义一个异常基类,例如 Account 模块定义 AccountException 继承 Exception,然后在定义各种业务异常 如 OutOfMoneyException 继承 AccountException。请使用 UML 绘图工具 UMLet 绘制这些类及其关系。

 

分布式计算(一)——Java进阶与Socket通讯_第2张图片

 

 

3.类的方法中,如果抛出一个异常类型,方法声明中能否不申明?例如 public void transfer(double amount) throws OutOfMoney 去掉 throws OutOfMoney。去掉的后果是什么?

不行,在方法声明时throws的意思时将异常的抛出交给方法来做,若想要在类的方法中抛出异常就必须声明,若去掉则会报错

 

4.Socket是两个进程联系的虚拟通道。如果服务器程序不启动,仅运行客户端,客户端会阻塞还是出错?在那条语句?

会出错

new Socket(args[0], Integer.parseInt(args[1])处出错

 

5.如果程序运行到一半,服务端意外退出,客户端会表现出什么行为?

没有任何表现。通信无反应。

 

6.(!)BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream())); 语句是典型的设计模式“装饰模式”,请检索自学“Decorator Pattern”,请使用 UML 绘图工具 UMLet 绘制涉及的类及其关系。

分布式计算(一)——Java进阶与Socket通讯_第3张图片

 

 

 

7.案例中 ServerSocket 能否支持两个或以上客户端?为什么?

不能。

因为Socket是由机器地址和端口号来区分/识别的,那么在一个特定的计算机网 络上,每一个Socket都是以此方式被唯一识别的。这就使得应用程序可以唯一地去定位网络上的另外一个位置的Socket。只能连一个客户端。

 

8.线程与进程的区别?

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源。

通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。

由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。

 

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。

9.Java 两个启动线程方法各有哪些优点、缺点?

优点:继承Thread类和实现Runnable接口。

缺点:继承是单继承,实现接口可以多继承,如果用继承Thread类的方式,就不可以继承其他类了,而实现接口的方式编程复杂,若访问当前线程,必须使用Thread。currentThread()方法。

 

10.(!)简述 Java 中 synchronized 的用法。

线程阻塞是实现线程之间通信与同步的基础,Java 语言为线程提供了多种阻塞机制,其中 由 synchronized 标识的同步代码段与 wait()/notify()机制是最重要的两类线程阻塞形式。

同步模块:

分布式计算(一)——Java进阶与Socket通讯_第4张图片

 

 

 

同步对象:

 

 

 

同步方法:

 

分布式计算(一)——Java进阶与Socket通讯_第5张图片

 

 

 

11.对象序列化二进制流中能否存在指针值(内存地址引用)?为什么?

可以存在指针值,但是一般序列化数据,因为序列化一般用于文件的读写以及数据的传输,而储存指针值在关闭程序后指针值就失效了没有意义

 

12.(!)为了使序列化和反序列化变得易于理解,人们提出了使用 Json,XML,Yaml等格式的文本表示对象。请写一个小程序,选择其中一种格式,在控制台输出Account对象

分布式计算(一)——Java进阶与Socket通讯_第6张图片

 

 

 

13.instanceof 很好用,为什么需要反射技术呢?请结合案例简述反射的必要性。

Instanceof 用于判断对象是否为某一类或接口的实例,避免转换异常,但是放射技术可以用来传递类型,比如说远程方法的调用,服务器不知道客户端传过来的参数的类型,利用反射技术就可以通过字符串的形式告诉客户端参数类型

 

14.代理模式(proxy pattern)的特征是代理类与委托类有同样的接口。请使用 UML 绘图工具 UMLet 绘制案例代理模式的 UML 图(图8),并用自然语言简单描述静态代理类 StaticServiceProxy 的工作过程。

分布式计算(一)——Java进阶与Socket通讯_第7张图片

 

 

StaticServiceProxy 初始化时传入用于连接的主机号以及端口,当调用getAccount方法并传入需要发送的数据时,开始连接服务器,连接成功则将数据打包并调用connector中的方法来进行远程调用。

 

15.简述静态代理和动态代理的区别。

静态代理所要调用的远程方法是已经确定的用户无法自定义的,而动态代理需要用户提供他们所想要调用的方法名称

转载于:https://www.cnblogs.com/blueblueblue/p/6096082.html

你可能感兴趣的:(java,json,设计模式)