2016秋招安卓面经(蘑菇街+BT+网易杭研+CVTE等)
2016 届秋招面经
蘑菇街 +BT+ 网易杭研 +CVTE+ 唯品会
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 制?
应对策略:
非技术准备:
1 、广度容易量化,深度难以量化;广度:写过爬虫之类,项目里面有用到某个技术;深度,针对面试官或者公司整体来进行评估难以量化。如 “ 熟悉 TCP/IP 协议簇 ” 、 “ 熟悉 JVM” ,“熟悉”一词难以针对各公司统一衡量,有的是 GC 算法的原理,有的公司却需要手写 GC 算法的伪代码实现
2 、本科生和研究生,要求一样;没有优劣势。
3 、电话面试有一定的影响,一是普通话流利清晰程度,第二就是不能画图说明。
4 、技术( Android 研发)角度和自身经历,技术难度:明星创业公司 >BAT+360> 一线互联网 >= 一线工业公司 > 创业公司(没有面过华为中兴和国企)。
5 、内推,不等于走后门,不会降低要求,只是公司提前抢人。(公司内高级别的员工内推就除外,学院也有这个资源)。
6 、笔试分数是淘汰工具,面基础水平还有面试官的评价,才是择优,对后面的面试影响会比较大
7 、分配好体力和精力,坚持锻炼
8 、校园学生组织经历不重要(面向技术)
技术准备:
1 、 CS 基础:网络,操作系统,数据库,编译原理, C/C++
2 、算法和数据结构,需要刷题;
3 、语言基础(擅长的语言的特性,例如 java 的 io ,并发,集合 );
4 、 Android 机制体系(其他研发类岗位我觉得也是相同);
5 、竞赛准备( 算法比赛里的奖牌, ACM , Topcoder ,蓝桥杯, 阿里天池,编程之美,还有几个算法网站的排名, leetcode )和实习经历(一线公司实习经验)
所以在操作系统上面我并没有去听课,逃了一个学期,从 5 月份刷足一个月的题,水平比没刷的时候是高了很多对比自己,刷题可以正反馈给语言基础。至于 android ,看书 + 看源码,关注高质量的团队博客和文章是很有必要。特别是需要准备几个特别肉的点,让他问不倒你,满足他的技术深度要求。我在我的笔记里面准备了大概 80-100 个知识点,每面可能只会问 10-20 个,占不到 30% ,所以要尽可能准备最肉的,这种最肉的最好找拉开水平的,例如新技术点,例如系统设计,设计模式之类。对于一些新技术点,很容易会拉开别人的距离,我估计,接下来移动端的发展,最热的可能就是 react native for android ,因为这个中间件意义非凡,还有关于系统安全防范上也是值得去挖。在技术准备后面会有附带的个人整理出来的“面试题提纲”。
面试看法:
明星级创业公司注重广度深度理论和实战,内推阶段简历要求高,蘑菇街在内推简历关就把我刷了,豌豆荚,美团,猿题库, glow ,今日头条也有同样的情况,没有奖牌或者 BAT 级别实习经验容易被刷。校招阶段可能是因为运气好,在深度可能达到要求,然而又没怎么问广度。唯一需要斟酌的问题是这种类型的创业公司,发展前景如何,潜力如何,值不值得放弃去 bat 镀金 的机会等等
在百度面试中,设了 2 面的基础面,一面是考理论知识,二面是算法编码能力,我也是运气好,第一面除了 Android 系统之外, CS 基础没有问我,算法那题面试官师兄说在那天并没有一个人答出,我是当天最后一个面试;而二面面试官师兄也给我放松了要求;总的来说,百度对基础要求是我面过的比较全和深,很多面经也是有这个看法。对于算法题,是逃不过的,代码面试一定要过关,只是我运气好,百度只是写了一次代码;写出来之后被问了几个优化的问题,一时间没有思路,但是还是主动问他要了提示,个人觉得算法题是不能回避,在后面感受中再说一下。三面主要考察的是非技术方向,除了新的技术点还比较在意规划还有视野上面,这面面完出来感觉可以更好,在非技术层面上语言组织或者见解角度可以更深入;至于腾讯一面,目前回想,其实应该要把重点放回 CS 基础和算法上面 ,因为根据目前了解,腾讯对移动端, java 和 android 总体不会问很多,可能与内部开发有关。当时应该用 CS 基础和算法过关,而不是 android 和 java 基础,这样子可以避免项目经验被问死,然后他觉得你整体很鱼这个问题。而腾讯二面,虽则被复活,最后还是挂了,但是这面是我收获最大的一面,现在回头想了一下,那面貌似是我在面试他,他跟我 55 开的讲话,如果早点面上这位总监……然而并没有如果,在这面主要是“交流”(虽然都是他在讲,我在听)对移动端的看法,对 android 技术框架的发展 还有对系统设计的一些经验。(一开始以为过了,但还是挂了)。
在网易面试中,一面主要是语言基础和 android 机制基础 ,最深的就是二面面试官老师,那种引导是跟 cvte 二面面试官一样,在我没什么思路的情况会给我充足的提示,不过一般我都是会跟他确认是不是要问我某个知识点。至于唯品会,当天腾讯一面结束,下午是面唯品会,对于面试流程是比较好的, 一面到底,不用等几天;在一面主要是问简历上的问题,但是感觉对深度并没有过多要求,简历上的问题他几乎问了 50% ,但是深度都是由自己发挥。而二面的话,当时面试官可能有事,就问了我几个目前比较热的技术点,热补丁和动态加载,问完就结束。至于 HR 面,知乎上有评价,可以去搜搜。
CVTE ,秋招第一间面试公司,可能因为简历问题, 我发过去的简历是比较久远,所以面试官一直问我 java 基础和 android 基础,并没有很深入问其他。这也是简历做得好不好的一个影响,问题也是比较浅,体现不了深度,但是对于二面面试官,还是比较好的,在引导面试者上面很能体现他的能力。
在创业公司里,我面了一次科韵那边的一家公司,华南资讯,当时我投的是实习生,不是正式员工,只问了一个问题:说一下拦截黑名单怎么实现?当时我讲了反射还有 android 版本的问题,需要对代码实现有兼容处理。然后他说可以了。我说可以了?他说可以看出深度和态度,当时我就醉了。然后问了一下他对我简历有什么改进。也非常感谢他对我提了意见,后来有了一次简历的优化。
面试技巧 (个人常用):
1 、由点及面,发散式回答(结合问题本质 || 具体项目经验 || 问题解决 || 问题设计 || 问题影响);例子:“ jvm 垃圾回收算法是什么?”, “ Java 垃圾收集,你能不能谈谈? ” 关于这个系列的问题, jvm 自动内存管理: 首先是触发时间(新生代、老年代结构, minor gc/full gc 的触发条件, gc 的算法 ) -> 面向的对象(可达性分析搜索不到的对象,需要考虑自我救赎的对象) -> 执行了什么动作( gc 收集器的动作,并行和串行,例如有 stop the world )。缺点:冗余(两位面试官曾经提到这个问题)
2 、在明确好强项后,遇到不会的技术问题,偷换概念或者主动拿提示。例子: C 和 java 的区别,转换面向对象和面向过程;代码面试可以问他拿提示,不能轻易放弃。好的面试官,往往都是看你会什么,不好的面试官,专门抓你不会来的问。所以很经常在面试里面都会很有发挥的余地,都是自己来主导,除非是像百度二面这种生撸算法题。
3 、揣摩他要考察目的,准备亮点。例子:谈一下优缺点和比别人的优势,什么兴趣的这样的点,非技术问题。引用一个例子,一个产品类的面试者,被问兴趣,面试官并不是想要你说我兴趣是 xx 球,他很有可能是想你给个闪光点他,那个面试者说 “ 我没事的时候喜欢坐一下公交,看一下公交路线,有哪些重叠的地方,如何优化…… ” 。
校招感受 (主观):
寒假到 3 月,找了以前的同学聊了一下,自己走去在腾讯的表哥要求当场面(虐)了一下,看到同级的大牛找到实习,种种的刺激,还有很多负面的能量、情绪,需要好好控制,然后转到自己的驱动力。
3-6 月,经历阿里和腾讯春招之后,明白那种差距,至于这种差距怎么明白,一方面自己找了面经,一方面自己直接偷听了 2 个面试者的面试,当时那种刺激更大。回来就开始反思,要如何达到那个高度或者弥补差距。回想在这 4 个月里面,一方面要放弃很多东西,去补别人 3 年 2 年的差距,会非常累,三点一线。
直到 7 、 8 月,阿里开始内推,我发了简历过去,简历被刷,当时那种打击也不是一两句能说出来,当时更多的是那种对自己的技术的怀疑,所以就重新大改简历,重新再补几个肉的知识点。然后再投几家公司再试,而且面对学校内同届的同学,越来越多找到实习,心里知道是自己是不能急,但是会慌,那种心态也是很难表达。
后来遇上阿里缩招,知乎上, Q 群里也是炸了,几个面试官都有一致的观点,如果这个系列消息再迟大概半个月或者 3 个星期放出来,一方面业界公司可能不会跟风缩招,二来他们可能就抢不到那批实习生,给其他人有更多机会,今年的互联网就业形势可能会更好一点。
网易和 cvte 当时是主要是为了腾讯做准备,但当时面完腾讯的时候,知道自己挂了,那种不服、不甘、郁闷,那种半年来的努力被人否定的感觉,并不好受,特别是对比其他人,都是问一些较为基础而又在 Android 技术范畴内的问题,哪怕是算法题,也是在能力范围内,当时就心态出现失衡,心里会想为什么他有这么好的机会,而自己并没有,以及想起种种的对比和刺激,当时情绪消极和失落。所以后面的百度是消极笔试,但是又运气好过了,面着面着不知不觉到了二面,就开始患得患失,最后面完百度,在广州区里的互联网公司例如多玩,都是抱着和同学去的态度,那段时间竟然心态调整不太好,从一个极端又走到另一个极端。
直到面了蘑菇街,又更加明白自己技术栈非常不足,在这几天看到一个清华研究生的面经,才知道自己最肉的技术点,只是别人的起步,看到他拿的都是 sp ,自己都是批发价,当然面经下面的评论才是更精彩, FLAG 大神,人外有人,当看完那篇面经,虽然之前已经是被打击,被虐心了很多次,但是那个冲击,那个打击依然是很大。有位老师说,“很多人会遇到自己的天花板,天花板是早晚遇到”,百度三面总监问我, 2 年内, 你有没有信心挖完 android ,我当时说有,其实是没底,看完那篇面经,更没底,那我怎么调整,我会如何面对我以后的天花板?所以就补充完这份面经。因为我大一大二一开始并不是很喜欢编程,甚至我一开始就感觉大学就是用来玩,真正的兴趣驱动和我这种有点变了质的驱动感觉会有不同,很有可能以后的天花板也不同。 对于想交流各方向技术或者关于发展的,也请多点联系聚聚,最后祝各位成为大牛!
技术交流 Q 群: 275943576
YK
2015 年 10 月
附一:半年啃过的 书单 (都是以成长曲线最高,学习成本最小来挑选,付出的代价就是书的价格,这些书并不便宜,绿色为推荐,但个人没看,还有很多非常好的书,请务必联系我),另外个人笔记整理后会再发:
Java 基础:
深入理解 java 虚拟机 — 周志明
Java 编程思想
Effective java
Core java
Java 网络编程 —Elliotte Rusty Harold
Java 并发编程实战
CS 基础:
TCP/IP 协议簇
图解 Http
TCP/IP 详解卷卷一
深入理解计算机操作系统
鸟哥的 LINUX 私房菜基础篇
C Primer Plus
C++ Primer
C 语言程序设计语言
C 专家编程
C 与指针
C++ 程序设计语言
Effective C++ :改善程序与设计的 55 个具体做法
深度探索 C++ 对象模型
C++ 标准库(第 2 版)
虎书(前 2 章,可以应付学院内编译原理考试)、龙书、鲸书
算法和数据结构:
算法 -Robert Sedgewick
剑指 offer
编程之美
Cracking the coding interview
程序员代码面试指南 — 左程云
Leetcode 这个是 OJ ,刷了 10 题后来没刷
算法导论(数学水平太差看不懂)
Android :
第一行代码 Android ( 入门 )
Android Pro 4
Android 开发艺术探索 — 任玉刚
Android 群英传 — 徐宜生
深入理解 Android 卷一 — 邓凡平 ( 看到 binder 机制前 )
深入理解 Android 内核设计思想 — 林学森(看到 binder 机制前)
大话移动 APP 测试, Android 应用测试指南 — 陈晔
Android 内核情景剖析 — 罗升阳
Android 安全技术揭秘和防范 — 周圣韬
Android 应用性能优化 --Herve Guigot
设计模式:
Head first 设计模式
模式 - 工厂化实现及扩展 — 王翔
建议:学习语言之后,就用他实现一个网络爬虫或者用来刷一下题,对语言基础会有很深的理解,例如 Python 和 Java 。
附二:个人整理的 面试提纲 (实际上理论基础面试和代码面试,是并没有提纲可的,但是这些是我爬过很多面经,当时的一套知识点用来逐一突破,现在又补充了新的内容上去)
J2SE :
1 、集合 (这个部分的内容是频率高的内容,个人觉得是因为结合了数据结构,还可以结合并发安全考。其实要通关这部分,最好就是把 JDK 标准类的源码实现一次,据说今年成都腾讯面,一位面试者写源码 hashmap ,顺利录取):
ArrayList 、 LinkedList 、 Vector 的底层实现和区别
HashMap 和 HashTable 的底层实现和区别,两者和 ConcurrentHashMap 的区别。
HashMap 的 hashcode 的作用?什么时候需要重写?如何解决哈希冲突?查找的时候流程是如何?
Arraylist 和 HashMap 如何扩容?负载因子有什么作用?如何保证读写进程安全?
TreeMap 、 HashMap 、 LinkedHashMap 的底层实现区别。
Collection 包结构的组成, Map 、 Set 等内部接口的特点与用法。
2 、并发 ( Executor 框架和多线程基础):
Thread 与 Runable 如何实现多线程
线程同步的方法有什么;锁, synchronized 块,信号量等
锁的等级:方法锁、对象锁、类锁
生产者消费者模式的几种实现,阻塞队列实现, sync 关键字实现, lock 实现等
ThreadLocal 的设计理念与作用, ThreadPool 用法与优势(这里在 Android SDK 原生的 AsyncTask 底层也有使用)
线程池的底层实现和工作原理(建议写一个雏形简版源码实现)
几个重要的线程 api , interrupt , wait , sleep , stop 等等
3 、 IO ( IO,NIO ,目前 okio 已经被集成 Android 包)
IO 框架主要用到什么设计模式
NIO 包有哪些结构?分别起到的作用?
NIO 针对什么情景会比 IO 有更好的优化?
OKIO 底层实现
4 、其他的 java 语言特性 :
反射机制
String 类内部实现,能否改变 String 对象内容,比较经典的 String 字面量笔试题
Object 有哪些公用方法?
try catch 块, try 里有 return , finally 也有 return ,如何执行这类型的笔试题
Exception 与 Error 的区别
泛型的优缺点
另外就是关注最新版本 jdk 的新特性,例如 Lambda 表达式
5 、 JVM
自动内存管理机制, GC 算法,运行时数据区结构,可达性分析工作原理,如何分配对象内存
类加载机制,反射机制,双亲委派机制,类加载器的种类
Jvm 内存模型,先行发生原则, violate 关键字作用
CS 基础:
1 、 OS :
进程和线程
死锁的必要条件,怎么处理死锁。
段存储,页存储,段页存储的区别。
进程的几种状态和转换
Android 下的 IPC 几种通信方式
逻辑地址、物理地址的区别
进程调度算法
2 、网络基础(主要是 TCP 和 HTTP )
OSI 与 TCP/IP 各层的结构与功能,协议和作用。
TCP 与 UDP 的区别。
TCP 报文结构。
TCP 的三次握手与四次挥手过程,各个状态名称与含义, TIMEWAIT 的作用。 TCP 的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?
TCP 拥塞控制。
TCP 滑动窗口与回退 N 针协议。
Http 的报文结构。
Http 的常见状态码含义。
Http request 的几种类型
Http1.1 和 Http1.0 的区别
Http 怎么处理长连接。
Cookie 与 Session 的作用于原理
访问 www.xxx.com ,描述一下这个过程发生什么
socket 通信的几个关键函数
IP 地址分类
路由器与交换机区别
了解交换机、路由器、网关的概念,并知道各自的用途
数据结构和算法:
剑指 offer
编程之美
Cracking
程序员代码面试指南
特别是这四本书上的重复题
Android :
1 、 UI 层面 (对 UI 不擅长):
FrameLayout 、 LinearLayout 、 AbsoluteLayout 、 RelativeLayout 、 TableLayout
View 树绘制流程
下拉刷新实现原理
三种动画的区别
2 、基础和底层 :
四大组件相关:
Fragment 的生命周期和 activity 如何的一个关系
Acitivty 的 LaunchMode 与特点
Service 的两种启动方法,有什么区别
目前能否保证 service 不被杀死
广播的两种动态注册和静态注册有什么区别。
Intent 的使用方法,可以传递哪些数据类型。
ContentProvider 使用方法
机制:
Handler 机制
AsyncTask 相关问题, 3.0 前后的 bug ,如何实现并发?底层实现原理?
Android 的三级缓存如何实现
Binder 和 IPC 机制, aidl
触摸事件分发机制
Activity 启动流程以及界面展示过程
Android 系统启动流程
Android 中的 MVC , MVP 和 MVVM
涉及动态加载技术点相关
3 、开源框架 (回想学习开源的经历,建议先用开源组一个 app 出来,先做一个开源的搬运工,再深入理解)
例如: ButterKnife + Okio + OkHttp + Volley + Gson , fastjson + glide , Picasso , fresco + android-common , eventbus + dbflow , greenDAO + LeakCanary 。一整套的 View 注解、网络请求、图片加载、工具类、数据存储、性能检测等等的基础框架。 UI 方面, Support Lib + Design Lib + 各种开源 View 控件。再关注某些著名开发者的框架,然后选取学习。
需要掌握的程度:
1、 框架功能和作用
2、 工作流程图
3、 总体设计和原理
4、 底层实现细节或 Uml 类图
同样建议造轮子
#腾讯##百度##网易##安卓工程师#