本人系双非渣本软件工程的大三学生,春季校招季投了一大波简历,本文先记录一下腾讯的面试经历。前端
从 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
10 11 12 5
9 8 7 6
考虑边界状况,大体思路就是用方向向量来控制 x, y 坐标,按方向一直填充便可,使用合理方法来处理碰撞检测便可。能够写伪代码。
- 网络通讯时一般采用什么格式?除 JSON 之外的?
这里我简单谈了谈 Protobuf,面试官继续问 Protobuf 二进制的好处,我简单说了下其结构上带来的带宽优化(体积更小),以及 Parser 解析的大体过程。
- 据说你对前端有所了解?能否给我这个“外行”讲一讲 Vue.js?
- (面试官明显不是外行)简述 Vue.js 与 Angular 的类似之处,它们与 React 又有什么区别?简单谈谈 Virtual DOM、MVVM 设计模式。
- C++ 了解吗!!
我擦,套路题?赶忙回答只是略微了解而已。能够看懂代码,能写简单程序。
- 平常 ending,你还有什么想问的吗?
简单问了下实习生的工做,腾讯这边更但愿实习生作一些研究性质的工做,探索一些技术新方向,固然你也能够选择写业务。
大体就记住了这些问题,面试过程当中还有更多琐碎的小问题,就不一一赘述了,两面总共面试了 1 个多小时,总体的过程仍是很轻松的,问题回答得基本都让面试官比较满意。性能优化
HR 面
二面结束后大约一个小时,简历状态变为 HR 面,若是不出意外,接下来一个周左右的时间我将会迎来所谓的 HR 面,技术面应该告一段落了。markdown
说一下我如今的情况吧,3 月 19 日入职石墨文档,前端开发实习生(我技术方向太杂了 😂),主要负责石墨桌面客户端(Electron + React)的开发与性能优化。接下来的职业规划就要根据其它公司的面试进展来决定了,目前待面的还有蚂蚁金服支付宝团队。嗯,先写到这~网络