本人系双非渣本软件工程的大三学生,春季校招季投了一大波简历,本文先记录一下腾讯的面试经历。
从 3 月初开始网申到 3 月 15 号接到面试通知。我投的是 iOS 移动开发岗位,没有部门要求。这次接到的面试邀请是腾讯北京 OMG 事业部的。
一面
面试地点就在腾讯北京的办公楼(海淀区知春路希格玛大厦),一面的内容大致如下:
- 对什么语言比较熟悉?Objective-C(面试过程中简称 OC)或 Swift?
我平时写 OC 会多一些,Swift 也在研究。 - 简述一下 OC 与 Java 以及 JavaScript 之间的区别,从性能、执行方式上谈。
这里我简单说了一下我的理解,主要围绕着 Runtime、VM 以及类型系统说的。 - OC 与 Java 在内存管理上有什么区别?
典型考察 GC 与引用计数的区别,很简单。 - 了解 OC 的 GC 机制吗?
OC 实际上曾经在 macOS 中支持 GC 机制,不过后来被废除了,NSZone
其实就是为了 GC 而产生的。这里也只是简单提了一下。 - 谈印象深刻的项目,主要的技术难点。
这里我谈了谈我自己上架过的 app —— PicSaver,主要技术难点在于如何获取用户在网页上点击的图片(使用 JavaScript 脚本注入,JS Bridge 通讯)。 - 围绕上一个话题,谈一谈你对 JavaScriptCore 的理解,JS Bridge 的工作原理(JS 如何调 native code)以及 UIWebView 和 WKWebView 的区别。
围绕 OC Runtime 分析了一波,又谈了谈WKWebView
的多进程渲染。 - 看过开源框架的源码吗?
我简单说了说 AFNetworking 和 ReactiveCocoa。 - AFNetworking 的设计思路。NSURLSession 和 NSURLConnection 的区别。
- 简述一下 OC 中对象的内存布局。
- OC 中 KVO 的实现原理。
isa Swizzling - 手写算法题,判断 x 是否为 2 的乘方。
很简单,我先写了一种递归的方法,然后面试官暗示我不要用四则运算和取模,我又写了一种位运算的方法(Bit Counting 的一种高效实现)。 - 简述算法题,字符串最长无重复子串。分析一下时间复杂度和空间复杂度。
Two Pointer + 哈希表即可。最差情况下时空复杂度均为 O(n)。
一面就这么告终了,当时感觉很简单,面试官看起来也很满意,然后让我稍等一会,马上就安排了二面。
二面
- 谈谈 Swift 中的 nil,与 OC 中 nil 的区别。
我本以为是考察Optional
类型,实际上面试官想考察 OC 的nil
是指针类型的一个取值,而 Swift 中的nil
在类型层面可以赋给值类型和引用类型。 - Swift 中 struct 与 OC 中 class 的区别。
也是考察值类型与引用类型的区别的。 - 值类型在函数间传值时的性能问题。简述 COW(Copy-on-Write)。
- 简述一个 HTTP 请求的整体过程。如果有 HTTPS 呢?HTTP/2(及 SPDY 这种实现)了解吗?
- 算法题,填充矩阵:
1 2 3 4
考虑边界情况,大致思路就是用方向向量来控制 x, y 坐标,按方向一直填充即可,使用合理方法来处理碰撞检测即可。可以写伪代码。
10 11 12 5
9 8 7 6 - 网络通信时通常采用什么格式?除 JSON 以外的?
这里我简单谈了谈 Protobuf,面试官继续问 Protobuf 二进制的好处,我简单说了下其结构上带来的带宽优化(体积更小),以及 Parser 解析的大致过程。 - 听说你对前端有所了解?可否给我这个“外行”讲一讲 Vue.js?
- (面试官明显不是外行)简述 Vue.js 与 Angular 的相似之处,它们与 React 又有什么区别?简单谈谈 Virtual DOM、MVVM 设计模式。
- C++ 了解吗!!
我擦,套路题?赶紧回答只是略微了解而已。可以看懂代码,能写简单程序。 - 日常 ending,你还有什么想问的吗?
简单问了下实习生的工作,腾讯这边更希望实习生做一些研究性质的工作,探索一些技术新方向,当然你也可以选择写业务。
大致就记住了这些问题,面试过程中还有更多琐碎的小问题,就不一一赘述了,两面总共面试了 1 个多小时,整体的过程还是很轻松的,问题回答得基本都让面试官比较满意。
HR 面
二面结束后大约一个小时,简历状态变为 HR 面,如果不出意外,接下来一个周左右的时间我将会迎来所谓的 HR 面,技术面应该告一段落了。
说一下我现在的状况吧,3 月 19 日入职石墨文档,前端开发实习生(我技术方向太杂了 ?),主要负责石墨桌面客户端(Electron + React)的开发与性能优化。接下来的职业规划就要根据其它公司的面试进展来决定了,目前待面的还有蚂蚁金服支付宝团队。嗯,先写到这~