java中equal和==的区别:
equal方法除非进行了重写(比如String类和基本类型包装类),否则都是进行对象引用的比较。而==除了比较基本类型时是比较值,其他情况均是比较引用地址。
java适配器模式?
将原来的实现接口所有方法变成了继承实现了接口方法的抽象类(adapter),然后再实现想要的方法。
抽象类和接口的区别
抽象类和普通类的区别只是抽象类包含至少一个抽象方法,并且在声明时要加上个abstract。
接口是一种特殊的抽象类,有以下特点:
成员变量:只能是常量 成员函数:只可以是抽象 构造方法:无
关系和区别:
类与类:继承,单继承
类与接口:单实现,多实现(这个也算是多继承的一种形式)
接口与接口:单继承,多继承(这里也就弥补了java没有多继承的缺陷)
最重要的区别:设计理念
接口类: like a(具有某些特定的功能和方法,比如某个动物实现了跑和吃的接口)
抽象类: is a(属于某个范畴,比如猫属于猫科动物,必须继承自猫科动物这个抽象类,但猫科动物只是个概念没有具体实现)
java多线程:
1.线程安全问题:
产生的原因:多个线程 存在共享数据 对共享数据进行多条语句操作 具体又可以分为两种情况
(1)相同类型的多个线程 如多个窗口卖票 票是共享资源,对其进行卖票操作
(2)不同类型的多个线程 如对人进行命名和获取年龄操作 人对象是共享资源 但进行两种操作,一种获取信息,另一种是设置参数
以上两种情况要想保证线程安全需要进行加锁才能保证安全 (1)对卖票这个操作进行加锁(即run方法中的对共享资源进行操作的语句加synchronized(new object())语句,其中加的锁对象也要保证所有线程用的是一样的)(2)对获取信息和设置参数均加锁,并且加的锁要保证相同!
其实上面两种情况本质是一样的,即对共享资源的操作需要加上唯一的一把锁。
2.线程的死锁问题的描述:
eg:
线程1和线程2分别拥有a锁和b锁,现在线程1想拿到b锁进行b操作,同时线程2也想拿到a锁进行a操作,但是两把锁却分别被对方拥有,此时就会出现二者互相想那对面的锁却不放弃自己锁的现象,导致进入阻塞死锁状态。
笼统的说:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
另一种解释方式: 死锁是因为多线程访问共享资源,由于访问的顺序不当所造成的,通常是一个线程锁定了一个资源A,而又想去锁定资源B;在另一个线程中,锁定了资源B,而又想去锁定资源A以完成自身的操作,两个线程都想得到对方的资源,而不愿释放自己的资源,造成两个线程都在等待,而无法执行的情况。
java网络编程大致流程:
udp 编程
发送端:
1,创建socket对象 构造函数 DatagramSocket()
2.创建数据并打包 byte[] bts="helloworld".getBytes()
DatagramPacket dp=newDatagramPacket(bts,bts.getLength,InetAddress.getByName("192.168.1.12"),10086)
3.数据发送 ds.sent(dp)
4.释放 ds.close()
接收端:
1,创建socket对象 DatagramSocket ds=new DatagramSocket(端口号[>1000])
2,创建包裹 DatagramPacket dp=new DatagramPacket(bytes,bytes.length()) //bytes为字节数组byte[],存放数据
3,接收数据 ds.receive(dp)
4,解析数据并显示或应用 String ip=dp.getAddress().getHostAddress(); //得到ip地址
String data=String(dp.getData(),0,dp.getLength()) //得到数据包中的字符串
5,释放资源 ds.close()
tcp编程:
客户端
1,新建socket对象
2,获取输出流,写数据 outputStream
3,释放资源
服务器端
1,新建ServerSocket对象
2,监听客户端的sokcet ,进行连接 socket s= new ServerSocket().accept();
3,获取输入流,读取数据;
4,释放资源