本文来自小吴的一个读者的投稿,我跟他是在 2 月份认识的,当时他面试阿里在五面凉凉,陪他吐槽了一晚上,然后第二天就开始准备面试腾讯了。昨天他喜提腾讯 offer,觉得他的经验可能对大家有帮助,就软磨硬泡的让他分享出一篇面经出来给大家看看,希望对大家有帮助。
自我介绍
我来自中国四大邮电大学中排名第四的邮电大学,双非普本,大三安卓狗。自己大一的时候刚上大学的时候有也蛮迷茫的,高考考的人心力憔悴,一天无所事事,从来没想到能去BAT实习。但是就目前来看,自己大三上学期去百度实习,现在拿到腾讯春招口头offer。
我只能说,运气占一半,实力占一半。
我可能就是运气比较好的那种。
自己大一的时候刚来大学,其实是第一次接触计算机。然后我也不知道该怎么学,但是当时有个老乡学长给我指导我如何学习计算机,学会使用搜索引擎,他说计算机学院学生如何连搜索引擎都不会用,基本上就是不适合这一行,然后给我要求是这样的
-
如何描述自己想要的信息
-
如何筛选海量的信息得到自己想要的
-
如何把信息分类整理掌握
然后我基本上遇到问题都是先自己想下,如果不会就去搜索,最后整理自己不会的地方,如果实在不会就问下别人。
大一一开始自己就看郝斌老师的C语言视频,然后去刷算法题,参加蓝桥杯比赛,获得了省赛的奖(但是说实话,这个比赛真的太水了)。
然后大一下学期考入学校的移动应用开发实验室安卓组,大一暑假留校实验室开始了自己 java 和安卓的学习,写了安卓计数器看完《安卓第一行代码》郭神的书;
大二上学期和实验室朋友一起多人git合作写了一款《收藏小精灵》的app,参加了当时解放号杯比赛,拿的优秀奖,奖金2千块钱。
大家几个人一分虽然不多,但是也是人生的第一桶金。
基本上在学校白天上课,晚上在实验室学习写项目到11点才回寝室。
大二暑假时候,之前去参加谷歌训练营时候看到腾讯的游戏大赛就想参加,然后就开始自学 C# 和 unity ,组建了团队,招募了美工,建模师,策划。游戏项目写了我大二一个暑假,白天学习 unity,晚上写项目,那段时间是我自己压力最大的时候,被分手,项目写不出来了,西安夏天晚上睡在没有空调的寝室,自己活的真的像条狗。自己真的无数次想放弃,但是觉得答应别人要写出来不喜欢放弃,就坚持把这个游戏项目写完了,项目叫《幻想机关球》。
参加比赛时候发现自己和专业的游戏团队写出来的东西还是差别蛮大的,也没获奖,但是也算完成了对别人的承诺,实现了自己小时候的愿望。
大三上学期,自己和别人又开始写一款《卡片记忆》的app,还没写完,百度面试过了,然后就去百度实习去了。
在百度实习那段时间真的蛮开心的,吃的不错,导师和leader对我也蛮好的,自己就完成了两个手百的需求,然后因为一些原因从百度离职了,在去公司实习的时候,我才知道自己和真正的程序猿还是差很远,每天都痛并快乐着。
感谢百度那段实习的日子,是我人生第一次实习,对我对这个程序猿行业有了直观的认识,看清自己的能力和别人的差距。
寒假回家基本上都是在复习,过年前复习操作系统编译原理,年后复习安卓和 java,数据结构,计算机网络这些,基本上自己春招从寒假放假就开始准备,准备了两个多月,自己除了运气好之外也是对得起自己的付出。
腾讯这个面试是我学长直接内推的,给的他们安卓组组长,因为我坚持写博客,又有百度实习经历学长说我简历评级在腾讯蛮高的,基本上很快就接到面试。下面是面经。
一面 3/5
第一次打电话我在上课,然后拖到下午 6 点,然后下午 6 点半打过来电话我再上厕所尴尬,,,然后过了 10 分钟就开始面试,面试的难度还好吧,基本上都是基础问题。
1 自我介绍
就简单的自我介绍了下自己,然后说下自己的学习历程,把自己写的项目带出来,然后讲了下自己在百度实习的经历。
2 在百度实习的经历,然后问我手百的框架,写的需求
讲了下百度手百的框架,自己当时负责的需求,如何写的,遇到问题咋处理的
3 HTTPS,对称加密,非对称加密
先讲了下 HTTP 和 HTTPS 的区别,然后讲下 HTTPs 为什么安全,如何加密的,对称加密是什么,公钥私钥怎么用,然后讲到证书,为什么有证书,证书安全吗,如何保证证书不被窜改,但是我当时好像没讲到数字加密这块,然后面试官对我这块回答不是很满意。
4 用过的网络框架 okHttp源码解析
因为我项目网络框架就用过 okHttp , 然后大三上学期看过这块源码分析,就给面试官讲了下主体流程,然后说了下框架的最重要的拦截器的作用是,讲了下责任链模式。
5 RecyvleView的源码
我一开始没听清楚面试官的问题,我给人家讲下下 ListView 和 RecyvleView 的区别,然后面试官让我讲了下RecyvleView 的源码,然后这块我真没看这块源码,自己就讲了下在 recyclerview 中持有一个 adapter 的观察者,然后在 setAdapter 之后会注册这个被观察者,然后会去 requestLayout ,去请求重绘布局。
6 算法题 两数之和
这个题,,,基本上就是签到题,我是用 HashMap 优化的,有点取巧了。
7 智力题 瓶子从100楼往下扔,一共两个瓶子,问从那个楼扔瓶子刚好碎
这个题是腾讯最爱问的智力题,这块我一开始想到二分的方法,但是仔细一想这个方法不可以,然后我就想到分段的方法,第一个瓶子 10 层 10 层间隔扔,确定大范围,然后第二个瓶子确定小范围,然后面试官说这个方法还是不对,但是比上一个方法好一点,让我再想想,然后我就很着急就想不出来 // 最后在吴师兄的推文里面看到了解答。
8 Handle
这个就是安卓面试必问的问题,基本上把源码看下都能说出来,然后是个生产者消费者模型。
9 进程之间如何通信
这个真的是送分题,,,安卓问题必问的进程间通信,然后我讲下内容提供器,服务什么的,
总的来说,一面蛮基础的,然后就是讲HTTPS那块和智力题没讲好,其他的都可以。
二面 3/8
本来给我打电话,然后我又去吃饭又没接到电话,然后就发短信和面试官商量时间,然后重新定在星期五下午 3点,,,然后就开始慌了,不知道面试官会问我什么。然后战战兢兢开始了二面,但是面试官人很好,全程面试都是我从自我介绍开始把握节奏,全都是我在讲,面试官就可能个别问题问了下细节。
1 自我介绍
跟一面介绍一样。
2 百度实习的时候做过的业务
也和一面回答的一样。
3 安卓和js的交互方式,那种更好,安全性比较
主要是百度那边手百安卓和js交互比较多,所以就讲了下安卓和js的交互方式,比较了下几种方法。
4 让我讲了下自己写的 unity 游戏过程
这个就是完全自己发挥,讲下下自己游戏的玩法,动画,粒子特效怎么弄的,游戏里面AI框架自己怎么用的,怪物怎么自动打人的。
5 HTTPS
我说一面问过了,他问我答到证书了吗,我说我讲过了,然后就没问了。
6 HashMap 的 hash 操作和扩容机制
因为这块 HashMAp 的源码自己仔细的阅读过,然后还写过博客,讲起来就很得心应手,把 HashMap 里面的为什么是 2 的次方,二次扰动,hash 值计算都讲了一遍
7 红黑树概念,二叉树遍历
因为上一个问题讲到红黑树了,然后讲了下红黑树的概念,然后问其他的我真的不会了,就问了下二叉树的前,中,后遍历方式。
8 算法题 如何判断一个数是 2 的次方 如何优化 时间复杂度
这个题,也算一道简单题,自己大一时候好像写过,直接用这个数的减一的值和这个值进行计算就好了。
9 快排的思想 如何优化 时间复杂度
这个也是基本问题,然后讲了下快排的思想,然后优化的方式讲了下中间值取值的优化,然后为什么这样做。
10 JVM 内存模型
这个也算 java 的基本问题,自己讲这个的时候提到操作系统内存分配什么的。
11 GC 机制原理,概念,如何自己用
这个也算 java 基础问题,先讲了下内存碎片问题,操作系统里面什么时候GC,然后介绍JVM的GC机制,然后讲了下 G1 收集器,新生代老生代那些。
12 内存泄漏问题
这也算安卓基本上必问的问题,然后我就讲了下为什么会内存泄漏,然后我们怎么处理这块。
13 自定义View
这个也算安卓必问的问题233,先是测量 然后布局 最后绘制//基本上这种问题是必问的。
14 ListView的优化
这个我就讲了下 ViewHolder 缓存机制,然后顺便讲了下 listView 的源码,和重复利用机制。
15 Glide 框架的分析
因为这块我看过源码,然后讲下了这个框架的俩个亮点 1虚拟碎片监视生命周期 2 缓存机制,然后就讲到lru算法,然后就扯到操作系统这块内存算法。
16 Binder机制
Binder机制这块我只讲了概念,讲了下操作系统里面管道和Binder的区别。
17 跨进程通信
这块我也可能只是知道一个概念,具体用的时候还不是很清楚,讲了下隐式Intent,共享内存什么的。
18 网络TCP,网络分层
这块因为刚复习到了,所以讲起来很流畅,先讲了下自己对网络协议的理解,网络的分层,为什么要分层这块。然后讲下个个层传输的时候怎么怎么工作。
三面 3/11
上周星期五二面完我去看电影(夏目友人帐的剧场版)面完没接到HR的电话,233没想到啊我看到面试状态是HR面了,然后然后今天中午2点的时候,突然我接到电话以为是HR面,,,但是好像不是HR,又是一轮结束面试,发现我状态变成,复试状态了尴尬,这一面应该是总监面试的
1 自我介绍
还是一样的介绍。
2 讲下写的最好的一个项目
讲下一下自己unity项目怎么写的,自己遇到问题这么解决的,如何组建团队的。
3 大数据排序
给 1 亿的 int 类型的数,如何找到最大的 100 个,这种问题肯定不可能直接排序,先分开存储,然后我的思路是用桶排的思想进行处理,可能我的方法不是最优解。
4 对自己项目的优化方式
自己讲了对设计模式的理解,然后讲了下自己项目中的单例模式和工厂模式的使用,对内存的优化
5 百度实习的时候
问了我下百度实习的生活,觉得北京生活怎么样233。
HR面 3/18
3月11号总监面试完了之后,然后晚上状态变成HR面试了,然后等啊等,等了一周终于等到了
1 自我介绍
还是一样的介绍,介绍写的什么项目,每天自己学习安排什么的。
2 家庭情况,父母工作
这个就问什么回答什么。
3 个人为什么选择学计算机
这个问题,,,很尴尬,我说我想让父母过上更好的生活,让自己以后能在大城市生活。
4 为什么从百度离职
这个问题如果有兴趣可以给大家讲,,,
5 对自己的以后的安排
就是自己以后生活规划,自己说了自己短期生活规划和长期生活规划。
6 对生活的看法
讲了下自己看的书《人间失格》对自己影响很大,让自己知道人该如何活着,每个人答案不一样,我的答案是过自己喜欢并承担的起的生活,想让我周围的人都过的很好。
总结
最后面完试,HR小姐姐给了口头 offer,然后我还拜托学长用他 leader 查了下我面试评价,除了一面评价是 A,其他三面都是 A+ (腾讯面试完会有个打分 A+ A A- B c BC就是这面很差),让我出乎意料的。感觉自己也没很厉害,都是很基础的问题,然后自己分析了下原因
-
自己简历评级很高(有兴趣可以查下腾讯简历评级)
-
有百度手百需求实习经历
-
自己游戏项目给自己加了很大亮点
-
自己寒假认认真真复习了两个月 操作系统 编译原理 计组 数据结构和算法 安卓和 java jVM都做了很详细的准备。
-
自己有写博客和定时提交 git 的习惯
-
学长直接给部门的内推
分析上面的原因,很大因素都是运气好,剩下的都是自己一点一滴慢慢积累的,积少成多,很简单的道理。
资料分享
操作系统视频-北大陈向群 https://www.bilibili.com/video/av20528688
计算机组成原理-哈工大刘宏伟 https://www.bilibili.com/video/av15123338
还有我推荐极客时间里面老师的课程:
-
王争老师—数据结构与算法之美(在吴师兄的安利下买的,强烈推荐啊啊啊啊,真 的讲的特别好,听说最近出了一门新课)
-
刘超老师—趣谈网络协议(讲的也不错)
//这两个课程很值得去买,晚上我睡不着时候听这个课程睡觉尴尬。
我的csdn博客地址 https://blog.csdn.net/sakurakider 欢迎大家关注我嘿嘿。
算法公众号的话推荐「五分钟学算法」,早知道当时好好看下这里面文章,面试很多算法题都有题解哈哈。
最后,分享一下实验室的吉祥物,它的名字叫 offer,哈哈哈哈。
推荐阅读:
欢迎关注这个会做动画的程序员?