Java面试题Day06

1.如何将字节流转为字符流?

InputStreamReader是字节流通向字符流的桥梁

BufferedReader in = new BufferedReader(new InputStreamReader(System.in))

OutputStreamWriter 是字符流通向字节流的桥梁

Writer out = new BufferedWriter(new OutputStreamWriter(System.out));

2.说下事务的ACID

原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生,

一致性(Consistency):事务前后数据的完整性必须保持一致.

隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离,

持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响,

3.事务有哪几种隔离级别呢?

读未提交(read uncommitted)

另一个事务修改了数据,但尚未提交,而本事务中的select会读到这些未被提交的数据脏读.

读已提交(read committed)RC

事务能够看到的数据都是其他事务已经提交的修改,也就是保证不会看到任何中间性状态,当然脏读也不会出现,

可重复读(repeatable read)RR

保证同一个事务中多次读取的数据是一致的,这是MySQL InnoDB引擎的默认隔离级别.

串行(serializable)

并发事务之间是串行化的,通常意味着读取需要获取共享读锁.

更新需要获取排他写锁,如果SQL使用WHERE语句,还会获取区间锁,是最高的隔离级别.

4.事务的并发?什么是脏读?事务隔离级别,每个级别会引发什么问题?MySQL默认是哪个级别?

事务的并发问题

- 脏读 :脏读是指在一个事务处理过程中读取了另一个事务未提交的数据.

- 不可重复读,事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致.

- 幻读:可重复读的隔离级别解决了不可重复读的问题,保证了同一个事务里.查询的结果都是事务开始时的状态(一致性).

**MySQL默认的事务隔离级别为repeatable-read(可重复读)**

MySql支持四种事务隔离级别

事务隔离的级别要得到底层数据库引擎的支持,而不是应用程序或者框架支持.

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也就越大,

可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且有较好的并发性能,

尽管他会导致不可重复读,幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制.

5.名词解释 IP协议 TOC协议 UDP

IP协议 分组交换协议 不可靠传输 一个数据包自动分成若干小的数据包然后通过网络进行传输

TCP协议 传输控制协议 可靠协议 建立在IP协议之上, 先建立连接,然后才能传输数据,传输完成后断开连接,支持双向通信,双方可以同时传输和接收数据,

UDP 数据报文协议,不面向连接,不可靠传输,传输效率高,通常用来传输视频等能容忍丢失部分数据的文件,

6.TCP与UDP比较

TCP:面向连接的协议,数据传输之前必然要建立连接,

UDP:每个数据报中都给出了完整的地址信息,无需要建立发送方和接收方的连接

 

TCP:传输数据大小限制,双方的socket就可以按统一的格式传输大的数据.

UDP:UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内

 

TCP:可靠协议,确保完全正确发送数据.

UDP:不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方,

7.Socket

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向连接的一端称为一个Socket.

Socket通常用来实现客户方和服务方的连接,一个Socket由一个Ip地址和一个端口号唯一确定,

在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程,

8.异常的处理

声明:其实就是程序中遇到异常时,自己不处理,交给其它程序处理throw(在使用throw抛出异常代码的后面,不能书写任意代码)

捕获:其实就是在程序中遇到异常时,不会交给其他程序处理,自己处理try,catch,finally(使用try...catch...finally结构,catch中抛出异常后面如果有其他语句,先执行finally语句再去执行catch中的其他语句)

9.定义异常处理时,什么时候定义try,什么时候定义throws呢?

功能内部如果出现异常,如果内部可以处理,就用try;

如果功能内部处理不了,就必须声明出来,让调用者处理.

10.请写出你最常见的五个runtime excption.

NullPointerException(空指针异常)

ArrayIndexOutOfBoundsException(数组索引越界异常)

ClassCastException(类型转换异常)

ArithmeticException(数字计算异常)

NumberFormatException(数字格式化异常)

posted @ 2023-01-09 14:48  英俊潇洒的萨克君  阅读(26)  评论(0)    收藏  举报