字节跳动Android三面面经+HR面+总结,已拿Offer

个人背景

本科,软件工程专业,有一段暑期实习(美团)和几个安卓项目。

之前也断断续续面试了几家,有内推有自己投简历的,提前批投递了字节头条,挂在了终面,正式批又投了抖音,三面过了后没多久就收到HR面,已拿到Offer。

一面(~45min)

1. 介绍项目,讲述一下实习的工作内容和感想(~10min)

2. 什么是内存泄漏,Android里有哪些内存泄漏的场景,原因是什么

3. JVM的GC过程,GC的算法都有哪些

4. 进程和线程的概念,Android里怎样实现多线程?(Thread Handler AsyncTask IntentService等等)

5. Handler的原理和使用

6. Handler是怎么和线程绑定的(Looper),为什么Looper.loop()要设计成死循环

7. Java的几种内部类,区别是什么

8. Activity的生命周期和启动模式

9. 写题:二叉树的右视图(层序遍历即可)

一面比较短,问的问题也比较基础,大概30分钟后开始二面

二面(~1h30min)

1. 自我介绍

2. 介绍项目,为什么要自学安卓(~5min)

3. Android如何实现多进程,应用场景是什么(答的不好)

4. Android的IPC机制(Binder)是否了解(答的也不好)

5. 如何用两个队列(FIFO)实现栈(FILO)

6. HashMap和HashTable区别,HashMap原理和实现,hash()的算法

7. 如果自己设计hash算***怎么设计,为什么?

8. String的hashCode()和Object的hashCode()

9. 虚拟内存和物理内存的概念和关系,内存分页的调度算法

10. 怎么实现LRU缓存

11. 可以自己写一个java.lang.Object类吗,系统会加载哪一个

12. Java里泛型的实现

13. 了解常见排序算法吗,手写一下快排

14. Java里加锁的方式,synchornized关键字的原理,悲观锁和乐观锁都有哪些实现

15. 死锁的条件和解决方法,讲讲银行家算法

16. TCP的三次握手四次挥手,为什么要四次挥手

17. TCP的流量控制算法(滑动窗口),拥塞控制算法

18. 怎么解决用户高频点击打开新Activity导致的多实例问题(Activity启动模式)

19. 怎么判断两个无环单链表是否相交

20. 反问

二面问题量非常的大,,但并没有特别难以回答的问题,认真准备的话大部分都能答出来。面试官也非常友好,给了很多引导和提示。 因为三面面试官的时间问题,约了两天后的三面

三面(~45min)

1. 自我介绍

2. 介绍一下实习做的工作,是自己完成的吗,遇到什么困难,成果怎么样

3. RecyclerView怎么实现的item缓存,跟ListView有什么区别(因为项目用到了所以被问了)

4. 设计题:微信的联系人列表功能

(1)设计添加联系人的API(从可能的方式,数据形式,接口参数方面回答)

(2)怎么实现联系人列表的UI

(3)怎么实现A-Z首字母的快速定位功能

6. 是自学的Android吗,为什么选择这个方向,有没有什么经验给同样想自学的学弟学妹

7. 是哪里人,为什么想到上海来就业

8. 反问

三面的问题不多,不过因为多数问题没有标准答案,难度其实高于一二面

HR面(~40min)

1. 自我介绍
2. 毕业时间
3. 是否考研
4. 高考志愿
5. 专业人数
6. 专业排名
7. 有无实习
8. 大学生活
9. 学 生会哪个部门
10. 参加什么社团
11. 参加什么比赛
12. 获得什么奖
13. 有无团体赛经历
14. 参赛时间
15. 项目背景
16. 项目分工
17. 是否项目组长
18. 项目用什么编程语言写的
19. 自己选的编程语言还是老师给选的
20. 团队分工是你安排的还是各自认领的
21. 团队内产生分歧怎么办
22. 做项目过程中对你来说最大的挑战是什么
23. 大学中让你最有成就感的事情
24. 班里担任什么职务
25. 参加比赛和项目,收获了什么
26. 有发表论文吗
27. 平时的兴趣爱好
28. 老家是哪里的
29. 意向工作地点
30. 职业规划
31. 目前主要在干什么
32. 还投递了哪些公司
33. 对行业有什么倾向
34. 如何看待互联网行业的工作强度
35. 家里人对工作和考研有什么看法
36. 遍地都是研究生,不考研会有遗憾吗
37. 工作后还会去考研吗
38. 自制力高吗
39. 喜欢玩什么游戏
40. 什么时候可以去实习
41. 大四上学期有几门课
42. 什么时候开学
43. 预期的薪资是多少
44. 擅长什么编程语言
45. 有什么优缺点
46. 是不是很宅

最后

面了几场,也总结出来一些人生经验

1、简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。

2、简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!

3、做过什么项目,即使项目体量不大,但也一定要熟悉实现原理,不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。

大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

4、选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!

5、面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

6、另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。

现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…

所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音绝对是一个加分项!

7、最重要的是**心态!心态!心态!**重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!fighting!

文末附上准备面试一直翻阅的资料,内容包含:Android学习PDF+架构视频+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容

这些都是我现在闲暇还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效的帮助大家掌握知识、理解原理。

分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。也是希望可以帮助到大家提升进阶

如果你有需要的话,可以点击获取

喜欢本文的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~