欢聚时代一面凉经

MySQL

mysql的事务的四大特性

  • 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency):事务前后数据的完整性必须保持一致。
  • 隔离性(Isolation):多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其它事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务的隔离级别有哪一些

  • READ-UNCOMMITTED(读取未提交):可以读取到未提交数据,事务回滚后,读取数据实际并不存在。
  • READ-COMMITTED(读取已提交):只能读取已提交数据,但是会导致当前事务读取的数据前后值不一样。
  • REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改。
  • SERIALIZABLE(可串行化):所有事务操作依次顺序执行。

默认的事务隔离级别是什么

REPEATABLE-READ(可重复读)

表锁和行锁有什么区别

  • 表锁:开销小、加锁快、无死锁;锁粒度大,发生锁冲突的概率高,高并发下性能低。
  • 行锁:开销大、加锁慢、会出现死锁;锁的粒度小,发生锁冲突的概率低、处理并发的能力强。

参考

JVM

运行时数据区有哪些

  • 程序计数器:用于记录当前线程的正在执行的字节码指令位置。
  • 虚拟机栈:用于存储局部变量表(基本数据类型和对象引用),操作数栈,动态链接,方法出口等信息。
  • 本地方法栈:为虚拟机使用的Native方法(本地方法)提供服务。
  • 方法区:用于存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译的代码等数据。
  • 堆:存放对象实例,所有的对象的实例都需要在这里分配内存。

哪些是线程私有哪些的线程独占的

  • 线程私有:虚拟机栈、本地方法栈、程序计数器。
  • 线程独占:堆、方法区。

方法区存放的有哪些东西

被虚拟机加载的类信息、常量、静态变量、即使编译器编译的代码。

创建一个对象的过程

  1. 类加载检查
  2. 分配内存
  3. 初始化零值
  4. 设置对象头
  5. 执行init方法

如何知道这个对象是哪个类型的

通过对象的getClass()方法。

Redis

基本的数据结构有哪些

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(有序集合)

string的底层实现

计算机网络

TCP和UDP的区别

  1. TCP是面向连接的,可靠的数据传输服务;UDP是面向无连接的,不保证数据传输的可靠性。
  2. TCP面向字节流;UDP面向报文。
  3. TCP数据传输慢;UDP数据传输快。
  4. TCP有拥塞控制;UDP没有拥塞控制。
  5. TCP只能是一对一的通信;UDP支持一对一、一对多、多对一和多对多的通信。
  6. TCP的首部开销大;UDP的首部开销小。
  7. TCP是全双功;UDP是半双功;

TCP和UDP的使用场景

  • TCP:文件传输、发送或接收邮件、远程登录。
  • UDP:即时通信、在线视频、网络语音电话。

TCP如何保证传输的可靠性和有序性

  • 可靠性

    1. 应用数据被TCP划分为最适合发送的数据包。
    2. 在TCP发送一个数据块后,将启动一个定时器,用以接收目的端的确认信息,若不能及时得到确认,将重发该数据包(超时重发)。
    3. 目的端接收到一个数据包后,需要向另一方发送确认信息,这个确认信息不是立即发送,往往推迟个几分之一秒,用来对包做完整性校验。
    4. 接收端接收到的数据包可能会有重复,这个时候,会进行查重操作,把重复的数据包丢掉。
    5. TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。
  • 有序性

    • TCP会对发送的数据包进行编号,接收方接收之后会进行排序,之后发送给应用层。

TCP的三次握手和四次挥手

  • 三次握手
    1. 客户端发送SYN的请求标志。
    2. 服务器发送ACK的确认标志和SYN的请求标志。
    3. 客户端发送ACK的确认标志。
  • 四次挥手
    1. 客户端发送FIN的结束标志。
    2. 服务器发送ACK的确认标志。
    3. 服务器发送ACK的确认标志和FIN的结束标志。
    4. 客户端发送ACK的确认标志。

参考