2020实习春招技术开发岗面经:腾讯 & 字节跳动(已Offer)

这里简单说一下我的个人情况:

        本人本硕985软件工程,17年毕业后在TP-Link做过接近一年的安卓开发,后来才辞职考研回母校继续提升自我。原本是打算找一份算法的实习,但今年算法岗的形势不容乐观,竞争激烈。所以在2月初决定把重心放在开发上,做自己喜欢的安卓,然后就开始投递简历了。

        2月初的时候很多大厂都还没开始招聘暑假实习,我就在牛客网上找大厂的内推贴来看,当时字节跳动每天都有十几个内推贴,甚是疯狂!我就找了三四个字节的内推邮箱发去了自己的简历。大概2月7号发的简历,10号就收到了来自北京的HR约面试的电话,邮件中给的是牛客的视频面试链接。然后14号连着一面二面,完了直接电话约三面,16号三面完,当晚8点收到了HR的Offer Call。(三次技术面)

        由于疫情的原因,字节跳动的岗位base北京又太远了,去到要隔离14天。想了很久,大概到了3月3号决定投一下base深圳的腾讯,4号官网投递了简历,然后约了9号一面,接着12号二面,当晚三面的面试官加了QQ,约了15号三面。接着17号HR面,最后19号晚上8点顺利收到HR的Offer Call。(三次技术面 + HR面)

字节跳动 - 安卓开发岗

一面(45min):

1. Activity的创建流程与原理(OnStart、OnCreate、OnResume等)

2. Handler的原理(Handler、Looper、MessageQueue等)

3. View的绘制过程(OnMeasure、OnLayout、OnDraw)

4. Binder机制以及原理(binder驱动、共享内存等)

5. 谈谈设计模式(23种设计模式,MVC和MVP的区别)

6. 谈谈对操作系统中的进程的理解

7. 操作系统中有哪些跨进程通信(IPC)的方法(信号量、管道、共享内存等)

8. 讲讲Java中类的加载过程

还有一些问题遗忘了,最后是做一道编程题,二叉树查找相关的,用递归完成了。

二面(60min):

1. TCP三次握手原理及细节,谈及为什么不能两次握手的原因

2. ShareReference的用法和原理

3. Java垃圾回收的过程

4. 内存泄漏问题(Java中static引起的内存泄漏问题等)

5. JVM内存管理相关问题

6. 智力题:两个骰子(6面)如何表示2月全部日期

还有一些非常难的Java方面的问题遗忘了,编程题考查二叉树Z字型遍历,不能用STL库。

三面(30min):

1. Activity的创建原理,谈及ActivityManagerService偏Framework层的理解

2. 谈谈WindowManagerService的工作机制和原理

3. 谈谈读过哪些开源的安卓库源码

4. 数学题:两个人轮流投掷硬币,规定正面赢,正反面各50%概率,计算先投的人获胜的概率(用级数去解决)

5. HTTP和HTTPS原理,区别,各自的优势

6. 谈谈对token的理解

这次面试没有编程题,很简短但是较为严肃,前两次气氛都较为轻松。

HR电话(10min):

简单聊了一下以前的工作经历和学习经历,为什么辞职考研,对未来的职业规划,然后就介绍公司的待遇和福利等等,发了口头Offer,三天后邮件正式Offer。

腾讯 - 移动客户端开发岗

一面(60min):

1. 自我介绍后直接聊起了以前在TP做过的两个项目。第一个项目问到了设计模式中MVC和MVP的区别,ListView和RecyclerView的区别,如何用ListView实现RecyclerView等同的效果;第二个项目比较大,当时代码量有三千行左右,从Framework层到应用层都有涉及,然后问到了跨进程通信,一个大的数据包跨进程通信中如何保证安全(拆包、安全校验等)

2. Java的类型擦除

3. HashMap的原理(哈希映射、冲突解决的方法等)

3. 安卓的一系列基础问题

这次面试非常注重过往项目的经验,还有些问题遗忘了,编程题两道:中序和后序推导出前序(二叉树递归完成)、给出一个链表删除倒数第五个节点

