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