- “面试,有一定的技巧在里边,但是更重要的在于平时的积累。” —— 美团面试官的一句话。
- “临阵磨枪可以让你找到一份工作,但是进入大厂的人,绝对不是临阵磨枪,刷面试题进去的。” —— 我对上边这句话的解读。
年末感言
今天是2017年12月31号, 2017年的最后一天。
昨天朋友圈突然很多90后开始晒18岁的照片,开始觉得又是朋友圈的一次流行风。直到今天早上看到新闻的推送,才意识到1999年出生的人也要满18岁了。90后一代人的时代就要"过"去。
我个人还是比较感性,对过去和儿时仍然充满着怀念,每每想到都能不禁感叹,岁月流逝,时光荏苒,每个人的人生小船都在时间的巨浪下推着向前,即使万般不情愿,也没有任何退路,直到自己的小船无法航行。 我们每个人都被时间裹挟,又被时间给予恩惠。
我觉得90后相较于80最大的区别,是这一代人可以真正算是计算机普及,随互联网成长起来的一代。现在静静的想起来,满脑子都是小学5年级放学后在隔壁小镇上老头儿开的黑网吧里和小伙伴一起打"神龙记","红警","半条命"的日子,几台破旧的win98电脑,也陪伴我度过了我小学时光的最后两年。那时候有段时间,每次去网吧,都能听到老头儿的儿子放三首歌,当时就觉得非常好听,以至于高潮时候的歌词到现在都还没有忘记,初中之后,硬是凭着歌词,知道这三首歌一首是林忆莲的《至少还有你》,一首是孙楠的《风往北吹》,另一首是群星的《让世界充满爱》。在我小学那两年乐此不疲的网吧的日子里,这三首歌记忆尤为深刻,简直成了一个符号,我想我这辈子都忘不了了。
不知道大家看了《芳华》没有,说实话,这部电影我觉得拍的太好了。关于青春,有些东西是永恒不变的,那就是美好和伤痛,欢笑和泪水,满足和遗憾。
哈哈,当然,我们还很年轻,所谓的步入"中年",也才是进入30岁。正是每一代人毕业之后,在社会上摸爬滚打,激情最满的几年。只要你想,只要你努力,仍然有在阶级未完全固化的当今,有翻身的可能。尤其是身处互联网中的你我,这种几率还会更大更快一些。
正题
2017年本来是作为过渡的一年,到明年年后开始找下家。没想到11月8号猝不及防的变故,打乱了原先的计划。主动请辞之后,赶上了北京iOS还有人要的好时候。 自己毕业的时候,内推进的上家公司,也并没有面试的经验。虽然后期招人面试了别人,但是到自己找工作的时候,自己当时面试太简单了。而且,一年前后,市场对用人的要求也更高。故此,把面试两周的经验和参考的一些比较好的文章分享给大家。
总得来说,对于三年的iOS开发,大厂对iOS底层,基础(内存),项目的性能优化和工具使用,数据结构和算法,逆向,基本上iOS除了动画之外的所有内容都会有要求。 当然,小公司当然不会要求这么多,但是我觉得还是你应该试着进大厂。 算法,逆向这些下边不涉及,你可以另行搜索。
面试题集锦推荐
1.《招聘一个靠谱的 iOS》—参考答案
2. iOS相关腾讯,阿里P6大厂面试题
3.《2017年iOS面试题总结》
4.《iOS面试汇总》
5. 《2017年5月iOS招人心得(附面试题》》
另外, 面试大厂的话,我觉得起码得把大厂的公开技术分享博客看一遍吧,比如美团点评团队的美团点评技术团队 腾讯Bugly等等。当然,即时不面试大厂,日常学习,你也应该看看这些。
部分面试题分享
- 为什么离职?
- iOS中的多线程的优缺点? NSThread,NSOperation,GCD.
- NSOperation和GCD对比,什么情况下用NSOperation做起来比较好,但是GCD做起来不太好?相反的话有吗?
- 有一个非常大的数据,不关心数组遍历的顺序,OC中有几种遍历的顺序?-> dispath_apply
- CoreData的底层实现原理,和工作流程,是怎么工作的? Ream,WCDB, FMDB这两个了解吗? SQLite优缺点对比~~
- KVO实现的底层原理。
- 你们项目里边用到了加密,你了解RSA加密方式是什么吗? 还是有MD5,和base64是什么?
- Http和 (TCP、UDP)有什么区别?然后TCP、UDP之间有什么区别?
- Socket了解多少?有应用吗?、应用场景?
- layer层和UIView的区别?
- iOS在公司项目的管理是怎么管理的?
- Self和super两个关键字介绍?
- 消息发送机制讲一下?
1.线程锁有了解吗?
2.讲一下循环引用,怎么造成的循环引用,然后怎么解决?
3.为什么__weak可以和解决循环引用? __Strong呢?
__weak和__Strong有什么区别的吗?
4.Weak在释放的时候怎么处理?会对引用计数器加一吗?
5.runtime的机制了解吗?
6.平常遇到奔溃怎么解决? 如果定位不到,怎么解决? 有没有想过怎么写一个自己的上传奔溃日志的功能。
- Block的底层实现原理?
- 代理,block,通知的怎么选择去使用?
- 怎么去检查循环引用?
- weak的实现原理,weak会计数器增加吗?assign会计数器增加吗?
- NSURLSession,NSURLConnection的区别?
- NSThread,NSOPeration和GCD怎么去选择用哪个?
- Charles抓包,https还可以吗?
- 网络通讯,TCP、UDP、Socket了解吗?
- 有用Socket做过一些东西吗?
- 网络安全方面/接口方面做过什么处理?
- 做过哪些有特色的项目? 或者项目里边哪些有特色的东西?
- UItableView做了哪些优化?
- FMDB本身读取数据,有哪些优化? /主键
- 数据库,查询语句,有没有查询比较复杂的类似于查询两个属性的和是多少这样
- 为什么做请求,用AFN代码,为啥不用其他的框架呢?
- 网络请求设置协议头,知道怎么设置吗? 比如请求图片,请求json是什么协议头?
- Get,post有什么区别?
- http和https的区别? Https: SSL
- 做网络部分数据安全处理?安全的部分,比如数据请求,Get,post,数据传输等等这些部分,怎么增加安全性? -> https不够,然后还要?
- Https苹果推荐,然后应该深入了解一下?
- NOTification是线程同步还是异步的?
- NOTification必须需要remove吗?会有什么问题吗? 比如说页面中有10个Nofication,那么当这个销毁的时候,用removeObserve移除所有的通知会有什么问题吗?还是单个一个一个的remove掉?
- block声明的时候,和使用的时候都有什么需要注意的?
- xib和StoryBoard
- const和#define的区别?
- iOS开发三年解决的一个最困难的一个问题?/ 工作中哪个代码改进或者技术实现让你很有成就感?
- 项目框架在数据层,在网络层面有封装吗? 做这个框架为了最大的问题?
- 自己做出来的这个东西,比如说你封装的这个BaseViewController,有没有评估过你这个方案做的好不好?业内大家都是怎么做的?性能怎么样? 比如说滴滴,美团,百度,今日头条的好的做法,他们是怎么做的。—》 侧重问你,反编译。黑盒试探,黑盒探测
- 你怎么确保你做出来的东西,你现在的开源社区开源的那些同类型框架要好???-》研究是哪些?
- 公司呆了两年半,然后为什么换工作? 对下一份工作有什么期望? 为什么进大的公司能够进?
- 说技术的成长,你平时会做什么事情,提升自己的技术?
8.页面上有子视图,比如说100个,上边有圆角,怎么解决卡顿?(用图片替换圆角并不是那么的好?)- 照片墙,每一个照片的尺寸不一样,100张,并且有圆角,很卡顿,那么我们怎么处理这一百张图片和一百个圆角?- coreGrahpis,coreAnaimation,coewImage这三个库的区别? 绘制圆角用的是那个库??
- 如果圆角的问题解决,但是横向很快的拖动的时候,页面要加载很多图片的时候会卡顿,怎么解决????
- 淘宝换肤的功能,主题包括哪些东西(文件,应用字体样式,小的Icon等等)等视野视野可见的元素都要换,怎么替换?
—貌似runtime不可行。- atutoRelease作用什么?只在ARC中有?在MRC中没有?为什么? atutoRelease怎么知道这个对象的生命周期可以结束,可以被释放?(怎么精确知道不能早,早了就是野指针,晚了就是内存泄露。)
- Runloop是做什么的?
- 消息机制,消息转发和谁有关系?归Runloop还是Runtime?
消息转发的三个方法,做了什么?具体说一下。- OC是动态语言,表现在哪些方面? 方法,属性,
- Runtime具体是个什么东西?他在什么时机发挥作用?
- Runtime除了消息机制意外,还是有哪些应用场景?
- weak属性有是那么特性?置为nil怎么实现的? 哈希表的key和value分别存的什么?举个例子: 比如 100个weak 指针指向一个对象A, 那么value存的是什么?
- KVO用过吗?怎么实现的?怎么在属性变化的时候拿到通知的? (A是观察者,观察属性B的变化,B的属性了,A怎么知道的?谁去通知的?如何通知的?针对NSKVONotifying_A做了哪些东西?)
- iOS消息推送怎么实现的?(我给你发个微信,微信给你发个消息) ANPS是什么?怎么做到推送实时性,立马能收到?断网的情况下能收到吗?长链接是手机上每个应用都保持和苹果服务器保持长连接吗?
消息推送在安卓手机上是怎么实现的? 安卓手机上有APNS这个东西吗?
苹果做消息推送的好处是什么?- 收到消息推送之后,怎么进行跳转到一个新页面?
- iOS10之后对消息推送做了哪些心得酷炫的东西?
24.反转一个二叉树?代码写出来 | 实现一个二叉树?
25.反转一个单链表? 代码写出来
比较好的文章
GCD中的dispatch_apply的用法及作用 http://www.cnblogs.com/denz/p/5218187.html
iOS 多线程开发GCD如何控制最大并发数 http://www.jianshu.com/p/9d5417ae07d2
《招聘一个靠谱的 iOS》—参考答案(上) https://github.com/ChenYilong/iOSInterviewQuestions/blob/master/01%E3%80%8A%E6%8B%9B%E8%81%98%E4%B8%80%E4%B8%AA%E9%9D%A0%E8%B0%B1%E7%9A%84iOS%E3%80%8B%E9%9D%A2%E8%AF%95%E9%A2%98%E5%8F%82%E8%80%83%E7%AD%94%E6%A1%88/%E3%80%8A%E6%8B%9B%E8%81%98%E4%B8%80%E4%B8%AA%E9%9D%A0%E8%B0%B1%E7%9A%84iOS%E3%80%8B%E9%9D%A2%E8%AF%95%E9%A2%98%E5%8F%82%E8%80%83%E7%AD%94%E6%A1%88%EF%BC%88%E4%B8%8A%EF%BC%89.md#9-property%E4%B8%AD%E6%9C%89%E5%93%AA%E4%BA%9B%E5%B1%9E%E6%80%A7%E5%85%B3%E9%94%AE%E5%AD%97-property-%E5%90%8E%E9%9D%A2%E5%8F%AF%E4%BB%A5%E6%9C%89%E5%93%AA%E4%BA%9B%E4%BF%AE%E9%A5%B0%E7%AC%A6
iOS面试题:腾讯二面以及参考思路 http://www.jianshu.com/p/dd17bdcff9f7
深入理解Objective-C:Category: https://tech.meituan.com/DiveIntoCategory.html
深入理解RunLoop https://blog.ibireme.com/2015/05/18/runloop/
iOS 保持界面流畅的技巧: https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/
Objective-C 对象模型: http://blog.leichunfeng.com/blog/2015/04/25/objective-c-object-model
iOS 程序执行顺序和 UIViewController 的生命周期 (整理): https://juejin.im/entry/58b93b89a22b9d005ed8c58a
iOS单例模式 or NSUserDefaults: http://yulingtianxia.com/blog/2014/04/07/iosdan-li-mo-shi-ornsuserdefaults/
Objective-C Runtime: http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/
Objective-C中的消息转发在具体实战中有什么用?: https://www.zhihu.com/question/55582425
iOS-离屏渲染详解.: http://www.jianshu.com/p/57e2ec17585b
iOS 高效添加圆角效果实战讲解: http://www.jianshu.com/p/f970872fdc22
如何正确地写好一个界面:http://oncenote.com/2015/12/08/How-to-build-UI/、
绘制像素到屏幕上: https://objccn.io/issue-3-1/
UIKit性能调优实战讲解: http://www.jianshu.com/p/619cf14640f3
内存恶鬼drawRect: http://bihongbo.com/2016/01/03/memoryGhostdrawRect/
UITableView的优化: http://www.jianshu.com/p/93085c0de4c9
Core Graphics快速入门——从一行代码说起: http://blog.csdn.net/abc649395594/article/details/46386219
iOS Core Graphics基础入门(3): http://blog.csdn.net/MerryGOOT/article/details/51933899
iOS之使用NSInvocation调用方法: http://www.jianshu.com/p/e24b3420f1b4
笔试面试知识整理:https://hit-alibaba.github.io/interview/iOS/ObjC-Basic/Block.html
看完还不懂HTTPS我直播吃翔:http://www.jianshu.com/p/ca7df01a9041
iOS中为什么非要用runtime才能在分类中扩展属性呢 http://blog.csdn.net/u014041012/article/details/57406196
如何正确使用const,static,extern: http://www.jianshu.com/p/2fd58ed2cf55
HTTP协议中GET和POST方法的区别: 1) https://www.zhihu.com/question/28586791 2) https://sunshinevvv.coding.me/blog/2017/02/09/HttpGETv.s.POST/
NSURLSession与NSURLConnection区别: http://www.jianshu.com/p/056b1817d25a
清晰理解Objective-C元类: http://blog.csdn.net/beclosedtomyheart/article/details/50164353
iOS 之GCD串行和并发队列的理解: https://www.cnblogs.com/Ohero/p/4727000.html
2017年iOS面试题总结:http://www.jianshu.com/p/f9eb6b315c08
基础知识总结(一): http://www.jianshu.com/p/5bec0aeb3137
Swift与OC真正去理解Block解决循环引用的技巧: http://www.code4app.com/blog-864937-1150.html
runtime详解: http://www.jianshu.com/p/46dd81402f63
招一个靠谱iOS: https://dayon.gitbooks.io/-ios/content/chapter11.html
iOS 中 weak 的实现原理: http://www.jianshu.com/p/2bf505398f51
iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析): http://www.cocoachina.com/ios/20170328/18962.html
iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析): http://www.jianshu.com/p/13c4fb1cedea:
socket编程: https://segmentfault.com/q/1010000006771916
面试时,你被问到过 TCP/IP 协议吗?: https://juejin.im/post/58e36d35b123db15eb748856
不再安全的 OSSpinLock: https://blog.ibireme.com/2016/01/16/spinlock_is_unsafe_in_ios/
YYCache 设计思路: https://blog.ibireme.com/2015/10/26/yycache/
loadView,viewDidLoad及viewDidUnload: http://www.jianshu.com/p/adfdd0fdb1f5
Runtime之Method Swizzling: http://www.jianshu.com/p/934e6a98afba
Realm、WCDB与SQLite移动数据库性能对比测试: http://blog.csdn.net/cloudox_/article/details/75012746
NS_ENUM 和 NS_OPTIONS 之间的差异是什么?: http://www.itstrike.cn/Question/dc2f1712-927e-444f-9fdf-e4e51e4a103d.html
地理编码的定义: https://www.cnblogs.com/xiwang/p/5831782.html
iOS安全开发防护摘要: https://zhuanlan.zhihu.com/iOSRe/19646002
HTTP 是基于 TCP 还是 UDP 的?:https://www.zhihu.com/question/20085992
RunLoop总结:RunLoop的应用场景1,2,3,4,5:
https://www.jianshu.com/p/fee0c5155b8e
iOS循环引用: https://www.jianshu.com/p/13313baac740
iOS中的SEl和IMP到底是什么: https://www.jianshu.com/p/4a09d5ebdc2c
传输层TCP和UDP的区别分析与应用场景
: http://blog.csdn.net/u013777351/article/details/49226101
iOS中为什么非要用runtime才能在分类中扩展属性呢 https://slpowercoder.github.io/2017/02/11/iOS%E4%B8%AD%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9D%9E%E8%A6%81%E7%94%A8runtime%E6%89%8D%E8%83%BD%E5%9C%A8%E5%88%86%E7%B1%BB%E4%B8%AD%E6%89%A9%E5%B1%95%E5%B1%9E%E6%80%A7%E5%91%A2/
iOS-内存管理之内存泄露爬坑记QAQ
: http://lysongzi.com/2016/07/16/iOS-%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E4%B9%8B%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2%E7%88%AC%E5%9D%91%E8%AE%B0QAQ/
NSTimer定时器进阶——详细介绍,循环引用分析与解决
NSRunLoop原理详解——不再有盲点
各种线程锁: https://www.jianshu.com/p/35dd92bcfe8c
iOS底层-KVC使用实践以及实现原理: https://www.jianshu.com/p/fbd1e7c93fd0
iOS开发 -- KVO的实现原理与具体应用
: https://www.jianshu.com/p/e59bb8f59302
RunLoop总结:RunLoop 与GCD 、Autorelease Pool之间的关系: https://www.jianshu.com/p/e259bf7ab297
iOS 中 weak 的实现原理: https://www.jianshu.com/p/2bf505398f51
iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析): https://www.jianshu.com/p/13c4fb1cedea
loadView,viewDidLoad及viewDidUnload: https://www.jianshu.com/p/adfdd0fdb1f5
【如何正确使用const,static,extern】|那些人追的干货: https://www.jianshu.com/p/2fd58ed2cf55
轻松学习之一--Objective-C消息转发: https://www.jianshu.com/p/1bde36ad9938
iOS之使用NSInvocation调用方法:https://www.jianshu.com/p/e24b3420f1b4
[iOS 知识总结二] 为什么说Objective-C 是一门动态的语言: https://www.jianshu.com/p/7b395a8c3bd3
杂谈: MVC/MVP/MVVM: https://www.jianshu.com/p/eedbc820d40a
多线程编程1-NSThread
多线程编程2-NSOperation
多线程编程3 - NSOperationQueue . http://blog.csdn.net/q199109106q/article/details/8566222
多线程编程4 - GCD http://blog.csdn.net/q199109106q/article/details/8566300
[爆栈热门 iOS 问题] atomic 和 nonatomic 有什么区别? https://www.baidu.com/link?url=C6q8vEXNajRNph60ustwwYuv6Q7IhSm9cCP5G3OQIDSNbEgTk4AII9ui5JO250l2&wd=&eqid=e8ff62480002d96a000000045a048728
iOS基础之 UIKit框架 全解析 . https://www.jianshu.com/p/a0e0075a75fe
离屏渲染: http://blog.csdn.net/qq_29846663/article/details/68960512
iOS-离屏渲染详解. https://www.jianshu.com/p/57e2ec17585b
@synthesize和@dynamic区别
Swift与OC真正去理解Block解决循环引用的技巧https://www.jianshu.com/p/bf2b8f278a81
用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?: https://www.jianshu.com/p/f974cf4891ac
问题[※※]:objc中向一个nil对象发送消息将会发生什么? https://www.jianshu.com/p/b7cda433e4f5
__weak修饰详解及解决循环引用使用 https://www.jianshu.com/p/a252fdd42603
iOS中block的循环引用问题: https://www.jianshu.com/p/492be28d63c4
block 循环引用问题的一点发散 https://www.swiftcafe.io/2017/02/02/weak-block/
iOS | 小心NSTimer中的循环引用: https://www.jianshu.com/p/2fe076e5e255
iOS 循环引用的四种情况 https://www.jianshu.com/p/13313baac740
通俗大白话来理解TCP协议的三次握手和四次分手 https://github.com/jawil/blog/issues/14
Runloop笔试面试知识整理 https://hit-alibaba.github.io/interview/iOS/ObjC-Basic/Runloop.html
清晰理解Objective-C元类 http://blog.csdn.net/beclosedtomyheart/article/details/50164353
深入理解Objective-C:Category https://tech.meituan.com/DiveIntoCategory.html
高效的圆角解决办法
iOS的系统层级结构和相关的框架 http://blog.csdn.net/lxl_815520/article/details/51172917 https://www.jianshu.com/p/c40f4d43adb7
iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析) https://www.jianshu.com/p/13c4fb1cedea
iOS--KVO的实现原理与具体应用
Cocoa Touch 框架 https://www.jianshu.com/p/a26fcbb3281a
iOS底层-KVC使用实践以及实现原理 https://www.jianshu.com/p/fbd1e7c93fd0
iOS 中几种常用的锁总结 https://www.jianshu.com/p/1e59f0970bf5
iOS多线程-各种线程锁的简单介绍 https://www.jianshu.com/p/35dd92bcfe8c
不再安全的 OSSpinLock https://blog.ibireme.com/2016/01/16/spinlock_is_unsafe_in_ios/
NSCache优于NSDictionary的几点? http://blog.csdn.net/bowei1105/article/details/73320997
构建缓存时选用NSCache而非NSDictionary http://ju.outofmemory.cn/entry/236986
NSRunLoopCommonModes和Timer https://www.jianshu.com/p/360156006195
探索 Block (一) (手把手讲解Block 底层实现原理)
看完还不懂HTTPS我直播吃翔 https://www.jianshu.com/p/ca7df01a9041
iOS,什么应用或者场景下需要使用socket编程?
HTTP协议中GET和POST方法的区别 https://sunshinevvv.coding.me/blog/2017/02/09/HttpGETv.s.POST/
nsnotification是线程同步的吗?https://www.google.com.hk/search?safe=strict&hl=zh-CN&source=hp&ei=4o4VWvCFDIK90AS-ko3gDw&q=nsnotification%E6%98%AF%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E7%9A%84%E5%90%97%EF%BC%9F&oq=nsnotification%E6%98%AF%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E7%9A%84%E5%90%97%EF%BC%9F&gs_l=psy-ab.3...1179.13832.0.14184.52.36.0.0.0.0.505.4677.3-8j3j1.12.0....0...1c.1j4.64.psy-ab..41.5.1826...0.0.AmLNnbOz4YE
https://southpeak.github.io/2015/03/14/nsnotification-and-multithreading/
iOS中的SEl和IMP到底是什么 https://www.jianshu.com/p/4a09d5ebdc2c
备忘 (你可以忽略)
- nssring,nsarray的属性用copy,就相当于是把传入的数据copy了一份。传入的数据在别处修改的时候,不会影响属性的变化。??
属性加property和 [mutableArray copy]这种不是一个意思
property+copy是出一个不可变的数组。
iOS开发 深拷贝与浅拷贝 https://www.jianshu.com/p/f01d490401f9
交流
希望能和大家交流技术
Blog:http://www.lilongcnc.cc