前言
这篇文章主要是分享去年下半年的面试心得,现已就职于某一线大厂有半年之久了,近期有很多公司差不多已启动春招,也祝大家在2021 的“金三银四”中面试顺利,获得理想的offer!
之前找工作的那段时间感想颇多,总结一点面试经验和面试建议分享给大家。
面试经验
①、小米面试经验(第一个大厂offer)
因为我上一家公司的同事在我面试之前就已跳槽进小米,在他的内推帮助下我开启了我的疯狂收割offer之路。(一共是拿到了2个一线的offer,6个二线offer,还有其他小公司的offer)
小米一共有三轮技术面:
- 一面,两个面试官(一个我们小组Android的leader,一个是另一个小组的资深架构师),上来先当着他们的面写了一个笔试题(都是很基础的题没啥难度,算法题也就是一个list的反转,但是小米比较注重手写代码的一些细节,所以要考虑好该判空的判空,还有防止越界啥的问题),然后就开始问,90%都在问Java基础(GC的机制,GC算法,内存相关的问的比较多,多线程线程安全问题是如何发生的,HashMap的原理)
- 二面,主管(全程聊项目,没有问技术相关的了,然后介绍了一下这个部门的工作内容啊之类的。
- 三面,部门领导了解情况后,就问了些 Android 源码、底层原理的一些问题,所幸全部都在我的知识范围内,在一个小时的面谈后就隐约有些邀请的意思了。
最后,听说HR要来跟我谈薪,我就基本确定已经OK了。最终,以还算满意的薪资收获了小米的offer!
②、字节跳动面试(第二个大厂offer)
一面
1:插件化。启动activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞是怎么实现的?为什么不会阻塞主线程?
5:求二叉树中两个节点之间的最大距离。
6:206含义,未修改资源是哪个,302含义,301含义
7:多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
8:动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
9:Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
10:任意一颗二叉树,求最大节点距离
二面
1:设计一个日志系统。
2:内存泄露的分类。怎么查看内存泄露的问题
3:touch事件源码问题。
4:组件化的问题。module和app之间的区别。moduler通信是如何实现的。
5:native奔溃的日志采集,怎么处理?
6:注解实现一个提示功能:如果int的值大于了3需要提示。
三面
1:介绍下flutter的启动流程
2:介绍下flutter与weex的区别
3:组件化介绍一下
4:webview中与js通信的手段有哪些?
5:介绍下flutter_boost的原理

四面
1:适配器和装饰模式各自特点和使用场景
2:视频编解码是怎么做的
3:三色球排序
最后,以24K+16的薪资拿到了字节跳动的意向offer。
面试建议
首先作为一个资历不浅的 Android 开发,这几年我经历过不少面试也面试过不少人。 发现大多数面试者,虽然看起来工作努力,但他们表现出来的能力水平,却不足以通过面试,或拿到期望的薪资。
在我看来,造成这种情况的原因,主要有这么两方面:
-
第一,“知其然不知其所以然”。做了几年技术,开发了一些业务应用,但没有思考过这些技术选择背后的逻辑。所以,我很难定位他们日后的成长潜力,也不会放心把有一定深度的任务交给他们。
-
第二,知识碎片化,不成系统。事实上,当面试者无法完整、清晰地描述自己所开发的系统或使用的相关技术时,面试官就会怀疑他是否具备解决复杂问题、设计复杂系统的能力。
所以,如果你平时只知道埋头苦干,或过于死磕某个实现细节,没有抬头审视过这些技术,那么在准备面试时,很有必要好好梳理一下 Android 知识体系,这样才能拿下满意的 Offer。
这里,我把自己的面试时帮助很多的《Android面试技能手册》分享出来,希望能帮助大家梳理、建立起自己的Android知识系统。但是由于CSDN的推荐机制,不能展示全部的技术内容,需要的朋友可以在文末打包获取。
《Android面试技能手册》PDF高清版知识点整理
①、Java知识点汇总
- JVM
- Object
- static
- final
- String、StringBuffer. StringBuilder
- 异常处理
- 内部类
- 多态
- 抽象和接口
- 集合框架
- 反射
- 单例线程
- volatile
- synchronized
- Lock
- 引用类型
- 动态代理
- 元注解
②、Android基础知识点汇总
- Activity
- Fragment
- Service
- BroadcastReceiver
- ContentProvider
- 数据存储
- View
- 进程
- Parcelable接口
- IPC
- Window / WindowManager
- Bitmap
- 屏幕适配
- Context
- SharedPreferences
- 消息机制
- 线程异步
- RecyclerView 优化
- Webview
③、Android进阶扩展知识点汇总
- ART
- Hook
- Proguard
- 架构
- Jetpack
- NDK开发
- 类加载器
④、Android性能优化知识点汇总
- 启动优化
- UI渲染优化
- 崩溃优化
- 内存优化
- 卡顿优化
- 存储优化
- 网络优化
- 耗电优化
- 多线程并发优化
- 安装包优化
⑤、Android 开源库源码分析知识点汇总
- OKHttp源码分析
- Retrofit源码分析
- Glide源码分析
- GreenDao源码分析
- RxJava源码分析
- LeakCanary源码分析
- ButterKnife源码分析
- Dagger 2源码分析
- EventBus源码分析
⑥、Kotlin知识点汇总
- 对象
- 类
- 继承
- 量
- 常量
- 静态常量
- 定义方法
- 重载方法
- 基本数据类型
- 比较类型
- 转换符
- 字符串比较
- 数组
- 循环
- 角标循环
- 高级循环
- 判断器
- 构造函数
- 类创建
- 私有化set方法
- 私有化get方法
- 枚举
- 接口
- 匿名内部类
- 内部类
- 内部类访问外部类同名变量
- 抽象类
- 静态变量和方法
- 可变参数
- 泛型
- 构造代码块
- 静态代码块
- 方法代码块
- 可见修饰符
- 无需findViewById
- Lambda
- 函数变量
- 空安全
- 方法支持添加默认参数
- 类方法扩展
- 运算符重载
- 扩展函数
- 协程
⑦、设计模式核心知识汇总
- 设计模式分类
- 面向对象六大原则
- 工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 观察者模式
- 代理模式
- 责任链模式
- 策略模式
- 备忘录模式
⑧、Gradle知识汇总
- 依赖项配置
⑨、C++知识点汇总
- 头文件
- 数据类型
- typedef
- 类型限定符
- 定义常量
- 存储类
- 引用vs指针
- struct Vs class
- 成员函数
- 析构函数
- 拷贝构造函数
- friend友元
- inline 内联函數
- 继承类型
- 运算符重载
- 动态内存
- 命名空间
- 预处理器
- 信号
- 线程
- 强制类型转换
- 智能指针
- 内存空间
⑩、算法面试题知识汇总
- 排序
- 二叉树
- 链表
- 栈/队列
- 二分
- 哈希表
- 堆/优先队列.
- 二叉搜索树
- 数组/双指针
- 贪心
- 字符串处理
- 动态规划
- 矩阵
- 二进制/位运算
- 其他
《Android面试技能手册》PDF高清版(部分截图)
总结
这份《Android面试技能手册》笔记,适应人群:
- 第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。
- 第二,开发几年,不知道如何进阶更进一步,比较迷茫。
- 第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。
最后,需要这份《Android面试技能手册》的朋友可以“扫描下方的二维码即可免费打包获取”(记得备注:CSDN),希望你们拿到后能够梳理出自己的技术知识盲区,拿到自己心仪的offer。