上一篇写了基本的面试流程,这篇从更决定一个人去和留下来谈薪资的问题出发,谈论几个面试问题。
前提
就目前市场供需和新项目的数量上看对于技术要求的苛刻是正常的。下面对于这份苛刻代价,总结了下几个对于iOS开发比较重要的问题。
baidu一查一堆,但是仍然乐此不疲的问着这些问题。
内存篇
这个是自从有代码以来避不开的话题,估计当年乔帮主也问过这样的问题,iOS的内存管理问题也是一直问个不停。
这几次的面试,发现大家对内存的问题集中程度很高,几乎没有新的。
ARC 和MRC 的区别
这个是arc 出来的那天起可能注定是个面试必问的问题,从用哪个效率高,到问底层是什么联系,和ARC 是怎么运行实现的。
strong ,weak ,assign ,等底层的代码,不仅仅是引用系数的变化规则。
答案:《Objective-c 高级编程 ios 与osx 多线程和内存管理》的书中有详细的论述。
http://www.cnblogs.com/ludashi/p/3911666.html?utm_source=tuicool&utm_medium=referral 博客论述
autoReleasePool 问的最多是释放的时机,还有内部源码的实现
答案 :对于每一个runloop,系统会隐式创建一个AutoRelease pool 。
这样release pool 会构成一个象CallStack 一样的一个栈式结构。
在每一个RunLoop结束时,
当前栈顶的autoReleasePool 会被销毁,
这样这个Pool里面的所有的object 会被release。
--------------------------------------
《Objective-c 高级编程 ios 与osx 多线程和内存管理》
这里涉及到runLoop 的知识点,也是面试必问的知识点,后文会有论述。
GCD篇
这里基础知识基本没有问,一些gcd的api 基本不问了。问的最多的用gcd 解决的问题。
“如何确保多个线程完成的任务 都完成了,再往下运行”
答案:dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
// Do some work after. dispatch_release(group);
“几种线程处理,为啥用GCD”
答案:http://blog.csdn.net/lgm252008/article/details/40039445
http://www.jianshu.com/p/d09e2638eb27
从底层到上层分析了为啥用gcd
gcd 的语法 dispatch queue ,once,after.....等等的gcd 的api 很少问了。问了最多还是对比比较多
标准答案 5
相识度 5
难度2
block 篇
这里问的最多的是block 关键字的问题,和让你默写一个block,我也没有get 到点
__block 为了改变block代码块外部的变量。例如:你在外面定义了一个整形变量,想要在block块内改变它,那么,就要用__block 来修饰这个整形变量。
__weak 是为了防止循环引用(memory cycle),引起内存泄露的问题。
__weak不增加引用,__block增加引用
使用教程:http://my.oschina.net/leejan97/blog/268536
标准答案 5
相识度 5
难度2
终结
由于在外度假回来后在家研究些东西,更新不够及时。
下一篇开始写大戏runLoop,网上的文章太多。或者可以歇歇最近很火的react native。好纠结。
对于最近在找工作的同学想说,太热了。可是招聘市场仍然不太热,不够比上个月还是好一些的。加油
网友评论