前言
我觉得每一个程序员的梦想大概就是能够找一份大厂的 Offer,我觉得这很正常,这并不是我们的饭后谈资而是每个技术人的追求。现在面试大公司你说你没有 Android Jetpack、协程、 Jetpack Compose 、Flutter 等理论等等已然大厂面试所必须的知识。但是,你真进入大厂了,可能几年都用不上这些知识,还是老老实实去写CRUD。
像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。但不是每个人都能够进入大厂的,这往往取决于我们的能力、学历、面试表现等因素。
阿里技术一面-35min
自我介绍
Android
- 有没有遇到OOM问题(有遇到内存泄漏问题)
- Handler机制
- ThreadLocal
- Activity启动到加载View过程
- View绘制过程
- LinearLayout (wrap_content) & TextView (match_parent) 最终结果???
- OKHttp(1. 为什么选择它? 2. 性能了解不?3. 内部有哪些设计模式)
- 了解EventBus嘛?
设计模式
- 用过哪些设计模式
- 观察者举例
- 网络
- HTTP & HTTPS区别
- 其他
- 专业问题
- 参加的比赛
阿里技术二面-1h挂
自我介绍
项目
- 为什么选择OKHTTP框架
- 加载图片框架?(学一下Glide)
- JSON解析框架?(学一下Gson,FastJson)
- 技术选型?
- 页面个数?
- OSS上传凭证怎么设计缓存?怎么加密?(加密算法??)
- 还有哪些项目可以说的?
Android
- Activity生命周期?启动透明Activity生命周期?按Home键生命周期?
- 后台杀死APP后怎么恢复数据?
- 一个APP可以多进程嘛?
- ListView和RecyclerView区别?
- RecyclerView卡顿怎么排查?
- RecyclerView怎么实现多Type?
- RecyclerView的ItemView层级过深怎么优化?
- Android多进程?
- 怎么设计Android线程间通信?
- Handler机制?子线程可以用Handler吗?
- ANR?
Java
- private protected public 关键字的用法区别!!!
- 接口,抽象类区别?抽象类要不要实现接口的方法???
- Map的线程安全?读多写少选哪个集合?(CopyOnWrite,不懂原理没敢说)
网络
- HTTP/HTTPS区别
- TCP了解么?握手与挥手过程?
- 长连接?
- push怎么实现?
腾讯
**提前批一面-35min
项目介绍**
- 实现的功能,基于OKHTTP实现网络请求
- HTTP(s)
- 介绍下HTTP协议
- HTTPS公钥暴露怎么办
- HTTP分段上传文件怎么保证正确
- HTTP缓存
Java
- 进程 线程区别
- 子线程间通讯
- 解决死锁的办法,怎么判断发生死锁
算法题
- 奇数偶数数组,重新排序保证顺序不变,奇数在前偶数在后
- 2数/3数之和
提前批二面-30min-挂
**自我介绍
项目介绍**
- 项目梳理
- 图片压缩算法? 聊聊关于Android图片压缩那点事儿
- Bitmap JPG区别 图像处理:JPG、PNG及BMP的区别?
- 断点重传?怎么动态确定范围?Android 实现断点上传文件
- 断点下载?CRC原理 文件校验MD5、SHA1、CRC32、sha256、cksum
设计模式
- MVC优点缺点
- MVP中的MVC的C实现在哪
- 单例模式的饿汉与懒汉的选择,使用场景Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)
- HTTPS加密方式
腾讯正式批测开一面-25min
- Crash
- ANR怎么解决
- 设计世界杯32强对战数据结构
- 2个球 100楼找那一层摔下来会坏
- 测开具体工作
腾讯正式批测开二面-1h
**项目
聊细节
Android**
- 图片,语音大内存数据的性能排查,定位?
- Handler内存泄漏问题
- ART Dalvik区别?
- GC机制?
- CountDownLatch原理?
算法题
- 不使用for查找数组最大值?
闲聊
- 自我优势
百度
百度一面-1h
- 自我介绍
- 项目介绍
- 编码规范有用吗?
Android
- Android四大组件安全性
- Activity启动模式
- IntentFilter匹配规则,action和category区别?
- Handler 阻塞为什么不卡死?
- 点击事件分发机制,onTouchEvent返回false? dispatchTouchEvent返回false?
- Looper
- 对象池,手写对象池实现
- ContentProvider原理
- sp支持跨进程么?怎么解决跨进程,怎么实现进程同步
- 帧动画实现: 100张图,200ms显示一张,读取一张图要400ms,怎么解决避免卡顿(多线程读)
- Bitmap内存复用限制条件
- 线程时间片分配原理
百度二面-45min
项目
- 梳理项目
- 难点
- 技术框架
算法题
- 手写二分法
- 电梯状态机设计
优缺点
- 优点
- 缺点
- 专业
百度三面-45min
技术
- 最长公共子串
- 类加载机制
- okhttp原理
- 热修复原理
- 其余闲聊
- 优点缺点
- 大学遗憾
- 组织哪些活动
- 长期坚持的事情
- 专业去向
美团现场一天面完
- 自我介绍
- 项目
- 实习项目
- 项目最难点
- 技术选择
- OSS STS凭证设计
- Lint工具是编译期的嘛?原理?
场景题
- 美团首页设计?
- RecyclerView多Item的难点?
设计模式
- MVP MVVM使用场景
- HR
- 有什么offer现在?
- 选择offer依据?
- 上海花费高?
- 怎么解决沟通问题?
话不多说了,直接给大家上菜了:
2022最新Android中高级面试题合集
最后
我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。
其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!