乐趣区

关于android:Android大厂面试经验分享OPPO字节华为阿里

前言

我是从小公司跳进去的,最终入职 OPPO,说实话这段时间的经验让我深深地感触到,咱们为跳槽做的一些长期抱佛脚的晋升跟那些大佬的积淀比起来太渺小了。咱们都晓得找材料学习、刷面试题,但兴许只能应酬这一次的面试,前面还是会技术发愁,那些短时间背下来的货色迟早会忘掉, 大家还是做好长期晋升本人的筹备,好好积淀的货色最初才是属于本人的。

说说过后的面试过程,我是内推取得的面试机会,很感激过后帮我内推的兄弟,总共三轮面试,两轮技术,一轮 HR 面,当天面试完结。

我 10:10 分到的公司,10:30 开始面试,第一轮面试将近一个小时,聊的点我基本上都答得上来,自我感觉良好。而后面试官让我等一下,他去叫他们老大来给我二面,我等了有二十几分钟吧,二面有一个多小时,这次问的比拟深,有些中央答的有些嗑吧,总体来说我本人是称心的。HR 面约到下午了,整个流程下来每轮面试官都让人感觉很不错,我本人做的筹备也让我面试感觉下来很爽。

面试题

我把面试遇到过的以及本人学习用到过相干内容都整顿到一起了,不便本人进行复盘和后续的查漏补缺:

一、Java 根底

1.1 动态外部类和非动态外部类的比拟

  1. 动态外部类和非动态外部类的区别
  2. 扩大:外部类都有哪些?
  3. 部分外部类
  4. 匿名外部类

1.2 多态的了解与利用

  1. 多态概述
  2. 多态中成员的特点
  3. instanceof 关键字
  4. 多态的转型
  5. 多态案例

1.3 java 办法的多态性了解

  1. 什么是 java 的多态
  2. 运行时多态
  3. 代码了解

1.4 java 中接口和继承的区别

1.5 线程池的益处,详解,单例(相对好记)

  1. 线程池的益处
  2. 线程池的详解
  3. 线程池的单例

1.6 线程池的长处及其原理

  1. 应用线程池的益处
  2. Executor 框架
  3. 线程池大小确定

1.7 线程池的长处(重点)

1.8 为什么不举荐通过 Executors 间接创立线程池

  1. 缓存队列 LinkedBlockingQueue 没有设置固定容量大小
  2. 最大线程数量是 Integer.MAX\_VALUE
  3. 回绝策略不能自定义(这个不是重点)
  4. 创立线程或线程池时请指定有意义的线程名称,不便出错时回溯(这个不是重点)

1.9 不怕难之 BlockingQueue 及其实现

  1. 阻塞与非阻塞
  2. LinkedBlockingQueue 源码剖析
  3. ArrayBlockingQueue 源码剖析

1.10 深刻了解 ReentrantLock 与 Condition

1.11 Java 多线程:线程间通信之 Lock

  1. synchronized 的缺点
  2. Lock 类接口设计
  3. ReentrantLock 可重入锁
  4. ReadWriteLock 读写锁
  5. 偏心锁
  6. Lock 和 synchronized 的抉择

1.12 Synchronized 关键字原理

  1. Synchronized 原理
  2. Synchronized 优化
  3. Synchronized 和 ReenTrantLock 的比照
  4. Synchronized 与 ThreadLocal 的比照

1.13 ReentrantLock 原理

1.14 HashMap 中的 Hash 抵触解决和扩容机制

  1. 对于 HashMap
  2. 对于 Hash 算法和 Hash 抵触
  3. HashMap 中的解决抵触
  4. HashMap 中的扩容机制

1.14 Java 并发

1.15 Java 虚拟机

1.16 JVM 常见面试题

  1. Java 内存区域
  2. HotSpot 虚拟机对象探秘
  3. 内存溢出异样
  4. 垃圾收集器
  5. 内存调配策略
  6. 虚拟机类加载机制
  7. JVM 调优
  8. 类加载
  9. JVM 内存模型
  10. Java 中一个对象从创立到销毁的过程和 JVM 类加载过程

