zoukankan      html  css  js  c++  java
  • iOS 面试

    客户端安全性处理方式:

    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框架

     简单描述客户端的缓存机制?

    1. 缓存可以分为: 内存数据缓存, 数据库缓存, 文件缓存

    2. 每次想获得数据的时候

      <1>. 先检测内存中有无缓存

      <2>. 再检测本地有无缓存(数据库/文件)

      <3>. 最终发送网络请求

      <4>. 将服务器返回的网络数据进行缓存(内存, 数据库, 文件), 以便下次读取. 

    CoreData是对SQLite数据库的封装.

    CoreData.Framework 是OC 版的.性能不好.封装了一些不需要的SQL语句

      1. NSManagedObject: 实体对象(1个类对应1张表,1个对象对应表中的1条记录)

      2. NSManagedObjectContext: 存储器, 决定了你的数据存储在什么地方(SQLiteXML其他文件)

      3. NSPersistentStoreCoordinator: 操作数据库

      4. CoreData 中的NSManagedObjectContext 在多线程中不安全

      5. 如果想要多线程访问 CoreData 的话,最好的方法是一个线程一个NSManagedObjectContext

      6. 每个NSManagedObjectContext 对象实例都可以使用同一个NSPersistentStoreCoordinator,这是因为NSManagedObjectContext会在使用NSPersistentStoreCoordinator前上锁.

    SQLite 是C语言编写的.性能比较好.

    GCD内部怎么实现的??

    1. GCD 的XNU的内核实现的,iOS 和 OSX的核心是XNU内核

    2. GCD 的API 全部在libdispatch.lib库中.

    3. GCD 的底层实现主要有dispatch queue (管理Block操作)和 dispatch source(处理事件,比如线程之间的通讯)

    任务之间不太依赖的用GCD

    任务之间有依赖,或者要监听任务的执行情况用NSOperation

  • 相关阅读:
    CentOS7和Ubuntu下安装Docker & Docker-Compose
    【译】ModSecurity
    【译】ModSecurity事务生命周期
    开源WAF工具ModSecurity
    RHEL/CentOS 安装最新版Nginx
    Linux流量监控工具iftop & nload
    Docker安全扫描工具之docker-bench-security
    wireshark抓包如何查看视频分辨率和码率
    【译】如何使用docker-compose安装anchore
    Docker安全扫描工具之DockerScan
  • 原文地址:https://www.cnblogs.com/aunty/p/5111012.html
Copyright © 2011-2022 走看看