琐碎问题

来源:互联网 发布:万网域名icp备案 编辑:程序博客网 时间:2024/05/22 13:47

iOS 9 中的多任务分为三种表现形式,

分别是临时调出的滑动覆盖 (Slide Over),
视频播放的画中画模式 (Picture in Picture) 以及
真正的同时使用两个 app 的分割视图 (Split View)。


滑动覆盖和分割视图的 app 会使用 iOS 8 引入的 Size Class 中的 Compact Width 和 Regular Height 的设定,配合上 AutoLayout 来进行布局。也就是说,如果你的 app 之前就是 iPhone 和 iPad 通用的,并且已经使用了 Size Class 进行布局的话,基本上你不需要再额外做什么事儿就已经能支持 iOS 9 的多任务视图了。

视频 app 的画中画模式相对简单一些,如果你使用 AVPlayerViewController 或者 AVPlayerLayer 来播放视频的话,那什么都不用做就已经支持了。但如果你之前选择的方案是 MPMoviePlayerController 或者 MPMoviePlayerViewController 的话,你可能也需要尽早迁移到 AVKit 的框架下来,因为 Media Player 将在 iOS 9 被标记为 deprecated 并不再继续维护。







大家是怎么防止或预防,跟踪IOS 闪退的出现?

最近我的应用遇到十分纳闷的事情,就是在测试机上测试好好的,放上架使用后人们总出现不同程度的错误导致闪退(是根据友盟的日志),目前我的应用大部分都是由于数组越界导致问题的(但测试就没有遇到过)。想问问大牛们是怎样控制和跟踪已上架项目的情况?毕竟友盟的仅显示了错误信息,没有来源不好跟踪。


用catch的话,程序会在不正常状态,接下来会出现什么问题都是不可预知的,还不如让APP直接crash。 要完全避免crash基本上很难,只能尽最大能力预防或提早发现,我们现在的做法是: 1 使用crashlytics,跟踪线上用户crash时的详细信息。crashlytics的信息比友盟的详细很多,很多时候可以详细到代码行。并且可以添加自己的日志,这些日志会在crash报告中包含。 2 代码中使用NSAssert之类的防御性编程,让Debug版的APP在数据不符合预期时,抛出异常。 3 每次发布前都用xcode的静态分析工具,分析源代码。 4 尽可能的消灭编译警告。 5 在模拟器时测试时,要时不时运用一下模拟器的内存警告功能,这样会经常会碰到一些不是你预期的问题。 6 测试机最好是低端一点的机器,容易出问题。


第一个是在app上架后出现闪退时crashlytics会统计app闪退的信息,这个你可以百度看看具体的,第二个是断言,断言是看里面的bool表达式是不是真,是真就通过,否则就会闪退,报错信息为你传的字符串,你用下NSAssert就知道了,第3个是静态测试,你点击菜单-》product-》analyze,自己看看什么情况,还有一个动态测试你也可以看看,第4个就是让你尽量消除警告,因为有些警告是方法过期了,在高版本运行通不过,还有些是莫名其妙的奔溃,第5个是出现内存溢出,然后闪退,第6个就不用我说了吧,测试用水货,可以提前把不能预料的闪退给发现,然后解决掉

1、 app的崩溃率是多少?线上app出现问题如何解决?

1.app的崩溃率可以直接不回答了,因为没有必要公开这些数据。线上的app出现哪些问题呢?比如后台接口出错了,客户端根本就不可能出现crash,因为做了数据保护,如果是app本身的缺陷,只能通过App Store快速审核通道进行解决bug(其实App应该做灰度发布的,但是你一个小公司,有资金和时间做么?)

2、 Runloop是什么?如何用?在什么场景下会用到?

Run Loop是一个事件处理的循环,不停的调动工作以及处理输入事件。比如一个UI事件、一个NSTimer、一个Delegate回调,系统都会隐式的创建一个Run Loop

3、 数据列表需要展示大量数据,如何优化?至少三个方面?

