第一部分:面试题

 

注意,下面这些题只是我准备的题库。在实际面试的时候我会根据面试者的水平抽出相应的题目来出的。

技术

基础

 

  1. 为什么说Objective-C是一门动态的语言?

  2. 讲一下MVC和MVVM,MVP?

  3. 为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?

  4. 属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的?

  5. 属性的默认关键字是什么?

  6. NSString为什么要用copy关键字,如果用strong会有什么问题?(注意:这里没有说用strong就一定不行。使用copy和strong是看情况而定的)

  7. 如何令自己所写的对象具有拷贝功能?

  8. 可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?

  9. 为什么IBOutlet修饰的UIView也适用weak关键字?

  10. nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?

  11. UICollectionView自定义layout如何实现?

  12. 用StoryBoard开发界面有什么弊端?如何避免?

  13. 进程和线程的区别?同步异步的区别?并行和并发的区别?

  14. 线程间通信?

  15. GCD的一些常用的函数?(group,barrier,信号量,线程同步)

  16. 如何使用队列来避免资源抢夺?

  17. 数据持久化的几个方案(fmdb用没用过)

  18. 说一下AppDelegate的几个方法?从后台到前台调用了哪些方法?第一次启动调用了哪些方法?从前台到后台调用了哪些方法?

  19. NSCache优于NSDictionary的几点?

  20. 知不知道Designated Initializer?使用它的时候有什么需要注意的问题?

  21. 实现description方法能取到什么效果?

  22. objc使用什么机制管理对象内存?

 

中级

Block

 

  1. block的实质是什么?一共有几种block?都是什么情况下生成的?

  2. 为什么在默认情况下无法修改被block捕获的变量? __block都做了什么?

  3. 模拟一下循环引用的一个情况?block实现界面反向传值如何实现?

 

Runtime

 

  1. objc在向一个对象发送消息时,发生了什么?

  2. 什么时候会报unrecognized selector错误?iOS有哪些机制来避免走到这一步?

  3. 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?

  4. runtime如何实现weak变量的自动置nil?

  5. 给类添加一个属性后,在类结构体里哪些元素会发生变化?

 

RunLoop

 

  1. runloop是来做什么的?runloop和线程有什么关系?主线程默认开启了runloop么?子线程呢?

  2. runloop的mode是用来做什么的?有几种mode?

  3. 为什么把NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环以后,滑动scrollview的时候NSTimer却不动了?

  4. 苹果是如何实现Autorelease Pool的?

 

类结构

 

  1. isa指针?(对象的isa,类对象的isa,元类的isa都要说)

  2. 类方法和实例方法有什么区别?

  3. 介绍一下分类,能用分类做什么?内部是如何实现的?它为什么会覆盖掉原来的方法?

  4. 运行时能增加成员变量么?能增加属性么?如果能,如何增加?如果不能,为什么?

  5. objc中向一个nil对象发送消息将会发生什么?(返回值是对象,是标量,结构体)

 

高级

 

  1. UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染)

  2. 有没有用过运行时,用它都能做什么?(交换方法,创建类,给新创建的类增加方法,改变isa指针)

  3. 看过哪些第三方框架的源码?都是如何实现的?(如果没有,问一下多图下载的设计)

  4. SDWebImage的缓存策略?

  5. AFN为什么添加一条常驻线程?

  6. KVO的使用?实现原理?(为什么要创建子类来实现)

  7. KVC的使用?实现原理?(KVC拿到key以后,是如何赋值的?知不知道集合操作符,能不能访问私有属性,能不能直接访问_ivar)

 

项目

 

  1. 有已经上线的项目么?

  2. 项目里哪个部分是你完成的?(找一个亮点问一下如何实现的)

  3. 开发过程中遇到过什么困难,是如何解决的?

 

