前言
本文是给想进入“BAT”等企业的开发朋友们提供思路的,内容全部来自于真实经历。
关于我(化名)
大家好,我是小白(化名),一名 iOS 开发工程师。
有些人在毕业的时候就能顺利进入“BAT”、“TMD”、“FLAG”,但是更多的人并没有这个机会,比如,最典型的——我。
努力就能改变命运。这是真的吗?
在我看来,虽然我不是特别聪明(但也不笨),但是努力确实给我带来了更多的机会。通过努力,我顺利拿到大厂offer,相信此时正在看这篇文章的你也一定可以的。
所以,无论你是想跳槽去大厂的工作党,还是即将毕业找工作的应届生,如果你想要进大厂却不知从何着手,希望你能将这篇文章反复看几遍,根据本文的内容找到正确且适合自己的方法,努力打磨,然后坚持坚持再坚持,我相信你一定能拿到大厂的offer。
颓废的校园经历
我毕业于一所普通的二本院校,大学时曾梦想成为学霸,幻想进入 BAT 大企业。然而,现实啪啪打脸,学渣一名。毕业的第一天,就成为一名待业状态的社会人。
曾经的我就是现实版的“余欢水”:“努力”地活着,却总是被生活“欺骗”。
上大学时,兴趣广泛,但叶公好龙,无一擅长; 我想要成为学霸、有所成就,但好高骛远,无所作为; 毕业那年考研,顺利落榜; 后来痛定思痛,背水一战,参加公务员考试,意外通过笔试,却惜败在面试。
那一年,我深刻地感受到 世界辣么大,却没有我的容身之处。
初入职场
迫于生活压力,在亲戚的介绍下,我进入深圳的一家创业公司做 iOS 开发。
由于我技术比较菜,工资只有 5k。当时我连 UITableView 的代理方法都不会用,UIView 的 frame 都不会设置,每次参加需求讨论会的时候,都插不进话,因为我都不是很懂啊。
实在要发言时,却也只能附和安卓的同事,说:俺也一样。
如果连最简单的业务需求都不能完成,是要被开的,所以当时的我就是处于被开的边缘。 迫于工作压力,我必须花额外的时间把基础知识都弄懂。
但是,因为虚荣心作祟,我又不想被同事说我太菜,所以每天选择在同事们下班后,一个人在公司疯狂学习。 如果别人正点下班,我就“996”; 如果别人"996",我就"10106"。
功夫不负有心人,三个月左右,我就能胜任独立模块的开发了。为了向进阶发展,我看完了《Effective Objective-C》、《Core Animations》等当年市面上所有的 iOS 书籍和技术文章,并及时地把一些高级技巧在项目中实践。
由于在公司表现良好(可能是加班比较多😂),领导给我涨薪到 8k。但是我觉得当时我的水平最起码能够得上 12k 以上。在这家公司干满一年后,我决定跳槽了。那年是 2015 年。
职场进阶
2015 年 iOS 的行情还不错,趁热打铁,我自己投简历面试,很轻松就进入一家 Top 10 的金融互联网公司。
大公司的分工更细,流程更规范,我在这里待了两年,时刻保持一颗学习的心态。
在这两年中 iOS 开发的大环境已经出现了拐点,由于开发者数量供大于求,整体上找工作的情况不如之前。 为了让自己不掉队,我复制在我在上家公司的成长模式——疯狂学习。
我研究并实践了当时社区比较流行的技术,比如 RAC、RxSwift、逆向开发、组件化等等。但我明白,由于我大学时候基础太差,离去一线互联网大厂的水平还有差距。
加入鹅厂
有一天,我收到猎头的电话,问我是否考虑腾讯?我欣然答应,沉睡在我心中多年的幻想又被唤醒。
然而想进入大厂没那么容易,需要对面试做系统性的准备。
我开始利用业余时间夯实面试需要的基础知识,经过大概三个月的准备,通过了五轮面试,终于顺利加入鹅厂!
下面我把准备面试的经验分享给大家(为了尊重公司,我不能把原题告诉大家,但我会把方向告诉大家,因为方向里自然有“题库”),分为基本功、软实力、加分项三个方面。下面一个个来说。
基本功
所谓基本功,就是你需要练到有肌肉记忆的技能,当面试官问起的时候,你能够信手拈来。
简历基本功
简历的好坏决定第一印象。
很多人可能技术很牛逼,却没能获得面试机会,就是吃在简历的亏上。比如,错别字连天、排版混乱、语句冗余不通顺。下面是我总结出的要点:
排版
我走的是极简风格,直接使用 Markdown 进行书写,然后转换为 PDF 格式。
作为一个 GUI 开发者,你也可以把简历制作成一个静态页面,加上漂亮的动画效果,来展示你优秀的基本功,给面试官眼前一亮的赶脚。比如,我的一位朋友就是这样制作简历的,当时也顺利地通过了面试。
书写逻辑
请遵循“STAR”法则。即情境(situation)、任务(task)、行动(action)、结果(result)。
比如,“为解决项目中遗留的回调地狱和内存问题,我用了 RxSwift 重构了 XX 模块,在团队内普及了响应式编程思想,受到了团队成员的一致好评”。这通常也是面试官提问的逻辑。
技术内容
1:底层探索能力
很多人会讽刺:面试造航母,上班拧螺丝! 其实不然,面试的高要求对于一家优秀的iOS需求单位来说是必须的!
iOS开发实现的确有很多的方式,但是一个真正懂得原理的开发人员在日后的开发工作中是非常重要。我见过一些开发人员:遇到BUG都是直接面向百度,不知道为什么直接 command + c
/command + V
OK,解决了,打版走人,下次又遇到了还是要面向百度,其中浪费的时间和小伙伴之间的沟通成本可想而知!
底层原理只是你在工作开发中偷懒而逃避选择使用而已(或者全然不太了解)
技术不断更新,底层原理是永恒根基
底层原理是非常重要的,只有真正掌握原理才能迎接未来无限可能。
下面是我推荐大家学习的内容:
OC 底层探索篇也是大家熟悉而又陌生的地方,平时处处用,就是不知道为什么!
2.性能优化以及架构能力
只要你面试要求 20-30K
必然要求性能优化能力!
image
3.数据结构算法
数据结构算法应该是每一个程序员必备的根据。我记得我的导师跟我说过:一个程序员需要两样东西:智商和勤奋
英文能力衬托你的勤奋度
数据结构算法反馈你的智商等级
数据结构与算法并不只是抽象的概念,掌握好的话可以写出更高效、运行得更快的代码,这对于如今盛行的网页和移动应用开发来说尤为重要。如果你最近一次使用算法是在大学课堂上或求职面试时,那你应该还没见识到它的真正威力!
这个主题的大多数资料都有一种通病——晦涩难懂。满纸的数学术语,我觉得一种有趣的学习方式也是非常重要的!
跨平台能力
跨平台的方案有很多:
如上表所示,RN
、Weex
采用的技术方案大体相同,它们都使用JavaScript
作为编程语言,然后通过中间层转换为原生的组件后再利用Native
渲染引擎执行渲染操作。而 Flutter
直接使用 skia
来渲染视图,而Flutter Widget
则使用现代响应式框架来构建,和平台没有直接的关系。
从性能方面来说,Flutter
的性能理论上是最好的,RN
和Weex
次之,并且都好于传统的 WebView方案
而从社群和社区的活跃来看,RN和Flutter无疑是最活跃的
总结:我个人针对现在的行情比较推荐大家学习:Flutter
软实力
沟通能力
我用四个词来概括: 自信、流畅、耐心、礼貌。
很多小伙伴可能编码技能不错,却不能在面试中表达出来。
在面试过程中,无论面试环境怎样,面试官态度如何,你都要保持积极的态度。请记住,你是在求职,就要创造一切对你有利的因素。
比如,你可以与面试官主动握手,增加好感。
如果面试官问你的问题,你刚好不会,也要尽可能列举这个问题相关的概念,然后推测出这个问题的答案。
比如,面试官问,二进制重排的原理是什么?
假设你刚好不知道这个知识点,你可以答 App 启动前 dyld 相关的概念或者说一下 Mach-O 二进制格式的原理,来推测可能的二进制的重排机制,即使推测错了也没有关系,因为在这个过程中至少展示了你积极解决问题的能力。
当然,如果连相关概念也想不出来,那就诚实地回答不知道或者向面试官请教一下吧。
逆商能力
作为开发人员,难免会在工作中与各种人撕B,能够扛过这些压力,也是一项重要的素质。
比如,面试官问,你的学历背景一般,学校排名靠后,和211、985的毕业生竞争有什么优势?
那你要怎么作答?
如果你是一个心理素质不好的面试者,很可能就会支支吾吾或者愤而离场了。 相反,你应该不卑不亢,冷静作答,因为这恰恰可能是某些面试官看好你的信号。 通过压力面试给你最后的考验,所以千万不要失之交臂。
作答举例:
虽然我的学历不是211、985,但是我仍然通过了前面的技术面试,说明了贵司对我的技术实力的认可; 学历证明了过往的学习能力,我是普通本科,却能与211、985的毕业生同台竞争,说明我的学习能力并不输给他们。
加分项
现在的iOS开发为什么会遇到瓶颈是因为:前面储备过少,坐吃山空! 技术不断更新的时代,我希望你沉下心来与时俱进,不断储备技能为自己加分
其实这里并没有非常具体的推荐学习方向,总的如下几点!
5G时代,小视屏/直播技术都是现在当红,并且掌握人群非常少的技术,OpenGL ES、Metal、FFmpeg等等!
而应用逆向安全,是大部分大厂都一直重视的,只是在小公司突显不出来,如果对于大厂有想法的,可以尝试学习!
当然除了跟iOS有关系的,比如被炒火的Python,谣传比iOS好找工作的前端等等都是可以学习的!
技术储备和亮点,这些都得根据个人兴趣或者公司需求来进行学习,当然越多的储备就会使你后面的路走的越容易!
后记
现在很多大公司招人已经明确限制需要 211、985 的学历,而对于我们大多人这种双非二本学历,连敲门砖都木有。但是,能否拿到 offer,除了真的很幸运,也和本身的努力分不开。
推荐👇:
申请即送: