美文网首页面试iOS奋斗iOS相关
先是程序员,然后才是iOS程序员 — 写给广大非科班iOS开发

先是程序员,然后才是iOS程序员 — 写给广大非科班iOS开发

作者: J_Knight_ | 来源:发表于2017-03-06 12:42 被阅读7370次
    Objective-C | Swift | C

    这篇面试总结很短,也没有面试题的答案,只是写给像我一样的非科班iOS开发者的一些话。

    昨天进行了人生第一次视频面试,一共三个小时的技术面,还没见到人事,应该是挂了。

    不过整个过程下来感触还是蛮多的,除了感受到面试官的牛X之外,也知道自己平时在学习中的不足。

    先介绍一下面试中觉得比较吃力的问题:

    1. 如果让你实现属性的weak,如何实现的?
    2. 如果让你来实现属性的atomic,如何实现?
    3. KVO为什么要创建一个子类来实现?
    4. 类结构体的组成,isa指针指向了什么?(这里应该将元类和根元类也说一下)
    5. RunLoop有几种事件源?有几种模式?
    6. 方法列表的数据结构是什么?
    7. 分类是如何实现的?它为什么会覆盖掉原来的方法?

    另外值得一提的就是问了我自己写的博客里的东西(JSONModel的解析,EOC的笔记)等等。。

    这次面试让我深刻意识到了两点:

    1. 对于每个设计,不能只停留在“会用”而已,应该理解它的实现机制,而且几乎每个设计都是与数据结构息息相关的,理解了数据结构和指针会有助于理解这些设计。
    2. 了解设计的原理之后,还要知其所以然:为什么这么设计?最好还要知道这个设计存在什么缺陷,这个缺陷是哪个解决类似问题的设计所没有的?

    第一点是“how”的问题,第二点是“why”的问题,然而我相信有不少人只停留在“what”和“using”上。

    在面试的时候,我强烈感受到了面试官的功力之深:给我的感觉,对他而言,几乎所有的设计都可以用某种数据结构解释出来(有的时候也会结合指针),对知识点理解得非常透彻:即便是很简单知识点,也能说出很多深层次的东西来。而我自己只是刚开始学数据结构不久,在面对提到数据结构的问题几乎是没有思路的。

    我想说的:

    所以我觉得对于广大非科班的iOS开发来说,如果想在iOS开发上走远,就必须尽快补充数据结构,算法,指针等计算机基础知识,不然会对知识的理解形成很大的阻力。因为只有知道了这些基础知识,才能更深入得理解每一个技术点,而且以后如果学习其他的语言,也会更高效一些。

    简单来说就一句话:先是程序员,然后才是iOS程序员。只有这样思考,路才能越走越宽,越走越快,越走越远。

    现在iOS开发形势这么不好,市场要过滤掉那些计算机基础知识薄弱的人也是情有可原的。

    所谓的现在的“不好”,只是相对于之前“不正常的好”的不好。现在这个行业变得“不好”,其实是因为这个行业正在变得好,应该值得我们高兴才是。

    所以对于我们这群人(非科班的iOS开发者),应该提高忧患意识,未雨绸缪,更何况,雨已经来过了。

    图片来自:pixabay.com

    本篇已经同步到个人博客:传送门


    本文已在版权印备案,如需转载请访问版权印。48422928

    获取授权

    相关文章

      网友评论

      • 陳云峰:答案见这里:http://www.jianshu.com/p/058423012bbf
        J_Knight_:@陈云峰 受教了 已收入我的专题:smile:
      • FindCrt:这些问题很好,我写了点总结,有兴趣的可以看看:http://www.jianshu.com/p/d2e0dc7bf57f。欢迎交流。
        J_Knight_:@find_1991 厉害了 学习学习:smile:
      • FindCrt:我提供一个思路,对于基础知识,大家搜一下 408计算机学科专业基础综合考 的几个内容
      • 奇怪的知识增加了:数据结构,算法,指针等计算机基础知识,有没有相关材料??
        J_Knight_:@贪嗔痴恨爱恶欲 可以先从大话数据结构看起:smile:
      • 1d48ddee1b4b:希望楼主把答案也贴出来。
        J_Knight_:@Michael_YF 有这个想法,想过一阵子发一篇关于面试题的。但是现在还拿不准答案,得再研究:smile:
      • 暗夜血狐:应该是阿里的面试
        J_Knight_:@SamChenzx 不是啦~不是bat系的 :smile:
        SamChenzx:@J_Knight 百度
        J_Knight_:不是的,是北京的一家互联网公司 :smile:
      • 洁简:又面试了?
        J_Knight_:嗯嗯 不过是被动的
      • 笑医久久:这是历史发展的必然,现在iOS 开发技术已经相当成熟,大厂的 APP 都已经相对稳定,那些同学们当然得找事做啦,这不现在他们的事就是深入底层、架构、跨平台等,如果你现在想要去大厂,这三个方向你好好选一个。
        J_Knight_:居然没看到这个回复。。 嗯嗯 你说的很对啊!让我更看清了一些,非常感谢!
      • 一位不愿透露姓名的劉公子:移动端,现在不是相对的“不好”吧,应届的,简历投出去,反馈都很少,更别说面试机会了,同样的做java,应届的简历投出去,面试机会就多很多,校招岗位也不少
        J_Knight_:@玉树临风劉公子 移动端跟Java是比不了的,Java的需求量在任何一二线城市几乎都是数一数二,美国就更不用说了。而且在移动端iOS的话需求应该更少,因为市场占有率在那里。应届生确实是难找,但也是分人的。不是也能听到谁谁谁还没毕业就在大厂实习的么
      • 玉树林峯_爆seed:感触很深,非科班确实很无奈,我对iOS也只是停留在表面,电子工程系毕业的,希望能与楼主多交流。
        Mikebanana:同电子工程系
        J_Knight_:@玉树林峯_爆seed 可以啊,研究深一点,看看哪些知识不依赖于iOS,学这些东西也挺重要的。
      • 吾本善良:不知所云😅
        J_Knight_:??
      • 偏未_晚:如果能把这些答出来,大概属于什么水平?(iOS)
        0b6b739e7c5d: @偏未_晚 不需要把面试官想的那么牛,只不过术业有专攻,仅此而已
        J_Knight_:@偏未_晚 如果都能讲得很透彻,除了bat以外,其他公司的高级iOS开发应该问题不大。但这些也并不是绝对因素,项目经验也挺重要的,况且又的公司还需要了解其他语言。
      • 天真烂漫的孩子:完全不知道在面试官在问什么……哪里的公司这么牛逼……
        J_Knight_:@Singleton_1990 北京的~不方便透露的
      • 推遍天下无敌手:非科班无所谓,我们技术老大就是销售转过来的,也很牛逼:smile:,加油
        J_Knight_:@推遍天下无敌手 那真是厉害了!非常佩服~ 一起加油啊
      • 我系哆啦:非常有道理
      • 仰望星空之Rocky:厉害了,Word的哥
        J_Knight_:不厉害,小菜鸟一枚~
      • 程序疯:非科班 按一个
        J_Knight_:@发抖的小喵喵丶 :smile: 握手~
        J_Knight_:@程序疯 :smile:
      • Neo_joke:其实作为科班程序员我想说一下我的看法。楼主遇见的那几道面试题,以所谓的计算机科学角度来讲,也不属于基础知识,属于编程语言知识而已,仅仅是而已。如果真的想吃程序这碗饭,你的天花板不是这些知识、不是数据结构,而是数学和物理。早期并没有计算机科学这门学科,那时候搞计算的人无非两种人,一种是学数学或者是学物理的,当然基本上是应用物理就是所谓的物理工程学或者是电子工程学,第二类人是语言学家,类似于Larry Wall,Perl的发明者。数学决定了怎样解决使用低维度的数据表示更复杂的信息从而进行计算,物理学、电子学决定了如何通过工程学的方法实现数学家的理论制造出设备,从而有了后来的交叉学科-计算机科学,再后来有了软件和语言,楼主觉得现在底下很空,很正常,但是如果仅仅是因为面试碰到了不会的题觉得很空,就不正常,本质上来讲,你要想提高你所说的计算机科学知识,我建议思考和检查一下自己对计算机科学的基本原理清楚与否,数学中的二进制计算,是怎么在CPU、寄存器、内存中进行计算的,怎么进行表示和存储的,编程语言是怎么从文本的代码文件经过编译运行成为操作内存和CPU的二进制文件的,加减乘除、浮点数等等利用了什么数学知识等等,如果有一天,你能达到写一句代码,就能感知到这句代码带来硬件是怎么操作和数学上怎么进行表示计算的,不要求定量只要求定性就好,只有这样,你才能看到各种语言、语法和运行机制的本质,才能遇见新的知识比别人更快更深入的学习。但是话说回来,一个人的精力是有限的,人类社会发展的标志就是社会工具的进一步分工,计算机科学的发展,具体的来说编程语言的发展实际上就是屏蔽底层的这些东西,希望上层使用方更好的专注业务开发提高生产效率,思考这个问题就是我前面提到的,你学习这些东西的目的不应该是因为面试遇见了难题,而是这些问题阻碍你的生产效率或者阻碍你的创造,如果单单因为觉得底层很牛逼,面试很有用,这种学习的目的很空,假如你说你想在性能或者是安全方面深入钻研,那么这些底层的东西你必须要看,但如果你想做的是更好满足业务开发,那你需要钻研技术的广度和实践应用的经验。最后汇成一句话就是:学习须有明确的意义,否则就。。。。。
        J_Knight_:@Neo_joke 嗯嗯 了解了,真的非常感谢!
        Neo_joke:@J_Knight 推荐一本书,《深入理解计算机系统》,从最基础的东西看起,你会越来越有兴趣,数据结构上来就看,会有信息损失,就算学会了数据结构的经验,也不会活学活用,总之,加油
        J_Knight_:@Neo_joke 说得很好啊!需要花一点时间消化一下您的话。但是数据结构,算法,计算机系统这些知识还是有必要学习的,不需要太精通,但是知道跟不知道就已经有很大区别了,可能因为您已经比较了解的关系,所以没有我这样的体会吧。
      • be6ea3d49cd1::blush: 看了楼主好几篇文章了
        J_Knight_:@xiyana7 :smile::smile:
      • khlljm:说的很在理:+1:
        J_Knight_:@khlljm 谢谢哈:smile:
      • 6号特工:👍
        J_Knight_:@小李飞书 :smile:
      • 043ba7d6dfde:深有体会
        J_Knight_:@TimorYang :smile:
      • 英贰与我:你 学 数据 结构 是怎么 学的, 可以 交流一下吗
        60f50aac2a64:@J_Knight_ 楼主,数据结构与算法是哪个作者的?求推荐
        J_Knight_:@ZZ_Ying 还是先了解概念,然后再用算法实战一下
        J_Knight_:@ZZ_Ying 在看大话数据结构。看完之后再看数据结构与算法 :smile:
      • 大兵布莱恩特:楼主 你应该把你面试题怎么回答的贴出来,让我们也看看这几题答案。
        44e3cc37d18a:@大兵布莱恩特 厉害了老哥 小弟 董三 闲来无事 看看简书碰见你了
        J_Knight_:@J_Knight 也不能说让,而是建议:smile:
        J_Knight_:@大兵布莱恩特 我回答的怕不准确啊,除了isa那道题以外。这篇写出来主要的目的是让大家平时多思考思考,不能只是一味地用别人写出来的东西。
      • 小冰山口:深以为然
        J_Knight_:@学豆 :smile:

      本文标题: 先是程序员,然后才是iOS程序员 — 写给广大非科班iOS开发

      本文链接:https://www.haomeiwen.com/subject/rboygttx.html