学习

 

  1. 遇到一个问题完全不能理解的时候,是如何帮助自己理解的?举个例子?

  2. 有看书的习惯么?最近看的一本是什么书?有什么心得?

  3. 有没有使用一些笔记软件?会在多平台同步以及多渠道采集么?(如果没有,问一下是如何复习知识的)

  4. 有没有使用清单类,日历类的软件?(如果没有,问一下是如何安排,计划任务的)

  5. 平常看博客么?有没有自己写过?(如果写,有哪些收获?如果没有写,问一下不写的原因)

有关技术类的问题可以在评论区留言,我重点说一下这轮面试的心得和体会。

第二部分:心得

面试者千万不要答非所问

如果让我选一个让面试官觉得印象减分的点,答非所问应该是首当其冲的。

面试者一定要知道面试官问的点是什么。

  • 如果在知道面试官问的点,但是自己却不知道答案的时候,可以提出思路,思考过程。其实有几次面试者在我的引导下很容易就把答案说出来了,认清问题的点是解决问题的一半。

  • 如果没有理解好面试官问的问题,一定要事先和面试官确认好。

其实这也属于沟通能力的一点:如果不能保证和对方沟通内容的一致性,自己弄个filter把对方的话都曲解了,以后合作的时候又怎能保证沟通好呢?

面试者一定不要来得太早

这里说的来得太早,是来得太早并告知面试官自己已经来了。

因为在约定好的面试时间之前,往往面试官还有别的事情在做,如果他知道你来的很早,就可能会扰乱他的计划。有一位面试者早来了1个小时,结果把我们的面试计划打乱了,而且正好是我的第一次面试,所以真的是有点措手不及。

求职者和公司定下来的时间属于一个约定,约定是要遵守的。而且遵守约定同样也是对对方的尊重。如果入职之前都没能把握好,入职之后又如何能保证把握好呢?

实践与理论的脱节,让人很不安

能做出来项目,但是基础知识很薄弱

几乎每位面试者都能给我展示他做的一些app,虽然没有很难的功能,但也都算是有板有眼。可让我比较意外的是,虽然能做出有模有样的app,但当我问到很多基础的问题的时候却答不上来,比如属性和成员变量的区别,属性的默认关键字,Designated Initializer的概念等等。。

这不禁让我怀疑他们的代码的稳定性,更怀疑他们治学,做技术的态度。

虽说技术活需要实践的磨练,但和理论脱节的技术是钻不深的。可能有人会说我的面试题过于理论,实际中用不到。但有些时候,在实际开发中遇到的一些问题往往就是因为一些很基本的东西没有弄清导致的,相信你我都深有体会。

而且,我们都知道技术的提升是阶梯式的。什么是阶梯式的呢?就是可能我们会有比较长的时间才会有一个突破。但这个突破来的有多快,提升的有多高,是跟平时每个细小知识点的掌握程度是分不开的。

因为知识也是有复利效应的,准确地掌握越多的知识点,在以后的学习过程中,这些知识点相互之间想成的积极作用会越来越大:对新知识的理解更快,对问题的定位会更准,解决问题的方法也会越多。相反,如果你每个问题都得过且过,这些结果的复合作用就会导致你今后很难会有所突破了。

真的可能被简历骗到

上家的薪资很高,但是实际能力很不符

有一位面试者在简历里号称上一个工作拿了15k,但当我问到NSString属性使用strong还是copy作为关键字的时候他却说是strong,甚至连delegate都拿不准使用strong还是weak,我就有些奇怪了。

看技术博客和技术书籍的人还是很少的

只依赖于公司里的项目应该是不够的,毕竟不是每个公司里都有上乘的代码和技术

面试了大概20个人,但是真正有看过技术博客和技术书籍的真的不多,更别提Github了。不过其中一位面试通过者是有github账号的,并且有几个小项目,印象非常好,加了不少分。

我相信在这一行的未来,简历里面github账号和博客绝对会越来越受重视:

    • 一方面简历真的是应接不暇,而且同时千篇一律,很难找出亮点。

    • 另一方面,如果可以把自己的代码和成长展示给招聘公司,就会使得自己的能力在公司面前变得更加纯粹和透明,更有助于找到适合你自己的公司。

