欢聚时代一面凉经
MySQL
mysql的事务的四大特性
- 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):事务前后数据的完整性必须保持一致。
- 隔离性(Isolation):多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其它事务的操作数据所干扰,多个并发事务之间要相互隔离。
- 持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
事务的隔离级别有哪一些
- READ-UNCOMMITTED(读取未提交):可以读取到未提交数据,事务回滚后,读取数据实际并不存在。
- READ-COMMITTED(读取已提交):只能读取已提交数据,但是会导致当前事务读取的数据前后值不一样。
- REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改。
- SERIALIZABLE(可串行化):所有事务操作依次顺序执行。
默认的事务隔离级别是什么
REPEATABLE-READ(可重复读)
表锁和行锁有什么区别
- 表锁:开销小、加锁快、无死锁;锁粒度大,发生锁冲突的概率高,高并发下性能低。
- 行锁:开销大、加锁慢、会出现死锁;锁的粒度小,发生锁冲突的概率低、处理并发的能力强。
参考
JVM
运行时数据区有哪些
- 程序计数器:用于记录当前线程的正在执行的字节码指令位置。
- 虚拟机栈:用于存储局部变量表(基本数据类型和对象引用),操作数栈,动态链接,方法出口等信息。
- 本地方法栈:为虚拟机使用的Native方法(本地方法)提供服务。
- 方法区:用于存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译的代码等数据。
- 堆:存放对象实例,所有的对象的实例都需要在这里分配内存。
哪些是线程私有哪些的线程独占的
- 线程私有:虚拟机栈、本地方法栈、程序计数器。
- 线程独占:堆、方法区。
方法区存放的有哪些东西
被虚拟机加载的类信息、常量、静态变量、即使编译器编译的代码。
创建一个对象的过程
- 类加载检查
- 分配内存
- 初始化零值
- 设置对象头
- 执行init方法
如何知道这个对象是哪个类型的
通过对象的getClass()方法。
Redis
基本的数据结构有哪些
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(有序集合)
string的底层实现
计算机网络
TCP和UDP的区别
- TCP是面向连接的,可靠的数据传输服务;UDP是面向无连接的,不保证数据传输的可靠性。
- TCP面向字节流;UDP面向报文。
- TCP数据传输慢;UDP数据传输快。
- TCP有拥塞控制;UDP没有拥塞控制。
- TCP只能是一对一的通信;UDP支持一对一、一对多、多对一和多对多的通信。
- TCP的首部开销大;UDP的首部开销小。
- TCP是全双功;UDP是半双功;
TCP和UDP的使用场景
- TCP:文件传输、发送或接收邮件、远程登录。
- UDP:即时通信、在线视频、网络语音电话。
TCP如何保证传输的可靠性和有序性
- 可靠性 - 应用数据被TCP划分为最适合发送的数据包。
- 在TCP发送一个数据块后,将启动一个定时器,用以接收目的端的确认信息,若不能及时得到确认,将重发该数据包(超时重发)。
- 目的端接收到一个数据包后,需要向另一方发送确认信息,这个确认信息不是立即发送,往往推迟个几分之一秒,用来对包做完整性校验。
- 接收端接收到的数据包可能会有重复,这个时候,会进行查重操作,把重复的数据包丢掉。
- TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。
 
- 有序性 - TCP会对发送的数据包进行编号,接收方接收之后会进行排序,之后发送给应用层。
 
TCP的三次握手和四次挥手
- 三次握手- 客户端发送SYN的请求标志。
- 服务器发送ACK的确认标志和SYN的请求标志。
- 客户端发送ACK的确认标志。
 
- 四次挥手- 客户端发送FIN的结束标志。
- 服务器发送ACK的确认标志。
- 服务器发送ACK的确认标志和FIN的结束标志。
- 客户端发送ACK的确认标志。
 
参考