2019-2020年,我们度过了21世纪10年代的最后一个冬天,趁这个机会,去鹅厂走了一波。
结局有点悲催,但是没多大影响,我还是我,那个在总结学习一线的我。
想看以往学习内容的朋友 可以看我的GitHub
还有收集好的面试题目总结带答案,就放在文末。
废话就不多说,接下来凭借记忆给大家讲讲三面时遇到的问题,关注我收藏文章,你知道如何躲掉这些坑吗?可以在评论区大家一起探讨下。
一面
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.碰到过系统服务内存泄露的问题? 10.你们用的 okhttp ?那你有没有做过一些网络优化呢?比如弱网环境。 11.给你个数 1 吧,比如 1000011 里面有几个 1 ? 12.快排了解不?最坏的情况是怎样?如果有大量重复数据怎么优化?
三面
1.讲讲 handler 的底层实现原理? 2.说说你做的日志记录优化? 3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进4.程传递大内存数据你具体会怎么做?简单写一写吧。 5.在公司做过哪些优化? 6.过程中遇到的一些最难解决的问题? 7.提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢? 8.还有什么要问我的?
个人体会
要是换几年前我感觉这些面试题估计一个也答不好,但是今天回过头再来看其实感觉也就一般般吧。
大厂的正常面试流程周期一般是一到两个月,就算薪资谈完到 offer 最终审批下来可能都需要一到两周,这段时间心理是比较难熬的,因此建议大家尽量不要裸辞。
面试完毕一般都会透露多久给答复,如果是猎头推的多跟猎头联系,大家要尽量想办法打听到最新的动态。
讲一下大厂面试一些必备的技能
1. 一般情况下第一轮都是基础面试,需要扎实的基础
- 最常用的Android 基础知识
- Java 基础知识
- 了解一些 常用东西的原理,例如:handler, thread 等
- 项目中的技术点
2. 第二轮的时候需要了解更深层次的东西
- Android 事件分发机制原理
- Android 绘图机制原理
- WindowManager 的相关知识
- 进程间传输方式
- Java 内存管理机制
3. 能进入第三轮基本没什么问题,但是要注意以下问题
- 该轮一般是 老大或者部门负责人,问的问题一般都看 深度与广度
- 当问及薪水的时候,要说一个合适的,小公司随意,大公司一定要慎重,当心里没底的时候,可以告诉对方,让对方给一个合理的薪资。一般都是在原工资基础之上增长,听猎头说一般涨幅都在15%-30%,超 NB 的可以要30%及以上,如果感觉自己还不错的,挺厉害的,建议最高20%,一般人就定在15% 左右最靠谱。公司内部一般有一套机制,根据公司情况而定。
- 我们的面试原则就是拿到合理薪资,得到 offer
- 个人发展情况,这个问题很难回答,如果和公司方向不符合,极有可能和公司无缘。建议多试探性的问问公司缺少什么,你能否给予公司对应的东西。当然对于有自我追求的人,那可以放心大胆的提。我的方向就是架构师,哈哈哈,挺极端的,别学我哦。我感觉选择都是双向的,因此我知道自己需要的是什么。
- 你最擅长什么UI 还是其他什么?这个问题更不好回答。你要说你擅长 UI,是不是意味着你其他能力就不行?虽然我不知道面试官的用意,但是我能感觉到,这个问题不是那么好回答,我会回答说自己都行,来什么业务接什么需求。可能回答不太好,总之和公司的职位吻合就行,这样总不至于出错吧。
该如何复习?
其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
这里再分享一下我面试期间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)
《Android开发七大模块核心知识笔记》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...