1.17 JVM 内存构造

  1. JVM 内存构造【办法区 + 虚拟机栈 + 本地办法栈 + 程序计数器 + 堆】
  2. Java 中的对象肯定在堆上调配吗?

1.18 类加载机制 / 双亲委托

  1. java 类加载机制和类加载器以及双亲委派准则解析

二、Android 根底

2.1 Activity 知识点 (必问)

  1. Activity 启动过程全解析
  2. 启动模式以及应用场景
  3. onSaveInstanceState 以及 onRestoreInstanceState 应用
  4. onConfigurationChanged 应用以及问题解决

2.2 Fragment 知识点

  1. Fragment 的通信问题, 新建 Fragment 为何不要在构造方法中传递参数
  2. 为什么官网举荐 Fragment.setArguments(Bundle bundle) 这种形式来传递参数,而不举荐通过构造方法间接来传递参数呢?
  3. Androidx 下 Fragment 懒加载的新实现
  4. Fragment 全解析系列(一):那些年踩过的坑
  5. Google-Fragment 概览
  6. Google- 与其余 Fragment 通信

2.3 Service 知识点

  1. Handler 知识点 (必问)
  2. Android 主线程阻塞解决及优化
  3. 深刻聊聊 Android 音讯机制中的音讯队列的设计
  4. 深刻了解 MessageQueue
  5. 你真的懂 Handler.postDelayed() 的原理吗?
  6. Handler.postDelayed() 是如何准确提早指定工夫的
  7. Handler 提早音讯执行机制,会阻塞吗?

2.4 Intent 知识点

  1. Android 跨过程传递大内存数据

2.5 数据存储

三、UI 控件篇

3.1 屏幕适配

  1. Android 屏幕适配和计划【整顿】
  2. Android 目前稳固高效的 UI 适配计划

3.2 次要控件优化

  1. RecyclerView 优化

3.3 事件散发与嵌套滚动

  1. 一篇文章让你轻松弄懂 NestedScrollingParent & NestedScrollingChild

3.4 动态化页面构建计划

  1. Android | Tangram 动静页面之路(二)介绍
  2. Android 动静界面开发框架 Tangram 应用残缺教程

四、网络通信篇

4.1 网络协议

  1. 看完让你彻底了解 WebSocket 原理,附残缺的实战代码(蕴含前端和后端)

五、架构设计篇

5.1 MVP 架构设计

  1. 高级 MVP 架构封装演变全过程
  2. Android— 我所了解的 MVP 模式

5.2 组件化架构

  1. Android 为什么要用组件化?

六、性能优化篇

6.1 启动优化

  1. Activity 启动流程
  2. Android 性能优化 – 启动优化

6.2 内存优化

  1. Android 性能优化:这是一份全面 & 具体的内存优化指南
  2. Android 性能优化:手把手带你全面理解 内存泄露 & 解决方案
  3. Android 内存优化(应用 SparseArray 和 ArrayMap 代替 HashMap)

6.3 绘制优化

  1. Android 性能优化:那些不可疏忽的绘制优化

6.4 安装包优化

  1. Android 安装包优化 – 减小安装包体积

七、源码流程篇

7.1 开源库源码剖析

7.2 Glide 源码剖析

  1. Android 面试题:Glide

7.3 day 20 面试题:Glide 面试题

  1. Glide 的长处
  2. 生命周期绑定原理
  3. 缓存原理

7.4 聊一聊对于 Glide 在面试中的那些事

  1. 来简略介绍下 Glide 的缓存
  2. 具体说一说 Glide 的三级缓存原理
  3. Glide 加载一个一兆的图片(100 * 100),是否会压缩后再加载,放到一个 300 * 300 的 view 上会怎么,800*800 呢,图片会很含糊,怎么解决?
  4. 简略说一下内存透露的场景,如果在一个页面中应用 Glide 加载了一张图片,图片正在获取中,如果忽然敞开页面,这个页面会造成内存透露吗?
  5. 如何设计一个大图加载框架

7.5 面试官:简历上如果写 Glide,请留神以下几点 …

  1. 谈谈 Glide
  2. 如果让你本人写个图片加载框架,你会思考哪些问题?

7.6 Glide OOM 问题解决办法汇总

