• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android并发编程高级面试题汇总含详细 一

武飞扬头像
BlueSocks
帮助1

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊

👀你想要的面试题这里都有👀

👇👇👇

假如只有一个cpu,单核,多线程还有用吗 ?

详细讲解

享学课堂移动互联网系统课程:架构师筑基必备技能《线程与进程的理论知识入门1》

这道题想考察什么?

是否了解并发相关的理论知识

考察的知识点

  1. cpu多线程的基本概念
  2. 操作系统的调度任务机制
  3. CPU密集型和IO密集型理论

考生应该如何回答

CPU的执行速度要远大于IO的过程,因此在大多数情况下增加一些复杂的CPU计算都比增加一次IO要快。单核CPU可以通过给每个线程分配CPU时间片(时间单元)来实现多线程机制。由于CPU频率很高,故时间单元非常短。所以单核也可以实现多线程机制。

从用户体现上说,单核多线程也能够减少用户响应时间,例如web页面,也是防止IO阻塞。处理器的数量和并不影响程序结构, 所以不管处理器的个数多少, 程序都可以通过使用多线程得到简化。


sychronied修饰普通方法和静态方法的区别?什么是可见性?(小米)

详细讲解

享学课堂移动互联网系统课程:架构师筑基必备技能《线程与进程的理论知识入门1》

这道题想考察什么?

是否了解Java并发编程的相关知识

考察的知识点

  1. sychronied的原理
  2. 并发的特性

考生应该如何回答

sychronied是Java中并发编程的重要关键字之一。在并发编程中synchronized一直是解决线程安全问题,它可以保证原子性,可见性,以及有序性。

  • 原子性:原子是构成物质的基本单位,所以原子的意思代表着—“不可分”。由不可分可知,具有原子性的操作也就是拒绝线程调度器中断。
  • 可见性:一个线程对共享变量的修改,另一个线程能够立刻看到,称为可见性。
  • 有序性:程序按照代码的先后顺序执行。编译器为了优化性能,有时会改变程序中语句的顺序,但是不会影响最终的结果。有序性经典的例子就是利用DCL双重检查创建单例对象。

synchronized可以修饰方法,也能够使用synchronized(obj){}定义同步代码块。

  • 修饰方法:

    1. 实例方法,作用于当前实例加锁,进入方法前需要获取当前实例的锁;
    2. 静态方法,作用于当前类对象加锁,进入方法前需要获取当前类对象的锁;
  • 修饰代码块,指定加锁对象,对给定对象加锁,进入代码块前要获得给定对象的锁。

使用sychronied修饰普通方法和静态方法,其实也等价于synchronized(this){}synchronized(class){}


4.3 Synchronized在JDK1.6之后做了哪些优化 (京东)

详细讲解

享学课堂移动互联网系统课程:架构师筑基必备技能《线程与进程的理论知识入门1》

这道题想考察什么?

对并发编程的掌握

考察的知识点

并发与synchronized原理

考生如何回答

synchronized是Java中非常重要的一个关键字,对于Android开发同学来说,考虑到多线程的情况,一般都直接使用到synchronized关键字对方法或者对象上锁。但是问题是为什么加上synchronized关键字就能实现锁,它的原理是怎么回事呢?

字节码

如果我们使用javap -v xxx.class 反编译这样一个class文件

public static void main(String[] args) {
        synchronized (InjectTest.class) {
            System.out.println("hello!");
        }
}

此时我们获得到结果为:

学新通

可以看到javap的输出信息中存在:monitorenter与monitorexit指令。这就代表了同步代码块的入口与出口。

这里的monitor是:对象监视器。在JVM中,每个对象都会和一个对象监视器(monitor)相关联。monitorenter指令插入到同步代码块开始的位置、monitorexit指令插入到同步代码块结束位置,jvm需要保证每个monitorenter都有一个monitorexit对应。这两个指令,本质上都是对 对象监视器(monitor)进行获取,这个过程是排他的,也就是说同一时刻只能有一个线程获取到由synchronized所保护对象的监视器。线程执行到monitorenter指令时,会尝试获取对象所对应的monitor所有权,也就是尝试获取对象的锁;而执行monitorexit,就是释放monitor的所有权。 如果其他线程已经占用了monitor,则当前线程进入阻塞状态。

当然这是jdk1.6之前的行为,而jdk1.6以后为了减少获得锁和释放锁带来的性能消耗,对synchronized锁进行了优化,包含偏向锁、轻量级锁、重量级锁;

关于锁类型与相关信息的信息都是存放在锁对象的对象头中 ,在了解偏向锁、轻量级锁、重量级锁之前,我们必须先认识一下什么是对象头!

Java对象头

对象在虚拟机内存中的布局分为三块区域:对象头、实例数据和对齐填充;Java对象头是实现synchronized的锁对象的基础,一般而言,synchronized使用的锁对象是存储在Java对象头里。

对象头由:存储对象自身的运行时数据的Mark Word 32位系统中4 指向类的指针 kClass pointer ,如果是数组对象还会有数组长度 Array Length。

其中mark word中就存储了锁状态:

学新通

在无锁状态下,mark word中的数据为: 学新通

包含对象hashcode,gc年龄,是否偏向锁与锁标志信息。

偏向锁

而偏向锁下,数据则为:

学新通

拥有锁的线程ID, epoch 大家可以先理解为校验位,同时 是否偏向锁标记由相对无锁状态下的0变为1。

首先之所以会引入偏向锁是因为:大多数情况下锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁,减少不必要的操作。

在程序进入同步代码块时,会访问Mark Word中偏向锁的标识是否设置成1,锁标志位是否为01,若为偏向锁状态,则查看偏向锁状态下线程ID是否指向当前线程。如果是则直接执行同步代码。但是mark word中记录的线程ID如果不是当前线程,则通过CAS比较与交换尝试修改对象头获得锁。CAS操作成功则可以直接执行同步代码,否则表示有其他线程竞争,此时获得偏向锁的线程被挂起,偏向锁升级为轻量级锁 ,然后被阻塞的线程继续往下执行同步代码。

轻量级锁

学新通

轻量级锁状态下,代码进入同步块时,如果同步对象锁状态为无锁状态, 虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝 ,接着虚拟机将使用CAS操作尝试将对象的Mark Word更新为指向Lock Record的指针 。这个操作如果成功则代表获取到了锁,但是如果失败,则会检查对象Mark Word是不是指向当前线程栈帧中的锁记录,如果是,则说明本身当前线程就拥有此对象的锁,就可以直接执行同步代码。否则说明锁对象被其他线程获取,当前线程是竞争者,那么当前线程会自旋等待锁,也就是不断重试,当重试一定次数后,总不能一直重试下去吧,太耗CPU了。所以这时候就要升级为重量级锁。

重量级锁

重量级锁就是通过对象监视器(monitor)实现,其中monitor的本质是依赖于底层操作系统的Mutex Lock实现,操作系统实现线程之间的切换需要从用户态到内核态的切换,切换成本非常高。主要是,当系统检查到锁是重量级锁之后,会把等待想要获得锁的线程进行阻塞,被阻塞的线程不会消耗cup。但是阻塞或者唤醒一个线程时,都需要操作系统来帮忙,这就需要从用户态转换到内核态,而转换状态是需要消耗很多时间的,有可能比用户执行代码的时间还要长。

更多Android进阶指南 关注公众号:Android老皮 解锁 《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2023最新Android中高级面试题汇总 解析,告别零offer

4.企业级Android音视频开发学习路线 项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战 360°全方面性能调优

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaibeh
系列文章
更多 icon
同类精品
更多 icon
继续加载