学习三个月4个offer!深圳,5年+开发.本科学历.斩获字节o
祝大家鸿运当头

我的情况
学历:本科
入职公司:字节跳动
所在城市:深圳
工作年限:5年+
在8月份的时候我辞职了(不是裸辞哦),在家学习了差不多3个月的时间,在今年2020年12月拿到了4个大厂offer,oppo、腾讯、字节、虾皮,在这里也希望你们越来越好,争取早日找到自己满意的工作(年薪过百万哦)。
这篇文章我会把我面试的经历(技巧+面试题)分享出来,目的是给秋招的小伙伴们一些建议,避坑跳槽小技巧,以及面试大厂需要注意的!
我和朋友对话


面试题分享
一面 35min

- 自我介绍
- 项目相关:
- JVM和DVM的区别,ART与DVM的区别。
- 有几种情况会产生ANR,ANR产生的原因
- Android控件为什么不能加锁?
- 线程通信:
- ①handler简单讲一下
- ②Asyntask的缺点是什么?为什么官方现在不推荐使用。
- ③说一说handlerThread
- Binder机制,AIDL简单说一下。
- 如果设备内存只有1G,加载一张20G的图片,需要怎么操作?
- JVM GC部分:
一面总结: 一面面试官人真的非常好,特别喜欢他感谢他!总体上来说,非常注重安卓基础,安卓问的比较多。我准备了很久的计算机网络和操作系统居然没问。。。
二面 38min
- 自我介绍
- 项目(项目怼了挺久的,一直深挖。建议大家要非常熟悉简历上的项目,一些细节也要注意到,这个环节差点被怼哭🤣)
- 有没有了解过插件化?插件化和组件化什么区别?
- Applicatipn Context在什么情况下不能使用。(面试官提示dialog了我还不会,这个需要重点注意一下)
- 加载一张特别大的图片,该如何操作?(一面面试官也问了这个问题!回答的特别流畅哈哈哈)
- 一定要在主线程中更新UI吗?能不能在子线程更新?(这个我有一点印象,最后是面试官疯狂提示才想出来的surfaceView)
- LRU的底层数据结构?双向链表如何提高查询效率?
- kotlin是如何兼容Java的(这个我真不会,没想到连这都问)
- 你觉得你最大的优势是什么?(balabala讲了一堆,主要讲自己的学习能力强,团队合作能力强)
- 反问环节
二面总结: 二面主要是围绕项目,然后面试官问的特别特别深。相比之下,一面比较注重广度,考察你对整个安卓体系的知识。二面比较注重深度,考察你对安卓底层源码以及框架源码有没有深入的研究。
hr面 15min
hr面总结:其实hr面大家基本上如实回答就可以了,hr只是想要通过聊天对你有一个基本的了解,不要回答的太偏激太离谱就行。最终刷人也是综合一二三面的成绩排序。
腾讯

一面
1.mmap + native 日志优化?
2.广播和 EventBus 的区别?
3.常用设计模式你了解哪些?
4.跨进程通信有哪些?
5.简单讲讲 binder 驱动吧?
6.跨进程传递大内存数据如何做?
7.说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少?
8.启动优化怎么优化?
9.你写的 rxpay 和 rxlogin 具体怎么实现的?
10.kotlin + fullter 方面的
二面
1.单例设计模式都写写,静态内部类是怎么保证线程安全的?
2.synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。
3.主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?
4.自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按时间分别是怎么实现的?
5.四种启动模式,在源码分析中的原理是怎样的?
6.讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?
7.开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?
8.RxJava 在使用过程中碰到了某些不友好的错误一般怎么解决?发现了内存泄露一般怎么解决分析,有没有碰到过系统服务内存泄露的问题?
9.你们用的 okhttp ?那你有没有做过一些网络优化呢?比如弱网环境。
10.给你个数 1 吧,比如 1000011 里面有几个 1 ?
11.快排了解不?最坏的情况是怎样?如果有大量重复数据怎么优化?
三面
1.讲讲 handler 的底层实现原理?
2.说说你做的日志记录优化?
3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进程传递大内存数据你具体会怎么做?简单写一写吧。
4.在公司做过哪些优化?
5.过程中遇到的一些最难解决的问题?
6.提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢?
7.还有什么要问的?
字节跳动

