字节跳动iOS客户端日常实习一、二、三面凉经
准确来说,这是一篇收到了口头offer的凉经,至于是否被鸽,笔者无从查知,本着分享高尚的精神分享给平台的大家,各位牛友轻喷。
一.时间安排Time Line
- 3月23日接到面试通知
- 3月27日11:00 一面,通过;
- 3月30日18:00 二面,通过;
- 4月01日11:00 三面,通过;
- 4月01日16:00 HR面,通过;
- 4月01日18:00 通知无法发offer。
二.面试
- 字节一面(视频)内容:
先说总结,面试时长1小时,内容比较基础,体验较为活跃轻松。
字节面试官相当nice,头两个问题没答上来非常耐心引导,提问单刀直入,能给到题眼,回答起来很轻松。问题难度偏简单,基础。
1、 常规的自我介绍,说了一句项目经验还行;
2、 介绍一下简历中的一个项目(本来准备了word文档展示,奈何共享屏幕不可用,口头说的烂七八糟,不过面试官心态很好,直接开始提问,这里我就觉得这次面试体验会非常好);
3、 面向对象的三个要素(封装继承多态,上来就给我干懵了,没答上来…);
4、 多态?
5、 Java,python,OC运行效率孰高?(OC,直接生成机器码);
6、 Property,其中copy如何?
7、 Property(nonatomatic, copy) NSMutableArray有什么问题(addObject会崩溃);
8、 Copy和MutableCopy的区别(上面这个问题没答上来,回答了这个跳转回去,立刻明白了啥意思,引导顺滑,好感max);
9、 解释下类别,原理(特性)?
10、解释下封装,重载;(这里差点把重载和重写混淆,不过面试官适时安慰让我不紧张,瞬间好感max);
11、 OC存在多重继承吗?(必然不存在);
12、了解表视图吗,解释一下复用原理(复用标识符);
13、说明一下表视图的滑动卡顿的优化方法(内容和高度计算两方面);
14、viewDidLoad和viewDidAppear的调用时机(一次和多次的区别);
15、页面间的传值方式有哪些(公有属性,公有方法和协议,block传值,通知,extern全局变量传值,NSUserDefault简单数据存储传值);
16、通知和delegate的区别?
17、 通知的发送和接收是否在同一线程?(应该是的,回答的时候面试官尝试纠正我,真好心,然而我菜……解释不通干脆说不是);
18、HTTP和HTTPS区别?(网络基础很差,答得不是很好)
19、OC中多线程一般有几个方案?(NSThread, GCD, NSOperation四个);
20、上述技术各有什么特点,平常哪一项用的比较多?(GCD);
21、了解NSURLConnection和Session吗?(一般直接使用AFNetworking…);
22、说一下NSURLSession具体的实现原理(大概说了下四 个步骤);
23、问了一下http的头部的几个码。(忘光了…);
24、编程题:实现一个二叉树的倒置。
面试到这里就结束了,非常轻松,个人感觉有一些意犹未尽的感觉,可能是面试内容比较基础,毕竟GCD的底层原理和内存方面的内容并没有涉及到多少(笔者在这方面下的功夫比较深)。然后就让反问,我问了如下问题;
1、 属于什么业务条线?(答曰属于日常实习,具体分派需要到HR询问);
2、 一面结果什么时候通知?(大概下星期,其实蛮快);
3、 iOS以后的发展方向?(flutter方向,移动端的大团结);
4、 整个面试发展顺利的话大概什么流程?(一二技术面,三轮HR面,可能会有加面);
5、 研究生的课程例如大数据等对于移动开发有何帮助?(没有)
6、 结束。
面试结束后大概2个小时,HR就打电话通知一面通过,因为是周五就约了下周一的二面时间。
- 字节二面(视频)内容:
面试时间:3月30日,下午18: 00。
先说总结,面试提问时长36分钟,内容偏向应用层面,在内存和多线程方面有深入提问,提到项目难点,编程相关为一道思路题+一道简单算法。
面试前一天,被告知原定14点的时间改到18点,为了尽快面试就选定了这个时间,不过也考虑到饭点和下班时间可能会对面试官的情绪产生一定影响。事实上的确,整个面试的时间较短,面试结束时一度以为凉透,不过面试官也向我解释了正常面试时间为半小时到40分钟,总体感觉面试官属于能力技术level都很高的资深技术员或者leader,面试过程中一直在出题,应该是有一个共享题库直接选题提问。
1、 常规的自我介绍,问了项目经验;
2、 问了来实习的时间;
3、 老虎吃羊问题。(博弈论,老虎要吃羊,假设所有老虎是理智的,即首先为了生存,其次为了饱腹,老虎吃了羊后会变成羊,同样会被其他老虎吃掉。现在,N只老虎和1只羊,请问N为多少时,老虎们会吃羊。动态规划问题,奇数吃,偶数不吃。);
4、 青蛙跳格子,斐波拉契数列;(同时问到了时间复杂度,较简单);
5、 熟悉使用什么框架?(回答AFN,SDWebImage和百度地图SDK,让我选择一种技术解释,本来选择的是AFN,不过在一面的时候说过,让我重新换一个,选择了SDW,解释了大概原理);
6、 如果让你自己实现SDWebImage的二级存储机制,你如果实现?(这里对底层代码知之甚少,思考到应该和缓存有关,印象中与图片和缓存有关的就是UIImage的调用方法,就提到了UIImage的名称和路径的两个调用方式,不知正确与否);
7、 @autorelease{ NSString s;}和NSString s;有什么区别?(自动释放池中的是临时变量,会被释放,生命周期更短);
8、 说一下你对autorelease的理解。(内存管理方式相关内容);
9、 说一下对于http的理解?(简单说了概念);
10、http的返回状态码有了解吗?(说到了200,400,500,问道了300,不知……);
11、 为什么说http是无状态的?(cookie和session相关,没回答上来,本次面试最大的败笔。);
12、说一下项目中遇到的最困难的地方?(说到了消息推送和类似微信小红点消息提示的功能绑定实现,用到了观察者模式,进行数据改变的更新);
13、为什么不用原生的APNS技术实现呢?(需要及时上线);
14、了解GCD吗?(大致说了基本概念和几种常见的API);
15、 说一下dispatch_group_t和dispatch_barrier_sync的区别吗?(组调度是等待一组操作完成之后再进行之后的操作,阻隔是并发队列中的并发阻隔点);
16、了解NSOperation吗?(大概说了概念和三大特性);
17、了解NSOperationQueue吗?(用的比较少,不了解);
面试结束,本次的问题比较少,而且面试官的问法比较跳跃,感觉上是临时出题,而且以询问了解程度为主,不好找准题眼,所以笔者在应答和表述上都还有很大的不足,不过能够答对的问题基本答对,没回答上来的问题也有许多。总体来讲问道的内存管理,多线程编程相关较多,相较于一面进阶的内容明显加深。难度中等。
大概面试后1个小时,收到Hr的三面通知,约在后天的11点(又是饭点……),同时被告知技术面的轮次大概2-4轮。所以本次通过二面悲喜参半,一方面是能力并未到达完全的认可,因为确实自身在网络这块基础薄弱;另一方面是能够给予下一次的面试机会,基本还是认可了基础和项目能力。***尚未成功,同志仍须努力!
- 字节三面(视频)内容:
面试时间:4月1日,下午11: 00。
面试类别:iOS客户端实习
先说总结,面试提问时长50分钟,问的问题比较散,主要围绕编程和合作能力一块。
面试官稍迟两分钟进入面试,看样子很年轻,是沉稳的程序员做派。
先说一写题外话,这次面试之后拿到了头条极速版的口头offer,不过正如很多经验都提到,口头offer并不可信,十有***是假,拿到书面offer才算稳,笔者也被一番操作秀没了口头保障,但是本着分享经验,造福社区的想法,还是把面经分享给大家。同时给大家提醒,没到最后关头,没有松懈,祝大家求职路上一路顺畅平安~
下面是面试内容:
1、 算法题:求只有三项元素的数组中的顺序排列,时间复杂度要求O(n);
2、 说一下你对OC程序编译和连接方面的理解?
3、 说一下内存管理相关的操作?
4、 说一下响应链的原理?
5、 追问:hitTest有尝试过重写吗?(没有);
6、 http, session和cookie有了解过吗;
7、 线程和队列的关系?
8、 CALayer和UIView了解吗?
9、 你对同事间的矛盾怎么看?
10、有技术博客可以分享与一下吗?
11、 给面试官分享了一个本科时期的比赛视频。
总共三轮,结束。
下午4点左右先收到HR个人电话的口头offer,一开始很惊喜,甚至在社交平台上发表了感言。晚饭时间收到offer被撤销,原因是不接受非在校生申请实习岗位,我寻思其他公司也没有对本人的非应届身份有什么疑问,总之,头条是拒绝了我。(港校留学准留学生)
各位看官也就将就看看,牛友们各个比我牛逼,在求职路上一定披荆斩棘,无往不利,最后的实习过程就告一段落,心有些累,还是回家老实等开学把。大家一定坚持不懈,成功就在彼岸!
#字节跳动校招##iOS工程师##实习##字节跳动##面经#