美文网首页工具癖面试题
iOS经典面试题汇总

iOS经典面试题汇总

作者: Kevin_wzx | 来源:发表于2018-08-23 17:02 被阅读50次

1.基础知识点

1.深拷贝和浅拷贝的区别,assign 和weak的区别,strong和copy的联系与区别(需要从内存中分析),weak在什么时候使用,delegate用什么修饰?

2.block,notification,delegate,kvo的区别和联系?

3.消息转发的三个方法,消息转发的实现?

4.git merge 和 git branch 的使用?

5.沙盒的文件目录,他们的用途?

6.NSOprention和gcd的差别与联系?

7.HTTPS与HTTP的区别,HTTPS是怎么通讯的?

8.内容加密你们是怎么实现的(aes),那么在使用aes加密的时候你具体是怎么做的?

9.在使用UIsrollView作为banner的时候为什么放进UItableView,tableView滑动时,banner会停止滑动(从runloop的MODE分析)?

10.分类用过没有,分类的优点和缺点。你在工作中怎么使用的?

11.__weak和weak的区别。__block的原理是什么?

12.野指针是什么,什么时候会出现野指针?

13.mvc和MVVM的差别是什么。rac有没有用过?

14.沙盒机制,目录结构,如果有一个字符串在APP被卸载了怎么让这个字符串还能够读取到。需要使用钥匙串

15.离屏渲染,怎么实现大量图片的圆角化

16.NSCache和NSDictory比较的优缺点

17.如果你在使用UITableView的时候,需要改变tableView的Header的高度,直接给他的Frame设值有没有效果

18.使用UIScrollView和3个imageView实现无限轮播

19.简单说一下一个viewController的周期

loadView->viewDidLoad->viewWillAppear->viewWillLayoutSubviews->viewDidLayoutSubviews->viewDidAppear->viewWillDisappear->viewDidDisappear

