8

Posted 月丫湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8相关的知识,希望对你有一定的参考价值。

7、写一个Singleton出来。

第一种:饱汉模式

public class SingleTon

private SingleTon()

 

//实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间

private final static SingleTon instance = new SingleTon();

public static SingleTon getInstance()

return instance;

 

第二种:饥汉模式

public class SingleTon

private SingleTon()

 

private static instance = null;//new SingleTon();

 

public static synchronized SingleTon getInstance()

if(instance == null)

instance = new SingleTon();

return instance;

 

第三种:用枚举

public enum SingleTon

ONE;

 

 

第三:更实际的应用(在什么情况用单例)

public class SequenceGenerator

//下面是该类自身的业务功能代码

private int count = 0;

 

public synchronized int getSequence()

++count;

 

//下面是把该类变成单例的代码

private SequenceGenerator()

private final static instance = new SequenceGenerator();

public static SingleTon getInstance()

return instance;

 

 

第四:

public class MemoryDao

    private HashMap map = new HashMap();

    

    public void add(Student stu1)

     map.put(SequenceGenerator.getInstance().getSequence(),stu1);

    

   

   //MemoryDao变成单例

  

 

 

 

 

 

 

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个staticprivate的该类变量,在类初始化时实例话,通过一个publicgetInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton

private Singleton()

      //在自己内部定义自己一个实例,是不是很奇怪?

      //注意这是private 只供内部调用

      private static Singleton instance = new Singleton();

      //这里提供了一个供外部访问本class的静态方法,可以直接访问  

      public static Singleton getInstance()

        return instance;   

      

   

   第二种形式:

public class Singleton

  private static Singleton instance = null;

  public static synchronized Singleton getInstance()

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     

  //使用时生成实例,提高了效率!

  if (instance==null)

    instancenew Singleton();

return instance;   

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

ICMP:Internet控制报文协议

ICMP:Internet控制报文协议。

 

是IP层的组成部分,传递差错报文或其他信息。

 
ICMP报文被封装在IP数据报内部:
技术分享
 
详细格式例如以下所看到的:
技术分享
 
个字段含义例如以下:
  • 8位类型。表示该ICMP报文的含义。如目的不可达、超时、请求回显等。
  • 8为代码。

     

    进一步描写叙述该ICMP报文。ICMP报文的类型由类型字段和代码字段共同决定

  • 16位检验和。和IP首部检验和的算法同样。
 
我们常常使用的ping程序就是基于ICMP报文进行的传输。pingclient发送一个ICMP回显请求报文,server收到此报文后返回一个ICMP回显应答报文作为应答。client和server都是在内核层发送和接受该报文的,而不是通过用户进程。

 

回显请求和回显应答报文格式例如以下:

技术分享
 
类型0 + 代码0 = 回显应答
类型8 + 代码0 = 回显请求
 
ICMP回显请求和回显应答报文多出了几个特有的字段:
  • 标识符。表示发送进程的ID号。
  • 序号。

     

    从0開始,每发送一个新的回显请求就加1.

  • 选项数据。实际载荷,比如保存发送时间。接收端用当前时间减去发送时间就能计算出往返时间。

     

     

以下是抓包的结果:
技术分享
 
client一共向server发送了4个回显请求。TTL字段是在IP首部中的。因为ICMP属于IP层协议,而IP层又是不可靠、无连接、尽力而为式的传输,所以ping偶尔会出现传输出错的情况。
 
參考:
《TCP/IP具体解释》第6章、第7章。

以上是关于8的主要内容,如果未能解决你的问题,请参考以下文章