Java试题
在日常学习和工作生活中,我们很多时候都不得不用到试题,试题是用于考试的题目,要求按照标准回答。什么样的试题才是科学规范的试题呢?以下是小编精心整理的Java试题,仅供参考,希望能够帮助到大家。
1、 TCP和UDP的区别?
(1)TCP(Transmission Control Protocol 传输控制协议)
(2)UDP(User Datagram Protocol 用户数据包协议)
(3)OSI(Open System Interconnection 开放系统互联)
七层参考模型:应用层(表现层,会话层),传输层,网络层,数据链路层,物理层。
二者都是OSI(Open System Interconnection 开放系统互联)参考模型中传输层的 协议,其中TCP是三次握手的协议。
二者区别如下:
(1)TCP是面向连接的(即建立通信之前需要通过三次握手建立连接);UDP是无连接的(即不负责确认通信对象是否存在)
(2)TCP通过一系列的机制提供可靠的服务,保证通过TCP传输的数据无差错,不丢失,不重复,且按序到达;而UDP则只尽最大努力交付数据,不保证可靠性,可能丢包。
(3)TCP面向字节流,把数据看做一连串无结构的字节流;UDP是面向报文的,应用程序发送多长的报文,UDP就传输多长
(4)TCP有拥塞控制机制(流量控制),防止向网络中注入过多的数据,使网络中的'路由器和链路不至于过载,保证接收方能够来得及接收数据,而UDP则没有。
(5)TCP连接只能是一对一的;UDP支持一对一,一对多,多对一和多对的通信。
(6)TCP要求的系统资源较多,UDP较少。
2、 JDBC操作数据库的步骤。
A、加载数据库驱动。
B、建立到数据库的连接。
C、定义sql,获取sql执行环境,设置相应的参数。
D、执行sql,处理sql执行结果——DML语句返回int, DQL语句返回结果集对象 ResultSet。
E、释放资源。
3、 字节流,字符流的区别。
(1)Java中字节流。
a、 所有字节输入流的最大抽象父类是InputStream。
b、 所有字节输出流的最大抽象父类是OutputStream。
(2)Java中字符流
a、 所有字符输入流的最大抽象父类是Reader。
b、 所有字符输出流的最大抽象父类是Writer。
二者区别:
(1)字节流操作的单元为一个字节;字符流操作的单元为两个字节的Unicode码。
(2) 字节流可以处理任意类型的数据;字符流只能处理文本类型的数据。
(3)字节流在操作过程中没有用到缓冲区(内存),直接对文件本身进行操作;字符流使用到了缓冲区。
(4)字节流在写的时候不需要close,也能输出内容;字符流只有在close之后,或者使用flush强制刷新缓冲区之后,才能输出内容(与缓冲区的使用有关)。
(5)由于字符流有缓冲区,所以字符流的一次操作效率比字节流高。
4、 线程的几种状态分别是什么?
(1)新建状态(new):将一个继承了Thread或者实现了Runnable接口的线程类,通过new的方式创建一个实例,则此线程就进入了新建状态。
(2)就绪状态(Runnable):调用线程类的start方法之后,准备了线程所需的系统资源,线程等待CPU的使用权的状态称为就绪状态。
(3)运行状态(Running):就绪状态的线程获取到了CPU的使用权之后的状态,即此线程run方法中的代码开始被执行。
(4)阻塞状态(Blocked):因为某种原因,线程放弃CPU的执行权,直到重新进入就绪状态,阻塞的情况分为以下三种:
A、等待阻塞:线程执行wait方法,释放所有资源(包括同步锁),JVM将其放入“等待池”中,即等待队列。只有在超出等待时间后,或者其他线程调用同一个对象的notify或者notifyAll方法时,才能重新进入就绪状态(Runnable)
说明:等待阻塞由于需要释放所占有的所有资源,包括对象锁,所以必须在同步方法块中调用相应的锁对象的wait方法,否则抛出异常java、lang、IllegalMonitorStateException
B、同步阻塞:线程运行同步的代码时,需要先获取同步锁,则JVM把此线程放入“锁池”中,即进入同步队列
C、其他阻塞:运行的线程执行sleep或join方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep状态超时、join等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
说明:与wait造成的阻塞不同的是,这种阻塞不会释放所占用的资源,即不会释放同步锁
5、 String,StringBuilder,StringBuffer的区别。
(1) String是定长字符串;StringBuilder,StringBuffer是变长字符串。
(2) StringBuilder是线程非安全,一般用于单线程中,执行效率较StringBuffer高。
(3)StringBuffer是线程安全的,如果在多个线程中需要同步则采用此类。