前言

本篇是Android面试篇,真实的记录了我从 准备->复习->面试 的全过程,分享一些我的真实经验,希望能帮到大家。大概从二月底开始,我就开始从各种渠道找各大公司内推、提前批实习了,大大小小投了很多家公司,除了一些记不起来的问题,这里把至今所有遇到的经典问题整理下来,重复的问题不会再记录。

准备工作

开始准备工作之前,首先思考几个问题:

  • 如何准备
  • 需要复习哪些东西
  • 该怎么复习
  • 怎么复习最高效
  • 职业规划
  1. 如何准备,从哪里开始着手?首先是想好自己是否真的需要换工作,确定好需要换之后就开始写简历,将个人技能点、业务经验、业务成绩等写上去。

  2. 需要复习哪些东西?我个人认为首先是复习Java基础和Android基础,然后再根据简历上写的技能点和业务经历,复习相关的知识点。有时候,你做过的某个东西,可能叙述出来不是特别清晰,或者根本就想不起来具体是怎么做的了,这个时候就需要复习代码回顾一下。

下面是一些我需要复习的点:

  • 项目经历,业务,难点
  • Java基础,JVM,集合原理
  • Android基础,View体系,View绘制流程,事件分发,屏幕刷新,动画原理
  • 常见三方库原理
  • Jetpack
  • Android Framework
  • 算法
  • Kotlin
  1. 该怎么复习?将以前学习该部分时写过的博客或者笔记拿出来复习,结合源码。如果是以前没有写过相关笔记的,就找一下相关的技术文章,汇总,看一波。

  2. 怎么复习最高效?一个技术点或者做过的业务,最好是先复习一下,然后用自己的话把它描述出来,最好是写成文字,记录到云笔记上,方便随时复习。当然,这只是一个点的复习方式。而简历上有很多很多个这样的点,我们需要设置一个dead line,设置一个复习总时长,到哪个日期截止,必须在那个日期结束前复习完成。然后将需要复习的点详细安排到每一天,每天需要复习哪些东西,必须当天完成,禁止自己拖到第二天,最好是明天的任务内容今天就把它完成了,然后明天就去复习后天的任务内容。给自己留有余地,即使某天没时间复习,也不至于落后于计划。最好是开始复习计划之前就把每一个知识点需要看的东西全部给列出来,比如需要复习哪篇笔记、哪篇文章、哪部分代码等,到时在复习的时候就无需关心该复习哪里,直接照着之前安排好的计划开整就行了。

下面是一些我在复习时的部分计划,完成时打个勾

2022阶梯计划

  1. 职业规划?开始找工作之前,最好是先想好自己下一份工作想做什么,去怎么样的公司,将来想怎么发展。

我的复习资料

这块大家尽量按照自己简历的内容来进行专项复习,下面是一些我复习时用到的资料。因为这些都是自己的技能点,所以复习要稍微加快一下速度,控制好复习总时长。

内容涵盖:Java基础,Android基础,UI控件篇,网络通信篇,架构设计篇,性能优化篇,源码流程篇,新技术篇,大厂面经等等…质量非常高!!!不要再看那些到处拼凑出来的面试题了。不管大家最近要不要去面试,都推荐大家先保存起来,后面自己肯定是能够用得上的!

第一章 Java基础
  • 静态内部类和非静态内部类的比较
  • 多态的理解与应用
  • java方法的多态性理解
  • java中接口和继承的区别
  • 线程池的好处,详解,单例(绝对好记)
  • 线程池的优点及其原理
  • 线程池的优点(重点)
  • 为什么不推荐通过Executors直接创建线程池
  • 不怕难之BlockingQueue及其实现
  • 深入理解ReentrantLock与Condition
  • Java多线程:线程间通信之Lock
  • Synchronized 关键字原理
  • ReentrantLock原理
  • HashMap中的Hash冲突解决和扩容机制
  • JVM常见面试题
  • JVM内存结构

第二章 Android基础
  • Activity知识点(必问)
  • Fragment知识点
  • Service知识点
  • Intent知识点

第三章 UI控件篇
  • 屏幕适配
  • 主要控件优化
  • 事件分发与嵌套滚动

第四章 网络通信篇

第五章 架构设计篇
  • MVP架构设计
  • 组件化架构

第六章 性能优化篇
  • 启动优化
  • 内存优化
  • 绘制优化
  • 安装包优化

第七章 源码流程篇
  • 开源库源码分析
  • Glide源码分析
  • Android面试题:Glide
  • day 20 面试题:Glide面试题
  • 聊一聊关于Glide在面试中的那些事
  • 面试官:简历上如果写Glide,请注意以下几点…
  • Glide OOM问题解决方法汇总
  • OkHttp源码分析
  • Okhttp连接池复用机制
  • Okhttp 流程和优化的实现
  • 一篇让你受用的okhttp分析
  • OkHttp面试之–OkHttp的整个异步请求流
  • OkHttp面试之–HttpEngine中的sendRequest方法详解
  • OkHttp解析大总结
  • Okhttp任务队列工作原理
  • Android高频面试专题 - 架构篇(二)okhttp面试必知必会
  • Android 网络优化,使用 HTTPDNS优化 DNS,从原理到 OkHttp 集成
  • Retrofit源码分析
  • RxJava源码分析
  • RxJava原理与源码分析

第八章 新技术篇
  • 实战问题篇

第九章 面试篇
  • 开源文档
  • 面试题合集

这份复习资料是免费分享给大家的,需要的小伙伴可以微信扫描下方二维码免费获取,保证100%免费!

技术面试真题

只记录了部分公司和部分题目,有时候面试完忘记记录了,后面就想不起来了。

公司1:

  • 包体积优化
  • handler原理
  • 如何退出app
  • synchronized和lock
  • 鸿蒙了解过吗
  • flutter了解过吗,compose呢
  • 跨进程通信,线程通信
  • 组件化是怎么做的
  • 做过的项目,主要负责什么
  • 担任的角色
  • 最难的是什么?怎么解决的
  • 开发流程是怎么样的?有做设计文档吗?
  • 职业规划,为什么做安卓?鸿蒙有了解吗?
  • 平时怎么学习的?最近学了什么?给工作带来了哪些好处?
  • 看过哪些技术书籍
  • 平时有什么爱好
  • 对你想要去的公司团队有什么要求?或者说你想去什么氛围的项目组?

公司2:

  • sleep和wait区别
  • mvp
  • 组件化
  • livedata,viewmodel原理
  • 内存优化
  • 启动优化
  • leakcanary原理
  • 换肤原理
  • 怎么hook ams

公司3:

  • volatile、synchronized、原子类的原理
  • 数据库优化是怎么做的
  • 性能优化
  • kotlin伴生对象和init
  • 斐波拉契序列
  • 反转链表

公司4:

  • fragment生命周期
  • 屏幕刷新机制
  • binder理解
  • bindService校验: 权限,包名
  • https的原理
  • 响应式编程
  • 热修复:class和资源
  • invalidate 和 postInvalidate区别
  • handler原理,sendMessageDelayed是怎么实现的,为什么不卡主线程,底层是如何通知进程这边恢复阻塞的
  • java掌握到什么程度了,kotlin呢?android呢?
  • 响应式编程
  • 看过哪些书?推荐一本你觉得不错的书,为什么不错
  • android最近这2年值得关注的框架
  • 敏捷开发模式
  • 你给你自己的水平打分,计划怎么完善和精进自己的技术栈

公司5:

  • app启动过程+activity启动过程,activity启动过程中的launchmode的原理
  • handler
  • java 方法重载问题,泛型相关
  • 卡顿优化,冷启动优化,线上监控方式
  • 慢函数线上监控

公司6:

  • 3个线程如何依次执行
  • 设计一个图片加载库,lrucache原理,linkedhashmap实现
  • lifecycle,viewmodel原理
  • view事件分发

公司7:

  • gc roots
  • JVM垃圾回收算法,Android虚拟机垃圾回收算法
  • 分代回收思想
  • Java类加载机制
  • 线程池有几种,分别是什么特征,自定义线程池需要注意什么,核心线程数是多少
  • hashmap原理(红黑树会退成链表吗?什么情况下?),ConcurrentHashMap原理,Hashtable原理
  • StringBuilder和StringBuffer原理
  • 反射原理及其优缺点
  • 泛型拿来做什么的
  • synchronized用法及原理,1.6做了哪些优化,Mark word
  • 常用的三方库原理,随便挑一个说
  • 换肤原理
  • 动画有哪几种,属性动画原理,vsync
  • View绘制流程
  • 短时间内多次调用requestLayout,哪些View会重绘
  • 冷启动优化
  • 包体积优化
  • 插件化原理,startActivity
  • mvc,mvp,mvvm
  • requestLayout流程
  • 算法1:反转单词
  • 算法2:环形链表求环入口节点,不准用快慢指针,O(1)空间复杂度,O(n)时间复杂度,可修改链表节点的指针和数据。不能在链表节点中新增属性

公司8:

  • 说一下项目的架构,哪一块是你主要负责的?说一下是怎么设计的
  • livedata原理
  • handler原理
  • 组件化传递大数据
  • 单例里面的数据线程安全
  • 内存优化,卡顿优化,冷启动优化
  • 怎么检测已发生了内存泄露的对象?不知道那个对象是谁
  • 协程和RxJava原理,区别

公司9:

  • view绘制流程
  • 事件分发流程,外部拦截法,内部拦截法
  • Kotlin协程,协程原理,怎么开协程,怎么切线程
  • viewpager内部view高度不一致,怎么解决
  • startActivity流程
  • 启动优化,包体积优化
  • livedata原理
  • gradle 马甲包
  • 换肤原理
  • 协程状态机
  • let和also区别
  • mvvm

HR面

一般HR面就比较轻松了,不会涉及什么高难度的问题。一般就问问你为什么离职、住哪里、有对象吗、结婚了吗、有小孩吗、小孩多大了、买房了吗、哪里人,然后HR还会介绍公司的情况、产品、公司规划、福利之类的。下面这些是我在网络上搜集的一些比较重要的问题,需要详细向HR了解清楚。

每个问题都很重要,必问

  • 工资是*12 ?
  • 有年终吗?
  • 五险一金是全额?多少比例?
  • 加班有钱?
  • 晋升制度,涨薪制度
  • 年假?
  • 绩效考评是怎么样的?
  • 午休时间,上下班时间
  • 双休?
  • 试用期多久?转正标准
  • 工作强度

其他注意事项

  • 技术复盘:在每轮技术面试完成后,肯定是有些问题回答得不好的,或者是没有答上来的,回去之后需要及时整理并复习,最好是能用自己的话复述一下这个问题。
  • 提前了解好要去面试的公司的产品、方向
  • 提前了解好当前公司办理离职需要多久
  • 社保和公积金不能断
  • 尽量远程面试,避免耽搁现在的工作

最后

现在正值金三银四招聘旺季,祝正在求职的伙伴都能找到自己喜欢的工作。

最后还有耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记等等,这些内容均免费分享给大家,需要完整版的朋友微信扫描下方二维码免费领取!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。