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的高度缓存起来,需要怎么做
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.三年工作中有没有去阅读过第三方库的源码?
- 林天祥面试题:https://coding.net/u/chaosky/p/iOS-Interview-Questions/git
- iOS面试题:https://www.jianshu.com/p/2d9c9ecc034e
- iOS面试知识总结之文章收录:http://www.cocoachina.com/ios/20180315/22624.html
- 腾讯社招iOS面试记录 :https://mp.weixin.qq.com/s/rj3G4vaaRTfMl_Uzo_jOzw
- 2018 iOS 面试法宝+绝密文件 :https://mp.weixin.qq.com/s/mQet-rZa64P5vESnG0UjKg
- 推荐两份技术大牛简历模版 :https://mp.weixin.qq.com/s/YvQpNOdcrSPRt8UgoSgM0Q
- OC最实用的runtime总结,面试、工作你看我就足够了:https://www.jianshu.com/p/ab966e8a82e2
- 其他面试题:
1.https://github.com/HIT-Alibaba/interview(知识点很全)
2.https://github.com/lzyy/iOS-Developer-Interview-Questions
3.https://github.com/ChenYilong/iOSInterviewQuestions - iOS开发笔记 - 就业指导:http://www.jianshu.com/p/c5a07e92f7e3
2018收集iOS笔试题(仅供参考学习使用)
https://www.jianshu.com/p/ac44602d7dab
阿里腾讯百度头条美团iOS面试总结
https://www.jianshu.com/p/a992b5f697ca
1.离职原因回答:寻求更大突破、 原来公司管理有问题、和自己的规划相冲突
-
你对加班的看法
这个问题并不是非要让你加班,只是想测试你是否愿意为公司奉献。参考回答:如果是工作需要我会义不容辞加班,可以全身心的投入工作。同时,我也会提高工作效率,减少不必要的加班。
3.你还有什么问题要问我的吗?
这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。最好不要问个人福利、五险一金的之类的问题。 可以这样问:
贵公司对新入公司的员工有没有什么培训项目?
贵公司的晋升机制是什么样的?
入职后参与的项目的情况了解一下?
企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。
4.自我介绍:
面试官最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等
5.你认为自己的技术能力怎么样?(保持高度自信)技术中等吧。我正努力提升自己的技术
图片.png
网友评论