源码

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

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

从 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)的开发与性能优化。接下来的职业规划就要根据其它公司的面试进展来决定了,目前待面的还有蚂蚁金服支付宝团队。嗯,先写到这~

作者:Cyandev

链接:https://juejin.im/post/5aae70dc6fb9a028de447d24

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/jilutengxun-2018-chunjishixishengxiaozhaomianshijingli.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:3月 29, 2018 at 03:46 下午

热评文章

发表评论

[必填]

看不清?

提交后请等待三秒以免造成未提交成功和重复