二面(60min):

1. 谈谈对Handler、Looper的理解,他们俩的数量关系

2. Java中内部类和静态内部类的区别

3. Java的泛型擦除问题(因为一面没答好,二面又重新拿出来问我了,还好我提前准备过)

这次面试非常注重基础知识的考察,当然有很多问题遗忘了,编程题是:数组中每个值看作一栋楼的高度,站在数组中的一个位置求前后能看到的楼的数目(高楼挡在前面会看不到后面的楼)

三面(1h20min):

1. 谈谈以前自己的学习方式,有没有读书做笔记的习惯或者写技术博客的习惯等

2. 谈谈以前在学校做过的项目(本科做过两个科研项目,NLP、EEG,我都分别详细讲了)

3. 谈谈之前在TP工作的项目,每个项目的时间分配和具体流程,包括技术细节,以及遇到的比较困难的问题,还有自己的成长

4. 谈谈Activity的原理,生命周期(面试官希望我答出Native层的原理,虽然我读过安卓源码的书籍,但当时一紧张就答得不太全面)

5. 广播的收发过程,如何做一个有序广播

6. 谈谈对四大组件的理解

7. 讲一下HashMap的原理(为什么到了8个节点就变成红黑树)

8. 以前做过哪些优化相关的工作

9. 谈谈webview的原理和通信机制

10. 概率题:x%的人喜欢篮球、y%的人喜欢排球、z%的人喜欢足球,问同时喜欢篮球和排球的人是多少

这次面试从家庭背景学习情况问到过往项目,再问到基础知识,真的细致入微哈哈~当然还是有些问题遗忘了,中间还问了能过来实习的时间。最后编程题是:两个超大的字符串文件,求他们的最长回文子串,要求不能调用库(当时用动态规划完成,但是时间复杂度为N^2,其实用马拉车算法可以降低复杂度,但当时我并没有练过,所以就把代码交上去了)

HR面(30min):

1. 首先自我介绍一下,谈谈能过来实习的时间

2. 辞职考研的原因

3. 考研之后的半年做了啥(当时我在研究生入学前实习了一下)

4. 讲讲之前在TP工作的成长

5. 谈谈本科到现在的学习方式(在学习课本知识的过程有没有自己打代码实现demo之类)

6. 研究生阶段学习成绩如何,排名什么位置

7. 上学期参与了实验室的什么项目,具体负责什么

6. 谈谈自己的优缺点

8. 相比其他实习生,觉得自己比他们的优势的地方

9. 谈谈之前面试的三个面试官,逐位评价一下

10. 上一份TP的工作是校招的吗?当时还有没有面试其他公司?当时面试公司这么少是处于什么考虑的?

11. 现在实习还有没有找别的公司,有没有拿到其他公司的Offer(这里我如实说了字节跳动的Offer)

12. 对比腾讯和字节跳动,谈谈自己的想法,会如何做选择,选择的原因是什么

13. 最后,觉得腾讯为什么需要你?

总结和给各位同学的建议

无论是本科生还是研究生,实习生还是正式工作(社招除外),面试永远考察的都是基础!所以万变不离其中,好好复习计算机学科相关的基础知识,特别是常问的那一系列问题,每次面试完立刻复盘,查缺补漏。不要害怕失败,每次的失败都会换来一段成长,这是非常宝贵的~然后编程题,平时花些时间上牛客或者leetcode刷一下题就好了。

面试的时候,保持自信心,回答问题不要着急保证思路清晰。然后对每个问题都诚实回答,不会的不能装懂,可以谦虚请教面试官。最重要的是,坚定自己的目标,不要因为一两次的面试失利就影响到自己的情绪和状态,不断的总结失败的原因,总有一天会收到心仪公司的Offer。祝各位学子2020年学业进步,Offer收到手软!

发布了12 篇原创文章 · 获赞 47 · 访问量 6915

猜你喜欢

转载自blog.csdn.net/Carson1145/article/details/105231804