GithubHelp home page GithubHelp logo

ios-developer-interview-questions-solutions's Introduction

iOS 开发面试问题

根据iOS开发面试问题 写了部分答案。

Update: 20180228 突然发现几年前创建了这个Repo,还是更新一下吧,Sigh.

面试 iOS 开发时,切入点很重要,不同的切入点会导致不同的结果,没有找到合适的切入点也无法对应聘者有一个全面的了解。所以这份面试问题列表更多的是提供方向,没有固定的答案,而且可以根据应聘者的回应引出更多有意思深层次的讨论。

如果有不错的问题,欢迎 Pull Request :)

一般性问题

  • 最近这两天你有学到什么知识/技能么?
  • 最近有做过比较酷或者比较有挑战的项目么?
  • 最近看过的书/文章有哪些?
  • 如何向一个只接触过互联网的孩子解释「电视」?
  • 为什么要学习编程,编程对你而言的乐趣在哪儿?
  • 如果一个函数10次中有7次正确,3次错误,问题可能出现在哪里?
  • 自身最大优点是什么,怎么证明?
  • 有没有在 GitHub 上发布过开源代码,参与过开源项目?
  • 你最近遇到过的一个技术挑战是什么?怎么解决的?
  • 开发常用的工具有哪些?
  • 熟悉 CocoaPods 么?能大概讲一下工作原理么?
  • 最常用的版本控制工具是什么,能大概讲讲原理么?
  • 今年你最想掌握的一门技术是什么?为什么?目前已经做到了哪个程度?
  • 你一般是怎么用 Instruments 的?
  • 你一般是如何调试 Bug 的?
  • 你在你的项目中用到了哪些设计模式?
  • 如何实现单例,单例会有什么弊端?
  • iOS 是如何管理内存的?

知识性问题

  • 什么是响应链,它是怎么工作的?

具体可参考iOS事件处理之Hit-Testing

  • 如何访问并修改一个类的私有属性?
  1. 通过KVC,setValue:forKeyPath:方法。
  2. 对于property,可以使用- (id)performSelector:(SEL)aSelector withObject:(id)anObject,不过注意,属性值只能是id,也就是Objective-C类型
  3. 使用NSInvocation来进行设置
  4. 通过objc_msgSend发送setProperty来进行设置
  5. 通过class_getInstanceMethod拿到Method,再调用method_invoke(id receiver, Method m, ...)来调用setter
  6. 其它运行时方法不再赘述
  • iOS Extension 是什么?能列举几个常用的 Extension 么?

通过使用扩展,可以让我们在应用外实现一些自定义的功能,这样,我们可以在其它的App或系统中进行交互。我们经常用的比如输入法,照片编辑、分享等等。

  • 如何把一个包含自定义对象的数组序列化到磁盘?

对象实现NSCoding协议,其父类同样需要实现。

  • Apple Pay 是什么?它的大概工作流程是怎样的?

不赘述,参见Apple Pay实现原理

  • iOS 的沙盒目录结构是怎样的? App Bundle 里面都有什么?

包括DocumentsLibrarytmp等。Application Bundle包括Info.plist,可执行文件,资源文件及其它文件,比如frameworks

  • iOS 的签名机制大概是怎样的?
  • iOS 7的多任务添加了哪两个新的 API? 各自的使用场景是什么?

    定时fetch内容以及push唤醒并下载内容。

  • Objective-C 的 class 是如何实现的?Selector 是如何被转化为 C 语言的函数调用的?

几句话很难讲清楚,直接上源码吧,我创建的项目,加了中文注释。objc4-cn

  • UIScrollView 大概是如何实现的,它是如何捕捉、响应手势的?

改变一个视图的bounds.origin后,它每一个单独的子视图都会被移动,这就是UIScrollView工作的原理,当你设置它的contentOffset属性时它改变scroll view.bounds的origin。手势应该是使用手势识别器实现的。

  • Objective-C 如何对已有的方法,添加自己的功能代码以实现类似记录日志这样的功能?

利用OC的运行时特性,运用swizzling Method方法即可实现。

  • +load+initialize 的区别是什么?

时机不一样;当涉及到继承、类别等时,调用的情况也不一样。参见源码

  • 如何让 Category 支持属性?

使用关联引用。

  • NSOperation 相比于 GCD 有哪些优势?

NSOperation加入到queue的操作可以取消,NSOperation优先级设置、依赖等比较方便。

  • strong / weak / unsafe_unretained 的区别?

weak会在对象引用计数变为0时置为nil,而unsafe_unretained不会,所以当指向对象释放后,再访问时可能导致崩溃。

  • 如何为 Class 定义一个对外只读对内可读写的属性?

在头文件中定义属性,关键字为readonly,在实现文件中定义扩展,在扩展中重新定义属性即可,默认可读写。

  • Objective-C 中,meta-class 指的是什么?

