iOS客户端面经-快手抖音腾讯阿里拼多多网易云音乐蘑菇街
我投递的是iOS客户端开发岗,一共递了七家公司(快手、抖音、腾讯、阿里、拼多多、网易云音乐、蘑菇街)。准备面试的过程中在牛客潜水看面经,现在想着自己面完了,有能力回馈一下这个圈子啦~
由于写帖子的时候,部分面试题不太记得了,我把我记得的写上,大家主要感受一下流程和重点内容就行。
快手(SP)
我其实不确定快手有没有SP这个说法...
=== 一面 ===
笔试题(一份纸质笔试题):
- 有一个题是考.transform属性的,做了结果后,被问是否可以自己实现.transform属性(其实就是问.transform的实现,然而并不会…)
- 有一个题是考Block的变量截获的
- 有一个题是让用贝塞尔曲线画一个先慢后快的什么东西(动画没复习,不会写…)
- 有一个题是一段代码,让说这样写有什么问题(多线程的死锁问题)
- 有一个题是让写一个函数,去找系统里的某个文件(我写的dfs)
其他问题:
具体不记得了,总结起来就是,不让你用系统API,你怎么实现xxxx?
比如:
- 他,你的动画loading怎么做的?
- 我,直接设置UIImageView的animationImages。
- 他,不让你用这个,你怎么设计?
- 我,…(不会)
额外算法题:
- 一个TableView,假设它没有复用,可能有一万个(或者更多)个Cell,给你一段屏幕的纵坐标区间[X, Y],请你找出在区间内的所有cell并按顺序返回
=== 二面 ===
算法
- 一棵完全二叉树,再给你一个新节点,你把这个节点插到合适的位置,让它还是一棵完全二叉树
=== 三面 ===
基础
- 介绍项目(后来发现每个面试官都对我LLVM/Clang的项目很感兴趣…)
- TCP与UDP区别
- TCP拥塞控制
- HTTP头部介绍下
- HTTP与HTTPS区别
- HTTPS用的什么加密?有了解加密算法吗?
算法
- 图片缓存的LRU
然后就面完啦~再去找下一个面试官,面试官在面其他人,而且时间也快到他们饭点了,就让我先回去,再跟我约时间。
=== 四面、五面、HR面 ===
四面跟大BOSS聊人生规划…
五面跟另一个BOSS聊,主要聊了快手抖音对比,竞品分析讨论…
HR面谈规划,手上offer怎么选择,目标城市等...
抖音(SP)
=== 一面(50~60min) ===
算法
会一行一行讲,也会问时间复杂度,以及优化
- 最近公共父节点(两个节点,都可能为null,都可能不在树上。我最开始写的没考虑不在树上的情况,面试官还吓唬我说”你以为你这算写对一半吗?没做出来就是0分哦”)
- 反转链表(常规题)
其他
- HTTP了解吗?HTTP2.0介绍下
- iOS9-13,每个版本讲一个特性
- 怎么实现多个任务执行完后,再统一处理(应该是同步阻塞、栅栏函数、调度组。中间那个没答)
- 夜间模式怎么实现的?除了通知的方式,有什么更优雅的方式吗?
- 图片怎么加载的?(SDWebImage)
- 不让用SDWebImage,如何实现类似逻辑 (自己设计图片请求和缓存,简单讲了SDWebImage的思路)
- 每个TableViewCell都有一个UIImageView要加载图片,如果没有缓存,有五个Cell请求一个url,同时发请求肯定是不实际的,如何处理?
- 微信TableView滑动的时候,动图是不动的,为什么?(Runloop的Mode决定的)
- 有了解过WebSocket吗?(没有…)
=== 二面(1.5h) ===
算法
- 如何不试用递归,打印所有一个UIView所有的subviews(包括孙子view等)
- 设计一个图片缓存系统,并代码实现
清理缓存应该用LRU,当时的我并不会,但是被一步步引导着写出来了,感谢面试官没放弃我hhh
其他
大部分是计网+多线程
- 介绍研究生做的基于LLVM/Clang的静态分析
- 七层协议栈
- HTTP是哪一层的协议
- HTTP常见的返回码有哪些?
- HTTP除了GET、POST还有哪些?
- HTTPS介绍一下
- HTTPS能防止中间人攻击吗?
- HTTPS怎么抓包?
- TCP和UDP的区别
- 线程和进程的区别
- 线程之间如何进行通讯
- 不使用gcd,如何保证线程安全?
- 怎么实现多个任务执行完后,再统一处理(重复)
- iOS有哪些多线程方式?
- 同步和异步有什么区别?
- 串行队列和并行队列有什么区别?
- 队列和线程的关系
- 死锁是怎么产生的?(死锁条件)
- 你有什么要问我的(第一次跟面试官聊规划,感恩面试官没有敷衍我)
=== 三面(40+min) ===
算法
- 合并排序链表
其他
- HTTPS用的对称加密还是非对称加密?
- TCP的慢启动,快恢复介绍下
- 客户端发送网络请求,到拿到响应的整个过程(类似打开一个网页的过程)
- 接上题,如果DNS解析的时候,某个ISP服务器没有了,这时候逻辑是怎样的?(不会,面试官说会通知其他节点,还提到了ARP协议…)
- 介绍了下简历上写的字典转模型的设计+夜间模式的设计
- 为什么不用成熟的字典转模型的三方?有了解过吗?(了解一点,有YYModel)
- 夜间模式有什么缺点,能怎么优化?
- 锁有哪些?
- 遇到哪些小坑?内存相关的有吗?
- 我看你简历写了数据存储,怎么存的
- 自己写的LoadingView怎么做的
- 线程安全错误是怎么出现的?
- 你有什么要问我的(聊了很多,感恩)
- 我加下你微信有事可以随时找我(是团队leader,后续还找他帮忙了,一万个感恩)
字节跳动提前批,最早的一场面试啦,凭运气+还算比较好的基础+良好的沟通能力通过了。
小伙伴们,沟通真的很重要~
阿里(二面挂)
手淘搜索组,8月初面试
=== 一面 ===
有些问题我没写,上面的面试提到过了
其它
- 项目整体设计说一下
- 引用
- 多态
- 快速查找 二分查找 冒泡排序 队列设计
- 内存分配
- OC内存机制
=== 二面 ===
算法
- 给1G内存,1T数据,数据是一个大文件,文件每一行都是一个URL,去重(跟面试官掰扯了半天没搞定。其实当时前几天我还跟我男票嘱咐了几次让他复习这个(他当时准备跳槽),但我以为我客户端不会问这个,结果...)
其它
一些业务情景
总结失败的原因:
- 阿里要求确实挺高的
- 我所准备的内容和他们想要的内容不太一样
- 最关键的就是,复习不到位,自己太菜
给你们愿意看这个贴子的人一句建议:早点准备,不要拖延,不要有侥幸心理...
网易云音乐(HR挂)
只面了一面,直通HR终面,但是后来有事没去...
=== 一面 ===
- 待加
蘑菇街(offer)
=== 一面 ===
算法
- 字符串的全排列(简单的dfs题,注意下重复字符就行)
其他
- 待加
=== 二面 ===
部门leader面
- 介绍研究生做的基于LLVM/Clang的静态分析
- 待加
=== 三面 ===
交叉面,简直被吊打,本来一二面自我感觉非常良好,面完这个我感觉我要凉凉,万幸没凉...
- 组件化
-
腾讯(SP)
=== 流程 ===
- 8月初,自主投递,几分钟后简历被锁。
- 8月12号,一面。纯业务和岗位基础知识。
- 8月31号,二面。基础知识+两个算法。
- 9月4号,三面。项目+一个算法。
- 9月8号,HR面。直接敞开了谈,就说岗位地点选择纠结,HR说表示理解,让我有事可以找她聊,跟我说她这过了。
- 9月12号,HR打电话来发口头意向,当天还是第二天邮箱就收到意向书了。
一面等了20天才二面,原因是一面的反问环节,我跟面试官说,base不合适...🤣
为什么会蠢到搞出这样的魔幻操作,大概是我当时一面面得太顺了,有点飘,大家别学我(教训)...
=== 一面(47min) ===
- 自我介绍
- 介绍研究生做的基于LLVM/Clang的静态分析
- TCP和UDP的区别
- TCP如何保证交付
- TCP流量控制、拥塞控制
- TCP的分包机制(传输内容太多得分包)
- HTTP的组成,HTTPS与HTTP的区别
- HTTP的传输大小限制(联系TCP答的...我也不确定)
-
- 简历项目提问n个(跟我写的另外的面经大同小异,不写了)
- 你有什么要问我的(问了一些组里情况等)
=== 二面(40+min) ===
算法
- 快排
- 字符串最长匹配
其他(感觉他想到啥问的啥...)
- 代码风格问题(我第二个算法题while里面嵌套了逻辑,面试官说可以抽出来...)
- 面向对象的三大特征(谁能想到问这玩意,准确答了两个,剩下一个不记得是啥,把知道的东西都说了一通...)
- 进程与线程的区别(这个题是秋招必考基础题啊哈哈哈,不会的感觉可以直接回家洗洗睡了...)
- 待加
面试官笔记本没带充电器,最后没电了,匆匆下线...我还以为是我答得不好,自我怀疑了一下...
=== 三面(37min) ===
算法
- 两个数组,都没有重复值,都无序,求两个数组的交集(我一分钟给了三种方法,然而面试官好像想要更优的,想了30秒直接说不会了,而且至今也不会...)
其他
- 一些上面写过的问题,常规
- 你关注啥技术公众号吗
- 今年WWDC内容
- 你有什么要问我的
这轮除了反问环节,只有29min,面完心里很忐忑...
拼多多(HR挂):
HR挂我的原因,是一个不能公开说的秘密...
=== 一面(1h5min) ===
- 自我介绍
- 简历内容:JSON转模型如何实现;夜间模式;播放器架构设计
- 请求的过程
- 服务端返回格式除了json还有其他的吗?
- 哪些OC对象是线程安全的
- 为什么要在主线程更新UI
- 如何保证OC容器在多线程下的数据安全性
- SDWebImage的内存怎么设计的,更新原则是什么
- 两个算法题:
- {}[]()判断括号匹配性
- 只有一种括号,计算最少加多少个括号,使其满足匹配
- 你觉得你的优点是什么
- 你觉得你的缺点是什么
- 你有什么要问我的
=== 二面(1h7min) ===
上来废话不多说,也没有让自我介绍,“我们来聊聊OC吧~”,个人挺喜欢这种风格的~
- +load和+initialize怎么理解的,什么时候会被调用,分别讨论父类重写而子类没重写的情况
- 怎么理解OC的动态性
- 介绍下消息转发机制,说一下这些过程中用到的系统API
- 怎么理解Block的
- Block的变量截获机制
- __block的实现原理
- 内存管理机制(ARC,非ARC)
- 给了我一个例子,让说这样非ARC情况写在多线程下会有什么问题,改为ARC呢,改为手动加autoreleasepool呢(其实也是考虑内存管理和释放,会不会导致野指针的不正常使用)
- 用户点击屏幕,系统是怎么找到一个view并决定由它来响应事件的(传递链和响应链)
- 接8,把你说的hitTest方法写一下伪代码
- 简历上写了LLVM/Clang,问了解IR吗
- 你有什么要问我的
拼多多其实是我秋招里面得最难的一家啦~两位面试官都问得很细。
但是由于在最后,所以准备得挺充分了,自我感觉面得不错。