ps:后面按照自己面试的时间顺序来写,记录的面试题是我印象比较深刻的,并不一定很全,暂时先提供面试题,后面考虑给出相应的题解。
我面试了大大小小的各种公司,BAT、bigo、字节、快手、伴鱼等,因为一些原因,也拒面了一些公司,拿了几家的offer。
伴鱼是我准备后参加的第一轮面试,有很多自己准备得不是很全,也没有完全进入面试状态,面试结果不是很好,一面就挂了。
算法题:判断平衡二叉树(easy)
代码阅读题:(问输出)
TestObject *object1 = [[TestObject alloc] init]; __block TestObject *object2 = [[TestObject alloc] init]; object1.name = @"Mike"; object2.name = @"Sean"; __block int vi = 1;
void (^handler)(NSString *) = ^(NSString *name) { object1.name = name; object2.name = name; vi = 2; } handler(@"Lucy");
NSLog(object1.name); NSLog(object2.name); NSLog(@"%i", vi);
引申:
如果__block int vi = 1; 这句改成int vi = 1会怎样,为什么
代码中的block是什么block,为什么
58我面了很多次,一开始面的基础研发部门,后来给我转到了企业工具研发,中间时间拖得有点长,直接拒面了。
说下你在开发过程中遇到过的内存泄漏
NSTimer 怎么处理内存泄漏
Delegate什么情况下会出现内存泄漏,怎么解决
Delegate和Notification的区别
多线程相关
JavaScriptCore相关
后面就是聊天了,中间穿插问了下动态库和静态库的却别
58这个部门的面试就两轮,二面是群面(几个人轮流面你),第一次接触这种面试形式,压力还是有点的。
对我的项目表感兴趣,前面聊了不少项目的内容,问了下项目的背景,做了啥以及有哪些收益
了解业内性能优化是怎么做的么
你项目中是怎么做性能优化的
ReactNative相关
你有什么想问的么
这个创业公司全程都是在聊天,后面问了些和iOS没多大关系的问题,然后就发了口头offer。
拼多多应该是自己面的一个相对较大的公司,面试过程中和面试官有了点小分歧,后面问我源码在哪个文件哪一行,后面问得问题也基本上是我之前没怎么接触过的。
百度问得和iOS相关的较少,CS基础相对较多。
因为一开始是在音乐的流程里,约面时间相对较晚,pcg那边想和我先聊下,然后再做选择,于是腾讯面了腾讯音乐和PCG两个部门
pcg在音乐之前面,面完一面后说一面过了,但是因为流程在音乐,所以让我选择一个流程走,我选了音乐,后来音乐挂了后没有好意思去舔回来。
一面
腾讯音乐感觉业务不是很多口,感觉面试官不知道问我什么好,一面后就没有后续了。
一面
微博有点迷,感觉面试官就是对着题库问问题,感觉自己回答还OK,但是一面后不了了之了。
Bigo整个流程推进很快,一面二面都在当天完成,但是bigo三面后挂了,有点迷,我猜测是因为二面的算法题没有给出最优解。
算法(三道手写)
iOS基础:
RN、flutter、weex:
后面简单聊了下未来的规划
看完文章如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群642363427来获取一份详细的大厂面试资料为你的跳槽多添一份保障。
贝壳找房也感觉有点迷,和面试官感觉聊很不错,问得问题都很开放,很考验功底,最后还问我你感觉你过了么。但是一面后就没有然后了。
完美的面试有点匆忙,面试的问题也很有深度,后续因为必须要去现场面试,出于安全因素考虑,没有去面下去。
滴滴效率是真的高,面试流程一晚上走完,当晚出结果,从面试到发offer仅仅用了4天左右的时间。
ps:面试题之前均有涉及,不再详写
猿辅导面试还是有点难度的,算法写完还要跑case,第二道题目跑case不正确,看代码debug,后面因为时间不够没有给出正确结果,后面就没有后续了。
聊项目(主要是项目中的一些技术点)
聊对大前端的看法(weex、RN、Flutter对比等)
JS是怎么实现继承的,什么是JS的原型链
iOS内存管理(引用计数、修饰词、weak和assign的区别)
runtime(什么是runtime,为啥要有runtime,你用runtime做过什么事情)
怎么进行方法的交换
+load在什么时候调用的,对启动的影响
代码题:ABCDE五个任务,D依赖AB的执行,E依赖BC的执行,怎么设计
GCD信号量,线程同步等
Runloop是啥,为啥要设计runloop,runloop和线程的关系
Timmer为啥会有内存泄漏的现象,Runloop会持有Timmer么
什么是source0和source1,分别做什么事情
怎么监测app卡顿
UIView 和 CALayer的区别,为什么要这么设计
隐式动画和显示动画的区别
算法:两题LC medium(都要求写完跑case)
这边有个小插曲,因为之前高强度的面试,后面拿了几个不错的offer后就不太想继续面了,感觉面试状态也是一个正态分布的曲线,拒了高德面试后hr找我聊了下,然后又答应继续面试,后面因为自己确实没有发挥出正常的水平,导致一面挂了,不过hr后来请我喝了杯咖啡还是蛮开心的。
聊项目
JS是怎么和Native通信的
模块表是怎么生成的
JS函数注入怎么做的
RN 和 Weex 的区别
HTTP 请求头
HTTP 状态码
分类和extension区别
分类的实现机制
分类同名方法的调用
关联对象,策略有哪些,关联对象的key为啥要用static修饰(这个没有get到点)
GCD、NSThread以及NSOperation的区别,怎么取消任务
GCD block内存管理
自己实现一个函数,其中有个形参是block,这个block是什么时候进行copy的,一定会进行copy操作嘛
手指点在高德地图上的一个按钮,会发生什么 ,具体说明
怎么找到最合适的view
如过有多个子VC,是先VC还是先View
Runloop是怎么监听到点击事件的
Runloop和线程的关系,Runloop能单独存在嘛
怎么做到线程保活
A包含B包含C,怎么做才能让C的点击响应区域是 以C对角线为半径的圆弧(要说出具体实现方式)
代码题:
下方代码中三个数组中的p.name是啥,为什么
Person *p = [[Person alloc] init]; p.name = @"zhangsan";
NSArray *a = @[p]; NSArray *b = [a copy]; NSArray *c = [a mutableCopy];
Person *p2 = [c firstObject]; p2.name = @"lisi";
下方代码会有什么问题,为什么
NSNotificationCenter *__weak center = [NSNotificationCenter defaultCenter]; id __block token = [center addObserver:kDdiRegisterNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { [self getDataWithComplete:completeBlock]; [center removeObserver:token]; }];
字节面了两个部门,一个是头条还有一个是抖音,字节是在我回去动了个小手术后面的,面试也不是很在状态。
一面(交叉面)
首先是一组代码,问有啥代码风格不妥的地方(代码忘记了)
MRC 和 ARC 的区别
ARC有什么缺点
MRC 下 写setter方法
代码题:(1、输出什么 2、如果是在自线程中会怎么样)
NSLog(@"1"); dispatch_sync(^{ NSLog(@"2"); }); NSLog(@"3");
你理解的id 以及 id 和 void *区别
函数指针和指针函数的区别
CALayer 和 UIView的关系
苹果为什么要这么设计
frame、bounds、center
layoutIfNeeded、layoutSubViews、setNeedsDisplay区别
响应者链(顺便说了下完整的手指触摸屏幕会发生什么引出了后续runloop相关问题)
runloop source0 和 source1都是啥
runloop和线程的关系
OC 消息发送机制(提到了isa、类对象,引出下面问题)
category 和 extension 的区别
+load方法
算法题 判断镜像二叉树
二面
抖音面试有点迷,感觉面试官和我完全在两个频道,面试官问的内容我明明回答了但是他恕我啥都不会,不知道是不是没有get到他的点。
一面
快手也是在我动完小手术后面的,我感觉面试发挥正常,和面试官聊也不错,但是玄学的是自己还是挂了,后面有其他BG想捞也不想面了。
自我介绍
在学校都做了哪些项目
聊公司项目
常见的crash
怎么处理这些crash
怎么设计一个crash日志回捞系统
Objc为啥要设计消息发送机制,直接调函数不好吗
怎么获取函数的堆栈
怎么监控APP卡顿
APP启动做了哪些事情怎么优化
+load
怎么进行业务解耦
APP性能优化相关
设计一个下载任务
• 微信底部四个tab 包含首页让你实现要多久,为什么(这个真的没有明白是想问啥)
• 算法:链表反转
一天四轮的面试确实是高强度的,一天下来整个人会很疲惫,导致前面拿到了一些offer后,紧绷的弦马上就松懈下来了,后面几轮高德、字节以及快手的面试都没有发挥出自己应有的水平,所幸的是整体结果差强人意。面试需要不断复盘总结,不至于这次面试问的问题不懂下次还不懂,还有知识需要不断积累,不能再临时抱佛脚了。
简历决定着你能否有面试机会,一份好的简历可以让你事半功倍。
iOS有很多东西我们是看不到具体的实现的,毕竟是闭源的,但是我们能结合我们的一些经验去猜测苹果的一些实现方式。目前iOS面试问的问题越来越细,越来越底层,所以阅读一些源码是及其有必要的,iOS一般常考的点如下(这边列举得可能并不是很全):
Objective-C语言相关
swift相关:
iOS相关
这部分主要看你基础是不是扎实了,作为一名RD,不管做什么,这些知识都是要掌握的。
算法基本上是工程师面试必定考察的点,现在越来越多的公司面试考察算法,作为iOS开发的同学,在面试之前至少要刷下《剑指offer》上的所有题目,这本书上的题目都是经典中的经典,面试出现概率极高。有时间的话可以刷下LeetCode上easy和medium难度的题,iOS面试,很少有考察hard的题目,但是就算是遇到hard的题目也不要过于紧张,仔细审题,寻找突破口。算法是一个积累的过程,现在LeetCode可以每日打卡,这是一个很好的积累手段。下面罗列下常考的数据结构和算法:
数据结构
算法
看完文章如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群642363427来获取一份详细的大厂面试资料为你的跳槽多添一份保障。