狂想者 & 践行者

前言

在保研失败后,我就加入到了找工作的大军中。

就我所在的专业:电子信息工程(而我将要从事的工作却是在和计算机专业的同学相互竞争),我一直在思考课堂上课程学习的意义。

起初,能够说服自己好好学习,考出好成绩的动机是争取保研。同时为了能够提高自己的竞争力(或者说是做自己真正想要做的事,也算是做两手准备吧!),我还必须得倾注大部分时间去学习iOS开发。

这样做的结果自然而然比那些一门心思考高分的同学就专业成绩这个点上来说要差一些,与那些致力于将学习付诸于实践(参加电子设计大赛),想要在硬件这个方向发展的同学就竞争力来说会处以一个弱势的尴尬境地。因为后者可以和授课老师们有更多的共同语言,还能为专业学科带来一些荣誉(比如电赛得奖),从而进一步搞好与领导之间的关系。(只要套路玩的深,铁杵都能磨成针!)

以上或许也注定了失败的结局吧!当事情真正发生时,那股懊恼的心情积蓄到峰值,仿佛要喷薄而出!

-狂想-

“早知道就不要浪费时间去整那些劳什子,而去补补计算机基础专业知识了!”

世事从来都是难料的,命里有时终须有,命里无时莫强求。如果你现在要否定你的过去,那么现在你将不复存在。

-践行-

期间有一两天的情绪低迷,想通了之后就开始了我的找工作之旅。

人生第一份工作

在选择入技术的坑后,时间的价值就真的可以用一寸光阴一寸金来形容了。于是,在大学期间(包括寒暑假),我没有做过任何的兼职。发传单、服务员、家教(有大学老师推荐我去给初中生辅导物理课,当时就婉拒了。因为自身的物理课程学的很渣,不想误人子弟。)并不是我想去做的事,潜心集思学习技术,为真正需要找工作时带来竞争优势才是当务之急。

时间回溯到随校实习结束后,通过拉勾找到了第一份工作:北京拓尔思信息技术股份有限公司成都移动应用开发部iOS实习生,下面简要提及笔试和面试经历。

当天下午到了拓尔思的成都分公司后,前台就拿来了一张资料调查表和一套七八页的笔试题让我做。前者简直就像是调查户口一样,详细到要你填写家庭各成员的职业、单位及其地点,真是够了!后者就是常规的笔试题,包含逻辑题(其中印象比较深的就是如何得知一个规则容器内的水是否已经过半的问题)、iOS技术题。后者有关于程序填空、Xib对象生命周期、设计模式等等之类的题型,总体来说难度不大,就是量多。连同填写资料调查表,我总共用了接近两个小时。随后就直接进行面试,面试我的是iOS开发组的一个成员,感觉问的问题比较基础(竟然没有问底层的一些问题,譬如KVO的实现原理、Runtime的使用!),比如一些界面的布局问题、APNs的大概流程。面完之后就叫我回去等通知,在回去的路上,就收到了通知说面试过了,后面HR会详细说明实习事宜。(略)

实习结果:实习时间刚好一个月后离职;
实习任务:学习公司App开发模板;
每天上班时间:早九晚六,弹性时间;
工作环境:良好。

离职原因:(一些主观的感受,如有失偏颇,还请见谅!)

  • (main)实习期间没有实际项目的锻炼,只是阅读模板代码,然后就自己合理安排时间学习;
  • 公司的核心竞争业务是大数据,在移动端业务为外包,对技术开发技术重视程度不够,没有积累Swift的开发技术;
  • 模板代码风格混乱,没有解决关于AFNetworking3.x的内存泄漏问题。用中文命名源程序文件夹

内推 & 在线笔试

内推的具体公司是哔哩哔哩。说起来有些戏剧性,在得知保研彻底没戏之后,就收到了学长的消息说内推的简历筛选过了(内推简历要求较高),让我好好准备面试。面试流程大致是初试——复试——HR面试。

God closed a door and will open another window for you.

然而悲催的是在等待了近20天后,收到了消息通知:【哔哩哔哩】感谢参与本次校招内推!但很遗憾您未能通过,您的资料已保存至人才库,期待后续合作!祝校招顺利!