一、二面
时长:各1个小时,中间间隔有15分钟
- JVM GC:标记算法、回收算法、垃圾收集器 走一套
- ThreadLocal实现原理,map中的key value是什么
- static块中能否调用实例方法
- concurrenthashmap中是如何实现线程安全的,concurrenthashmap读的时候不加锁,那如何保证读的一致性 (Node数组用volatile修饰)
- HashMap外部加锁 与 使用concurrenthashmap时两者效率相比如何 (全表加锁 vs bucket加锁)
- NIO中buffer中在传输文件时如何工作
- P父类有两个子类A B,A先加载了D.class,B再加载D.class,加载完成后的class D是同一个class吗(可能是这个意思,问题我都没听明白)
- 如何创建一个注解
- Executors中四个生成线程的实现类有什么特点,适用于什么场景
- 一个方法中有A a = new A();这么一条语句,方法执行完后A的实例化对象在GC时能否被回收掉
- finalize相关,调用finalize一定会将对象销毁吗?finalize一定会仅执行一次吗?
- synchronized中锁的几种状态
- 泛型的实现原理
手写代码(运气好,问的不难,几个都快速写出来了):
- 几种单例模式,区别
- 生产者消费者模型
- 二叉树中序遍历
三面
时长:50分钟,可能因为是终面吧,技术问题不是很多
- 说一下你对"Android开发"这份工作的理解,工作难点在哪里
- 平常多线程部分用过什么,回答:线程池
- 为什么要用线程池,为了解决什么问题,有什么好处
- 如果让你设计一个线程池,你怎么设计,写代码(/(ㄒoㄒ)/~~)。写了一会给面试官说可能会花很久时间,面试官大致看了下我已经写了的,然后说那你给我介绍下你的设计思路,代码不用写了。
- notify 和 notifyAll 有什么区别
- Git中 rebase 和 merge 有什么区别
- 知道什么设计模式?怎么知道这些设计模式的,是有专门看过这方面的书吗?
- 一个比较简单的算法题,但我答的很shit~~~ 题目我都不好意思说了,当时脑子短路。。
- leader给了你一个可能需要两周才能完成的工作,但是leader只给你一周时间,你怎么来做这件事情
- 诸如毕业在哪工作,想做ios还是android等问题
复习知识
工作这么久要重新再去面试肯定是要将自己的知识储备重新拿出来,要把各个知识点复习到位,需要通过各个方式,选择自己最习惯的。无论是读电子书籍还是观看视频都是可以的,但要记得做好自己的学习笔记,能够起到总结的作用,再去复习起来就特别清晰了。
每个知识点都有左侧导航书签页,看的时候十分方便,需要的记得帮忙点赞评论支持一下,评论区,评论【666】即可来获取下面的大厂Android面试解析+技术知识点笔记”锦集了
01 Android快速面试指南

02 Android从入门到架构成长笔记
就拿我们移动开发人员来说,从初级程序员进阶到高级程序员,从初级架构师到资深架构师,应该如何构建自己的知识体系,成为移动架构师需要掌握哪些技能?
13年java转Android开发,在小厂待过,也去过华为,百度等,去年四月份辞职现在进了字节跳动。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
我们今年整理了一份阿里P8级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括腾讯,以及字节跳动,华为,小米,等一线互联网公司主流架构技术。如果你有需要,拿走记得刷不要收藏夹里吃灰。
点击我的:【GitHub】免费领取Android高级教程和面试题PDF;需要的点击查看自行下载保存!

03 Android从入门到精通逆向学习视频
推荐一个B站up主,里面有Android系列学习视频,专题分类!
【实战MVVM和Jetpack的完美结合让页面开发不再烦恼】
【1.什么是插件化】
【2.插件化能解决的问题及与组件化的区别】
【3.常用插件化框架对比】
.
.
.
【13.手写实现插件的资源加载】
04小白进阶必刷书籍
感觉看书对提升非常明显,当然了还是要看书的内容干货多不多,这里分享下我看过的书:
- 《Android自定义控件入门和实战》
- 《大话设计模式》
- 《Andorid设计模式源码解析》
- 《深入理解JVM》
- 《Android进阶解密》