美文网首页iOS精品文章-面试iOS面试资料搜集收藏专题
总结一下在金山面试ios开发时问到的问题

总结一下在金山面试ios开发时问到的问题

作者: 辉仔SAMA | 来源:发表于2017-05-29 12:42 被阅读607次

    前几天去了金山的wps部门面试ios的开发实习生,虽然好像是勉强过了二面,但好像还是gg了,总结一下面试时问到的问题

    1.如何在不改动项目原有的代码前提下,使项目中每个Controller的viewDidLoad方法都输出一句话?(不能在原有的文件添加删除或改掉代码,但可以新建文件写代码)

    2.除了使用view.layer.cornerRadius来设置圆角以外,还有什么其它方法设置圆角,使用view.layer.cornerRadius有什么坏处?

    3.view和layer有什么区别?

    4.block有几种类型?分别是?

    5.block中如何防止循环引用?为什么在block中要加入__strong __typeof?

    6.利用cocoapods管理第三方库,是如何实现读取pod工程中的文件的?

    7.说说arc的工作原理,他是如何管理对象或变量的释放?

    8.说说ios中多线程有哪几种实现方法?谈谈对gcd的理解?

    我就记得这么多了,有些问题忘了,还有些是我的项目中具体的问题。

    答案:

    1.先创建一个新的文件实现一个方法输出一句话,然后利用runtime机制把uiview中的viewDidLoad方法与新建的方法进行交换,具体实现看这篇文章

    2.总共3种方法

        1.通过设置layer.cornerRadius
        2.使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角
        3.使用CAShapeLayer和UIBezierPath设置圆角
    

    具体实现看这篇文章

    3.主要这几点

       1.每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint
       2.在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display
       3.CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)
       4.layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer
       5.两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以
    

    (最重点)两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以

    具体看这里

    4. 三种

     1._NSConcreteGlobalBlock 全局静态
     2._NSConcreteStackBlock 保存在栈中,出函数作用域就销毁
     3._NSConcreteMallocBlock 保存在堆中,retainCount == 0销毁
    

    5.

    在调用block前使用__weak typeof (self) weakSelf = self;即可(即用一个弱指针指向self,这样的话在block中调用完weakSelf这个弱指针就会自动释放)
    当block涉及多线程中调用self时就使用 __strong __typeof(weakself)strongSelf = weakself;(即再用一个强指针指向weakself这个弱指针,防止在block调用过程中self被释放)
    建议在block中都加上__strong __typeof(weakself)strongSelf = weakself; 不会有任何坏处

    6.利用workspace,具体看这篇文章

    7.Cocoa采用了引用计数(retain count)机制,当一个对象的retain count=0时,在Mrc(即非arc)中时需要手动添加 [xxx release] ; 这样一句代码释放对象,但arc中这个系统已经默认帮你加上了,只要retain count=0就自动调用,当然过程还要复杂点,具体体看这篇文章

    8. 四种(当时答了三种orz)

    1.Pthreads
    2.NSThread
    3.GCD
    4.NSOperation & NSOperationQueue
    

    关于gcd的话我当时大概讲了一下队列同步异步这些,当时也讲得并不完整,毕竟有些东西紧张起来还是忘了…………
    具体的话看这里

    虽然这次面试并不成功,但至少吸取了点经验吧~
    另外…………二本的我求一份ios或unity的实习orz……谢谢orz

    相关文章

      网友评论

      • MemoryReload:楼主有一点说的不清楚,ARC是一种语法糖算是……通过strong weak non_retain这三个东西指定应用的生命周期类型,然后编译阶段会按照这些生命周期类型以及产量作用于自动插入了释放语句,这也是为啥底层的core 框架,就是用c语言写的那些不受ARC管理的原因。并不是运行时实现,而是编织语法糖。并且,Xcode提供转换。不要问我咋知道的,我是雷锋~:relieved::relieved::relieved:
      • 洁简:实习啊.....这些都会才是个实习生...不知道他们的人得多牛
        辉仔SAMA:@洁简 我觉得真正难的应该是哪些随机应变的算法题:joy:
        洁简:@辉仔SAMA 好吧,现在网上找不到答案的也不多. 现在我也不知道什么是难了....
        辉仔SAMA:@洁简 其实这些也不是特别难,网上都有答案啊
      • BearLin:我是HR挂了:disappointed_relieved:同大三
        BearLin:@辉仔SAMA 第5题那个应该是下面那个人说的原因,并不是使用几次问题
        BearLin:@辉仔SAMA 嗯嗯对:joy:我说要读研就GG了……暑期充实自己秋招再加油吧
        辉仔SAMA:@BearLin 珠海金山吗?我二面的时候傻了,我应该说我很喜欢移动开发和想留在金山才对的:joy:
      • Link913:第二个不会,其他的还好,楼主可以看看Objective-C高级编程:iOS与OS X多线程和内存管理 和effective OC
        辉仔SAMA:@SkyHarute :joy::joy:但他问到这些我也得答啊
        Link913:@辉仔SAMA 另外这些不是问实习生的问题,问实习的基础多一些,一般问初级才问这些
        辉仔SAMA:@SkyHarute 好的,多谢建议
      • __夏至未至:strong self 应该是block里可能会用到多线程的,这个时候weakself可能已经被释放了。。。
        MemoryReload:@__夏至未至 其实不用weak也没关系,只要记得在块调用结束后把对块外产量的引用置空就可以的,只要块在结束前主动释放了对外面对象引用,那么引用环就打开了。:stuck_out_tongue_closed_eyes:
        辉仔SAMA:谢谢纠正,一直理解错了

      本文标题:总结一下在金山面试ios开发时问到的问题

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