-狂想-

不带这么玩人的啊,说好的面试呢?如果是瞧不起我的简历,干嘛又让简历筛选过,进入内推面试阶段?难道是面试通知电话打来时,我的手机(华为荣耀6Plus,用了接近两年。目前卡得要死,闹钟莫名其妙不响或者延时响铃,最让人无语的是间歇性的莫名其妙关机!对华为手机无爱了,至少对荣耀系列是这样。客观陈述,不黑。)关机了?因为期间手机真的神关机了两三次?

-践行-

好!算你狠!为了我的动漫情怀,我还要走校招!

嗯!不能在一棵树上吊死,我还要投其他公司!(实习僧这个平台很不错,比较好的互联网公司都会在这个平台上发布职位。)

接下来就是无比令人抓狂的在线填写简历了!相信有过经历的朋友都会知道,公司或有自己的简历信息管理平台,或用第三方的平台代管求职者简历信息。而最关键的是它们之间的信息不能通用,你只得一家一家的重复填写那些内容。遇到好点的公司(如百度)能够解析出一部分本地简历文件填充的响应位置,但大部分内容还得自己填。

-狂想-

这不是一个很好的商机吗?为生活服务,解决实际过程不必要的重复与麻烦不就是技术的价值体现吗?兴许这其中存在技术难度,不然强如百度这种技术性巨头公司在这一块早就占领先机了。

-践行-

这之后需要通过的第一关卡就是在线笔试了。就我来说,做过网易、搜狗、腾讯、哔哩哔哩的笔试题。前两者专项性比较强,题目大多与iOS开发相关,具体解答过的问题(不清楚到底是哪家公司的了)有unrecognized selector send to instance 0Xxxxxx产生的原因、白板写出分类实现添加属性的代码等。就计算机相关的通用知识问题有线程、进程和超线程的概念和有区别、内存泄漏和内存溢出的概念、C++中delete和delete[]的使用区别、可以通过哪些方式保证线程安全等等。

由于经验与能力的欠缺,我都栽倒在编程题上了。至于难易度的问题,各位可以到赛码网体验一波。哔哩哔哩的编程题就更为切中实际,需求是解析弹幕文件,滤出3秒内重复出现的内容,解析结果按照时间进行排序。我在解答时先大致说明了处理流程,后面使用OC简单写了写代码。因为时间和相关API记得不太清楚的原因,没有写完。最终我只通过了哔哩哔哩的笔试题,有了进行面试的机会。

电话面试 & 视频面试 & 1v1面试

接到的第一个电话面试是扇贝的iOS开发(可实习)初面,聊了接近一个小时,问了东西还是比较多,下面就记忆大致整理下:

  • 简单介绍下你做过的项目和其中遇到的问题,你又是如何解决的?
  • 因为什么原因从之前的实习公司离职?
  • 属性的修饰符有哪些?默认的是哪些?
  • weak的底层实现是什么?
  • autoreleasepool是怎样实现的
  • cocoaPods的Podfile是用什么语言实现的?(我当时竟白痴地说是shell!)大致的第三方类库的集成过程是怎样的?
  • UITableViewdelegate方法有哪些?heightForRowcellForRow的调用顺序是怎样的?(这里有一些坑点,你可以在常用的代理方法里设定一个输出标记,会发现输出日志绝对不是你所想的那样?目前也在无限凌乱莫名中……)
  • block、代理模式、通知的使用区别?
  • 了解哪些设计模式,简要说明下?
  • 你有什么想问我的吗?
    .

