先说一下我的情况,8月被导员通知优研资格没有我,开始准备考上交819,9月华为大规模秋招,第一批集招offer拿到,拒了,之后学姐给了白金码,选择放弃考研全力备战字节面试,准备了一个月,10.13面试,三轮面完,10.19收到offer call秋招结束,在此期间拿到360和keep的offer,但是我都拒绝了,因为我的目标很明确!字节跳动,不面试上不罢休,其实腾讯,头条待遇都不错,但是年少轻狂,结果愣是面了9面才拿到字节跳动offer!
这篇文章就讲一写我9面字节跳动的面试经历!
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分钟后开始二面
1. 自我介绍
2. 介绍项目,为什么要自学安卓(~5min)
3. Android如何实现多进程,应用场景是什么(答的不好)
4. Android的IPC机制(Binder)是否了解(答的也不好)
5. 如何用两个队列(FIFO)实现栈(FILO)
6. HashMap和HashTable区别,HashMap原理和实现,hash()的算法
7. 如果自己设计hash算***怎么设计,为什么(答的素数取余)
8. String的hashCode()和Object的hashCode()
7. 虚拟内存和物理内存的概念和关系,内存分页的调度算法
8. 怎么实现LRU缓存(参考leetcode T146)
9. 可以自己写一个java.lang.Object类吗,系统会加载哪一个
10. Java里泛型的实现
11. 了解常见排序算法吗,手写一下快排
12. Java里加锁的方式,synchornized关键字的原理,悲观锁和乐观锁都有哪些实现
13. 死锁的条件和解决方法,讲讲银行家算法
14. TCP的三次握手四次挥手,为什么要四次挥手
15. TCP的流量控制算法(滑动窗口),拥塞控制算法
16. 怎么解决用户高频点击打开新Activity导致的多实例问题(Activity启动模式)
17. 怎么判断两个无环单链表是否相交
18. 写题:leetcode 445
19. 反问
二面问题量非常的大,集中在Java/OS/算法,但并没有特别难以回答的问题,认真准备的话大部分都能答出来。面试官也非常友好,给了很多引导和提示。
因为三面面试官的时间问题,约了两天后的三面
1. 自我介绍
2. 介绍一下实习做的工作,是自己完成的吗,遇到什么困难,成果怎么样
3. RecyclerView怎么实现的item缓存,跟ListView有什么区别(因为项目用到了所以被问了)
4. 写题:leetcode 1233
5. 设计题:微信的联系人列表功能
(1)设计添加联系人的API(从可能的方式,数据形式,接口参数方面回答)
(2)怎么实现联系人列表的UI(答的RecyclerView)
(3)怎么实现A-Z首字母的快速定位功能
6. 是自学的Android吗,为什么选择这个方向,有没有什么经验给同样想自学的学弟学妹
7. 是哪里人,为什么想到上海来就业
8. 反问
三面的问题不多,不过因为多数问题没有标准答案,难度其实高于一二面
主要问java,以及虚拟机,问了一点android
1.实习项目有关的介绍以及问题回答
2.反射与代理的区别,动态代理,静态代理,二者的区别,以及代理模式的UML图
3.字节码技术
4.虚拟机的双亲委派,以及好处
5.虚拟机栈的作用,以及什么情况下会发送Stack Overflow
6.谁能做GCRoot,为什么计数法不如可达性好
7.为什么要分新生代和老年代,如何区分
8.GC算法都介绍一下
9.类加载的过程,方法区中存的是什么,类型信息都包括什么,如何判断两个Class是否相等。
10.HashMap的put方法讲一下,讲一下如何扩容,讲一下一个类作为HashMap,要实现哪些方法,equals和hashCode有什么区别和联系
11.消息机制讲一下,讲一下ThreadLoacal,讲一下Handler处理信息有什么方法(除了handleMessage还有什么),MessageQueue是否有长度限制,android中Message多不多?
12.Activity A到Activity B跳转的一个生命周期的过程
13.Activity A(standard模式)跳转到B(单例模式),B再跳转到A,此时返回,会出现什么情况
14.InVisible和Gone的区别,Gone和ViewStub的区别
15.字符串第一次出现一个的字符
计算机网络相关
1.osi七层架构,物理层做什么的
2.输入网址之后发生的一些列事情
3.DNS用了什么协议,具体是怎么做的
4.TCP的三次握手,以及流量控制
5.HTTP报文里有什么
6.HTTP与HTTPS有什么区别,加密算法是什么
7.HTTP的响应码有哪些?
8.get与post的区别
9.两个有序数组,找到中位数
深入android方面以及实习经历
1.实习项目有关(包括一些具体实现,以及一些关键问题)
2.LayoutManager的作用
3.RecyclerView用的多么有哪些了解,如何去实现双层瀑布
4.如何去设计一个SDK(很多细节的问题)
5.扑克牌,抽五张是同花的概率,抽五张是顺子的概率
6.RN以及Redux的了解,好处,以及使用,以及工作中对于android和RN的比重
7.单例模式的好处,那么什么时候不去用单例呢?
8.SP的内部实现了解么?如何实现的序列化
9.了解注入么?
字节跳动,一共面试了3次,一共六面,总算是拿到了Offer!
最后面试字节跳动的时候一个就是三面的面试官是我 leader,他当时问我,如果给你一个两个星期才能做完的活,你想怎么办。我说,先跟您商量一下,表达一下自己的观点,如果您坚持安排给我,我就加班呗。。。还能咋整。。。。直到做完呗。。。。他噗嗤一下就笑了。。。他问了我这个问题,我就知道他是 leader了。而且我觉得可能就是这个问题救了我。说实话我本身就是比较耿直的山东汉子,我觉得加班没啥, leader也可能比较喜欢我这种耿直的,所以捞了我。很感谢自己的性格给了自己机会。
另一个问题为什么要拒了华为。其实华为给我开的工资算不错的了,除了hr让我有点觉得自己被瞧不起了,主要的原因是面试太水了,让我觉得进去的人水平都不会很高,然后就不想去了…我一直坚信,只有在高水平的环境里才能获得更大的成长。当然华为还是很强的,我很希望过几年能跳华为去。。。。
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
以上进阶大厂面试题以及系统学习资料可以免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。
如果需要PDF版本可以在群文件夹里,自行领取!
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)