ios面试心得的更多相关文章

  1. 一位 iOS 大牛的 BAT面试心得与经验总结,送给正在迷茫 的你!

    前言: 目前形势,参加到 iOS 队伍的人是越来越多,可以说是已经达到了供过于求的地步了. 今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,之前实习的时候就想着写一篇面经,后来忙就给忘了, ...

  2. iOS面试高薪,进阶 你会这些呢嘛?(持续更新中)

    这个栏目将持续更新--请iOS的小伙伴关注!做这个的初心是希望能巩固自己的基础知识,当然也希望能帮助更多的开发者! 基础>分析>总结 面试 iOS常见基础面试题(附参考答案) iOS底层原 ...

  3. ios面试技术要点

    iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...

  4. iOS 面试基础题目

    转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...

  5. iOS面试贴士

    iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...

  6. IOS面试攻略

    IOS面试攻略(1.0) 2013-10-13 20:58:09|  分类: IOS面试 |  标签:ios知识点总汇  ios面试  |举报|字号 订阅     来自:伊甸网 @ 看到这个关键字,我 ...

  7. C C++ OC iOS面试重点问题(一)

    C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量?  ...

  8. IOS面试问题总结

    IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报   目录(?)[+]   通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...

  9. 十个iOS面试问题

    十个iOS面试问题 十个iOS面试问题.不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会. ...

随机推荐

  1. [转] equals和==的区别小结

    ==: == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象.比较的是真正意义上的指针操作. 1.比较的是操作符两端的操作数是否是同一个对象 ...

  2. POJ 2010 Moo University - Financial Aid (优先队列)

    题意:从C头奶牛中招收N(奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新生所需资助不超过F,同时得分中位数最高.求此中位数. 思路: 先将奶牛排序,考虑每个奶牛作为中位数时,比它 ...

  3. JDK1.7+Tomcat6.0+MyEclipse8.6在win7下的安装与配置

    http://wenku.baidu.com/view/4f0bef02192e45361066f548.html

  4. BZOJ1592 POJ3666 [Usaco2008 Feb]Making the Grade 路面修整 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3666 题目传送门 - BZOJ1592 题意概括 整条路被分成了N段,N个整数A_1, ... , ...

  5. Java中测试StringBuilder、StringBuffer、String在字符串拼接上的性能

    应一个大量字符串拼接的任务 测试一下StringBuilder.StringBuffer.String在操作字符串拼接时候的性能 性能上理论是StringBuilder  >  StringBu ...

  6. windows下端口映射(端口转发)

    windows下端口映射(端口转发) 转载: https://blog.csdn.net/i1j2k3/article/details/70228043 本文是对网文的归纳整理,算不上原创,摸索过程亲 ...

  7. 一步一步写数据结构(二叉树的建立和遍历,c++)

    简述: 二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用. 二叉树有很多种类,比如线索二叉树,二叉排序树,平衡二叉树等,本文写的是最基础最简单的二叉树. 思路: ...

  8. HBase 开发环境搭建(Eclipse\MyEclipse + Maven)

    写在前面的话 首先, 搭建基于MyEclipse的Hadoop开发环境 相信,能看此博客的朋友,想必是有一定基础的了.我前期写了大量的基础性博文.可以去补下基础. 比如, CentOS图形界面下如何安 ...

  9. 【Java并发核心七】计划任务ScheduleExecutorService

    Java中定时任务Timer工具类提供了计划任务的实现,但是Timer工具类是以队列的方式来管理线程的,并不是以线程池的方式,这样在高并发的情况下,运行效率会有点低. ScheduleExecutor ...

  10. 算法进阶面试题03——构造数组的MaxTree、最大子矩阵的大小、2017京东环形烽火台问题、介绍Morris遍历并实现前序/中序/后序

    接着第二课的内容和带点第三课的内容. (回顾)准备一个栈,从大到小排列,具体参考上一课.... 构造数组的MaxTree [题目] 定义二叉树如下: public class Node{ public ...