写点什么

Android 经典面试:46 道面试题带你了解中高级 Android 面试,附面试题答案

发布于: 2021 年 01 月 20 日

开头


在一般的互联网公司的技术人员的面试中,大概会经历 3 到 4 轮的面试,差不多 2-3 轮的技术面,还有 1 轮的 HR 面试,有人面试题是有关“目标”,有的关于“方法”,有的关于“算法”,有的关于“基础”。在小编看来,面试是找工作的第一道难关,原本以为面试都会问很难的问题,如果是更好的公司,可能问的问题越难。



在很多的博客或者书上,说有三种,除了上述的两种以外,还有一种是实现 Callable 接口。但是这种并不是,因为,我们检查 JDK 中 Thread 的源码,看它的注释:


There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An instance of the subclass can then be allocated and started.


这里面明确指出,只有两种方式创建一个新线程执行,而且 Thread 类的构造方法里,也没有接受参数类型为 Callable 的方法。所以新启线程的方式只有上述两种。


Thread 和 Runnable 的区别


我们知道 Java 是面向对象的语言,对于线程来说,这是操作系统层面的概念,那么对于线程来说,Thread 和 Runnable 谁才是线程呢?


要注意,Thread 才是 Java 里对线程的唯一抽象,Runnable 只是对任务(业务逻辑)的抽象。Thread 可以接受任意一个 Runnable 的实例并执行。用一个生活中的例子来说明,一个开发部门中有很多的开发人员,每个开发人员都可以开发程序,这样,每个开发人员就是一个个的 Thread,而开发人员接收到的开发任务就是一个个的 Runnable,开发人员是做实际开发工作的,不同的开发人员完全可以接受同一个开发任务。


深入理解 run()和 start()


同时,我们通过 new Thread()其实只是 new 出一个 Thread 的实例,还没有操作系统中真正的线程挂起钩来。只有执行了 start()方法后,才实现了真正意义上的启动线程。


start()方法让一个线程进入就绪队列等待分配 CPU,分到 CPU 后才调用实现的 run()方法,start()方法不能重复调用,如果重复调用会抛出 IllegalThreadStateException 异常。


而 run 方法是业务逻辑实现的地方,本质上和任意一个类的任意一个成员方法并没有任何区别,可以重复执行,也可以被单独调用。


线程的状态


Java 中线程的状态也不是简单的只有运行和死亡,共分为 6 种:


  1. 初始(NEW):新创建了一个线程对象,但还没有调用 start()方法。

  2. 运行(RUNNABLE):Java 线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。


线程对象创建后,其他线程(比如 main 线程)调用了该对象的 start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取 CPU 的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得 CPU 时间片后变为运行中状态(running)。


  1. 阻塞(BLOCKED):表示线程阻塞于锁。

  2. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。

  3. 超时等待(TIMED_WAITING):该状态不同于 WAITING,它可以在指定的时间后自行返回。

  4. 终止(TERMINATED):表示该线程已经执行完毕。


理解了线程的状态才能更好的让我们在并发编程调试程序时,知道线程的工作情况,进而有针对性的检查我们的代码的运行情况,进一步优化我们的代码。


最后


简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。


面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到 offer 后就是你选择他了。


另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖 ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤......所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!


最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。


希望大家都能找到合适自己满意的工作!如果需要 PDF 版本可以在 GitHub 中自行领取!



进阶学习视频



附上:我们之前因为秋招收集的二十套一二线互联网公司 Android 面试真题 (含 BAT、小米、华为、美团、滴滴)和我自己整理 Android 复习笔记(包含 Android 基础知识点、Android 扩展知识点、Android 源码解析、设计模式汇总、Gradle 知识点、常见算法题汇总。)



用户头像

VX公众号:编程进阶路 2020.11.28 加入

还未添加个人简介

评论

发布
暂无评论
Android经典面试:46道面试题带你了解中高级Android面试,附面试题答案