9.16日面试题

  • 请你说说MySQL索引,以及它们的好处和坏处?

    1. 首先理解什么是索引
      索引是一种能够让mysql快速查找到数据的数据结构,类似于书的目录,帮助快速定位数据
    2. 在mysql中使用innodb引擎使用的索引结构式B+tree,相较于二叉树,更扁平矮宽,适合存储在磁盘中
    3. 索引的数据也需要存储在磁盘中,需要动态更新,增加了存储成本。
  • 请说说你对多线程的理解?

    1. 线程是什么
      线程是程序执行最小的单元,一个进程下面会有多个线程
    2. 线程之间共享内存空间和系统资源,但每个进程又有自己的栈空间,计数器,局部变量
    3. 多线程优点
      节省程序相应时间,提高CPU使用效率,创建和切换开销小,数据利用率高,简化程序结构
  • 说说你对线程安全的理解?

    1. 线程安全是什么?
      在多线程环境下,线程没有按照我们预期的想法运行,导致操作共享的变量异常性
    2. 线程安全有三种方案
      原子类:通过CAS机制实现更新共享变量
      volatile关键字:一旦修改变量,则立刻刷新到共享内存中,且其他内存核心副本中原数据失效,需要重新读取,
      Java锁:syn+lock锁
  • CAS(比较并交换)

    1. CAS是什么?
      并发中避免共享变量异常运用的一种技术
      三个操作数:内存位置,预期原值,和更新值
    2. 原理:
      执行CAS操作时,将预期原值和内存位置中的值比较,如果匹配则更新,不匹配则不会操作
      多个线程执行CAS操作,只会有一个成功
  • 死锁的原因?

    1. 死锁是什么?
      两个线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放资源,那么就会产生死锁
    2. 死锁怎么解决?
      互斥使用:当资源被一个线程占用的时候,不允许其他线程使用
      不可抢占:资源请求者不能强制从资源占有者手中夺取资源,只能由资源占有者主动释放
      请求和保持:当资源请求者请求别的资源同时要保持对原有资源的占有
      避免循环等待:打破P1占有P2需要的资源,P3占有P1需要的资源,P2占有P3需要的资源这样的循环
  • 线程间的通信方式

    1. 管道、命名管道、信号、消息队列、共享内存、内存映射、信号量、Socket
posted @ 2022-09-16 15:32  网抑云黑胶SVIP用户  阅读(16)  评论(0)    收藏  举报