美团面试题

分享之前的美团iOS面试题,供大家参考。

1、简述CocoaPods原理,podfile.lock作用

2、cocoapods中>和~>区别

  • ‘> 0.1’ Any version higher than 0.1 0.1以上
  • ‘>= 0.1’ Version 0.1 and any higher version 0.1以上,包括0.1
  • ‘< 0.1’ Any version lower than 0.1 0.1以下 ‘<= 0.1’ Version 0.1 and any lower version 0.1以下,包括0.1 ‘~> 0.1.2’ Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher 0.2以下(不含0.2),0.1.2以上(含0.1.2)
  • ‘~> 0.1’ Version 0.1 and the versions up to 1.0, not including 1.0 and higher 1.0以下(不含1.0),0.1以上(含0.1)
  • ‘~> 0’ Version 0 and higher, this is basically the same as not having it. 0和以上,等于没有此约束

3、当使用私有方法被AppStore拒绝后,如何找到哪里使用了该方法?

cd 到 Payload 里面的 app,strings 命令进行查找、otool工具(xcode自带,可以直接在终端中使用)、全局搜索grep-

4、sdwebimage源码是否了解,简述原理,另循环10次下载图片,发出多个网络请求,中途资源发生变化,最后一次获取到的图片是否是最新的。

down下载图片只有一次请求。imageview,button,sd_setImage会有多次请求,请求前会cancel上一个请求解决。tableView复用错乱问题:每次都会调UIImageView+WebCache文件中的 [self sd_cancelCurrentImageLoad];

5、UITableView多次reload会调用几次吗?

1次,perform延迟会多次。reload之后tableview不会等等刷新后就返回,保证后续操作正确,应该:

//第一种解决办法
dispatch_async(dispatch_get_main_queue(), ^{
      //写相关处理Cell的方法 比如 scrollToRowAtIndexPath 等
      NSLog(@"end");
  });
//第二种解决办法
  NSLog(@"begin");
  [self.tableView reloadData];
  [self.tableView layoutIfNeeded];
  //写相关处理Cell的方法 比如 scrollToRowAtIndexPath 等
  NSLog(@"end");

6、屏幕刷新帧率和runloop关系

CADisplayLink是一个执行频率(fps)和屏幕刷新相同(可以修改preferredFramesPerSecond改变刷新频率)的定时器,它也需要加入到RunLoop才能执行。与NSTimer类似,CADisplayLink同样是基于CFRunloopTimerRef实现,底层使用mk_timer(可以比较加入到RunLoop前后RunLoop中timer的变化)。和NSTimer相比它精度更高(尽管NSTimer也可以修改精度),不过和NStimer类似的是如果遇到大任务它仍然存在丢帧现象。通常情况下CADisaplayLink用于构建帧动画,看起来相对更加流畅,而NSTimer则有更广泛的用处。

7、runloop介绍和具体应用情况

runloop本质上是一个do-while循环,一个线程对应一个loop。主线程loop默认开启,子线程要自己手动开启。一个loop钟有多个模式(mode),默认都是default模式。子线程保活(保证线程的长时间存活 ),比如在子线程加一个定时器,默认执行一次就不会再执行了假如在主线程加一个定时器去修改UI,当我们滑动界面的时候就会发现UI不变了。因为默认是default模式,滑动界面时切换成响应模式。通过调整成common模式,就可以解决这个问题了。重任务分散,比如批量大图加载。

8、屏幕卡顿原因

9、性能优化做过哪些?

可从启动优化、瘦身优化、网络优化、数据库优化、规则优化等方面阐述

10、第三方支付流程介绍,微信支付和支付宝支付的区别?

11、组件间如何通信?

12、私有库如何调试?

13、如何排查无用资源和无用类文件

14、sdwebimage如何保证cell是当前cell,不会发生重用?

每次都会调UIImageView+WebCache文件中的 [self sd_cancelCurrentImageLoad];

15、debug和release区别

一、从开发者视角,Debug和Release的区别,主要是编译器的选项不同,Debug 包含调试信息,并且不作任何优化,便于程序员调试程序。Release 往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 二、使用者视角,我们下载软件的时候,一般应该选择Release版。Debug一般比测试版更粗,主要提供给高级测试者反馈修改意见。

16、100×100图片,占多少内存?


尊重原创内容,转载请注明出处
本文链接地址: https://www.awnlab.com/archives/600

为您推荐

发表评论

邮箱地址不会被公开。 必填项已用*标注