CS 本科生,大三寒假确定方向, Android 学习时间 1 月至 9 月,无编程功底,无算法竞赛经历,无一线互联网实习经历,无国家级奖学金。
希望这篇面经能给有同样起点或者同样经历的同学,带来帮助。
面试内容(岗位均为 Android 研发):
一、面试时间:
CVTE 7.28-8.28 ;
网易杭研 8.10-9.30 ;
腾讯校招 9.16&9.18 ;
唯品会校招 9.16 ;
百度校招 9.18-25 ;
蘑菇街 9.30&10.1 ;
腾讯 10.19-10.23;
二、面试方式:
|
CVTE |
网易杭研 |
腾讯 |
唯品会 |
百度 |
蘑菇街 |
腾讯 |
一面 |
电话 |
电话 |
现场 |
现场 |
现场 |
电话 |
电话 |
二面 |
电话 |
视频 |
现场( X ) |
现场 |
现场 |
电话 |
电话 |
三面 |
电话 |
电话 |
|
现场 |
现场 |
电话 |
电话 |
四面 |
现场 |
null |
|
null |
null |
null |
|
三、过程题目和技术点:(蓝色为交流环节我问他的问题,前后顺序按面试时间)
CVTE :
一面:
1. 自我介绍
2. 项目点为什么要用 view 不用 fragment ?同样 fragment 可以解决缓存(用了 view ,并且设了 map 作为缓存,为了模拟 activity 栈重制了新的栈来实现相同的回退功能,需要处理连续点击和多次点击的问题,还需要解决连续点 view ,缓存增大而 oom )
3. 用了什么设计模式?为什么要这么用?(举例了观察者 + 工厂)
4. 谈一下 Collection 包: hashmap 底层实现,用了什么方法解决 hash 冲突(基于 jdk 版本),具体是如何实现( jdk1.5 链表头插还是尾插),为什么不安全?如何变得安全( concurrent 包下集合类), concurrentHashmap 实现原理是?
5. Executor 框架说说你的理解?
6. 结束一条 Thread 有什么方法? interrupt 底层实现有看过吗?线程的状态是怎么样的?如果给你实现会怎么样做?
7. Io 和 nio 有没有了解?
8. 现在需要在四大组件中传数据?如何传,方法有哪些(需要自己再具体说什么情况)?
9. 缓存算法除了 lru 还认识哪种?
10. Java 中有内存泄露吗?是怎么样的情景?为什么不用循环计数?
11. ANR 产生原因?怎么定位?
12. ContextImpl 的源码使用的设计模式?为什么你认为其中有外观?
13. 评价一下我的表现?有什么技术点需要补充?
二面:
1. 上次一面的时间是什么时候了?(半个月前)
2. 做的最深的项目?解决了什么问题?
3. 情景题,在一个 app 中,只有在一张 activity ,所有功能业务逻辑在里面实现,现在报 ANR ,你会怎么做?(代码层面:耗时操作( UI 、网络、数据库),工具层面: trace 和 crashHandle )
4. 不停在 new 一个很大数组,初始化它,然后又把 reference 设 null ,这样子手机会不会卡?(这个问题还没很深研究,当时答了内存抖动 +stop the world )
5. Jvm 自动内存管理、如何实现对象的自我救赎?
6. Android 系统启动流程?
7. 有没有看过业界 APK 反编译源码?
8. 平时看什么书?
9. 评价一下我,技术团队有用到什么开源框架?有没有自己放出开源?
三面 HR :
1. 有点起了我老底的味道,我还以为是来查水表。
四面(现场,这是唯一一次有 3 个面试官来面,其中一个是一面的面试官):
1. 描述项目,当时是用了什么架构?还认识哪些架构?如何改造?
2. 当时为什么要用 Observer ?
3. obverser , uml 类图 + 代码实现,原生 jdk 中观察者模式有哪些缺陷?
4. 还有用了哪些设计模式?(工厂)
5. 有见过其他的设计模式吗?(当时说了一个责任链和重说一面的 contextimple )
6. 实现一个链表的插入( 4 分钟计时)
7. 判断链表有环
8. 单例模式 DCL , violate 起什么作用?为什么要 sync .class 而不是 this ?( 3 分钟计时)
网易杭研:
一面:
1. 自我介绍
2. Android 中 ClassLoader 和 java 中有什么关系和区别?
3. 熟不熟 jvm ,说一下 Jvm 的自动内存管理?
4. 语言基础, String 类可以被继承吗?为什么?
5. Final 能修饰什么?(当时我说 class 、 field 、 method ,他说还有吗?然后又叫我不要在意,后来回想起,应该是问到我在参数里面要不要用 final ,接下来是因为匿名内部类)
6. Java 中有内存泄露吗?(先说本质,再结合 handler+ 匿名内部类)当时如何分析的?
7. 描述下 Aidl ?觉得 aidl 有什么缺陷(这里在这个问题上回答有欠缺)
8. 评价一下我,如果顺利进网易,需要往技术栈加什么点尽快投入业务?
二面:
1. 用过什么开源,举一个例子?( volley )
2. Activity 生命周期?情景:现在在一张 act1 点了新的 act2 ,周期如何?
3. Act 的 launchMode ,有没有结合项目用过(自己的程序锁和微信的 PC 端登陆对比,不过我现在又发现,应该大约估计可能是动态加载的一个缺陷,如果有找到相关信息,请务必跟我说。具体问题就是,当在 PC 端登录时, Android 终端的微信会跳出,即使 wechat 的 task 不是在 fore ,当按下确认,返回的是 wechat ,而不是自己先前的 app )
4. View 的绘制原理,有没有用 canvas 自己画过 ui ?
5. 以后想做 Android 什么方向?(中间件 +SDK )
6. 怎么看待前端和后端?
7. 如果学前端会如何学?
8. 优缺点?兴趣?
9. 想不想来杭州?
10. 评价一下我?往技术栈加什么?
三面 HR :常规问题( 10 分钟,这个男 hr 是最爽快的)
1. 为什么想来网易?
2. 有投其他公司吗?
3. 网易最吸引你的是什么?
4. 想来杭州吗?
5. 评价一下我?
腾讯(被挂)
一面:
1. 自我介绍
2. 项目描述
3. 如何保证资金流安全?(这里没答好,直接把我挂了,先前并没有考虑过这个问题,面了这么多次也没有被问这个点,导致雪崩)
4. Oom 是如何解决?
5. 除了软引用还知道什么引用?
6. Jvm 自动内存管理(什么时候触发 gc )?
7. 有什么要补充:(跟他讲了动态加载还有一个底层源码)
8. 根据面试过程,有什么建议给我?(我当时就觉得很有可能就挂了,所以就问建议)
二面(一面之后当晚我查到被挂,心态没有调整好,但是 2 天后又把我复活了,然后又挂了):
1. 自我介绍
2. 你是怎么准备面试的?
3. 做过什么项目?项目思路是?
4. 平时有什么兴趣?
5. 自己写的工具类和 uil 相比,如何?
6. 后续就是讲了他自己对移动端发展的看法,受教很多。
7. 现在有个机会可以对刚毕业的自己说些话,你会跟他说什么?
腾讯 SNG:
一面:
1. 自我介绍
2. 动态加载主要问题
3. 插件化
4. Assetmanager 获取资源原理和资源获取原理
5. 项目 Oom 异常解决方案 + 用户体验优化方案
6. Touch 传递机制 +listview 滑动冲突
7. Volley 底层实现
8. 为什么不能用 volley 请求大数据
9. 后续流程如何走?
二面:
1. 自我介绍
2. android 学习时间
3. 为什么不考研
4. Smali 语句学习情况 + 反编译
5. 如何捕获插屏广告?如果广告是嵌入在应用主流程内如何处理(只讲了如何捕获 launch 下的 activity ,嵌套在主流程逻辑内的想不到,问了提示也没回答)
6. Jvm 的自动内存管理
7. Jvm 中软、虚引用的区别
8. Java nio 的认识
9. Tcp 三次握手, tcp 与 udp 的区别
10. Volley 底层实现 + 设计模式理解
11. Imageloader 缓存策略
12. 后续流程如何走?
13. sng 目前在 android 端遇到什么问题?(他回答是机型适配问题)
14. 对我的建议是?
HR 面:
1. 之前参加校招吗?
2. 这个月又如何准备?
3. 谈谈优势?
4. 腾讯哪里吸引你?
5. 以后会在什么部门?是不是一二面面试官带我?
唯品会:
一面:
1. 项目如何解决 oom ?响应速度是怎么优化?电量消耗如何优化?
2. 描述一下 Aidl 和 android ipc ?( binder 机制没跟他讲得很深)
3. 屏幕适配使用的方案?有没有辅助的工具帮助?( hyviewer )
4. 如何分析内存泄露?(代码 + 工具 traceview+mat )
5. 那 ANR 呢?(我忘记了 trace )
6. View 树绘制?如何优化布局?
7. 事件传递原理?
8. uil 的框架如何设计?有没有用过 glide ?(结合了 fresco 的分析)
9. Volley 和 okhttp 底层实现(也讲了 okio ),为什么说 okhttp 高效?
10. Listview 的优化(同一布局,左为 bm ,右为 text )?
11. Apk 瘦身可以关注什么点?(这里忘记了说 so 库,然而他也不会)
12. 评价一下我
二面:
1. 这里的项目的描述的 xml ,你项目不是 native 的?
2. 有没有接触 hybrid 和 webapp ?怎么看待?
3. 有用到什么设计模式吗?开源框架呢?
4. HotFix 和 Xposed 的一些小应用(没有深入,只是讲了动态加载原理和需要解决的问题,也说了 dynamicloadApk 和 multi 分包还有 Xposed 中的 hook )
5. 以后想如何发展?
6. 唯品会会如何培养新人?是不是由你带我?目前唯品会用到什么技术点跟我技术栈相关?
三面 HR ( 50+ 年纪面试官,素质差,不尊重面试者,具体可以搜知乎):
1. 对公司的看法?
2. 为什么主页不设搜索栏?
百度:
一面:
1. 自我介绍
2. 讲一下动态加载技术点?
3. 对目前移动圈的看法?
4. 学 android 的开始时间?
5. 适配优化屏幕适配接触到什么方法?
6. Binder 机制(只深入到 framework )
7. View 树绘制 + 事件分发
8. 海量字符串 ( 他给我的样例如下: ABCDE,ACD,BCDF,EF) ,如何插入数据库使冗余度最低? Trie 树 + 不知道什么遍历,第一次见,数据库存的是 3 个字段,字母,该字母第一次遍历的序号,该字母第二次遍历的序号。可以做到时间复杂度 O ( N ),至今都没想出来……如果有人看过类似的题请务必告诉我。)
二面:
1. 不用除号实现除法(一开始需要考虑小数,后来面试官说降低难度先整数,然后优化大数的情况,确认了两次思路)
2. Contextimpl 源码,几种 context 的区别
3. 如何实现通讯? Binder 机制(我只将了 aidl 和 framework 层面,面试官把 /dev/binder 也讲了,受教,被人教做大人,后来吹比发现他是做 C 驱动开发)
4. 一个数组,找出只重复一次的元素,并且返回下标是最小的。时间复杂度要求 O ( N ) +O ( 1 )(一开始只想到了 O ( N ) +O ( N ),后来问了提示,可以实现到 O ( N ) +O ( 1 ),但是空间复杂度上去了,然后他给出最优解)。
三面:
1. 高校教育和培训班看法?
2. C++ 和 java 的区别?后来我转到面向过程和面向对象,结合 uil
3. Ios 有接触过吗?学习成本问题吗?
4. Android 项目简单描述非技术角度?(动态加载)动态加载的优点,面向开发者和面向用户角度?其中我答到了 65535 方法会爆,然后他说小伙子太年轻, naive !
5. 以后有什么规划?
6. 高级工程师所需责任?
7. 了解 android 什么新技术?( hybrid ,这里答得不好,应该往移动端统一角度来答)
8. N 根绳子,质量不均匀,并且燃烧速度不均,但是每一条烧 1h ,现在需要测量出 1H+15min 。( cracking 改题)
9. 优缺点
10. 兴趣
11. 最后给我看了一下他对 65535 方法数的研究,我也是醉了。
12. 个人点评?负责哪个部门?是不是以后你带我?
13. 百度 200 亿 O2O 你觉得前景如何?会对你带的部门产品线有什么影响?
14. 如何看待今年互联网的资本寒冬?
蘑菇街:
一面:
1 . 自我介绍
2 . 在项目中为什么要用动态加载?最大的问题是什么?怎么解决资源管理问题(这里我一直以为 AssetManager 是服务,然后又被面试官教做大人,简单来说就是装逼然后失败了)
3 . Binder 机制说一下(由 application 到 framework 到 kernel 基本讲了一下要点,但是电面实在是很影响表述没有画图,他最后也听得很蛋疼)
4 . Android 源码看了多少 G ?说一下(举了 contextimpl )
5 . 屏幕适配接触到什么方法?
6 . java 内存泄露是怎么样的?(本质 +handler 例子)
7 . Handler 机制?
8 . 情景题,把 handler 设 static ,里面需要对一个 view 更新,会不会内存泄露?(可达性分析)
9 . UI 接触得多吗?有没有用过 canvas 画过图?
10. 事件分发?如果有一个 interr ,会……(这里我听不是很清楚,电话信号,然后我就把整个事件分发原理说了一下,然后他说我讲错,我也是醉)
11. 个人评价?会不会有下一面?(问这个因为觉得装逼失败,非常有可能被刷,他告诉我可能一周后,结果二面就马上国庆 1 号面)
二面:
1. 自我介绍
2. 学 android 多久?
3. 怎么学习?
4. 项目里面遇到什么难题,选一个讲一下?(动态加载,还有一面被教人教做大人的过程)
5. 平时有什么兴趣?
6. Volley 底层实现?( okhttp 没问)
7. 自己写的图片加载工具类谈一下?(结合 uil 谈了一下)
8. 有没有了解新技术?了解到哪些?讲一下?( hybrid+react+ 个人看法)
9. 动态加载还遇到什么困难?(结合了 dexposed 和 其他一些热补丁聊了一下)
10. 个人点评
11. 蘑菇街目前 android 团队架构
12. 目前有哪些 android 技术难题所遇到过?
13. 目前用了哪些开源?我还需要接触哪些?( hotpatch + xposed ,个人认为主要还是受手淘影响,估计内部框架也是比较类似)
14. 怎么培训新人,以后是不是你来带我?
三面:(个人感觉是真的专业 HR )
1. 自己介绍面向非技术
2. 谈一下优缺点,为什么有这个优点?如何体现?
3. 为什么想来蘑菇街?
4. 目前手头有多少 offer ?薪资?
5. 蘑菇街跟百度网易对比最吸引你?地点杭州有没有问题?
6. 蘑菇街 offer 会不会调岗?
7. 怎么带新人? mentor 制?