原文地址   点击打开链接

就在上个月中旬,技术老大让我招两个1-2年的iOS开发,把简历的筛选和第一轮技术面试的任务交给了我。

从筛选第一份简历,准备面试题,到成功招到两个人一共花了两个星期多一点,总体来说还是比较顺利的。两位通过者都比较稳重踏实,而且对技术也比较有追求。这也可能和我筛选简历比较谨慎有关系,这次筛选简历所花费的精力是不比面试花费的少的。

虽然时间跨度不是很长,但是毕竟是第一次,所以有些感触,想总结出来分享给大家。这篇总结分为两个部分:

  • 第一部分是我当时准备的面试题

  • 第二部分是我的心得

我重点在本文的第二部分说一下这次面试别人的心得体会。而关于第一部分的面试题,文中不提供答案(因为不是本文的重点),有想讨论的欢迎在评论区留言。

第一部分:面试题

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

技术

基础

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.平常看博客么?有没有自己写过?(如果写,有哪些收获?如果没有写,问一下不写的原因)

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

第二部分:心得

面试者千万不要答非所问

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

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

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

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

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

面试者一定不要来得太早

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

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

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

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

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

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

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

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

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

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

真的可能被简历骗到

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

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

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

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

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

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

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

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

以上就是我上个月的面试心得,希望大家多交流,有说的不对的地方还请多指正。

2017 iOS最新面试题汇总(二)相关推荐

  1. 面试题汇总二 Java 多线程篇

    前言 题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题 ...

  2. 2021年最新PHP 面试、笔试题汇总(二)

    二十一.语句include和require的区别 require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错 ...

  3. 2023面试题汇总二

    一.CSS面试题 1. 清除浮动的方式有哪些? 为什么要清除浮动?因为浮动的盒子脱离标准流,如果父盒子没有设置高度的话,下面的盒子就会撑上来. 额外标签法(在最后一个浮动标签后,新加一个标签,给其设置 ...

  4. 网络/运维工程面试题汇总二

    10.简述NAT地址转换 答:有三种类型:静态转换.动态转换.端口复用(PAT).其中端口复用最为常见,一般配置在公司的接入路由器上. 11.内网有60台主机(其中还有服务器),只有5个公网IP,怎么 ...

  5. 22个关于ES6的最新面试题汇总整理

    作者:StevenLikeWatermelon https://juejin.cn/post/6844903734464495623 近期在复习ES6,针对ES6新的知识点,以问答形式整理一个全面知识 ...

  6. 【总结】PHP常见面试题汇总(二)。。。

    //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1,2,"a", ...

  7. 困兽之斗--乐视2017暑期实习生笔试题(二)

    经过深思熟虑之后,小贱君打算去M国闯一闯,那是一个古老的东方国度,传说有很多高阶魔法师,他想成为一名伟大的魔法师,将来征服星辰大海. 经过千辛万苦,小贱君终于来到了M国,不幸的是刚进城门小贱君就被M国 ...

  8. ios中级面试题(二)

    1.如何追踪app崩溃率,如何解决线上闪退 当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈跟踪信息和 ...

  9. 阿里资深架构师整理2022年秋招最新面试题汇总:208页核心体系

    进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里.美团.滴滴.头条等大厂面试大全其中概括的知识点有:Java基础.spring.springmvc.springboot. ...

最新文章

  1. 升级版记事本 Notepad++
  2. qt 在点击菜单下的动作之后获取该菜单的名称
  3. Hive集成HBase详解
  4. win32开发(定时器)
  5. 人脸对齐(八)--LBF算法
  6. jQuery基础(jQuery概念,jQuery与js入口函数的区别及其入口函数的其他写法和冲突问题)
  7. 二进制安装kubernetes1.14.1
  8. 进销存excel_Excel进销存管理系统!这6套不同风格的版本,财会可直接套用
  9. 主成分分析与因子分析
  10. openerp环境的搭建
  11. js解决动态绑定事件时不能传参的问题
  12. java 上位机 socket_通讯编程上位机软件实现(SOCKET)——第二回
  13. 小练习 通过csv模块读取csv文件
  14. Images to Video(图片转视频软件)v4.0官方版
  15. 嵌入式 使用mp4v2将H264+AAC合成mp4文件
  16. iOS逆向 开发工具
  17. 从材料硕士到算法工程师的转行之路,有三不建议
  18. 利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用)
  19. 所有人都需要的个人软实力(深度好文)
  20. 知乎 android studio配置svn

热门文章

  1. 基于JAVA校园疫情信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  2. toAppendStream doesn‘t support consuming update and delete changes which is produced by node XXX
  3. unpacking of archive failed: cpio: lstat failed - Not a directory
  4. java编程技术交流
  5. C语言中字符数组的初始化与赋值,字符串相关函数
  6. 2023复旦大学计算机考研经验分享
  7. 虚实交融的元宇宙图景中社会科学的跃升
  8. keras:Convolution2D与Conv2D
  9. Java类的卸载机制
  10. 【PCB专题】PCB 阻焊层(solder mask)与助焊层(paste mask)有什么区别