20.TableView的优化(https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/

①预排版:提前计算并缓存Cell的高度(https://github.com/forkingdog/UITableView-FDTemplateLayoutCell/
②减少透明度为0的视图,尽量给每个视图都设置背景色(对于透明度为0的视图会CPU进行绘制,其余由GPU绘制)
③减少cell的图层数量
④预渲染:避免离屏渲染,你应当尽量避免使用 layer 的 border、corner、shadow、mask 等技术
⑤异步绘制(https://github.com/johnil/VVeboTableViewDemo
⑥更高效的异步图片加载
⑦全局并发控制

21.圆角的处理(https://www.jianshu.com/p/05b68c84913a

①如果是一个或者圆角很少的情况。
imageView.image.layer.cornerRadius
imageView.image.layer.masksToBounds
imageView.layer.shouldRasterize = YES 设置光栅化
imageView.layer.rasterizationScale = UIScreen.main.scale//使用 “栅格化” 必须指定分辨率
② UIBezierPath和CAShapeLayer画一个圆角

22.一个APP从启动到视图展示所有的步骤

+load方法加载->main->UIApplicationMain->AppDelegate->didFinishLaunchingWithOptions->UIWindow->rootViewController

23.属性关键字的有哪些,weak,assign,unsafe_unretained的区别

①strong copy weak assign unsafe_unretained readwrite readonly nonatomic natomic
②weak只能修饰对象,并且引用计数不会增加,在引用计数为0是会将自己置为nil
Assign能够修饰基本数据类型也能修饰对象,引用计数也不会增加,在引用计数为0时不会释放对应的内存空间,还是可以继续访问,容易引起野指针
unsafe_unretained weak只能修饰对象,并且引用计数不会增加 在引用计数为0时不会释放对应的内存空间,还是可以继续访问,容易引起野指针
strong修饰对象 ,会将引用计数加一,只拷贝了指针
Copy 引用计数会加一,并且会在内存中copy一份一样的对象。内存地址不相同,拷贝了内容

24.在开发中你都是怎么调试程序的

打断点。lldb。instrument中调试内存泄漏(https://www.jianshu.com/p/05b68c84913a

25.如果把tableView的cell的高度缓存起来,需要怎么做

https://www.jianshu.com/p/2b192257276f

26.setNeedsLayout和layoutIfNeeded,layoutSubviews的功能是什么

https://www.jianshu.com/p/a84f85729952
layoutSubviews:继承于UIView的子类重写,进行布局更新,刷新视图。如果某个视图自身的bounds或者子视图的bounds发生改变,那么这个方法会在当前runloop结束的时候被调用(不能直接调用这个方法)
setNeedsLayout:标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,在下一轮runloop结束前刷新,对于这一轮runloop之内的所有布局和UI上的更新只会刷新一次,layoutSubviews一定会被调用
layoutIfNeeded:如果有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)

27.APP的所有状态

didFinishLaunchingWithOptions 程序加载完成之后调用,再次进入不会再调用(APP还没有被杀死)
applicationWillResignActive APP即将推出到后台
applicationDidEnterBackground APP已经进入后台会回调这个函数
applicationWillEnterForeground APP即将进入前台
applicationDidBecomeActive APP已经变得活跃
applicationWillTerminate APP将要结束

28.+load方法和+initialize方法知道么?子类会不会调用

+load方法会在main函数之前调用,+initialize函数是类在init之前,并且只会调用一次,子类还是会调用上面两个方法

29.事件传递的顺序和流程(https://www.jianshu.com/p/2e074db792ba

事件的传递和事件的响应刚好相反
事件的传递:寻找最合适的view的过程。 UIApplication-> keyWindow->父视图->子视图 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法进行递归查找
事件的响应:寻找能处理的view。子视图->父视图->keyWindow->UIApplication->丢弃响应事件

30.在集成第三方sdk的时候-objc这个有什么用途

31.同步与异步的区别,你在项目中是怎么用到的
32.json数据解析你是怎么解析的,用的什么框架。你了解第三方框架是通过什么原理解析的么?
33.xml格式你是通过xpath节点去解析的么?(最好别写xml,用得少,会不会无所谓)
34.git版本控制器你需要上传的服务器你需要哪几部操作,如果你发现你写的代码出现严重性的问题,需要回退到某个版本,你需要怎么操作
35.使用FMDB的时候你需不需要关系线程的问题,如果需要你会怎么做,如果不需要,那么为什么
36.如果APP内有一个数据库已经创建好了,现在你需要修改表结构(增加或者减少字段)你需要怎么操作。数据库的事务了解吗?
37.APP证书配置的基本流程是什么,如果提供一个新的测试机给你,不通过xcode,只通过打包的形式怎么让新的测试机安装上APP
38.你在上线的时候有没有遇到过APP被拒的情况,如果有,那是什么问题造成的
39.NSOperationQueue是对什么的封装,你觉得GCD跟NSOperationQueue对比有什么不同,你在开发中哪一个用得更多
40.各种UI控件的定制,你在开发中都定制过什么控件
41.swift与oc有什么不同?
42.值类型和引用类型了解过没有?Swift中的string 和NSString有什么本质上的区别
43.block在使用中需要注意什么?循环引用中的__weak的底层实现是什么?不用__Weak还可以通过什么方式解除循环引用
44.如果需要更改block中的值你需要用的什么关键字,你知道为什么需要添加__block,__block的底层实现是什么?
45.观察者模式是什么?KVO了解吗?你知道他的实现原理嘛?KVC是什么?你了解他的实现原理吗?
46.怎么实现一个常驻线程?
47.简述一下MVC和MVVM的区别和联系
48.Block、通知、单例等进行界面间通信,他们有什么区别,什么时候该用什么?
49.使用AFNetworking,SDWebImage进行数据请求、网络加载,SDWebImage能够进行数据请求、网络加载吗?
50.Bugly项目bug检测,你有没有配置过符号表呢?如果线上出现问题在bugly上反映出来了你要怎么定位问题呢?
51.CoreAnimation可以直接用吗?他有哪些子类呢?
52.CoreAnimation中的事务了解吗?可以不可以把几个动画合成到一起呢?
53.WebViewJavascriptBridge能说一下他怎么使用嘛?他的底层实现原理是什么?你是用的UIWebView还是WKWebView?
54.简单说一下怎么实现首页自定义实现控制器下拉隐藏导航栏,上拉出现导航栏的效果
55.谓词实现查找功能,请问你是怎么使用的谓词。
56..使用友盟统计埋点,对客户行为进行统计 ,如果让你自己实现有没有思路实现?

2.底层知识解释分析

1.kvo的实现(底层实现),kvo的缺点和调用时机?

cdcu

2.在使用timer的时候需要注意什么,timer准不准确?(怎么才能让计时准确)

3.多线程在日常开发中的应用,有没有碰到过线程死锁,你是怎么解决的?

4.runtime在项目中用得多不多,你都拿来实现过什么功能?

(1).方法交换(①AFNetWorking对NSUrlSession的暂停和开启的方法注入通知,让开发者能得到当前session的状态②统计埋点的实现,交换系统方法)
(2).遍历属性(①MJExtension的实现②如果一个类含有很多属性,并且需要归档,可以用这个方法)
(3).消息转发
(4).分类的关联属性

5.什么是runloop,它和线程有什么关系。你在工作中什么时候用的过的?

6.runloop中有几种mode,·每一种都是什么作用?

7.weak是放在堆上还是栈上。他的底层实现是什么

8.AF的线程是怎么管理的。你在项目中是怎么使用线程的

AFNetWorking的源码读过没有,具体说一下实现流程
https://www.jianshu.com/p/856f0e26279d

9.GCD的信号量,互斥锁有没有使用过

10.NSURLSession 与NSURLConnection有什么不同,NSURLSession的好处是什么

①NSURLSession在处理下载做了优化,不再像NSURLConnection一样,NSURLConnection下载文件时,先是将整个文件下载到内存,然后再写入到沙盒,如果文件比较大,就会出现内存暴涨的情况 而使用NSURLSessionUploadTask下载文件,会默认下载到沙盒中的tem文件中,不会出现内存暴涨的情况,但是在下载完成后会把tem中的临时文件删除,需要在初始化任务方法时,在completionHandler回调中增加保存文件的代码。②断点续传的方式 (https://www.jianshu.com/p/056b1817d25a
③NSURLConnection发起请求后,这条线程并不能随风而去,而需要一直处于等待回调的状态。NSURLSession发起的请求,不再需要在当前线程进行代理方法的回调!可以指定回调的delegateQueue,这样我们就不用为了等待代理回调方法而苦苦保活线程(为什么AFNetworking2.0需要一条常驻线程而3.0不需要了 https://www.jianshu.com/p/b5c27669e2c1

11.从runtime层面上解释__weak的实现

runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc,假如 weak 指向的对象内存地址是a,那么就会以a为键, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil

12.在使用AFNetWorking的时候你是直接用还是二次封装,二次封装你是怎么做的

二次封装。首先创建一个基础类,用于转发AFN的block。将自己所需的基础配置写好。这里可以设计post。get,上传和下载的通用接口。这样在其他地方就可以直接用了。我这边会写一个协议将成功和失败的回调转发出来,然后在实现了协议的地方就可以回调。这样可以把网络操作集中起来。对于一些特定的网络请求可以调用前面的基础类,实现更高程度的封装。

13.在网络请求的时候有没有用过缓存,你要怎么去实现缓存

14.16、main()之前的过程有哪些?

3.场景问题解答

1.简述一下MVC架构,你在项目中是怎么使用的?

2.上传多张图片如何实现,如何在上传成功后再进行其他操作?

3.在你使用的众多第三方库中,你觉得哪个对你来说印象深刻,使用的时候需要注意什么?

4.简述一下你的APP中你觉得亮眼的功能,为什么觉得写得好?

5.你在写完APP之后会不会去优化,你都优化过什么?

6.上班打卡你是怎么实现的?(位置打卡,WiFi打卡)

4.算法题

1.A和b不用中间变量怎么实现交换

5.非技术问题

1.你们开发APP的周期是多久

2.三年工作中有没有去阅读过第三方库的源码?

1.离职原因回答:寻求更大突破、 原来公司管理有问题、和自己的规划相冲突

  1. 你对加班的看法
    这个问题并不是非要让你加班,只是想测试你是否愿意为公司奉献。参考回答:如果是工作需要我会义不容辞加班,可以全身心的投入工作。同时,我也会提高工作效率,减少不必要的加班。
    3.你还有什么问题要问我的吗?
    这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。最好不要问个人福利、五险一金的之类的问题。 可以这样问:
    贵公司对新入公司的员工有没有什么培训项目?
    贵公司的晋升机制是什么样的?
    入职后参与的项目的情况了解一下?
    企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。
    4.自我介绍:
    面试官最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等
    5.你认为自己的技术能力怎么样?(保持高度自信)技术中等吧。我正努力提升自己的技术


    图片.png

相关文章

网友评论

    本文标题:iOS经典面试题汇总

    本文链接:https://www.haomeiwen.com/subject/khdfvftx.html