面试了几家公司以后,最后来到了爱奇艺(坐标上海),工做的内容是笔者我的很是感兴趣的领域。能拿到这个结果对于入行两年半&非科班的笔者来讲无疑是幸运的。前端
很感谢面试官给我此次机会,由于并非全部人都会承认你的努力,生活原本就没有任何理所应当。git
具体的面了哪些公司,有哪些面试题在这里就不分享了,由于感受借鉴意义并非很大。程序员
面试题方面笔者会专门在下一篇出一套本身认为能够用来面试高级 iOS 的面试题,连接:出一套 iOS 高级面试题github
本篇主要分享的是笔者在这阶段是如何准备面试的。可能每一个人都有适合本身的学习方法,笔者的这套方法更谈不上十分高效,但仍是但愿对你们能够有必定的借鉴意义。面试
准备面试主要从三个点展开:算法
在准备面试的过程当中使用频率最多的工具备两个:编程
笔记的整理过程就是理解的过程,反复咀嚼本身的笔记能够帮助理解。设计模式
清单这种工具是为了解放大脑,由于大脑是用来思考的,不是用来记忆的。把须要惦记的事情先扔进去,让大脑脱离出来~数组
这两个工具还有一个很是大的优点就是跨平台:都支持(Mac,Windows,Android,iOS)系统,同步的功能作的也都很好。因此使用它们能够在不方便用电脑的时候随时更新,特别是有一个好想法的时候能够立刻在手机上记下来。浏览器
笔者尽量搜罗了网上全部的iOS面试题,难度从低到高,固然也有介绍某个知识点的一些文章。笔者将这些题汇总之后分红了几个主题放在了有道笔记里面:
最后还要说一下算法题:笔者由于没有算法方面的基础,并且时间上也比较紧,因此只准备了数组,链表,二叉树为主的算法题,语言是C++。这些题目的来源主要是《剑指offer》和LeetCode上面的题目,一共学习了大概一个月的时间。
笔者把已经掌握的算法题放在了个人GitHub库上面(有答案,并且都是正确的):awesome-algorithm-question-solution。这个库里面的算法题大部分都是移动端面试比较常考的算法题。
目前都基于C++语言,有兴趣的同窗欢迎提交Java和Swift的答案。
还有就是能够用来准备面试的书籍:
iOS基础
网络
设计模式
数据结构和算法
总的来讲若是时间很紧迫,建议先看一些《剑指offer》里面关于算法面试的“套路”方面的讲解。而后就直奔主题,找一些常考的算法题去学习。
计算机系统方面知识:
好的时间管理策略能够更好地帮助计划的落地。在这里从两个点来介绍笔者的时间管理策略:
由于当时在职的关系准备面试的时间比较有限,可是天天对不一样类型的知识点都有比较固定比例的时间分配:
类型一:全新的知识点。这类知识点是天天都要看的,由于对于新知识须要时间去消化和吸取。所分配的时间大概占一天总学习时间的一半左右。
类型二:不熟悉的知识点。这类知识点是指那些刚理解好的全新的知识点或者比较难以理解的,须要反复看和消化的知识点。大概占一天总学习时间的一半之内。
类型三:很熟悉的知识点。这部分知识点属于理解的比较透彻的,但也须要抽时间复习,是这部分时间占比不是很重,简单扫一眼便可。
另外还要费分配出整理知识点的时间:对于上面这三种知识点其实都须要反复的整理和吸取,尝试着用本身的话表示出来,须要的时间占比也不是很重,可是却颇有用。
在时间管理这块,笔者我的比较赞同的一个观点是:比起知道作什么,首先知道不作什么更重要。由于人的精力是有限的,一天就只有24个小时,当某件事很重要的时候,其余的事情就要作个让步。
为了准备面试,笔者在今年上半年放弃了不少事情:
坦白说在笔者拿到offer之后才去了健身房,和同窗家人聚会,也见了老朋友,算是都补上了。他们也都表示比较理解,因此笔者也感受也蛮欣慰的。
找一份工做并不难,可是找一份目前最适合本身的工做却很是难,但愿你们也可以作一些取舍,列好计划并付诸实践,应该是会有好的结果的。
简单讲完了这阶段的面试经历和准备面试的方法策略,下面说一下笔者对一些同行的某些想法想说的。由于这些也包括这上半年面试别人和本身去面试体会到的,因此在这里就和面试心得一块儿说了。某些地方可能有些主观。
这句话每月都会听到一两次。 今年上半年不少朋友在面试,可能由于有些朋友不是很顺利,有感而发了。 并且笔者上半年也在给公司招人,招的是高级 iOS 开发,有一个感受就是很难招。虽然年限已经有3,4年了,可是关于设计模式,数据结构,iOS 底层方面的知识了解的甚少,开源库也只看过SDWebimage(或许只是看了网上的解析而已),总之没有达到笔者我的对一个高级 iOS 开发的要求。
可是反过来我也听到好多人去了很不错的公司,好比今日头条,BAT等等,评级也比较高。
因此笔者我的以为并非这个行业不景气,而偏偏是不少开发者没有保持一个持续学习的状态,只是将一年的经验重复多年,最终致使本身的能力小于所属年限的能力标准的状况出现。
笔者认为既然作为一名软件开发人员,就要不断地突破本身。对于前端的开发人员,要尽量地多学一些脱离UI层面上的通用性的知识,好比数据结构和算法,网络协议,设计模式,看一些好的开源库也是不错的(上半年面试了很多于10我的,问看过哪些开源库没有一个不说SDWebImage的)。在这里推荐笔者以前写的一些源码解析的博客:
这些话在跟我比较熟的同行里面听到比较多,他们以为本身的面试机会受限于学历。
但其实简历上面能够吸引人的地方能够有不少:高质量的博客,高质量的Github代码,优秀的项目经验,有深度的技术分享等等。
有句话笔者我的很是喜欢:
Alter what is changeable, and accept what is immutable
意思是改变能改变的,接收不能改变的。学历既然很难改变了,那就接受它,不去抱怨,不去拿它当借口,应该把精力放在能改变的事情上:
笔者我的是比较看重1,2点的:从这两点能够看出这我的对技术的追求,是否热衷于分享,是否有比较好的表达能力和思路。而3,4点因为客观方面的影响比较多一些,因此相对来讲笔者我的并非很侧重。
笔者看到过一项调查:相对来讲学历越高,毕业学校越好的开发者每每在GitHub和博客上面产出更多。这不失为一个值得思考的问题,同时也更加说明了学历和毕业学校相对来讲不是那么太靠前的开发者更要注重GitHub和博客这两块。
这句话也听过很多次了,能听出来讲这句话的人多数带着些许负面情绪说的。
笔者我的认为大公司的这种招人策略是很是道理的:由于既然是大公司,有丰富的资源,它要么是正在造火箭,要么就是准备造火箭,因此招人的话确定是招那些已经具有造火箭能力的人或者是那些培养以后能够造火箭的基础比较好的人。并且万丈高楼平地起,总不会你们都是围着设计图讨论吧?每一个人都有每一个人的职责,何况哪一个将领不是从士兵开始作起的呢?
因此咱们应该以正确的态度去对待这件事情:
今年上半年也为公司招了人,上面这句话是笔者作面试官的时候常常听到的,好比问“NSSet和NSArray的区别”,“iOS有哪些反射实践?”这样的问题的时候,面试者一般把本身没有作过做为本身不会的借口。
其实笔者以为上面这两个知识点和作没作过相应业务没有太直接的关系(笔者本人在实际项目中也没有作过)。
因此说不管学习哪一个语言,若是能够从一些通用性知识点里探索出该语言对该知识点的实现的话,会更有助于加深对该语言自己的理解,也能够提升相应的业务能力:
比方说若是你仅仅须要一个集合,未来只须要判断元素在不在其中的话,你只须要用NSSet就行了;可是若是你不知道NSSet的存在的话,你可能就只会用NSArray来作,要知道数组的查询速度是要比哈希表低的多的。
因此说作学问最怕的是不知道本身不知道:多接触,多探索总仍是好的。
笔者做面试官的时候发现:在非科班的群体里想主动学习数据结构和算法的人并非不少。由于每当笔者问一些关于数据结构和算法方面的知识的时候,总会听到以本身不是科班出身做为不会这类题的借口。
笔者认为若是想要在写程序这条路上面走远,这一块是确定绕不过去的。 有一个公式:
程序 = 数据结构 + 算法
一个好的程序每每跟这二者是分不开的。便是说若想写出好的程序,就要选择好合理的数据结构和算法(至少也要选择正确的数据结构)。
举一个例子: 如今须要你用一个集合来保存一些人名,并提供一个接口来判断传入的人名是否在这个集合里。那么若是让你来实现这个功能,这个集合的数据结构你会用数组,字典,仍是Set呢?
若是你不了解Set的优点,那么你极可能就会用数组来作了(经过返回的index来判断)。可是数组查询的时间复杂度是O(N),远不如Set的O(1),因此这就说明了使用合适的数据结构对于性能的帮助会有多大。
笔者也不是科班出身的,可是学习了数据结构和算法以后,发现本身在设计功能,以及理解代码的能力上提升了一大截。像上文所说的笔者也只是掌握了30到LeetCode题,和一些比较基础的数据结构而已。因此很但愿各位非科班的同窗也能够好好规划本身这一块的学习。并且有一些科班出身的同窗,偏偏由于本身是科班出身,因此在工做以后反而就没有主动去精进这方面知识了,因此非科班的同窗更要主动去规划本身,以最快速度填补本身的这块漏洞。
以上就是笔者这段时间的一些思考和想法了。
这篇总结就在这里写完了,一共两个部分,但愿您能有所收获,也很是欢迎能跟我一块儿交流~
本篇已同步到我的博客:2018年iOS 面试心得
笔者在近期开通了我的公众号,主要分享编程,读书笔记,思考类的文章。
由于公众号天天发布的消息数有限制,因此到目前为止尚未将全部过去的精选文章都发布在公众号上,后续会逐步发布的。
并且由于各大博客平台的各类限制,后面还会在公众号上发布一些短小精干,以小见大的干货文章哦~
扫下方的公众号二维码并点击关注,期待与您的共同成长~