您的位置:首页 > Web前端

一只在读iOS菜鸟十个月来从零基础到拿到实习Offer的总结

2015-06-15 15:07 726 查看

技术背景

从2014年8月中旬开始接触iOS开发至今,过了整整十个月。就当做第一年的个人总结吧。最初接触iOS开发是在大一结束的暑假。当时的水平仅限于了解简单的C语言。因为学过Java,所以对于面向对象的思想也有接触。

入门阶段(2014.8-2014.12)

开始接触iOS开发之后,显然要从OC学起。陪伴我入门的有两本书。附赠京东购买地址。

1.《iOS7开发快速入门》

2.《iOS开发指南——从零基础到App Store上架》

第一本书已经不慎遗失,个人感觉更偏重基础,第二本书实践性更强一些。后来感觉《疯狂iOS讲义》也挺不错。其实任何一本书,看完之后都会有收获。

这一阶段主要是在14年8月到14年底。主要学习的内容关于OC的基本语法,内存管理,基本UI控件的使用,简单的动画,页面的跳转之类。同时也了解了如何解析Json数据以及Core Data的简单使用。学习内容不多,主要是IOS入门,以及积累了一定的动手经验,这一阶段的成果已在AppStore上架——Pan大夫

如果想要了解更多技术细节,可以下载之后看一看。

后小白时代(2014.12-2015.2)

其实到了15年初,就可以自称是iOS菜鸟或者小白了。带领了另外几个菜鸟,参加了学院的一个比赛并且获得了一等奖。软件就不放出来了,没有技术难度,主要的收获还是在于,不再是想到哪里,写到哪里了。因为作为一个小小的leader,需要开始思考,这个App都有哪些功能,需要分为哪几个部分,需要哪些类来实现,团队成员每个人需要完成什么,留下什么接口等等。第一次做,当然是漏洞百出,最后自己花了半个月拼好每个人的代码。这个时候的自己,天真的以为iOS开发就是简单的页面拼凑一下,没什么难度。另外由于其他巧合,学习了一下简单的PHP+Mysql。由于需要复习考试,到了15年的寒假(2月)也没有什么技术方面实质性的提高。

各种写代码(2015.2-2015.4)

pan大夫的项目进行了版本迭代,支持线上选择心理医生和付款。因此涉及到了和服务器的交互。由于此前了解过PHP和MySQL,所以我独立承担了后台的开发和工作和接口的设计工作。在开发之前,我写好了所有的类图(Class diagram)、用例图(Use-case diagram)以及关键步骤的时序图(Sequence diagram)。设计好了类名和页面之间的跳转关系。当然,由于水平所限,免不了后期的修改与调整。具体的开发工作已经交给了团队的其他几个成员,我主要承担了一些关键技术的研究。

1.UITableView的相关代理方法的使用,MVC模式的实现。

2.table 的上拉加载和下拉刷新。

3.MKNetworkKit的使用,网络请求方面的处理。

4.图片的延时、异步加载,SDWebImageView的使用。

5.UIScrollview的使用,仿新闻类App实现顶部的菜单。

6.类似淘宝首页的跑马灯效果。

7.ARC和内存管理的具体细节。

这一阶段接触了大量的,不再是简单UI拼凑的开发工作,了解了很多第三方的类库以及他们的基本原理,也有自己实现的类库。比如关于SDWebImageView,不仅要了解简单的使用,还应该自己尝试着思考它实现的原理,甚至我试着修改过MKNetworkKit框架的代码,使得每一个URL请求有自己对应的缓存有效时间。

解决自己的痛点(2015.5)

这一阶段我开发了“csdn博客”应用。得益于前期的积累和SDK的不断完善,这一应用从开始构思到上传审核仅用了三天时间。这充分说明了,不断花时间思考已有框架的完善,属于磨刀不误砍柴工的行为。

月底,通过Google查阅相关资料,开发了一个Xcode的小插件。主要功能为统计代码行数和写代码时间。难度不大,但是逻辑有点复杂,不太好实现。这又花了整整一个周末的时间。由于种种原因,至今也没能再次更新,否则按照计划,它还可以每日统计,并形成一个可视化的走势图。

第一次面试(2015.5)

还是在这个五月,通过同学了解到一家非常优秀的公司,实习期间12K包吃住,离家也不远。于是兴冲冲的参加了面试,对自己也挺有信心。

第一轮面试为在线完成题目。题目如下:

独立用xcode实现以下功能(要求不用第三方库,可以网上查资料)

假设如下数据(hardcode在内存即可),实现类似通讯簿界面:

id 姓名 拼音缩写 性别 年龄 生日 公司名称 联系电话

579335 张三 Z 男 25 1988-3-6 华远 1698658976

省略以下数据

要求(只实现要求的, 其他通讯簿的功能不用实现):

a. 在tableview中按拼音缩写的section展现如上数据(要包括头像,姓名,性别,联系电话);