7.7 LeakCanary 源码剖析

7.8 OkHttp 源码剖析

  1. OkHttp 源码解析
  2. Okhttp 面试简答
  3. okhttp 面试题 —- 拦截器 interceptor
  4. Okhttp3 总结钻研(面试)

7.9 okhttp 连接池复用机制

  1. 概述
  2. 连接池的应用

7.10 okhttp 流程和优化的实现

  1. 概述
  2. 异步流程的实现
  3. okhttp 中有哪些优化,优化是怎么实现的
  4. okhttp 中用到了哪些设计模式

7.11 一篇让你受用的 okhttp 剖析

7.12 OkHttp 面试之 –OkHttp 的整个异步申请流程

7.13 OkHttp 面试之 –HttpEngine 中的 sendRequest 办法详解

7.14 OkHttp 解析大总结

7.15 Okhttp 工作队列工作原理

  1. 概述
  2. 线程池的复用和治理

7.16 Android 高频面试专题 – 架构篇(二)okhttp 面试必知必会

  1. HTTP 报文构造
  2. HTTP 倒退历史
  3. okhttp 有哪些劣势
  4. okhttp 应用
  5. 看过 okhttp 源码吗?简略介绍一下
  6. 同步申请具体源码解读
  7. 异步申请具体源码解读
  8. okhttp 实现网络申请的办法
  9. okhttp 实现带进度上传下载
  10. 为什么 response.body().string() 只能调用一次
  11. okhttp 使用的设计模式

7.17 Android 网络优化,应用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成

  1. DNS 和 HTTPDNS
  2. OKHttp 接入 HTTPDNS

7.18 Retrofit 源码剖析

  1. Android:手把手带你深刻读懂 Retrofit 2.0 源码

7.19 RxJava 源码剖析

  1. RxJava 操作符之创立操作符 (三)
  2. RxJava 操作符之转换操作符 (四)
  3. RxJava 操作符之过滤操作符 (五)
  4. RxJava 操作符之组合操作符 (六)

7.20 RxJava 原理与源码剖析

  1. RxJava 的音讯订阅和线程切换原理

7.21 RxJava 如何进行线程切换的?

  1. RxJava 是如何实现线程切换的(上)
  2. RxJava 线程切换原理
  3. RxJava2 线程切换原理剖析

7.22 Rxjava 内存透露避免计划——RxLifecycle,AutoDispose,RxLife 框架

  1. Android 应用 RxLifecycle 解决 RxJava 内存透露
  2. 解决 RxJava 内存透露(前篇):RxLifecycle 详解及原理剖析
  3. RxLifecycle 具体解析
  4. 应用 Rxjava2 导致的内存泄露问题
  5. Rxjava 解除订阅②:AutoDispose

7.23 Tinker 源码剖析

7.24 ARouter 源码剖析

  1. ARouter 原理分析及手动实现
  2. ARouter 组件化框架原理剖析
  3. Android 之 ARouter 应用和原理解析
  4. 手动实现一个路由框架 EasyRouter
  5. Arouter 外围思路和源码详解
  6. ARouter 源码剖析(四)—— 缓存与优化
  7. 我所了解的 Android 组件化之通信机制
  8. ARouter 系列三:依赖注入裸露服务
  9. ARouter 系列一:Activity 跳转原理详解

7.25 Android 框架层源码解析

  1. Java 层源码解析

7.26 算法设计

  1. 工夫复杂度
  2. 数据结构
  3. 浅谈单链表与双链表的区别

八、新技术篇

8.1 实战问题篇

  1. Android 工程中办法数超过 65536 解决办法

九、面试篇

9.1 开源文档

9.2 面试文献

  1. Android 面试题积攒 (高阶)

结尾

以上就是我的学习和面试积攒,有本人面试经验过的,也有整顿的一些大厂面试题,篇幅无限,具体内容就不展现了,我曾经整顿成文档了。

还是结尾说的,仅靠面试期间长期抱佛脚和刷题对本身倒退不是长久之计,做好长期晋升的布局,好好积淀每一次的学习和面试经验,把这些最终都转化成属于本人的货色才是本质上对本人最有用的。

退出移动版