你的位置:首页 > Java教程

[Java教程]几个java面试题的简洁回答


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,释放资源