记录腾讯 2018 春季实习生校招面试经历(Offer)

6,653 阅读4分钟

本人系双非渣本软件工程的大三学生,春季校招季投了一大波简历,本文先记录一下腾讯的面试经历。

从 3 月初开始网申到 3 月 15 号接到面试通知。我投的是 iOS 移动开发岗位,没有部门要求。这次接到的面试邀请是腾讯北京 OMG 事业部的。

一面

面试地点就在腾讯北京的办公楼(海淀区知春路希格玛大厦),一面的内容大致如下:

  1. 对什么语言比较熟悉?Objective-C(面试过程中简称 OC)或 Swift?
    我平时写 OC 会多一些,Swift 也在研究。
  2. 简述一下 OC 与 Java 以及 JavaScript 之间的区别,从性能、执行方式上谈。
    这里我简单说了一下我的理解,主要围绕着 Runtime、VM 以及类型系统说的。
  3. OC 与 Java 在内存管理上有什么区别?
    典型考察 GC 与引用计数的区别,很简单。
  4. 了解 OC 的 GC 机制吗?
    OC 实际上曾经在 macOS 中支持 GC 机制,不过后来被废除了,NSZone 其实就是为了 GC 而产生的。这里也只是简单提了一下。
  5. 谈印象深刻的项目,主要的技术难点。
    这里我谈了谈我自己上架过的 app —— PicSaver,主要技术难点在于如何获取用户在网页上点击的图片(使用 JavaScript 脚本注入,JS Bridge 通讯)。
  6. 围绕上一个话题,谈一谈你对 JavaScriptCore 的理解,JS Bridge 的工作原理(JS 如何调 native code)以及 UIWebView 和 WKWebView 的区别。
    围绕 OC Runtime 分析了一波,又谈了谈 WKWebView 的多进程渲染。
  7. 看过开源框架的源码吗?
    我简单说了说 AFNetworking 和 ReactiveCocoa。
  8. AFNetworking 的设计思路。NSURLSession 和 NSURLConnection 的区别。
  9. 简述一下 OC 中对象的内存布局。
  10. OC 中 KVO 的实现原理。
    isa Swizzling
  11. 手写算法题,判断 x 是否为 2 的乘方。
    很简单,我先写了一种递归的方法,然后面试官暗示我不要用四则运算和取模,我又写了一种位运算的方法(Bit Counting 的一种高效实现)。
  12. 简述算法题,字符串最长无重复子串。分析一下时间复杂度和空间复杂度。
    Two Pointer + 哈希表即可。最差情况下时空复杂度均为 O(n)。

一面就这么告终了,当时感觉很简单,面试官看起来也很满意,然后让我稍等一会,马上就安排了二面。

二面

  1. 谈谈 Swift 中的 nil,与 OC 中 nil 的区别。
    我本以为是考察 Optional 类型,实际上面试官想考察 OC 的 nil 是指针类型的一个取值,而 Swift 中的 nil 在类型层面可以赋给值类型和引用类型。
  2. Swift 中 struct 与 OC 中 class 的区别。
    也是考察值类型与引用类型的区别的。
  3. 值类型在函数间传值时的性能问题。简述 COW(Copy-on-Write)。
  4. 简述一个 HTTP 请求的整体过程。如果有 HTTPS 呢?HTTP/2(及 SPDY 这种实现)了解吗?
  5. 算法题,填充矩阵:
    1  2  3  4
    10 11 12 5
    9 8 7 6
    考虑边界情况,大致思路就是用方向向量来控制 x, y 坐标,按方向一直填充即可,使用合理方法来处理碰撞检测即可。可以写伪代码。
  6. 网络通信时通常采用什么格式?除 JSON 以外的?
    这里我简单谈了谈 Protobuf,面试官继续问 Protobuf 二进制的好处,我简单说了下其结构上带来的带宽优化(体积更小),以及 Parser 解析的大致过程。
  7. 听说你对前端有所了解?可否给我这个“外行”讲一讲 Vue.js?
  8. (面试官明显不是外行)简述 Vue.js 与 Angular 的相似之处,它们与 React 又有什么区别?简单谈谈 Virtual DOM、MVVM 设计模式。
  9. C++ 了解吗!!
    我擦,套路题?赶紧回答只是略微了解而已。可以看懂代码,能写简单程序。
  10. 日常 ending,你还有什么想问的吗?
    简单问了下实习生的工作,腾讯这边更希望实习生做一些研究性质的工作,探索一些技术新方向,当然你也可以选择写业务。

大致就记住了这些问题,面试过程中还有更多琐碎的小问题,就不一一赘述了,两面总共面试了 1 个多小时,整体的过程还是很轻松的,问题回答得基本都让面试官比较满意。

HR 面

二面结束后大约一个小时,简历状态变为 HR 面,如果不出意外,接下来一个周左右的时间我将会迎来所谓的 HR 面,技术面应该告一段落了。


说一下我现在的状况吧,3 月 19 日入职石墨文档,前端开发实习生(我技术方向太杂了 😂),主要负责石墨桌面客户端(Electron + React)的开发与性能优化。接下来的职业规划就要根据其它公司的面试进展来决定了,目前待面的还有蚂蚁金服支付宝团队。嗯,先写到这~