ios面试心得
第一部分:面试题
注意,下面这些题只是我准备的题库。在实际面试的时候我会根据面试者的水平抽出相应的题目来出的。
技术
基础
为什么说Objective-C是一门动态的语言?
讲一下MVC和MVVM,MVP?
为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?
属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的?
属性的默认关键字是什么?
NSString为什么要用copy关键字,如果用strong会有什么问题?(注意:这里没有说用strong就一定不行。使用copy和strong是看情况而定的)
如何令自己所写的对象具有拷贝功能?
可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?
为什么IBOutlet修饰的UIView也适用weak关键字?
nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?
UICollectionView自定义layout如何实现?
用StoryBoard开发界面有什么弊端?如何避免?
进程和线程的区别?同步异步的区别?并行和并发的区别?
线程间通信?
GCD的一些常用的函数?(group,barrier,信号量,线程同步)
如何使用队列来避免资源抢夺?
数据持久化的几个方案(fmdb用没用过)
说一下AppDelegate的几个方法?从后台到前台调用了哪些方法?第一次启动调用了哪些方法?从前台到后台调用了哪些方法?
NSCache优于NSDictionary的几点?
知不知道Designated Initializer?使用它的时候有什么需要注意的问题?
实现description方法能取到什么效果?
objc使用什么机制管理对象内存?
中级
Block
block的实质是什么?一共有几种block?都是什么情况下生成的?
为什么在默认情况下无法修改被block捕获的变量? __block都做了什么?
模拟一下循环引用的一个情况?block实现界面反向传值如何实现?
Runtime
objc在向一个对象发送消息时,发生了什么?
什么时候会报unrecognized selector错误?iOS有哪些机制来避免走到这一步?
能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?
runtime如何实现weak变量的自动置nil?
给类添加一个属性后,在类结构体里哪些元素会发生变化?
RunLoop
runloop是来做什么的?runloop和线程有什么关系?主线程默认开启了runloop么?子线程呢?
runloop的mode是用来做什么的?有几种mode?
为什么把NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环以后,滑动scrollview的时候NSTimer却不动了?
苹果是如何实现Autorelease Pool的?
类结构
isa指针?(对象的isa,类对象的isa,元类的isa都要说)
类方法和实例方法有什么区别?
介绍一下分类,能用分类做什么?内部是如何实现的?它为什么会覆盖掉原来的方法?
运行时能增加成员变量么?能增加属性么?如果能,如何增加?如果不能,为什么?
objc中向一个nil对象发送消息将会发生什么?(返回值是对象,是标量,结构体)
高级
UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染)
有没有用过运行时,用它都能做什么?(交换方法,创建类,给新创建的类增加方法,改变isa指针)
看过哪些第三方框架的源码?都是如何实现的?(如果没有,问一下多图下载的设计)
SDWebImage的缓存策略?
AFN为什么添加一条常驻线程?
KVO的使用?实现原理?(为什么要创建子类来实现)
KVC的使用?实现原理?(KVC拿到key以后,是如何赋值的?知不知道集合操作符,能不能访问私有属性,能不能直接访问_ivar)
项目
有已经上线的项目么?
项目里哪个部分是你完成的?(找一个亮点问一下如何实现的)
开发过程中遇到过什么困难,是如何解决的?
学习
遇到一个问题完全不能理解的时候,是如何帮助自己理解的?举个例子?
有看书的习惯么?最近看的一本是什么书?有什么心得?
有没有使用一些笔记软件?会在多平台同步以及多渠道采集么?(如果没有,问一下是如何复习知识的)
有没有使用清单类,日历类的软件?(如果没有,问一下是如何安排,计划任务的)
平常看博客么?有没有自己写过?(如果写,有哪些收获?如果没有写,问一下不写的原因)
有关技术类的问题可以在评论区留言,我重点说一下这轮面试的心得和体会。
第二部分:心得
面试者千万不要答非所问
如果让我选一个让面试官觉得印象减分的点,答非所问应该是首当其冲的。
面试者一定要知道面试官问的点是什么。
如果在知道面试官问的点,但是自己却不知道答案的时候,可以提出思路,思考过程。其实有几次面试者在我的引导下很容易就把答案说出来了,认清问题的点是解决问题的一半。
如果没有理解好面试官问的问题,一定要事先和面试官确认好。
其实这也属于沟通能力的一点:如果不能保证和对方沟通内容的一致性,自己弄个filter把对方的话都曲解了,以后合作的时候又怎能保证沟通好呢?
面试者一定不要来得太早
这里说的来得太早,是来得太早并告知面试官自己已经来了。
因为在约定好的面试时间之前,往往面试官还有别的事情在做,如果他知道你来的很早,就可能会扰乱他的计划。有一位面试者早来了1个小时,结果把我们的面试计划打乱了,而且正好是我的第一次面试,所以真的是有点措手不及。
求职者和公司定下来的时间属于一个约定,约定是要遵守的。而且遵守约定同样也是对对方的尊重。如果入职之前都没能把握好,入职之后又如何能保证把握好呢?
实践与理论的脱节,让人很不安
能做出来项目,但是基础知识很薄弱
几乎每位面试者都能给我展示他做的一些app,虽然没有很难的功能,但也都算是有板有眼。可让我比较意外的是,虽然能做出有模有样的app,但当我问到很多基础的问题的时候却答不上来,比如属性和成员变量的区别,属性的默认关键字,Designated Initializer的概念等等。。
这不禁让我怀疑他们的代码的稳定性,更怀疑他们治学,做技术的态度。
虽说技术活需要实践的磨练,但和理论脱节的技术是钻不深的。可能有人会说我的面试题过于理论,实际中用不到。但有些时候,在实际开发中遇到的一些问题往往就是因为一些很基本的东西没有弄清导致的,相信你我都深有体会。
而且,我们都知道技术的提升是阶梯式的。什么是阶梯式的呢?就是可能我们会有比较长的时间才会有一个突破。但这个突破来的有多快,提升的有多高,是跟平时每个细小知识点的掌握程度是分不开的。
因为知识也是有复利效应的,准确地掌握越多的知识点,在以后的学习过程中,这些知识点相互之间想成的积极作用会越来越大:对新知识的理解更快,对问题的定位会更准,解决问题的方法也会越多。相反,如果你每个问题都得过且过,这些结果的复合作用就会导致你今后很难会有所突破了。
真的可能被简历骗到
上家的薪资很高,但是实际能力很不符
有一位面试者在简历里号称上一个工作拿了15k,但当我问到NSString属性使用strong还是copy作为关键字的时候他却说是strong,甚至连delegate都拿不准使用strong还是weak,我就有些奇怪了。
看技术博客和技术书籍的人还是很少的
只依赖于公司里的项目应该是不够的,毕竟不是每个公司里都有上乘的代码和技术
面试了大概20个人,但是真正有看过技术博客和技术书籍的真的不多,更别提Github了。不过其中一位面试通过者是有github账号的,并且有几个小项目,印象非常好,加了不少分。
我相信在这一行的未来,简历里面github账号和博客绝对会越来越受重视:
一方面简历真的是应接不暇,而且同时千篇一律,很难找出亮点。
另一方面,如果可以把自己的代码和成长展示给招聘公司,就会使得自己的能力在公司面前变得更加纯粹和透明,更有助于找到适合你自己的公司。
ios面试心得的更多相关文章
- 一位 iOS 大牛的 BAT面试心得与经验总结,送给正在迷茫 的你!
前言: 目前形势,参加到 iOS 队伍的人是越来越多,可以说是已经达到了供过于求的地步了. 今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,之前实习的时候就想着写一篇面经,后来忙就给忘了, ...
- iOS面试高薪,进阶 你会这些呢嘛?(持续更新中)
这个栏目将持续更新--请iOS的小伙伴关注!做这个的初心是希望能巩固自己的基础知识,当然也希望能帮助更多的开发者! 基础>分析>总结 面试 iOS常见基础面试题(附参考答案) iOS底层原 ...
- ios面试技术要点
iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...
- iOS 面试基础题目
转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
- IOS面试攻略
IOS面试攻略(1.0) 2013-10-13 20:58:09| 分类: IOS面试 | 标签:ios知识点总汇 ios面试 |举报|字号 订阅 来自:伊甸网 @ 看到这个关键字,我 ...
- C C++ OC iOS面试重点问题(一)
C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量? ...
- IOS面试问题总结
IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报 目录(?)[+] 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...
- 十个iOS面试问题
十个iOS面试问题 十个iOS面试问题.不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会. ...
随机推荐
- 数据流分段下载(Http之 Range)
public FileStreamResult StreamUploadedSongs(int id) { byte[] song = db.UploadedSongs.Where(x => x ...
- android app 流量统计
https://blog.csdn.net/yzy9508/article/details/48300265 | android 数据流量统计 - CSDN博客https://blog.csdn.ne ...
- Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
今天在对 Ubuntu 进行更新源的时候,突然出现下列错误(为了省事,更新前直接切换了 root 用户) 上网查了一下,网上解释说应该是之前那个更新被强制取消的问题,进程仍然还在.用这个命令查看一下: ...
- LICEcap方便快捷制作gif图片的工具
总是看见别人的博客里面动态的小图片,是不是有种冲动自己也想搞,但是就是不知道咋搞,这里简单介绍一款很实用的制作gif的软件. LICEcap的网址:http://www.cockos.com/lice ...
- springbank 开发日志 springbank是如何注册handler的
这要从DefaultAnnotationHandlerMapping这个类说起,该类被@Component注释,该类被Spring IOC容器实例化之后,将会执行其initApplicationCon ...
- Mysql学习(一)添加一个新的用户并用golang操作Mysql
Mysql添加一个新的用户并赋予权限 添加一个自己的用户到mysql 首先我们需要先用root用户登录mysql,但是刚安装完没有密码,我们先跳过密码 ailumiyana@ailumiyana:~/ ...
- ios技术篇:导航栏push遵循的三个规则
1.如果B视图有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮 2.如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自 ...
- xpath注入详解
0x01 什么是xpath XPath 即为 XML 路径语言,是 W3C XSLT 标准的主要元素,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言. XPath 基于 ...
- java 利用Future做超时任务处理
Callable<String> task = new Callable<String>() { @Override public String call() throws E ...
- Alpha冲刺随笔五:第五天
课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(十天冲刺) 团队名称:葫芦娃队 作业目标:在十天冲刺里对每天的任务进行总结. 随笔汇总:https://www.cnblogs ...