b. section按字母序排好。要有右侧section索引;

c. 头像中按如下地址格式下载:http://www.easyicon.cn/download/png/id/256/

d. 下载的头像保存要求,在沙盒的documents目录下,按id创建目录,将头像保存在各自目录中;

e. 下载头像能延迟装载(即下载完一个显示一个);

以及一个算法题,因为时间不够,所以没有实现,应该影响也不是很大。

这个面试题难度并不大,只要平时基本功扎实,对tableview有一定的了解问题都不大。我没有接触过tableview 的索引,不过临时学了一下,最后也赶在两个小时以内完成了。

通过第一轮面试之后,第二轮主要是技术面试。还能回忆起来的几个问题如下:

通过哪些渠道获取知识?

图片显示的时候,如何设置拉伸或是保持原有分辨率等。

MVC模式的优缺点

Core graphics与Core animation相关

这几个问题是我印象中回答的不到位的。同时也让我突然明白,此前自己了解的知识有多么匮乏。有一种豁然开朗的感觉。

关于第一题,主要是多用Google少用百度,这个问题在我月底写Xcode插件的时候帮了忙。另外,StackOverFlow可以作为提问、查找问题的论坛,objc.io上可以获取到非常多的最新知识,多用RSS订阅一些大牛的博客对自己的水平提高大有帮助。

第二题和第四题主要都是比较底层一些,涉及到Core graphics与Core animation等相关知识点,imageView的contentMode 属性可以很好地解决第二问。

第三题坑比较大,MVC的缺点主要在于臃肿的Controller,这一点解决方式应该不少,在有限的时间内,我了解到的方法有使用MVVM架构,顺便了解了Reactive Cocoa框架的使用,这个框架的编程思想有点奇怪,刚开始非常不方便理解,不过真正理解之后确实能感觉到它的强大之处。关于Reactive Cocoa框架的使用,可以参见我的博客专栏。

总的来说,这一次面试虽然失败了,但是收获非常大。在随后的半个月内,我解决了以上问题,这对我后来能拿到实习Offer的帮助非常大。

曲折的实习Offer(2015.6)

之后陆续在拉勾网投递简历,发现企业对实习时间非常看重,原本打算八月九月实习两个月,后来改为了七月到十月实习四个月。不得不吐槽拉勾网很多企业的处理效率极为低下,在写本文的此刻,我投递的好几份简历依然没有被HR查看。好在非常幸运的加入了一家北京的创业公司,共有两次面试,团队成员非常靠谱,软件也很有想法。

两次面试每次都在一个小时左右。第一次面试,问题非常刁钻,问到URL的最大长度是多少、C语言如何执行一个函数、编译器如何编译一段代码、OC和PHP语言的优缺点等,我回答的非常不理想,主要问题还是在于基础知识非常薄弱。对于OC的考察也非常细致,包括多线程,ARC内存管理,动画,网络请求等各个方。

关于算法问题,给定一个数列A,对于任意一组(i,j)满足i < j,求出Ai-Aj的最小值,当时没有回答出来,后来发现这个题涉及到一个模型,即数列最大连续子列问题。不过这样做会需要O(n)的时间和O(n)的空间,因为需要一个额外的数列。纯粹O(n)时间复杂度的解法还没有去查。

第二次面试就比较简单了,考察了字符串转数字的问题,用C实现。难度不大,但是需要考虑问题全面,比如涉及到正负号,非数字,溢出等情况。在面试官的再三提醒下,终于磕磕碰碰完成了。(算法不好太吃亏)关于iOS的问题也不难,远比我的第一次面试和上一轮简单。于是顺理拿到Offer。

接下来的计划

经过将近一年的学习,也算是iOS入门了。但是依然还有很长的路要走。下面是近期想要学习的内容。

自己曾经实现的框架,用swift重写。一来加深理解,而来swift取代oc应该也成既定的趋势了。

时刻关注各位大牛的博客,了解最新的技术。

objc.io上的文章质量真的很好,每一篇都可以好好研究。

进一步学习Instruments里面,很多工具的使用,以及研究一下唐巧大神的那本《iOS开发进阶》。

好好学习数据结构、数据库、操作系统等基础知识,打好基础,提高自己的算法水平

尝试着在github上面发起比较有影响力的项目。

因为大三依然有很多课,所以希望以上这几点在大三能够完成。

写在最后

关于在校学生iOS学习和学校课程时间的分配问题,我的个人理解和建议是,软件工程的基础课不能丢,iOS开发能力决定了现在的水平,但基础知识决定了未来的上限。概率论、数值分析什么的,了解一下这个知识点就可以,分数并不重要。包括学校的基础课程,如果自学能力很强,可以不听课,自己看看教程以及一些大牛的书,否则还是先在老师的指引下入门吧。当然,不听课不意味着不学习,无数前人、大牛的经验告诉我们,基础知识一定要掌握扎实。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: