单例,TCP/IP,普适性排序算法

单例,TCP/IP,普适性排序算法

  1. 单例

    package com.qfedu.single;

    /*
    需求:
    要求当类对象在整个程序运行过程中,有且只能有一个类对象!!!
    单例!!!

    你是如何获取类对象的?
    new一个

    问题:
    通过new 关键字 和 构造方法,创建的对象,每一次都是新的对象

    写个公告:
    这个对象我new过了,你们不能在new了!!!

    解决第一个问题:
    创建对象的方式过于轻松,借助于 new 和 构造方法 即可
    私有化构造方法

    第二个问题:
    类外没有创建 或者说 获取对象的方式

     类外有没有当前类对象,没有
     期望可以获取 或者 创建对象
    
     这里只可以使用成员方法获取 或者 创建类对象
    

    分析这个成员方法该写成什么样子
    类外可以使用 权限修饰为public
    类外没有当前类对象,普通的成员方法不能使用,只能使用 static修饰的静态成员方法 static
    当前方法是需要获取或者创建类对象,这里需要一个返回值 SingleDog
    方法名: getInstance
    形式参数列表:没有参数

     public static SingleDog getInstance()
    

    问题3:
    通过这种方式获取的类对象,实际上就是 new 对象

     期望的是该方法可以提供给我们之前创建的类对象,如果之前没有创建,调用当前方法时创建。
    
     空间首地址,如何保存???空间首地址在哪里???
         1. 保存空间首地址,变量
             成员变量:
                 每一个类对象内,都有一个成员变量,而且是完全不同的!!!
                 不存在统一性,并且生命周期可能无法满足我们对于代码的需求!!!
    
             局部变量:
                 只能在方法内使用,方法调用,存在,运行结束,销毁,如何保存???
    
             静态成员变量:
                 生命周期足够长
                 在静态成员方法使用静态成员变量,是刚刚好!!!
         private static SingleDog sd = null;
    

    【思考】貌似问题全部解决了,代码实现了,请问有没有其他需要考虑的问题???
    目前代码在多线程情况下,存在抢占机制。有可能导致对象不一致!!!
    【加锁】
    使用同步代码块!!!
    锁对象如何选择???
    sd
    “SingleDog”
    SingleDog.class

    /
    /
    *

    • 单例

    • 默写!!!
      */
      class SingleDog {

      private static SingleDog sd = null;

      private SingleDog() {}

      public static SingleDog getInstance() {
      synchronized (SingleDog.class) {
      if (null == sd) {
      sd = new SingleDog();
      }
      }
      return sd;
      }
      }

    class MyThread1 implements Runnable {

     @Override
     public void run() {
         SingleDog instance = SingleDog.getInstance();
         System.out.println(instance);
     }
    

    }

    class MyThread2 implements Runnable {

     @Override
     public void run() {
         SingleDog instance = SingleDog.getInstance();
         System.out.println(instance);
     }
    

    }

    public class Demo1 {
    public static void main(String[] args) {
    new Thread(new MyThread2()).start();
    new Thread(new MyThread1()).start();
    }
    }

  2. IP

    网络编程:
    解决计算机和计算机之间的通信问题,PC,手机,iPad,手表,摄像头。QQ聊天,FeiQ

    网页编程:
    给予HTML页面基础之上,给予数据的展示,用户的交互,数据的传递… JD taobao tmall

    计算机网络:
    各种各样的计算机,相互之间通过网络传输协议,完成的一个交互信息的网络。

    IP 地址
    IP地址就是你的计算机在网络世界的唯一地址!!!
    IPV4
    IPV6 让地球上的每一粒沙子都有IP地址
    IPV4 是由32个二进制位组成的数据
    00000000 00000000 00000000 00000000
    一般大家所看到的,或者交流的地址
    127.0.0.1 这是IP地址的底层32位二进制的一个映射关系
    0.0.0.0 ~ 255.255.255.255

     A类地址:一个网络号 + 三个主机号 国家政府 
     B类地址:两个网络号 + 两个主机号 事业单位,医院,学校
     C类地址:三个网络号 + 一个主机号 网络运营商给予一个区域范围用户的IP地址
    

    IP类:
    Java中提供了一个操作IP地址的类对象。
    InetAddress
    InetAddress.getLoaclhost();
    InetAddress.getByName();
    InetAddress.getAllByName();
    InetAddress.getHostByName();

  3. UDP

    Socket 套接字
    在网络传输中一个非常重要的协议,需要在不同的计算机上按照有Socket这些计算机才可以完成借助于网络的信息传递。

    协议:
    要求协议的双方必须按照一些条件和规矩来处理一些内容。
    IEEE

    UDP协议下的socket:
    1. 是按照数据包的方式来处理数据,面向无连接。
    2. 每一个数据包有大小限制,要求在64KB以内!
    3. 因为面向无连接,所有传输数据不安全,不稳定
    4. 因为面向无连接,所有传输速度贼快
    5. UDP不区分客户端和服务器,只有发送端和接收端

    UDP下的socket:
    DatagramSocket();
    UDP协议下的Socket
    DatagramPacket(byte[] buff, int length, InetAddress ip, int port);
    UDP协议下的数据表方方法
    buff: 数据内容,要求是一个byte类型数组
    length: 发送的byte类型数组的字节的长度
    ip: 接收人的IP类对象
    port: 端口号
    总端口号 0 ~ 65535
    0 ~ 1023 不能使用,因为绑定系统服务
    剩余的随便用!!! 10000+++
    Tomcat 8080

     send 
     receive 
    

    数据丢失的原因:
    1. 带宽不够
    2. 电脑处理能力不足

  4. TCP

    TCP特征:
    1. TCP协议是完全依赖IO流的,面向连接的!!!
    2. 数据传输没有大小限制
    3. 因为面向连接,所以数据安全
    4. 因为面向连接,所以速度较慢
    5. TCP协议严格区别客户端和服务器

    TCP协议的三次握手

    建立TCP的过程
    1. 获取TCP协议的Socket
    Socket 客户端: 这里需要服务器的IP地址和端口号
    ServerSocket 服务器: 确定端口号即可
    2. 获取对应的【IO流对象】对象
    InputStream
    OutputStream
    3. 处理数据,读取(receive)或者写入(send);
    4. 关闭Scoket

  5. 普适性排序算法【重点】

    我们希望能够得到一个可以排序任何数据类型,并且按照自己需要的排序要求来完成的排序算法

    核心内容;
    1. 泛型
    2. Comparator接口

    /**

    • 使用自定义泛型,和Comparator接口作为比较方式约束的一个普适性排序算法

    • @param arr T类型的数组,可以是任意类型,而且该数组的数据类型用于约束当前方法的泛型对应具体数据类* 型

    • @param com Comparator接口的实现类对象,而且受到泛型约束,泛型对应的具体数据类型,根据第一个的参* 数T类型数组决定
      */
      public static void selectSort(T[] arr, Comparator com) {
      if (null == arr || arr.length == 0 || null == com) {
      throw new NullPointerException();
      }

      for (int i = 0; i < arr.length - 1; i++) {
      int index = i;
      for (int j = i + 1; j < arr.length; j++) {
      if (com.compare(arr[index], arr[j]) > 0) {
      index = j;
      }
      }

        if (index != i) {
            T temp = arr[index];
            arr[index] = arr[i];
            arr[i] = temp;
        }
      

      }
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值