初面过了后,HR就打电话问我什么时候有空,可不可以到南京来参加复试。当时还没有保研和毕业选题,所以就把复试约在了10月12号。后面又因为我个人的原因不能去南京(因为其他公司的校招),通过协商把复试的形式改为了远程视频面试。也因此,我对扇贝的印象很好,在复试时(保研和其他公司面试基本都结束了,除了第二天的哔哩哔哩面试),我就对我的这段时间的经历做了一个坦白,也算是对他们公司愿意给我时间和机会面试的一个回应。下面顺道总结下复试的问题:

  • 感谢你的坦诚!就你之前的面试,你有想过没有通过的原因吗?(个人实际能力的欠缺和一些问题的回答切入点没选好,导致后面说着说着思维都乱了。)
  • 之前我看过你的关于见缝插针实现的博客,你能说明下你遇到问题时是怎样去克服它的呢?
  • 了解JSPatchReactNative吗?前者动态修复代码的bug是通过怎样的方式实现的呢?(这个问题答得比较烂!因为真没怎么了解过。前者被禁了,后者存在很多坑!就我个人来说,更倾向于将这份时间去学习运行时和Runloop的相关知识。这并不是说明对新技术的学习积极性不高,而是就知识对时间花费和相关收益的一个理性的权衡和选择。)
  • Runtime能做什么?(当时有点懵,这个问题不按套路出牌。通常被问到运行时问题都会具体到某一点,所以对这个比较泛的问题有点没适应,不过我觉得这种问题更能客观评价面试者的实际开发能力。)
  • Swift的字典转模型的自实现做法有哪些?(当时就只回答了一个KVC,还有就是完全自己选择与属性匹配的字典的键,一一赋值,不过当时后者没说出来。其实我们就YYModel的性能分析图可以得知,其实这样性能才是最优的。只是数据的处理过程也是最麻烦的,而且如果有键值变动的话,属性也要做相应改变,即扩展性差。)
  • 接口与实现分离的程序语言有哪些?你觉得接口是什么?(这个问题是我在提出Swift为什么没有进行接口与实现分离的疑问后被问及的。)
  • 为什么想要加入扇贝?
  • 你能为扇贝带来什么?(最不好回答的问题)
  • 你有什么要问我的吗?
    .

复试结束大概两个小时后,收到了HR的电话,通知我面试过了。这是我收到的第一份校招Offer,也是目前唯一的一份,想想心里有些沉甸甸的感觉。

在这扇贝的初试和复试之间面试了京东商城的iOS实习生(电话面试,实习僧渠道),京东校招iOS工程师(lv1面试。收到面试通知时,有些奇怪,因为我并没有做校招笔试!)、搜狐iOS实习生(电话)。之后面试了哔哩哔哩,面试的问题大同小异,就不在赘述了,下面着重提及下哔哩哔哩的复试,怎一个坑字了得!

  • 面试官是客户端开发组的技术老大,然而他是做Android开发的;
  • 整个面试过程感觉气氛不是很和谐,他除了问我的项目经验外,其他的都是计算机的底层知识,如虚拟内存是什么?操作系统由哪几部分组成?内核是什么?恰恰这些我都只有一个模糊的概念,结果就只有拜拜了;
  • 当他问我有什么问题要问他时,我内心是无语的。(我想问的你肯定不懂啊!)

总结

就我个人看来,在面试阶段最好不要有哪些能够通过记忆(背)能够回答上的问题,因为这样可能就是考记忆力了。这样的一些问题完全可以放到笔试来检测,面试所侧重的点应放在求职者实际开发的能力以及解决问题的方式与方法上。然而这样的一个考究对面试官也提出了更高的要求,对于巨头型公司,还有这样的技术储备,但对于小公司呢?况且对于期望招聘的对象的经验差异(比如社招、校招),面试官还得调整面试的难度。现在的这种招聘模式也算是在成本上的一种妥协和无奈吧!(简历中展示你的github和技术博客是个不错的选择!)

就像底层的一些实现,网上是肯定能够搜索到相关理解的文章的。如果求职者做过相关搜索并大致理解和记忆的话,面试的时候就能够答上来。(我是结合相关源码理解的,嗯!献身说法!)那要是再往下深入一步,问:就你的理解,某某的设计原因是什么呢?

我现在算是一个狂想者吧,时常在想一些OC的底层机制如此设计的原因而不得其果,这有点像没有学会走就想跑的急功近利之徒!期望能够随着阅历与知识的积累,成为一名实实在在的践行者

Let’s go!

你可能感兴趣的:(经验教训,iOS面试,竞争,工作,思考,狂想与实践)