背景
本人上的是一所专科院校,学的是Android开发,一直以进入大厂为目标,毕业前几个月就开始往大厂投简历,投了十几份一直没回复,刚好腾讯校招,于是就去了腾讯面试。
这次面试却让我终身难忘,因为我被面试官问的面红耳赤,面试官问的好多东西我都没回答出来,还没面试完我就感觉挂了。
面试完后怀着失落的心情回到学校,回校后我开始反思,“为什么面试官问的我都不会”?于是我开始系统的复习,我把学过的知识和网上找的资料都整理成了PDF,用了28天“啃完”了这份215页的PDF,然后参加了阿里校招,最后成功拿下了阿里的offer。
今天我就把我整理的这份PDF文档分享出来,希望给即将毕业的同学提供一些帮助。
由于文章篇幅有限,我只把一些知识点列了出来,文末有详细PDF文档的免费领取方式。
这份PDF包括了Android基础、Android进阶、Java基础、Java并发、Jvm、kotlin、网络、设计模式、算法题、Flutter。同时也有面试时面试官必问的知识点。
Android基础
1.Activity
- Activity的四大启动模式,以及应用场景?
- Activity中onStart和onResume的区别?onPause和onStop的区别?
2.屏幕适配
- 屏幕适配原理是什么
3.Android消息机制
- Android消息机制介绍
- Looper在主线程中死循环为什么没有导致界面的卡死?
- IdleHandler介绍
4.View事件分发机制和View绘制原理
- View事件分发机制
- View绘制原理
5.Bitmap
- Bitmap的内存计算方式
- Bitmap的高效加载
Android进阶
1. Binder
- Binder的介绍?与其他IPC方式的优缺点?
- Binder的通信过程?Binder的原理?
2. 序列化
- Android有哪些序列化方式?
3. Framework
- Zygote孕育进程过程?
- Activity的启动过程?
- App的启动过程?
- Apk的安装过程
- Activity、Window、ViewRoot和DecorView之间的关系?
4. Context
- Context概念
- Context与ApplicationContext
- 引用的保持
- Context的应用场景
5. 断点续传
- 多线程断点续传?
6. 性能优化
- 布局优化
- 绘制优化
- 内存优化
- 启动速度优化
- 包体优化
- 耗电优化
- ListView和 Bitmap优化
- 响应速度优化
- 线程优化
- 微优化
7. 第三方库
- Glide
- OkHttp
- Retrofit
- RxJava
- Android Jetpack
- 插件化
Java基础
1. Object
2. String
3. 面向对象的特性
- Java中抽象类和接口的特点?
- 关于多态的理解
4. 集合
5. 泛型
- 说一下对泛型的理解
- 什么是类型擦除?
6. 反射
Java并发
1. 线程
- 线程的状态有哪些
- 线程中wait和sleep的区别
- 线程和进程的区别
2. 线程池
- 与新建一个线程相比,线程池的特点
- 线程池中的几个参数是什么意思,线程池的种类有哪些
- 线程池的工作流程
3. 锁
- 死锁触发的四大条件
- synchronized关键字的使用?synchronized的参数放入对象和Class有什么区别?
- synchronized的原理
- synchronized和Lock的区别
- 悲观锁和乐观锁的举例?以及它们的相关实现
- CAS是什么?底层原理
4. 线程间通信
- notify和notifyAll方法的区别
- wait/notify和Condition类实现的等待通知有什么区别
5.多线程间的特性
- 多线程间的有序性、可见性和原子性是什么意思
- happens-before原则有哪些
- volatile的原理
6. 阻塞队列
- 通常的阻塞队列有哪几种,特点是什么
- ConcurrentHashMap的原理
Jvm
1.Java内存模型
- Jvm内存区域是如何划分的
- Jvm内存模型是怎么样的
- String s1 = "abc"和String s2 = new String("abc")的区别,生成对象的情况
2. GC机制
- 如何判断对象可回收
- GC的常用算法
- Minar GC和Full GC的区别
- 说一下四种引用以及他们的区别
3. 类加载
- 类加载的过程
- 类加载的机制,以及为什么要这样设计
kotlin
1. 基础
- ==、===和equal的区别
- var和val的区别
2. 函数
- Kotlin中默认参数的作用以及原理
- Kotlin中顶层函数的原理
- 中缀函数是什么
- 解构函数的本质
- 扩展函数的本质
- 扩展函数和成员函数的区别
3. 类、对象和接口
- Kotlin中常用的类的修饰符有哪些
- Kotlin中可见性修饰符有哪些
- Kotlin中的内部类和Java中的内部类有什么不同
- Kotlin属性代理背后原理
- object和companion object的一些特点
4. lambda
- lambda表达式有几种
- kotlin和Java内部类或者lambda表达式访问局部变量有什么不同
- 使用lambda表达式访问的局部变量有什么不同
- 序列是什么?集合类和序列的操作符比较
- 为什么要使用内联函数?内联函数的作用
5. 类型系统
- Kotlin中的基本数据类型的理解
- 只读集合和可变集合的区别
- Array<Int>和IntArray的区别
- 使用实化类型参数解决泛型擦除的原理是什么
6. 协程
- 协程是什么?协程的有什么特点
- 协程的原理
网络
1. HTTP和HTTPS
- HTTP是哪一层的协议,常见的HTTP状态码有哪些,分别代表什么意思
- HTTP 1.1 和HTTP 2有什么区别
- HTTP和HTTPS有什么区别
- SSL/TLS的握手过程
- HTTPS传输过程中是如何处理进行加密的?为什么有对称加密的情况下仍然需要进行非对称加密?
2. TCP相关
- TCP的三次握手过程,为什么需要三次,而不是两次或者四次
- TCP的四次挥手过程
- TCP和UDP有什么区别
- TCP为什么是一种可靠的协议?如何做到流量控制和拥塞控制
设计模式
1. 六大原则
2. 单例模式
- 单例的常用写法有哪几种
- DCL模式会有什么问题
3.需要关注的设计模式
4. MVC\MVP\MVVM
- MVC、MVP和MVVM是什么
- MVC和MVP的区别是什么
- MVVM和MVP的最大区别在哪
- ViewModel如何知道View层的生命周期
算法题
1.排序
- 比较排序
- 冒泡排序
- 归并排序
- 快速排序
- 线性排序
- 计数排序
- 桶排序
2.二叉树
- 顺序遍历
- 层次遍历
- 左右翻转
- 最大值
- 最大深度
- 最小深度
- 平衡二叉树
3.链表
- 删除节点
- 翻转链表
- 中间元素
- 判断是否为循环链表
- 合并两个已排序链表
- 链表排序
- 删除倒数第N个节点
- 两个链表是否相交
4.栈 / 队列
- 带最小值操作的栈
- 有效括号
- 用栈实现队列
- 逆波兰表达式求值
5.二分
- 二分搜索
- X的平方根
6.哈希表
- 两数之和
- 连续数组
- 最长无重复字符的子串
- 最多点在一条直线上
7.二叉搜索树
- 验证二叉搜索树
- 第K小的元素
8.数组 / 双指针
- 加一
- 删除元素
- 删除排序数组中的重复数字
- 我的日程安排表
- 合并排序数组
9.贪心
10.字符串处理
- 生成括号
- Excel表列标题
- 翻转游戏
- 翻转字符串中的单词
- 转换字符串到整数
- 最长公共前缀
- 回文数
11.动态规划
12.矩阵
13.二进制 / 位运算
Flutter
1.Dart
- Dart 当中的 「..」表示什么意思
- Dart 的作用域
- Dart 是不是单线程模型?是如何运行的
- Dart 是如何实现多任务并行的
- 说一下Dart异步编程中的 Future关键字
- 说一下Dart异步编程中的 Stream数据流
- Stream 有哪两种订阅模式?分别是怎么调用的
- await for 如何使用
- 说一下 mixin机制
2.Flutter
- Flutter框架的优缺点
- Flutter的理念架构
- 介绍下FFlutter的FrameWork层和Engine层,以及它们的作用
- 介绍下Widget、State、Context 概念
- 简述Widget的StatelessWidget和StatefulWidget两种状态组件类
- StatefulWidget 的生命周期
- 简述Widgets、RenderObjects 和 Elements的关系
- 什么是状态管理,你了解哪些状态管理框架
最后
对于大厂面试,我最后想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来。
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
需要这份PDF文档的朋友可以私信我【资料】或者点这里免费领取
Android最全面试复习资料


网友评论