快手iOS面经
快手面经
一面
概述
问了下项目,剩下基本都是问的iOS基础,偏实战
具体问题
- 自我介绍
- 了解iOS的内存管理吗?
- 刚刚说到循环强引用,可以具体说一下吗?
- 说一下弱引用的是怎么实现的?
(这部分聊了挺久,因为之前只了解过底层是用哈希表记录的,然后面试官就想问清楚在ARC中弱引用的哈希表工作机制,建议同学深入了解一下,聊好了挺加分) - APP内通信的方式有什么?Notification,KVO和delegate
- 说一下delegate是怎么通信的
- 了解设计模式吗?说下iOS上的MVC模式?
- Model是怎么跟Controller通信的,Model跟View呢,View改变了怎么通知到Controller?
- 了解iOS上的多线程吗?具体说说
- GCD和Operation的比较,有用过其中的一种么?
- iOS上怎么保证线程安全?
- 进程和线程有什么区别?
- iOS上怎么响应事件的,子view超出父view范围怎么响应,怎么实现子view和父view响应同一事件,父view关闭响应了,子view还能响应么?
- 有什么想问我的?问了swift中array数组的内存分配,因为在swift中array是值类型,内存是动态增加的,但是append的API没有提示有可能会栈溢出,所以问了下,当大小超出一定范围后,是不是用到了堆的空间。
二面
概述
又聊了下项目,问了计算机网络和数据结构的问题。
具体问题
- 自我介绍
- 你觉得你擅长什么?
- 说一下你遇到的技术难点,或者你觉得有成就感的事情?
(聊了下项目) - 你项目用的是HTTPS吗?说一下HTTPS的过程
- 了解非对称加密原理吗?比如RSA算法
- 说一下TCP建立连接的过程
- 了解过红黑树吗?能说下红黑树的原理吗
- 手撕算法:求一个二叉树的最大深度,该二叉树不确定是不是红黑树
- 改一下算法,写成判断所有路径的长度是不是一样的
三面
概述
问的问题偏深入或实际应用场景,要求***度解答
具体问题
- 聊了下项目,碰到的第一个用过之前实习公司产品的总监?笑
- 你之前做的公式编辑器是桌面端的产品,这款产品的目标用户是哪些呢?
- 后面做的这款iOS APP,能说一下或者画一下它的代码结构么?
- 平时是怎么学习的?有看什么书吗?
- 场景题:视频需要将音频上传到云端,翻译成文字再传回应用,这个过程可以怎么优化,或者怎么提高用户体验呢?(答了挺多方面:分段,预翻译一部分,异步多线程,去噪,压缩,感觉面试官还是觉得不够全面)
- 了解ARC么,什么时候会出现循环强引用问题?引用计数为0的引用实例是立即回收么?
- 了解autoreleasepool么,作用和使用场景是什么?内部声明的变量在什么时候释放?(题外话:iOS为什么这么流畅?)
- 你有什么特长吗?
- 在学校有做什么项目吗?
- 你觉得在别人眼里你是怎样的?
- 了解多线程么?用过GCD或者Operation么?
- 多线程场景题:申请一个GCD队列(可能是串行、可能是并发),然后在一个函数里,先执行该队列的异步任务,休眠5s,再执行该队列的同步任务,休眠3s,问该函数要多久才能返回。上面改为把那两个任务提交给主队列呢,执行情况是怎样的。
- 对于runloop,你觉得定时器的时间是准确的吗?
- 毕设是做什么的?
- 对于技术的规划?
- 算法场景题:假设有一亿个视频,视频播放量已经离线保存到后台了,现在想根据播放量找出前一百个显示出来,
- 怎么做?
- 用快排么?具体思路是怎样的?
- 用堆排序?具体过程是怎样的?
- 分析一下时间复杂度,以及你认为实际用的时间应该是多少?(面完才想明白,实际用的时间应该是小于平均时间复杂度的,因为到后面很多元素连堆顶的比较都过不去)
- 有什么想问我的?技术选型的一些问题
- 三轮技术面到此为止,等待后续通知
后续
技术面的两天后进行了hr面,所以整个面试流程很快。不过offer call等了20天左右吧,听说是后面还有一批面试,都要等后面的面完了才出结果,所以等到后面有点佛系了。
#快手##面经##iOS工程师##实习#