前言
今年Android开发的整体招聘趋势可以概括为几句话:赛道中的公司在蒙眼狂奔,成熟业务借机补强,更多公司在观望。
而面试大厂时更注重你的基本知识,你对待一个问题的思路。是否是以一个工程师的角度去看待问题。也更注重数据结构&&算法(我的痛)这一块的知识的考察。不会是简单的考你排序、查找这种考研层面上的东西。小厂的话,大概是因为需要即插即用,也没有很好的导师类资源,更看重你的自我学习能力和一个自我学习的过程,以及实际开发的能力。好了,话不多说,我们就直接进入面试的总结。
下面是我整理的字节跳动Android高频面试题解析:
一共分为七个模块:
- Java 知识点汇总
- Android 知识点汇总
- Android 扩展知识点
- Android 开源库源码分析
- 设计模式汇总
- Gradle 知识点汇总
- 常见面试算法题汇总
一、Java 知识点汇总
1.Java 基础
- 数据类型
- String
- 运算
- 关键字
- Object 通用方法
- 继承
- 反射
- 异常
- 泛型
- 注解
- 特性
2.Java 容器
- 容器中的设计模式
- 源码分析
- Vector
- CopyOnWriteArrayList
- LinkedList
- HashMap
- ConcurrentHashMap
- LinkedHashMap
3.Java 并发
- 使用线程
- 基础线程机制
- 中断
- 互斥同步
- 线程之间的协作
- 线程状态
- J.U.C - AQS
- J.U.C - 其它组件
- 线程不安全示例
- Java 内存模型
- 线程安全
- 锁优化
- 多线程开发良好的实践
4.Java 并发进阶知识
- synchronized 关键字
- volatile 关键字
- ThreadLocal
- 线程状态转换
- 使用线程
- 基础线程机制
- 中断
- 互斥同步
- 线程之间的协作
- Java 内存模型
- 线程安全
- 锁优化
- 线程池
- Atomic 原子类
- AQS
二、Android 知识点汇总
1.Activity
- 生命周期
- 启动模式
- 启动过程
2.Fragment
- 特点
- 生命周期
- 与 Activity 通信
3.Service
- 启动过程
- 绑定过程
- 生命周期
- 启用前台服务
4.BroadcastReceiver
- 注册过程
5.ContentProvider
- 基本使用
6.数据存储
7.View
- MeasureSpec
- MotionEvent
- VelocityTracker
- GestureDetector
- Scroller
- View 的滑动
- View 的事件分发
- 在 Activity 中获取某个 View 的宽高
- Draw 的基本流程
- 自定义 View
8.进程
- 进程生命周期
- 多进程
- 进程存活
9.Parcelable 接口
- 使用示例
- 方法说明
- Parcelable 与 Serializable 对比
10.IPC
- IPC 方式
- Binder
- AIDL 通信
- Messenger
11.Window / WindowManager
- Window 概念与分类
- Window 的内部机制
- Window 的创建过程
12.Bitmap
- 配置信息与压缩方式
- 常用操作
- BitmapFactory
- 内存回收
13.屏幕适配
- 单位
- 头条适配方案
- 刘海屏适配
14.Context
15.SharedPreferences
- 获取方式
- 架构
- apply / commi
- 注意
16.消息机制
- Handler 机制
- 工作原理
17.线程异步
- AsyncTask
- HandlerThread
- IntentService
- 线程池
18.RecyclerView 优化
19.Webview
- 基本使用
- Webview 加载优化
- 内存泄漏
三、Android 扩展知识点
- ART
- Apk 包体优化
- Hook
- Proguard
- 架构
- Jetpack
- NDK 开发
- 计算机网络基础
- 类加载器
四、Android 开源库源码分析
- LeakCanary
- EventBus
- Glide :加载、缓存、LRU 算法
- install
- ARouter
- 插件化(不同插件化机制原理与流派,优缺点。 局限性)
- 热修复
- RXJava (RxJava 的线程切换原理)
- Retrofit (Retrofit 在 OkHttp 上做了哪些封 装?动态代理和静态代理的区别,是怎么实现的)
- OkHttp
五、设计模式汇总
- 设计模式分类
- 面向对象六大原则
- 工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 观察者模式
- 代理模式
- 责任链模式
- 策略模式
- 备忘录模式
六、Gradle 知识点汇总
- 依赖项配置
七、常见面试算法题汇总
- 排序
- 二叉树
- 链表
- 栈 / 队列
- 二分
- 哈希表
- 堆 / 优先队列
- 二叉搜索树
- 数组 / 双指针
- 贪心
- 字符串处理
- 动态规划
- 矩阵
- 二进制 / 位运算
- 其他
- 反转整数
- 缓存策略
总结
与面试官聊天的收获
虽然很多面试都是在问问题和答问题中度过的,但是还是有一些面试官在面试完成后会对我的面试结果做一些总结和评价,这里面也收获颇多,跟大家分享一下。
1、大厂和小厂的选择
很多刚进入职场以及学生会有这方面的困惑,不过我还是简单粗暴地回答一下这个问题吧,建议去大厂。因为这几个方面的原因:
大厂周围的小伙伴大概率更优秀。
几年后小厂和大厂的程序员市场溢价不同。同样工作年限的程序员,大厂天然要比小厂的溢价高很多。
小厂更强调业务的快跑,忽视人的成长。很多小厂会在不同的业务方向上投几个人做出一个App出来试试市场反应,很多人就不得不重复做之前已经会的一些功能,而且很多小厂用户量很小,并不关心所谓的性能架构,因为优化了一个性能,能受益的用户也非常少,还要占用开发业务的时间,你的老板和业务部门也是非常不乐意的,这对于一个程序员的成长是非常不利的。如果一个小厂宣称自己的团队主要成员主要来自百度、新浪、网易等大厂的时候,你需要格外注意一下,这并不代表你进入这个团队后能成长成百度的标准。
2、5年左右的开发的标准
这里说一个标准,5年左右开发经验的工程师,应该在某个或者某几个方向上是整个公司的专家和标杆。比如设计能力、网络优化、性能优化、音视频等等,5年左右的开发不应该仅仅满足于实现一些业务需求,应该更深入了解底层的原理和技术,这样在未来的跳槽中才能有更高的溢价,比如从抖音出来的音视频工程师就能在市场上享受非常高的溢价。
3、关于成长和职级
主动去承担高一个职级的事情,自然而然你的职级也会跟着提升。很多同学包括我之前也是认为把我自己的事情做好了,找一些项目的亮点再去PK晋升职级。然而阿里的面试官跟我聊这个问题的时候给了一个新的思路:很多P6的同学升级到P7是因为他们已经在做并且能做好P7的事情了,所以他们升了P7大家都觉得顺理成章。从这个角度看职级和晋升,是不是角度不一样了呢?
写在最后
上面分享的字节跳动Android高频面试题解析免费分享给大家,点击这里即可查看领取方式~
还有耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记
等等,这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容