首页 > 移动平台 > 详细

iOS 面试

时间:2016-01-07 20:14:40      阅读:290      评论:0      收藏:0      [点我收藏+]

客户端安全性处理方式:

1. 网络数据传输:

发数据(敏感数据-账号.密码.消费数据.银行卡账号)的时候不能明文发送--MD5加密

防止被黑客或代理服务器

2. 协议的问题

http 的get post

自己公司写一个协议

3. 本地文件存储

游戏的存档也要加密,防止越狱的手机查看本地文件

4. 源代码

archive打包后的程序ipa 或者是 沙盒中的.o 二进制exec的文件

.m -> 编译.o 文件

反编译工具 - 全部是运行时代码

混淆:(将源代码搞乱)

手动混淆:发布前将自己将类名\方法名\变量名全部改掉

工具混淆:将C/OC代码混淆的工具

sip是什么

1. sip 会话发起协议

2. voip (网络电话) 是基于sip的,直接用互联网打电话,不用耗手机话费

有些图片加载比较慢怎么处理?
1. 图片下载放在异步线程

2. 图片下载过程中使用占位图片

3. 如果图片过大,可以考虑多线程断点下载 -> 设置请求头信息

你实现过一个框架吗?

1. 提供给外界的借口是否够实用,是否够用

2. 别人使用我的框架时能不能根据类名,方法名就能猜出接口的具体作用

3. 别人调用接口时,提供的参数是否够用,调用起来是否简单

4. 别人调用我的框架时,要不要导入其他依赖的框架

APP发送超大量的数据,给服务器发送请求,但服务器卡住了如何解决?

1. 设置请求超时

2. 给用户提示请求超时

3. 根据用户操作再次请求数据 (不要主动再发送请求)

利用NSNotificationCenter实现跨多控制器传输数据和消息中用异步还是同步?

1. 如果通知是在主线程发出,那么接收通知的方法中的耗时操作要放到异步线程中

[[NSNotificationCenter defaultCenter]  postNotificationName: @"abc" object; nil ];

[[NSNotificationCenter defaultCenter]  addObserver: self selector: @selector(test) name: @"abc" object : nil];

- (void) test { dispatch.....}

2. 如果通知实在异步线程中发出,那么接收通知后调用的方法会默认在异步线程中执行

dispatch_async ( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

  [NSNotificationCenter defaultCenter]  postNotificationName: @"abc" object; nil ];

});

[[NSNotificationCenter defaultCenter]  addObserver: self selector: @selector(test) name: @"abc" object : nil];

- (void) test {}

地图导航不能用怎么办?
1. 提示用户打开导航功能->请用户在设置中打开

SDWebImage具体实现过程

1. 利用NSOperationQueue 和 NSOperation 下载图片

2. 还使用GCD的一些函数来解码GIF图片

gif图片 (gif分解)->imageIO 切除所有帧 (每一帧都是UIImage对象)(这个过程比较耗时,放入异步线程中) 

UIImageView * imageView;

imageView.animationImages = ..;

3. 利用URL作为key, NSOperation 作为 value

4. 利用URL作为key, UIImage 作为 value

AFN 和 ASI 有什么区别

0. ASI 是http的终结者,性能比较好,不过没人维护

1. AFN 基于 NSURL, ASI 基于底层的CFNetwork框架, 因此ASI的性能优于AFN

2. AFN 采取 Block 方法处理请求, ASI 最初采取delegate的方式来处理请求, 后来也增加了 Block 的方式

3. AFN 只是封装了一些常用的功能, 满足基本的需求, 直接忽略了很多扩展功能,比如没有封装同步请求;

  ASI 提供的功能较多,预留了各种接口和工具供开发者自行扩展

4. AFN 直接解析服务器返回的JSON, XML 等数据, 而 ASI 比较原始, 返回的是NSData 二进制数据

在实际开发中,有哪么手机架构和性能调试经验?

UI层

业务层(处理业务逻辑)

工具层(处理业务手段, 网络, 存储)

1. 刚接手公司的就项目时, 模块特别多, 而且几乎所有的嗲吗都写在控制器里面,比如UI控件代码, 网络请求代码, 数据存储代码

2. 接下来采取MVC的模式进行封装, 重构

  自定义UI控件封装内部的业务逻辑

  封装网络请求的工具类

  封装数据存储的工具类

runloop

主线程  的 Runloop对象 会自动开启, UIApplication开启了一个死循环(消息循环)

每一个线程都有自己的 runloop 对象 

runloop   1.> 输入源 input resource: (异步消息->处理其他线程)处理处理其他线程回到主线程做事情

            performSelector: onThread (线程之间通信)

      2.> 定时源  timer resource :(同步消息->处理主线程) 处理主线程的UI界面刷新,事件处理,定时器(定时解决界面上有没有UI刷新,滚动)

你们项目中都用了哪些框架,及何种开发工具,具体到哪个版本?

1. AFN . SDWebImage . MBProgressHUD 等 (搜索 : 网易新闻 第三方库)

自己怎么实现原子锁?(不建议)

atomic : 调用set 和 get 方法时都要加一把锁 ,用

- (void) setAge:(NSInteger) age{

@synchronized(self){

_ age = age;}

}

UI控件在主线程中,不存在资源抢夺的问题,一般用 nonatomic.

即时通讯中大数据怎么处理?(聊天)

TCP/IP , 压缩文件再上传

把大文件https的put上传到文件服务器,再通过上传后的url 路径来下载文件

json 的解析?
1. SBJson

2. JSONKit

3. NSJSONSerialization

如果在网络数据处理过程中,发现一处比较卡,一般怎么解决?

开子线程特别耗费内存资源,所以需要对线程进行精准的管理

1. 检查网络请求是否放在了主线程中

2. 看看异步请求的数量是否太多了(子线程数量)

3. 数据量是否太大? 如果太大,先清除一些不必要的对象(看不见的数据, 特别是图片)

  及时监听内存警告

  - (void) ApplicationDidReceiveMesonry

4. 手机CPU 使用率和内存问题

怎么介绍一个项目?

1. 项目的价值

2. 项目的模块

3. 我做的是哪个模块

多线程安全怎么控制?

1. 只在主线程中刷新访问UI

2. 如果要防止资源抢夺, 得用 synchronized 进行加锁保护

3. 如果异步操作要保证线程安全问题, 尽量使用GCD (有些函数默认是线程安全的)

异步线程中下载很多图片,如果失败了,如何处理?

1. 重新下载图片

2. 下载完毕后,利用Runloop 的 输入源回到主线程刷新UIImageView

autolayout?

屏幕适配,横竖屏都可以用.没有了坐标的概念

socket?

AsyncSocket框架

 

iOS 面试

原文:http://www.cnblogs.com/aunty/p/5111012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!