ios 基本面试题

1、 app 的崩溃率是多少?线上 app 出现问题如何解决?
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下如何处理内存问题?ARCMRC之间的区别?如何处理内存警告?

答案

我只是随便讲,没有对与错,请大神不要拍砖,仅是自己的个人意见,欢迎大神们来解答问题

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的时候自动加入,而不需要手动。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值