iOS客户端面经-快手抖音腾讯阿里拼多多网易云音乐蘑菇街 精 快手字节跳动阿里巴巴拼多多腾讯面经iOS

原文转载自 「笔经面经精华」 ( https://www.nowcoder.com/discuss/286762 ) By 牛客网

预计阅读时间 0 分钟(共 0 个字, 0 张图片, 0 个链接)

我是面iOS客户端,投递了七家公司(快手、抖音、腾讯、阿里、拼多多、网易云音乐、蘑菇街)。
现在再也没有技术面啦~(面试太累了哼😶


准备面试的过程中在牛客潜水看面经,现在想着自己面完了,有能力回馈一下这个圈子啦~


按面试顺序开始写面经贴,会尽快更新:
(我尽量把我能记得的都写下来...有些是真的不记得了hhh)

给我点赞让我有点动力hhh,是一个需要时刻夸夸的小可爱🤣

快手(意向)

=== 一面 ===

(不太记得啦,我捡一些我记得的写写,其他不记得的可以参考其他家公司的问题,都差不太多的~

做几个笔试题(有一份纸质笔试题):

  1. 有一个题是考.transform属性的,做了结果后,被问是否可以自己实现.transform属性(其实就是问.transform的实现,然而并不会
  2. 有一个题是考Block的变量截获的
  3. 有一个题是让用贝塞尔曲线画一个先慢后快的什么东西(动画没复习,不会写
  4. 有一个题是一段代码,让说这样写有什么问题(多线程的死锁问题)
  5. 有一个题是让写一个函数,去找系统里的某个文件(我写的dfs

其他问题:

具体不记得了,总结起来就是,不让你用系统API,你怎么实现xxxx?问得我都要哭了2333

比如:

  1. 他,你的动画loading怎么做的?
  2. 我,直接设置UIImageViewanimationImages
  3. 他,不让你用这个,你怎么设计?
  4. 我,(不会)

额外算法题:

  1. 一个TableView,假设它没有复用,可能有一万个(或者更多)个Cell,给你一段屏幕的纵坐标区间[X, Y],请你找出在区间内的所有cell并按顺序返回


后来了解到这个面试官是技术一把手,平时是面社招的,被拉过来面我
他给内推我的学长的反馈就是:这个姑娘基础很一般呀~
哭哭...

=== 二面 ===

算法

  1. 一棵完全二叉树,再给你一个新节点,你把这个节点插到合适的位置,让它还是一棵完全二叉树

面完一个算法:

  1. 他,啥时候过来实习?
  2. 我,???我是面的校招呢...
  3. 他,???啊?
  4. 我,...
  5. 他,我去问一下哦~
  6. 我,好的...
最后发现是帮我内推的学长填错了选项hhh,又帮我安排了新面试官,进入第三轮。

=== 三面 ===

(这次被叫过来的是我学长的领导好像,依旧是记不清问了啥了,挑记得的写~

基础

  1. 介绍项目(后来发现每个面试官都对我LLVM/Clang的项目很感兴趣
  2. TCPUDP区别
  3. TCP拥塞控制
  4. HTTP头部介绍下
  5. HTTPHTTPS区别
  6. HTTPS用的什么加密?有了解加密算法吗?

算法

  1. 图片缓存的LRU
然后就面完啦~再去找下一个面试官,面试官在面其他人,而且时间也快到他们饭点了,就让我先回去,再跟我约时间。

=== 四面、五面、HR面 ===

四面跟大BOSS聊各种,比如规划等等
五面跟另一个BOSS聊,主要聊了快手抖音的对比
HR面谈规划,手上offer各种...

抖音(意向)

=== 一面(50~60min) ===

算法

会一行一行讲,也会问时间复杂度,以及优化

  1. 最近公共父节点(两个节点,都可能为null,都可能不在树上。我最开始写的没考虑不在树上的情况,面试官还吓唬我说”你以为你这算写对一半吗?没做出来就是0分哦”)
  2. 反转链表(常规题)

其他

  1. HTTP了解吗?HTTP2.0介绍下
  2. iOS9-13,每个版本讲一个特性
  3. 怎么实现多个任务执行完后,再统一处理(应该是同步阻塞、栅栏函数、调度组。中间那个没答)
  4. 夜间模式怎么实现的?除了通知的方式,有什么更优雅的方式吗?
  5. 图片怎么加载的?(SDWebImage)
  6. 不让用SDWebImage,如何实现类似逻辑 (自己设计图片请求和缓存,简单讲了SDWebImage的思路)
  7. 每个TableViewCell都有一个UIImageView要加载图片,如果没有缓存,有五个Cell请求一个url,同时发请求肯定是不实际的,如何处理?
  8. 微信TableView滑动的时候,动图是不动的,为什么?(Runloop的Mode决定的)
  9. 有了解过WebSocket吗?(没有…)

=== 二面(1.5h) ===

算法

  1. 如何不试用递归,打印所有一个UIView所有的subviews(包括孙子view等)
  2. 设计一个图片缓存系统,并代码实现
    清理缓存应该用LRU,当时的我并不会,但是被一步步引导着写出来了,感谢面试官没放弃我hhh

其他

大部分是计网+多线程

  1. 介绍研究生做的基于LLVM/Clang的静态分析(面试官最后默默来了句,还算是讲清楚了)
  2. 七层协议栈
  3. HTTP是哪一层的协议
  4. HTTP常见的返回码有哪些?
  5. HTTP除了GET、POST还有哪些?(UPDATE、DELETE、HEAD)
  6. HTTPS介绍一下
  7. HTTPS能防止中间人攻击吗?(答了可以,答案应该是可以)
  8. TCP和UDP的区别
  9. 线程和进程的区别
  10. 线程之间如何进行通讯
  11. 不使用gcd,如何保证线程安全?
  12. 怎么实现多个任务执行完后,再统一处理(重复)
  13. iOS有哪些多线程方式?(NSOperation、NSThread、GCD)
  14. 同步和异步有什么区别?
  15. 串行队列和并行队列有什么区别?
  16. 队列和线程的关系
  17. 死锁是怎么产生的?(四个条件只说了三个…)
  18. 你有什么要问我的(第一次跟面试官聊规划,感恩面试官没有敷衍我)

=== 三面(40+min) ===

算法

  1. 合并排序链表

其他

  1. HTTPS用的对称加密还是非对称加密?
  2. TCP的慢启动,快恢复介绍下
  3. 客户端发送网络请求,到拿到响应的整个过程(类似打开一个网页的过程)
  4. 接上题,如果DNS解析的时候,某个ISP服务器没有了,这时候逻辑是怎样的?(不会,面试官说会通知其他节点,还提到了ARP协议…)
  5. 介绍了下简历上写的字典转模型的设计+夜间模式的设计
  6. 为什么不用成熟的字典转模型的三方?有了解过吗?(了解一点,有YYModel,但没用过)
  7. 夜间模式有什么缺点,能怎么优化?(从初始化的时候设置值,改为用配置文件。再就不会了)
  8. 锁有哪些?(只答出了NSLock、SpinLock…)
  9. 遇到哪些小坑?内存相关的有吗?
  10. 我看你简历写了数据存储,怎么存的(FMDB)
  11. 自己写的LoadingView怎么做的(用UIImage的animationImages…)
  12. 线程安全错误是怎么出现的?(面试官解释:先读到寄存器…就出现了错误)
  13. 你有什么要问我的(聊了很多,感恩)
  14. 我加下你微信有事可以随时找我(是团队leader,后续还找他帮忙了,一万个感恩)

字节跳动提前批,最早的一场面试啦,凭运气+还算比较好的基础+良好的沟通能力通过了。
小伙伴们,沟通真的很重要~

阿里(二面凉)

找学长投的手淘搜索组,8月初面试

=== 一面 ===

  1. 待加

=== 二面 ===

算法
  1. 给1G内存,1T数据,数据是一个大文件,文件每一行都是一个URL,去重(跟面试官掰扯了半天没搞定。其实当时前几天我还跟我男票嘱咐了几次让他复习这个(他当时准备跳槽),但我以为我客户端不会问这个,结果...)
其他
  1. 待加

总结失败的原因:
  1. 阿里要求确实挺高的
  2. 我所准备的内容和他们想要的内容不太一样
  3. 最关键的就是,复习不到位,自己太菜
给你们愿意看这个贴子的人一句建议:早点准备,不要拖延,不要有侥幸心理...

网易云音乐(等HR)

=== 一面 ===

  1. 待加

提前批,面了一面,让直通终面了,但是当时终面我有点事不能去杭州(必须去杭州终面),所以放弃了拿offer的机会。
本来打算正式批再战一次,没想到HR让我跳过了笔试面试,继续上批的流程,感恩。
等待正式批的HR面中...

蘑菇街(意向)

=== 一面 ===

算法
  1. 字符串的全排列(简单的dfs题,注意下重复字符就行)
其他
  1. 待加

=== 二面 ===

部门leader面
  1. 介绍研究生做的基于LLVM/Clang的静态分析
  2. 待加

=== 三面 ===

交叉面,简直被吊打,几乎没有一个问题是会的...
本来一二面自我感觉非常良好,面完这个我感觉我要凉凉,万幸没凉...
  1. 待加


腾讯(意向)

=== 流程 ===

  • 8月初,自主投递,几分钟后简历被锁。
  • 8月12号,一面。纯业务和岗位基础知识。
  • 8月31号,二面。基础知识+两个算法。
  • 9月4号,三面。项目+一个算法。
  • 9月8号,HR面。直接敞开了谈,就说岗位地点选择纠结,HR说表示理解,让我有事可以找她聊,跟我说她这过了。
  • 9月12号,HR打电话来发口头意向,当天还是第二天邮箱就收到意向书了。

一面等了20天才二面,原因是一面的反问环节,我跟面试官说,base不合适...🤣
为什么会蠢到搞出这样的魔幻操作,大概是我当时一面面得太顺了,有点飘,大家别学我(教训)...

=== 一面(47min) ===

  1. 自我介绍
  2. 介绍研究生做的基于LLVM/Clang的静态分析
  3. TCP和UDP的区别
  4. TCP如何保证交付
  5. TCP流量控制、拥塞控制
  6. TCP的分包机制(传输内容太多得分包)
  7. HTTP的组成,HTTPS与HTTP的区别
  8. HTTP的传输大小限制(联系TCP答的...我也不确定)

  9. 简历项目提问n个(跟我写的另外的面经大同小异,不写了)
  10. 你有什么要问我的(问了一些组里情况等)

=== 二面(40+min) ===

算法
  1. 快排
  2. 字符串最长匹配
其他(感觉他想到啥问的啥...)
  1. 代码风格问题(我第二个算法题while里面嵌套了逻辑,面试官说可以抽出来...)
  2. 面向对象的三大特征(谁能想到问这玩意,准确答了两个,剩下一个不记得是啥,把知道的东西都说了一通...)
  3. 进程与线程的区别(这个题是秋招必考基础题啊哈哈哈,不会的感觉可以直接回家洗洗睡了...)
  4. 待加
面试官笔记本没带充电器,最后没电了,匆匆下线...我还以为是我答得不好,自我怀疑了一下...

=== 三面(37min) ===

算法
  1. 两个数组,都没有重复值,都无序,求两个数组的交集(我一分钟给了三种方法,然而面试官好像想要更优的,想了30秒直接说不会了,而且至今也不会...)
其他
  1. 待加
  2. 你有什么要问我的
这轮除了反问环节,只有29min,面完心里很忐忑...

按目前消息来看,应该拿的是SP。

拼多多(等HR):

(渣渣把学霸批笔试挂了,面试还自己老改时间,所以推到了这个时候...)

=== 一面(1h5min) ===

  1. 自我介绍
  2. 简历内容:JSON转模型如何实现;夜间模式;播放器架构设计
  3. 请求的过程
  4. 服务端返回格式除了json还有其他的吗?
  5. 哪些OC对象是线程安全的
  6. 为什么要在主线程更新UI
  7. 如何保证OC容器在多线程下的数据安全性
  8. SDWebImage的内存怎么设计的,更新原则是什么
  9. 两个算法题:
    1. {}[]()判断括号匹配性
    2. 只有一种括号,计算最少加多少个括号,使其满足匹配
  10. 你觉得你的优点是什么
  11. 你觉得你的缺点是什么
  12. 你有什么要问我的

=== 二面(1h7min) ===

上来废话不多说,也没有让自我介绍,“我们来聊聊OC吧~”

个人挺喜欢这种风格的~

  1. +load和+initialize怎么理解的,什么时候会被调用,分别讨论父类重写而子类没重写的情况(blahblah)
  2. 怎么理解OC的动态性(答了三点:对象的动态绑定;消息转发机制;资源动态加载)
  3. 介绍下消息转发机制(blahblah),说一下这些过程中用到的系统api(blahblah)
  4. 怎么理解Block的(struct和函数指针组合在一块实现blahblah)
  5. Block的变量截获机制(局部变量:基础类型,对象类型,静态变量;全局变量:静态,非静态blahblah)
  6. __block的实现原理(编译器自动构造struct,内有blahblah…)
  7. 内存管理机制(ARC编译器自动向autoreleasepool注册blahblah,非ARC手动管理)
  8. 给了我一个例子,让说这样非ARC情况写在多线程下会有什么问题,改为ARC呢,改为手动加autoreleasepool呢(其实也是考虑内存管理和释放,会不会导致野指针的不正常使用)
  9. 用户点击屏幕,系统是怎么找到一个view并决定由它来响应事件的(传递链和响应链)
  10. 接8,把你说的hitTest方法写一下伪代码(hhh,这个刚好前几天复习了下)
  11. 简历上写了LLVM/Clang,问了解IR吗(答不太了解,我研究生做的是在AST层级的分析,是IR的前一步。然后blahblah介绍了Clang和我做的事)
  12. 你有什么要问我的(blahblah)
拼多多其实是我秋招里面得最难的一家啦~两位面试官都问得很细。
但是由于在最后,所以准备得挺充分了,自我感觉面得不错。
祝自己拼多多早日上岸~






more_vert