2、 Runloop 是什么?如何用?在什么场景下会用到?
3、 数据列表需要展示大量数据,如何优化?至少三个方面?
4、 SQLite 和 CoreData 区别?优缺点? FBDataBase 使用? coreData 结构构成?
5、 上千条数据需要插入数据表,如何优化提高效率?
6、 同时对同一张表进行操作?
7、 数据库什么时候打开?什么时候关闭?
8、 WebView 突然弹出广告或者垃圾信息?是什么原因造成的?如何解决?
9、 ASI 和 AFNetWorking 区别?核心实现上有什么不同?
10、 项目中遇到过什么重大问题?如何解决的?
11、 在做项目中使用过哪些自己认为比较好的技术?
12、 app版本升级中需要对数据表等做更新,此时如何数据库升级?
13、 category类目的作用?类目是否可以添加属性?类目中得方法名和系统的重名会怎样?
14、 封装类库给别人用,需要注意哪些问题?
15、 多线程里面主要由哪几种?它们的优缺点?
16、 实现类似网易新闻的滑动标签选项,需要写哪几个类?
17、 比如一个第三方分享,每次调用都比较耗时,而且好多页面都用到了,那如何监控次耗时操作在所有页面的耗时时间?
18、 [__NSString close] unrecogonized selector
[__NSDictionary close] unrecoginized selector 为什么出现这种问题?由什么造成的?(问题差不多是这样的,具体没记清楚)
19、 平时看些什么书籍?
20、 自己得优缺点?
21、 常见得字符编码?它们的区别?
22、 ARC下如何处理内存问题?ARC和MRC之间的区别?如何处理内存警告?
答案
我只是随便讲,没有对与错,请大神不要拍砖,仅是自己的个人意见,欢迎大神们来解答问题
1.app的崩溃率可以直接不回答了,因为没有必要公开这些数据。线上的app出现哪些问题呢?比如后台接口出错了,客户端根本就不可能出现crash,因为做了数据保护,如果是app本身的缺陷,只能通过App Store快速审核通道进行解决bug(其实App应该做灰度发布的,但是你一个小公司,有资金和时间做么?)
2.Run Loop是一个事件处理的循环,不停的调动工作以及处理输入事件。比如一个UI事件、一个NSTimer、一个Delegate回调,系统都会隐式的创建一个Run Loop
3.第一先利用TableVIew或者CollectionView的重用机制;第二再定制各种样式的Cell ;重点第三通过CoreText或者TextKit来做富文本的展示,尽量减少UI控件的绘制工作 再深入一点:通过空间换取时间,利用缓存方式进行缓存Cell的高度,从而减少计算的时间
4.SQLite和CoreData没有本质上的区别,CoreData是对原始SQLite数据库API访问进行了一层封装,通过面向对象的接口进行管理数据缓存,比使用SQL语句操作SQLIte数据库更加简单和方便,当然CoreData也有缺点,比如API不够用,处理大量数据会变得缓慢,SQLite就没有这样的问题,只要写SQL语句的人有经验,大部分是可以避免的,当然SQLIte也会有一些弊端,比如网络数据怎样自动化映射到数据库中?而CoreData就有类似由Github写的Mantle开源库,很好的处理这个问题。CoreData提供一个管理上下文,数据模型,数据持久化存储助理协调器。
5.适当的使用索引,因为过分使用索引会引起低效率的情况,把数据库进行分区存储,或者把数据进行分批插入,每一批插入有一个通知回调
6.这个问题好牵强,对同一个表操作?应该是想问同事操作数据库吧?如果在线程琐上的问题,可以利用原子访问、互斥等方式进行避免资源竞争的问题
7.这个问题好傻,问的人不知道想要什么答案????
8.WebView突然弹出广告?那肯定是H的错啦!当然我们可以进行避免,通过WebView的delegate进行URL截取,然后拿关键词与常出现的广告注入标识库进行匹配,从而达到拦截的作用
9.ASI是基于底层CSNetworking框架进行开发,注重于网络数据的缓存,ASI太重,已经无人维护。AFNetworking是基于NSURLConnection框架进行开发的,注重于网络数据的处理,快速请求的过程,使用很方便。核心技术已经在上面表达了
10.项目中遇到的重大问题?好吧!一般的App都不会出现,无非就是多线程、数据库操作、视频音频格式处理等等!只要通过SO进行查阅,一般都可以解决掉一半的问题,实在不行,那就需要同事的支持,然后共同解决,如果一定要描述解决方案的话,说明他想招你做主管或者开发经理
11.技术没有好不好,比如为了一个RSS App,你用一个VIPER模式,然后搞个状态机,好高级的样子,但是没有必要,对于业务变动有一个比较好的设计模式就好了
12.app升级需要把数据库的数据进行迁移,数据合并(具体还得看项目的情况哦!)
13.category的作用是给开发者提供一个不需要修改源代码就可以添加方法,category可以添加属性,其实这里的原理是通过Runtime的方式进行绑定某个属性,如果category的方法名和系统重名的时候,直接重载了系统的方法
14.如果是封装UI组件,我会考虑高内聚,低耦合的方式,提供简单又丰富的API,比如工厂的创建方法
15.多线程:NSOperation配合NSOperationQueue,GCD,NSThread;GCD的缺点难于管理,不可取消和暂定,NSTr难于定位问题,NSOperation可用性高,可支持调度、暂停,取消等功能,一般都会才去继承NSOperation来做更深入的定制线程
16.是这个面试官有点业余?还是作者没记清楚呢?网易新闻的滚动标签和容器都是一个联动的ScrollView,通过统一管理数据源,利用KVO做两个ScrollView的联动工作(项目https://github.com/JackTeam/XHNewsFrameworkExample)(wiki:https://github.com/JackTeam/XHNewsFrameworkExample/wiki/XHNewsFramework%E6%A1%86%E6%9E%B6%E6%96%87%E6%A1%A3)
17.不明白
18.这里可能是动态类型的考点吧! 如果一个对象不明确是什么类型,却用了某一种类型的方法,导致了crash,这里可以通过两种方法来防止,第一简单的使用respondsToSelector来检查,第二就是少用动态类型的对象,尽量使用强制的类型
19.平时看产品、设计相关的书,比较多的还是在论坛,比如SO、官方的Develpor、github等等(https://github.com/xhzengAIB)
20.。。。。。。
21.。。。。。
22.这里的考点好像不明确,我觉得应该这么理解,ARC是怎么演变过来的,ARC和MRC的最大区别就是在Runtime的时候,是否进行检查,ARC做了自动代码注入的方法,比如一个autorelease的对象,在MRC下需要自己手动进行声明,而ARC会在Runtime的时候自动加入,而不需要手动。