返回
技术面过关后,如何在面试时征服HR
后端
2024-01-20 00:37:46
面试的重大意义
面试在求职过程中意义重大。它提供了求职者与招聘经理直接面对面交流的机会,以展现自己的才能和技能,并向雇主证明自己可以为公司创造价值。
### 多线程并发编程面试题精选
#### 多线程基本概念
* 线程:线程是操作系统可以调度的最小执行单元。它包含了自己的程序计数器、栈、局部变量以及其他寄存器,但共享公共内存空间。
* 进程:进程是操作系统进行资源分配和管理的基本单位。它包含一个或多个线程,以及该线程执行所需的资源,如代码、数据和堆栈。
* 线程并发:当多个线程同时执行时,称为线程并发。
* 线程同步:当多个线程同时访问共享资源时,需要使用线程同步来确保数据的完整性和一致性。
* 线程死锁:当两个或多个线程都等待对方释放资源,导致无法继续执行时,称为线程死锁。
#### JMM内存模型
* JMM内存模型:JMM内存模型定义了Java语言中的内存模型。它定义了线程如何共享内存以及如何同步对共享内存的访问。
* JMM内存模型的三大特性:
* 原子性:一个操作要么完全执行,要么完全不执行。
* 可见性:一个线程对共享变量的修改对其他线程是可见的。
* 有序性:线程对共享变量的修改具有某种顺序。
#### CAS
* CAS(Compare-And-Swap):CAS是一种用于实现原子操作的指令。它同时比较一个变量的当前值和预期值,如果相等,则更新该变量的值,否则不更新。
* CAS存在的问题:
* ABA问题:CAS无法区分变量值的变化是由于预期的操作引起的,还是由于其他线程的修改引起的。
* 循环等待:如果两个线程同时试图修改同一个变量,可能会导致循环等待。
#### 死锁
* 死锁:死锁是指两个或多个线程都在等待对方释放资源,导致无法继续执行。
* 产生死锁的条件:
* 互斥条件:每个资源只能被一个线程独占使用。
* 占有且等待条件:一个线程在持有资源的同时,等待另一个线程释放资源。
* 不可剥夺条件:一个线程一旦持有资源,就不能被抢占。
* 循环等待条件:两个或多个线程形成环形等待,每个线程都等待另一个线程释放资源。
#### 如何避免死锁
* 避免互斥条件:通过使用锁升级或资源替代等技术,避免多个线程同时持有同一资源。
* 避免占有且等待条件:通过使用非阻塞算法或超时机制,避免一个线程长时间持有资源。
* 避免不可剥夺条件:通过使用抢占式调度或优先级调度等技术,允许一个线程抢占另一个线程的资源。
* 避免循环等待条件:通过对资源进行编号或使用死锁检测和恢复等技术,避免两个或多个线程形成环形等待。