元类中包含类方法,isa及superclass指针。参考objc4-cn

  • UIViewCALayer 之间的关系?

UIView依靠CALayer来做渲染管理。

  • +[UIView animateWithDuration:animations:completion:] 内部大概是如何实现的? 封装了CABasic动画。

  • 什么时候会发生「隐式动画」?

改变视图非基础图层的CALayer时。

  • 如何处理异步的网络请求?
  • framebounds 的区别是什么?

frame相对于父视图坐标系,bounds是自己的坐标系,供子视图参考。

  • 如何把一张大图缩小为1/4大小的缩略图?

使用GraphicContext

  • 一个 App 会处于哪些状态?

  • Push Notification 是如何工作的?
  • 什么是 Runloop?

具体实现可以参考源码,简单可以理解成,RunLoop就是一个while(1){}的循环,每次进行循环时,获取需要处理的事件分发,当没有任何事件需要处理时则休眠。

  • Toll-Free Bridging 是什么?什么情况下会使用?

C和OC之间的转换,涉及到对象所有权的管理。

  • 当系统出现内存警告时会发生什么?

除了调用方法让用户处理外,系统默认移除当前不可见的controller的view。

  • 什么是 Protocol,Delegate 一般是怎么用的?
  • autorelease 对象在什么情况下会被释放?

autorelease对象内存由NSAutoreleasePool进行管理,当程序离开其范围时,向管理的autorelease对象发送release进行。

  • UIWebView 有哪些性能问题?有没有可替代的方案。

UIWebView存在内存泄露,JavaScript渲染引擎受限,在主线程进行大量操作;使用私有API开启WebThread线程渲染,如_setDrawInWebThread/_setDrawsCheckeredPattern等;使用WKWebView替换。

  • 为什么 NotificationCenter 要 removeObserver? 如何实现自动 remove?

如果不remove,当observer释放后,NotificationCenter会继续向其发送通知,此时会导致崩溃。实现自动remove方法:使用一个对象作为其关联对象,当对象释放时会调用关联对象的dealloc方法,在该方法中移除即可。注意,如果ApptargetiOS9.0及以后,则不再需要进行removeObserver操作

  • TableViewCell 改变时,如何让这些改变以动画的形式呈现?
  • 什么是 Method Swizzle,什么情况下会使用?

经验类问题

  • 为什么 UIScrollView 的滚动会导致 NSTimer 失效?

NSTimer涉及到RunLoop Mode,当滑动时,模式处于UITrackingRunLoopMode,导致原模式下的Timer失效。

  • 为什么当 Core Animation 完成时,layer 又会恢复到原先的状态? 动画的过程涉及到绘图原理,动画是在presentationLayer上实现,而Layer原来的状态都是保存在modelLayer,改变presentationLayer属性并不会改变modelLayer的值。

  • 你会如何存储用户的一些敏感信息,如登录的 token。

使用keychain。

  • 有用过一些开源组件吧,能简单说几个么,大概说说它们的使用场景实现。
  • 什么时候会发生 EXC BAD ACCESS 异常?

访问僵尸对象。

  • 什么时候会使用 Core Graphics,有什么注意事项么?
  • NSNotification 和 KVO 的使用场景?
  • 使用 Block 时需要注意哪些问题?

循环引用吧。

  • performSelector:withObject:afterDelay: 内部大概是怎么实现的,有什么注意事项么?
  • 如何播放 GIF 图片,有什么优化方案么?
  • 使用 NSUserDefaults 时,如何处理布尔的默认值?(比如返回 NO,不知道是真的 NO 还是没有设置过)

先使用objectForKey判断是否为nil。

  • 有哪几种方式可以对图片进行缩放,使用 CoreGraphics 缩放时有什么注意事项?
  • 哪些途径可以让 ViewController 瘦下来?
  • 有哪些常见的 Crash 场景?

对象无法响应selector;未移除observer;访问已释放对象;数组越界

综合类问题

  • 设计一个可以无限滚动并且支持自动滚动的 SlideShow。
  • 设计一个进度条。
  • 设计一套大文件(如上百M的视频)下载方案。

切片分段多线程并发下载。

  • 如果让你来实现 dispatch_once,你会怎么做?

使用原子变量,做好内存序使所有线程可见。

  • 设计一个类似 iOS 主屏可以下拉出现 Spotlight 的系统。(对 UIScrollView 的理解程度)

编程实现

参考

ios-developer-interview-questions-solutions's People

Contributors

zhongwuzw avatar

Stargazers

アインズ·ウール·ゴウン avatar Yang Zi Jian avatar Casey avatar RedQ avatar love紫川 avatar  avatar WCX avatar AlvinKwok avatar  avatar

Watchers

James Cloos avatar  avatar  avatar

Forkers

gongzhen jccapril

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.