面试过程
在疫情期间都是远程面试,下边先介绍一下疫情期间面试的一些公司的面试情况。同时拿到了其中几家的 offer。下边介绍的面试题只还原了其中印象比较深的部分,会存在不足的情况,并不代表面试的全部。
小米
一面
介绍有哪些设计原则,并让比较详细的说了其中开闭原则在项目中的应用。
介绍设计模式,然后其中主要问了我抽象工厂和适配器两种模式。
介绍 runloop 相关的知识和在实际开发中的使用情况
要求详细的描述事件响应链
二面
介绍过往的项目经验,因为曾经的项目和所面试的部门岗位需求匹配度较高,所以这块的时间占比较多。
回文算法
(算法)判断一个字符串是不是对称的字符串,比如 abba 或者 aba 这样的就是对称的。
block 的实现原理
比较详细的介绍 https 的过程。
过往开发中做过哪些优化向的工作,问的也比较详细。
如何检测项目中的卡顿问题(比如假死)
比较详细的介绍消息转发流程和事件响应链
GCD 的底层线程调度原理
介绍 hash 算法的原理
三面
一个二叉树逐层打印的算法题
介绍自己的过往的项目经验,会结合项目问一些架构向的思考
如果现在做一个新的网络层框架,有哪些需要考量的点
百度
百度只有一面,因为面得是百度的商业化部门,对于细节的要求非常严格。个人感觉自己的表现确实不是很好。
判断一个字符串是不是 ipv6 地址(要求尽全力的考虑所有异常的情况)
PS:当时面试官明确告诉我,这个面试题做不好,面试是直接结束的。
介绍界面卡顿的优化有哪些可以优化的点。
介绍 UIResponder 的继承链。然后说事件响应链。
Bigo
感觉面试的这些公司,Bigo 对于基础的考察最全面。
一面
(算法)找出一个页面中漏出部分面积最大的试图,重合的部分按照最上层的面积算漏出,会有时间复杂度的要求。
简单地介绍的过往的项目经验
控件的点击事件和添加在上边的手势谁先响应,并说明原因
谈 CoreAnimation 和 CoreGraphic 的区别
说 @synchronized 锁的实现原理,并说明其中可能存在的问题。同时介绍了 iOS 开发中常见的锁。
介绍编译的过程和原理
谈对于 bitcode 的理解和作用。
详细的介绍了 Https 的过程。
二面
介绍属性常用修饰符,介绍 assign 和 weak 之间的区别。这块会延伸到内存管理相关,比如引用计数的方式。
聊对于 GCD 的理解,和 GCD 底层是如何进行线程调度的。聊 GCD 中常见方法的使用 (group ,信号量
,barrier 等)
详细的介绍了 KVC 和 KVO 的原理。
介绍消息转发过程
介绍对于 Runloop 并介绍知道的应用场景。再具体场景中会有追问。
介绍项目优化的经验,这一块会聊的比较细。
介绍对于静态库和动态库的理解。
在 webview 使用过程中存在的问题和解决方案。
三面
介绍了过往 RN 的使用经验和对于 Flutter 的理解。
谈对于组件化的理解和市面上常见的组件化方案
问了一些 APM 向上的问题。
谈个人对于项目架构选择的理解。自己如何进行架构的选择(主要对于 MVVM,MVC等,后文有个人对于这一块的理解)
谈个人规划
滴滴
一面
滴滴的一面分为两部分。
第一部分:过往项目经验,会对自己的过往项目经验,结合自己的描述,面试官问你介绍到的项目中涉及到问题,然后会据此引申出一些问题,这一部分占比比较大。
第二部分是基础知识面
谈属性修饰符,如果 assign 修饰对象可能存在的问题和原因。
比较的深入的聊了内存管理的内容,包含引用计数和 weak 修饰的对象的内存管理的过程。问的会比较深入。
讲 runloop 的过往使用经验。
介绍自己比较熟悉的三方库的实现原理
二面
对于锁的理解(自旋锁和互斥锁),以及 iOS 开发中常见的锁。同时要求介绍个人在开发过程中在哪些场景下用到过锁。
在实际开发中遇到过哪些多线程问题以及如何进行解决的。
为什么不能在异步线程中更新页面,介绍原因。
对于内存泄漏的了解,以及介绍知道的解决方案。
一些优化向上的问题,主要是根据自己介绍的优化进行较为深入的追问。
一个坦克从一个空间的起点到终点,中间在某些位置上有阻隔的情况下,判断从起点到终点是否有可行路径的算法题。
三面
比较详细的介绍之前的项目经验和主要负责的内容
介绍过往项目中最有挑战的事情,并会据此深入的聊。
介绍了一些架构向的理解
谈个人规划
快手
快手的一面是跨部门面试,二面是本部门面,所以一二面面试题会有一些重复,只写了一次。
一面
介绍过往的项目经验
两个不算难的算法题(具体的忘记了...)
聊了 assign 修饰对象可能存在的问题
聊过往项目中的优化经验
介绍消息转发流程
二面
比较详细的聊到的 block,深入的讲了其中的实现原理,并介绍不同变量的引用方式。
介绍开发中常见的循环引用,并说明其中的原因和解决的方案和原理。
介绍 Runloop 并讲应用场景。
二叉树翻转
三面
一道多线程实际场景下的问题,要求远程写出实现方案的代码
聊对于 MVVM,MVC 和 MVP 的理解。
介绍过往项目中 RN 的使用经验和遇到的问题。
讲如何将一张内存极大的图片可以像地图一样的加载出来(只说实现思路)
聊对于组件化的理解,对于市面上的组件化方案的理解,优劣分析等。
其他
除了上边介绍的公司外,还面了平安,51 talk,58 同城,好未来,美篇。
因为绝大部分面试内容和上边的基本上只是重复,只对差异性的面试题进行了总结。
对图像编解码的了解
在子线程中是如何进行内存管理的JSBridge 是如何实现的,以及和原生的调用关系。
问到了一些 AFNetworking 和 SDWebImage 相关的实际开发中的问题。
学习:
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670 ,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
另附上一份各好友收集的大厂面试题,进群可自行下载!
网友评论