第一先利用TableVIew或者CollectionView的重用机制;第二再定制各种样式的Cell ;重点第三通过CoreText或者TextKit来做富文本的展示,尽量减少UI控件的绘制工作   再深入一点:通过空间换取时间,利用缓存方式进行缓存Cell的高度,从而减少计算的时间

4、 SQLiteCoreData区别?优缺点?FBDataBase使用?coreData结构构成?

4.SQLite和CoreData没有本质上的区别,CoreData是对原始SQLite数据库API访问进行了一层封装,通过面向对象的接口进行管理数据缓存,比使用SQL语句操作SQLIte数据库更加简单和方便,当然CoreData也有缺点,比如API不够用,处理大量数据会变得缓慢,SQLite就没有这样的问题,只要写SQL语句的人有经验,大部分是可以避免的,当然SQLIte也会有一些弊端,比如网络数据怎样自动化映射到数据库中?而CoreData就有类似由Github写的Mantle开源库,很好的处理这个问题。CoreData提供一个管理上下文,数据模型,数据持久化存储助理协调器。

5、 上千条数据需要插入数据表,如何优化提高效率?

适当的使用索引,因为过分使用索引会引起低效率的情况,把数据库进行分区存储,或者把数据进行分批插入,每一批插入有一个通知回调。

6、 同时对同一张表进行操作?

这个问题好牵强,对同一个表操作?应该是想问同事操作数据库吧?如果在线程琐上的问题,可以利用原子访问、互斥等方式进行避免资源竞争的问题

7、 数据库什么时候打开?什么时候关闭?


8、 WebView突然弹出广告或者垃圾信息?是什么原因造成的?如何解决?

WebView突然弹出广告?那肯定是H的错啦!当然我们可以进行避免,通过WebView的delegate进行URL截取,然后拿关键词与常出现的广告注入标识库进行匹配,从而达到拦截的作用

9、 ASIAFNetWorking区别?核心实现上有什么不同?

ASI是基于底层CSNetworking框架进行开发,注重于网络数据的缓存,ASI太重,已经无人维护。AFNetworking是基于NSURLConnection框架进行开发的,注重于网络数据的处理,快速请求的过程,使用很方便。核心技术已经在上面表达了

10、 项目中遇到过什么重大问题?如何解决的?

.项目中遇到的重大问题?好吧!一般的App都不会出现,无非就是多线程、数据库操作、视频音频格式处理等等!只要通过SO进行查阅,一般都可以解决掉一半的问题,实在不行,那就需要同事的支持,然后共同解决,如果一定要描述解决方案的话,说明他想招你做主管或者开发经理

11、 在做项目中使用过哪些自己认为比较好的技术?

技术没有好不好,比如为了一个RSS App,你用一个VIPER模式,然后搞个状态机,好高级的样子,但是没有必要,对于业务变动有一个比较好的设计模式就好了

12、 app版本升级中需要对数据表等做更新,此时如何数据库升级?

app升级需要把数据库的数据进行迁移,数据合并(具体还得看项目的情况哦!)


13、 category类目的作用?类目是否可以添加属性?类目中得方法名和系统的重名会怎样?

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、 [__NSString close] unrecogonized selector 
这里可能是动态类型的考点吧! 如果一个对象不明确是什么类型,却用了某一种类型的方法,导致了crash,这里可以通过两种方法来防止,第一简单的使用respondsToSelector来检查,第二就是少用动态类型的对象,尽量使用强制的类型

[__NSDictionary close]  unrecoginized selector 为什么出现这种问题?由什么造成的?(问题差不多是这样的,具体没记清楚)
19、 平时看些什么书籍?
20、 自己得优缺点?
21、 常见得字符编码?它们的区别?

22、 ARC下如何处理内存问题?ARCMRC之间的区别?如何处理内存警告?

这里的考点好像不明确,我觉得应该这么理解,ARC是怎么演变过来的,ARC和MRC的最大区别就是在Runtime的时候,是否进行检查,ARC做了自动代码注入的方法,比如一个autorelease的对象,在MRC下需要自己手动进行声明,而ARC会在Runtime的时候自动加入,而不需要手动。 


0 0
原创粉丝点击