笔试部分:
解释一下NSString这种对象, copy 和 strong 的区别是什么?
当对象属于 NSString 时,打印 NSString 对象的内存地址会发现是同一个地址;MRC环境下, copy和 strong 都会使引用计数器+!,copy 只执行浅复制 , 所以修饰 NSString 类型对象时,copy与 strong 并没有太大区别;
但当对象属于 NSMutableString时,打印NSString对象的内存地址会发现是copy与strong不是同一个地址,strong属性只是增加了源字符串的引用计数,而copy属性则是对源字符串做了次深拷贝,产生一个新的对象,且copy属性对象指向这个新的对象。
声明NSString属性时,到底是选择strong还是copy,可以根据实际情况来定。
请问 OC 中内存管理方式和过程?
Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
1. (Garbage Collection)自动内存计数:当你不需要某个内存时,不用管它,垃圾回收机制会自动帮你回收,但需要消耗一定资源, IOS 中不提供使用; 过程: 通过alloc – initial方式创建的, 创建后引用计数+1, 此后每retain一次引用计数+1, 那么在程序中做相应次数的release就好了;
(Reference Counted)手动内存计数:引用计数器的使用,由程序员手动释放,当计数器为0时候释放内存; 过程:一般是由类的静态方法创建的, 函数名中不会出现alloc或init字样, 如[NSString string]和[NSArray arrayWithObject:], 创建后引用计数+0, 在函数出栈后释放, 即相当于一个栈上的局部变量. 当然也可以通过retain延长对象的生存期.
(NSAutoRealeasePool)内存池:可以通过创建和释放内存池控制内存申请和回收的时机; 过程: 是由autorelease加入系统内存池, 内存池是可以嵌套的, 当释放这个内存池时, 其中的对象都会被释放.
Static 全局变量和普通全局变量有什么区别? Static 局部变量和普通局部变量有什么区别? Static函数与普通函数有什么区别?
static全局变量与普通的全局变量有什么区别:static全局变量只初始化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数作用域不同,仅在本文件使用,在内存中只有一份,普通函数在每个被调用中维持一份拷贝
/*
按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。
按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
更多详情:http://www.cnblogs.com/Kane_zzt/archive/2009/05/18/1459697.html
*/
__block 与__ weak 的区别?
1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
3.__block对象可以在block中被重新赋值,__weak不可以。
如何解决 TableView卡顿问题?
cell 重用机制;
异步下载图片并保存到本地缓存文件中;
减少不必要的视图,cell 里的控件或者视图太多,会消耗较多资源,并且也影响渲染的性能;
使用主线程更新 UI 界面,子线程处理耗时操作;
参照:http://blog.sina.com.cn/s/blog_b638dc890101ep3x.html
浅拷贝与深拷贝的区别?
浅拷贝只复制对象的指针,不会拷贝对象本身,公用一块内存地址;
深拷贝会复制对象本身,创建一个新的对象,使用新的内存地址;
有两个功能要实现,请问是在一个线程里按顺序做效率高还是两个线程里做效率高?为什么?
如果两个功能是依赖关系,则同一个线程执行效率更搞;
如果两个功能属于并发事件,则使用两个线程做的效率更高;
简要说下 Http 通信协议原理,与 socket 协议的区别有哪些?
http 通信原理:http://itlab.idcquan.com/cisco/others/31536.html
与 socket 的区别:http://www.2cto.com/net/201211/166537.html
MVC 是什么?有什么特性?你还熟悉哪些设计模式?分别引用在什么场景?
MVC分别指Model层, View层, Controller层,特性: 降低代码的耦合度;
一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
代理模式,观察者模式,单例模式,工厂模式等
应用场景:http://blog.csdn.net/liwei3gjob/article/details/8926862
OC 中堆和栈的区别?
详情参照:http://blog.csdn.net/ocean0815/article/details/25748633
笔试就这么多了,笔试其实没什么好怕的,多数都是学过的东西,先做会的东西,不会多百度;公司其他人都要上班没空搭理你;回头来总结,发现让我再去面试一次笔试还是不太会,这是一个积累的过程;
敲门而入,一个三室一厅的格局的公司出现在我面前,几台电脑前随意摆放着几个人,或是在敲代码,或者是在做其他的,反正是:除了一个负责接待的妹子,没一个人抬头看我,然后被带到一个厨房大小的会议室登记和笔试,笔试期间,除了接待的人来过一次就没任何事情发生,我正对着们坐下,门对面的小妹儿翘着二郎腿在吃薯片(或许中午没吃饭),还有一个在打呼噜(又或许中午没睡好?),笔试题,会得做完了, 不会的手机拿出来百度继续做;大概四十分钟后,接待的妹子就带我去 boss 办公室面试:
面试部分:
去面试了一个出创型的公司,整个公司也就十几个人, boss 直接面试我;一进去 boss就让我自我介绍,介绍到一半,他打断我,然后开始问我问题;先是看着笔试题然后问了几个上面的问题,前面几个还能答出来,后面最薄弱的地方把我问到了,不过最终还是回答出来了; 然后问我简历上的项目的一些问题;如果你对你简历上的项目的特别熟悉,自己写了哪些功能,负责什么都特别清楚,没事儿让他问,问什么你答什么,他如果满意会接着和你谈薪资,再然后会问你什么时候能上班,再然后你就可以入职了,然后我可以恭喜你了;
BUT~~~
无奈我今天就没那么幸运咯,被 boss 刁难了,他没问我项目我负责什么,而是问某某项目你是负责UI 搭建的吗?当时一听犯迷糊就说了是,然后他悠悠的回了句你这简历上写的不是这个唉╮(╯▽╰)╭, 艹(请原谅我爆出口),给我挖坑。然后他问我做了几个项目,总体算了下时间,把这几个项目的时间加起来给我说,你不是有一年开发经验嘛,这几个项目加起来也才两个月啊,你其他时间做什么的?(妈蛋,又把我问到了,难道我会告诉你我没一年工作经验?然后瞎扯一通);再然后给他将我最近想自己想带团队做个项目,殊不知, boss 又问:你这不能给你带来任何经济效益的项目做了为了干啥?我只是说了句历练自己,然后他又回了句:这样说你技术还不达标咯?(艹^2,这尼玛什么逻辑啊,我喜欢做不行么,我爱闹哪样你管我?)最后我说想请教 boss 一个问题,我觉得他们公司的产品还不错,有一个技术性的问题我想问他, boss 直接避开(好吧,公司机密,我理解),再然后我给他们公司的 app提出我发现的一个小bug, 然后 boss 回了句:特地哪样做了(尼玛,果断不能再谈了,当初我可是怀着一颗迫切要加入该公司的心得,然后就没了),最后聊了会儿,boss 大意说在我期望的月薪中减少3k,纵欲该轮到我说No了,(工作氛围让我失望了)行,我回去考虑考虑...然后我就回来吐槽来了...
总结几点:
1.面试简历上的项目自己一定要清楚,负责那个模块,功能如何实现;
2.不要谈自己的梦想;
3.做假的小朋友们,有几个项目,项目开发周期加起来不要和工作经验相差太远哦;