返回信息流【 以下文字转载自 Job 讨论区 】
发信人: gongtao (熊熊), 信区: Job
标 题: [面经][经历]我的iOS之路
发信站: 北邮人论坛 (Sun May 25 09:49:21 2014), 站内
最近两周也是一直面试换工作,今天早上起来突然想跟大家分享一下接触iOS三年的一些经验,虽然我不是很牛,不过面了一些不错的公司,基本都拿到offer。另外,还想和大家分享我毕业工作一年的一些经历,希望能给大家,特别是刚开始或将要从事iOS开发的程序猿们带来一些有用的信息。
首先说说我的工作吧,为啥一年就要离职?我和很多找互联网的同学一样,研二的暑假不顾导师和实验室,强行偷偷的出去实习,因为当时我觉得那个实习公司是我的一个dream offer,实习三个月后,也是顺理成章地拿到offer,当时也没考虑过其他的公司,虽然有去面过搜狗和百度都拿到了offer,但是一家承诺给你20w+年薪+户口的公司,我相信80%的人都无法拒绝吧。我想可能很多人都猜到我去的是哪家公司,没错,我工作这一年里,这家公司从来没有给过我一个安稳的工作环境,每隔一段时间都会闹出一些让我们无语的事情:我刚入职的时候就传出公司面临财政危机要和某公司合并;再来就是户口可能没有了;还有就是拖欠近2个月没发工资;要户口的被大幅度降薪;和某公司合并搬去大兴等等等等。在互联网公司降薪,这真是前所未闻的事情,对于工作一年的人,不涨薪就已经是降了。很多人都等着合并后,公司能有起色,不过事实是这只是骗自己,公司的产品质量可以说惨不忍睹,大家基本上在里面就是混日子。这样的日子差不多半年,半年无所事事的日子,而且你知道即将一直这样下去,对于新进公司的毕业生是很伤的事情。等到上个月终于户口下来了,我毅然决然地选择了离职。如果很多人还在抱怨公司涨薪太少,或者做的东西不给力等等,你可以对比下我的情况,或许自己心里会好受点。那么这空闲的半年,真要是什么都不做,我岂不是呆傻了?当然不是,我是通过外包项目来持续精进iOS的,这是iOS、Android和web开发比较好的一个地方,能够让你接一些短期的私活。其实个人觉得不管环境有多差,我们都应该对自己有信心,更要有勇气去放手做一些事情。人最怕的就是陷入一种惯性里面,即使自己觉得苦逼,但是在面对有希望的、新的、有挑战的道路时,我们心里往往会告诉自己那条路不可能走下去,这是我觉得大多数人之所以是群众,而乔布斯、比尔盖茨这些是传说的原因。
公司就先吐槽到这里,给大家分享一下iOS的经验吧。11年的时候我是机缘巧合被实验室的师兄推荐去GE做iOS开发,那阵我只会一点Android,三个月我是边学边做完成的,一个iPad远程桌面和蓝牙通信的app。听上去觉得很难做,我刚听到这个项目的时候,我都不确定我能做出来,不过其实iOS真的,如果你只是入门,我觉得没有比这个更容易的事情了,买本书看懂,基本上世面的大部分app你都可以自己实现。那么,高手和菜鸟的区别在于哪里呢?很多玩过dota或lol这类游戏的同学,可能知道,那就是细节。这三年里面,我不光是被很多公司面试,我还面试别人,特别是最近我有面试两个人,他们也是工作差不多一年两年,简历上项目经历也是丰富得很,但是我发现问到一些基础和原理性的东西,发现他们一窍不通,甚至连听都没听过。
那么,怎么才能让面试无往不利呢?怎么才是高手呢?我来分享一下面试的考察点,方便大家看,我分段写:
(1)ARC和None-ARC,你不要跟我说你只会用ARC,或是连ARC都没用过,面试官可不der你,一样会给你烙上原理不熟悉的烙印。首先ARC是什么?这是菜鸟都能回答出来的。那么ARC和None-ARC在内存管理的区别在哪里?ARC什么情况下会出现内存泄漏?Toll-Free Bridge是什么?如果你不知道,我建议你看看官方的ARC文档,里面说的非常详细,所有的原理和用法都有。
(2)extension和category的区别?category和继承的区别?category可以定义变量吗?什么时候用extension?OC类可以定义私有方法么,如果不行,怎么在外部隐藏类方法?这些实际上说来说去,都是问你是否了解category,一般这是必问问题。
(3)Property属性:nonatomic和atomic的区别?strong和weak关键字的用法?unsafe_unretained的对象释放会出现什么问题?weak和assign的区别?retain和copy的区别?这些都是常考的题目,注意weak在对象释放以后会自动设置为nil,这个方法可以用来解决一些循环强引用导致内存泄漏的问题,面试官可能会通过其他方法来考你,比如一个vc拥有一个timer对象,然后timer使用的vc里面的方法,如果timer是被vc强引用的,那么会出现问题,所以需要使用weak来声明timer,或者是block变量也经常会发生循环强引用,注意weak是非常好的解决方法。
(4)iOS多线程有哪些?他们之间各有什么区别,优劣性?多线程这个是必问的,iOS多线程无非就是5种,GCD、NSThread、NSOperation、NSObject的performSelector和POSIX。POSIX你不用怎么了解,基本不用。GCD和NSOperation是你需要着重了解的,包括什么时候会出现死锁,执行顺序,原理。一般聊GCD都会惨杂block的一些相关问题。
(5)UIView和NSObject这两个类,所有里面的方法和原理都需要了解一下。
(6)Runloop和线程的关系?Runloop的作用?RunloopMode的原理?很多开发者可能连runloop是什么都不知道,runloopmode也是导致iOS比Android流畅的一个因素。
(7)CoreData的架构?CoreData的fault机制?CoreData的优势?一般也可能会问到一些sqlite的方法。
(8)OC语言的特点是什么(或是和其他语言的区别)?OC runtime为什么可以动态添加变量和方法?看到这个,你或许有点感觉毁三观,为什么iOS还要问语言,我会用不就行了么。这个并不是经常会问,不过面试官要是心血来潮,问一下,你还是很郁闷。
(9)iOS crash后的调试方法?还有用户的错误日志,如何找到出错的代码地址?iOS工具的一些使用?
(10)最后可能就是一些实际问题了,这个可能就需要考虑你在项目中的一些积累,有的时候也是看缘分,毕竟面试官经常可能会问到他解决的一些问题或bug,如果你没遇到可能并不好处理。还有就是项目中用过的一些开源项目最好能看看源码,经常看一些官方文档,一些不错的源码网站和论坛之类的,面试官可能会考察一下你对知识的渴望度。
基本上我去面的,百度、支付宝、360、小米、今日头条、搜狗和豌豆荚这些基本上都是围绕上述这些点的,都是面完终面,有两三个现在还没结果,总之iOS还是机会很多的,虽然现在做的人也慢慢多起来,但是比较牛,比较资深的人还是很少,iOS找工作还是比较容易的相对。现在很多人都倾向于去小公司,一个是发展空间大,另一个也是可能有期权,比如小米、豌豆荚这些,不过最好能看项目和团队,不要太盲目的看待遇~也不要拿到一两个觉得好,就定下来了~就分享到这里,欢迎大家随时交流~
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #15589同步于 2014/8/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
[面经][经历]我的iOS之路 (转载)【斑竹推荐哟】
apocalypse
2014/8/22镜像同步36 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 apocalypse 的大作中提到: 】
: 这里面每一个点 都是货真价实的key点。。这些点一旦透彻了。。对整个ios结构的理解都会更加深刻
版主 做个上面的iOS经验的答案吧 刚入门,什么也不太懂
这......
要知道 这里每一个问题往深了聊 都能聊好久,这些哪里是一个问题的答案,简单回答个a b c所以然就能说明白的...
每个问题真要往深了聊,就算整理发博客怕是也得分期写...
这些问题 真心不如当作自己学习ios中的线索,然后自己去进一步深挖...每一条的一些细节点都有大量的人写各种blog,讨论很多的.
自己挖掘整理,将这几条问题当作线索和目标,最后整理出自己对ios开发的看法和体系
惭愧地说 这些问题 我也只是有大概的认识 还没能力做到系统梳理 整理成册的程度...这些问题 往深挖掘一下 都挺深的挺难得
【 在 lwbupt90 的大作中提到: 】
【 在 apocalypse 的大作中提到: 】
:...