Developer Center


黄建敏(@kuailejim) | Full Stack Developer | Crazy Driver


BAT Offer其实可以这样拿

想起去年这个时候,我还在努力地去争取阿里巴巴的实习offer,转眼间已经到了快毕业的时间了,时间真快,真是一把杀猪刀。经历过去年阿里“拥抱变化”之后,怀着悲伤的心情,打着“我想去外面看看”的心态面试着一家又一家的企业。最终拿了很多offer,包括百度、腾讯,还有曾经抛弃过我的阿里。

1.jpg

BAT,在国内,几乎是每个计算机学子的梦想之地,而如何拿到它们的offer,则是众多学子想知道的。而我想从自己的经历出发,说一些自己的经验,让能看到这篇文章的同学多一些信心,也多一分从容,也就达到写这篇文章的作用了。

我从下面几个角度来剖析很多同学关心的问题:

1.该学习哪些基础知识?

2.面试前该怎么临时抱佛脚?

3.我已经大三了,是不是来不及在秋招前学习了?

4.如何能拿到Special Offer

5.浅谈我面试中的经历


该学习哪些基础知识?

我推荐iOS开发者必学的几本书:

Operating System Concepts 9th Edition

C++ Primer Plus

Computer Networking A Top-Down Approach 5th Edition

ADTs Data Structures and Problem Solving with C++

数据库原理

首先,你必须得学一门语言,而与OC相关的除了C就是C++了,而我选择了C++,因为和OC一样同为面向对象编程。学了C++之后,你对指针,内存管理、继承、多态性等等才会有更深的理解,而这却是OC会用到的。

操作系统更是要学了,iOS基于Unix,而你如果不了解Unix,在你想要更加深入了解iOS的时候,也许你就会很迷惘了。比如,你知道虚拟内存么,线程跟进程的区别,内存的分片,多线程的标准(POSIX threads等),CPU的轮询机制,锁等,而这也常常是笔试、面试的内容。

计算机网络也是同理,做一个app,你必然要知道http的请求是怎么发出来的吧?那么TCP握手你也要了解,http报文格式?等等这些一系列相关的计算机网络知识,肯定也是要学的。

再说数据结构和算法,这更是学计算机的基础了,如果连二叉树,堆,图,链表,数组这些基本的数据结构都不了解的话,那笔试肯定是过不了的。而算法,虽然对于iOS开发者来说要求没这么高,但是也要知道一点。

数据库也很重要,因为我们之后的开发会用到它,如果你会sql语句,绝对是你面试的加分项。

以上是计算机基础。

而对于iOS开发而言,你需要学习什么呢?

ObjC是一定要学的,而Swift是可选的。在大公司里,还是以ObjC作为主要的开发语言,所以你懂得。

UIkit里面常用的控件你要知道怎么用,比如tableView,label,button等等。

NSURLConnection&&NSURLSession

GCD&&NSOperation相关的类

block原理,可以看我写的另一篇文章,点这

内存管理

runloop

runtime

ARC&&MRC

等等


面试前该怎么临时抱佛脚?

首先要有自信,相信自己是很出色的,不要胆怯。

既然你是抱着拿BAT的心态去的,那就去刷往年的BAT笔试题吧。

然后多去网上看看BAT的面经,我觉得这就足够了,记住,保持良好的心态。


我已经大三了,是不是来不及在秋招前学习了?

来得及,来得及,来得及,重要的事讲三遍。

算算时间,现在4月中旬,9月秋招,中途5个月,你每天像高考一样花个7、8个小时去系统性地学习第一点提到的东西,我觉得时间是完全够的。只要你有恒心,结果肯定会是好的。如果时间真的来不及,对于基础知识可以先简单了解下,重点学习iOS相关知识点。


如何能拿到Special Offer

往往到了一定水平之后,许多公司会向你伸出他们的橄榄枝,而这也是你拿Special Offer的资本。

我认为最重要的是要有全栈的视角并且在某一领域具有足够的深度。

这句话该怎么理解呢?

试想一下,任何一家公司,凭什么给你相对于其他应届生更高的价格?

你所需要达到的是成为满足这家公司需要的人才,而这往往是社招的目的。那么问题就简单了,你要达到工作好几年的开发者的水平,这样才能拿到Special Offer。

以我自己的经历来说,提早出去实习,获得更多的工作经验,则是最好的办法。

因为在工作中你才有机会去学习除iOS之外的东西,并且只有实践才能让你在iOS道路上踩过坑,获取难能可贵的经验。

举个很简单的例子,一个二面的面试官,他也许是一个业务线的老板,他不关心你是安卓还是iOS,当他问你,你如何实现push?

如果你只回答出你作为iOS开发者所知道的APNS,那么你就只能拿到批发价Offer了。

但是此时你却回答APNS之外,还回答出安卓的push机制,更牵涉到保护push进程,进程复活等等相关内容,试想一下,面试官是不是会露出满意的笑容呢。

如果此时你在回答出服务端对于APNS的处理,拿到苹果的p12,完成非对称加密验证,并说出苹果CA证书原理。你猜面试官是什么样的表情呢?


浅谈我面试中的经历

先谈谈实习面试经历吧,实习面试我只面了阿里巴巴。

笔试

参加线上笔试,前面是一堆考察计算机基础的选择题(读了上面提到的书,肯定没问题的),夹杂一些ObjC语法。大题目的话,就考察怎么优化app,怎么让启动时间变短类似,具体我忘了,时间有点久了。

一面

一面问了tableview,cell的复用,懒加载,GCD&&NSOperation,autolayout等等,基本上都是很基础的iOS知识。

二面

没什么可说的,就是问你做过的项目,问问你遇到的坑,怎么解决。

三面

HR面就比较随便了,就聊聊人生。

在谈谈正式秋招面试经历

首先谈谈百度:

一面

我印象很深刻是一个妹子面我的。

iOS响应链

SDWebImage原理

AFNetworking原理

tableview相关

二面

二面就把我面的想哭了。

AutoreleasePool原理,什么时候释放

Runloop是什么,是不是会自动创建,mode,source

Runtime,如何用runtime进行hook,hotpatch就是利用runtime来做的

然后就是HR面了

腾讯:

腾讯是最蛋疼的,我准备了好久的iOS的知识点,结果一个都没问,全是问计算机基础的。

一面

计算机网络五层模型是哪五层

http协议相关

有1000亿个数字,在单机上对它进行排序

二面

手写冒泡排序代码

如何统计一个城市的井盖数,方法越多越好

两个水桶,一个3L,一个5L,然后问能组装成几L的水

技术面结束了

阿里:

前文提到,阿里“拥抱变化”,集团由于人才调整,没有HC,于是我离开了阿里,后来阿里又给我发了Offer。


总结:

其实BAT Offer也没有很难,只要你想拿,很想拿,很想很想拿,那么,它一定会向你伸出橄榄枝的!

欢迎大家关注微博@kuailejim