字节iOS一二面面经

前言:985本硕,但是本科非科班,投的比较晚,内推投的,直接安排面试,昨天完成二面。记录一下
一面:
自我介绍
项目中遇到的困难,怎么解决的,怎么推动后台,安卓配合的。

问:能不能说一下OC的内存管理
答:引用计数
问:能介绍下常见的循环引用的场景吗?
答:block和self的循环引用。
问:那怎么解决呢?
答:weak strong dance
问:(刚刚提到block内部strong的原因是防止野指针,这个没仔细想,说错了)你刚刚说是为了防止野指针,能解释下什么是野指针吗?
答:就是一个指针指向了未知地址,比如一个内存被回收了,但是指向它的指针没有被置空
问:那weak关键字会将指针置空吗?
答:会
面试官:那其实就不会导致野指针了对不对
我:(内心:刚刚怎么就没仔细想一下)

问:能解释下属性关键字atomic吗?
答:原子性
问:那我有一个atomic修饰的属性 int a,在不同的线程执行self.a = self.a +1 执行一万次,这个属性的值会是一万吗?
答:不会,左边的点语法调用的是setter,右边调用的是getter,这行语句并不是原子性的。

以下就不详细记录我的回答了,太多了。。。
通过_a 访问和通过self.a访问有什么区别?
哪些变量保存在堆里,哪些保存在栈里?
同一个进程里哪些资源是线程间共享的,哪些是独有的。
解释下static和全局static的作用
知道method swizzling吗?解释一下
你刚刚提到了OC语言的消息转发,能介绍下消息转发的流程吗?或者说我调用了一个方法,介绍下消息传递的过程。

还有很多,记不清了,但是都是很基础的知识。没有问计网,数据结构

手撕代码:判断二叉树是否对称,没有代码提示实在写的难受,也没有面试经验,写的很难受。最后写了关键部分,讲了思路。
你觉得你实习过程中最大的成长是什么?
反问环节。

总结:一面是个小姐姐,问的都是很基础的知识,但是问的很仔细。大部分问题都是从回答中引出来的,所以不熟悉的概念最好不要提。面试官一直“好的,了解”。完全没有任何反馈,好处就是答错了心态也不会崩。

第二天收到二面通知,周日下午二面

面试官说先介绍一下他自己,没有让自我介绍。说他们主要做的是性能优化方面的工作,不接业务,但是我的简历上都是业务相关的经验,所以问我有什么想法没有。我当然说愿意去做性能优化,毕竟做业务确实,到最后就是一些重复的工作,没有什么真正技术上的提升。
正式开始:说项目就不问了,一面肯定问过了。
说一下iOS中的锁。
(锁这一块早上临时随便看了下,回顾一下各种锁的定义和作用)我说我最常用的@synchronized ,除此之外就是NSLock,刚说到这就被打断了(没有很粗鲁,还是很礼貌的打断)
问:这样吧,锁有这么多,还是我一个一个问吧,你刚刚说的@synchronized 他的原理是什么?
答:他的内部应该是一个互斥锁(mutex)
问:对,的确是一个mutex,它是可以递归的吗?
答:(其实是可以的,但是我记不清了就说了不可以)
问:你先解释一下什么是可递归,确定一下我们对递归的理解没有差别。
答:解释递归。。。
面试官(笑):其实是可递归的,它的内部是recursive mutex。(解释一堆)那你知道他底层原理是什么吗?怎么做到把它锁住的
答:(不知道啊,看过但是不记得)
面试官:解释原理,说到各种锁,然后说你知道osspinlock吗?听名字应该也知道它是什么锁吧。
答:自旋锁,一种忙等的锁。但是不是被废弃了吗,因为线程不安全。
问:你知道它线程不安全,那你知道他为什么线程不安全吗?
答:(其实我是记得的,但是我已经不敢相信我的记忆了)能提示下吗?
面试官:这个锁的线程不安全并不是逻辑上的线程不安全,而是会造成优先级反转,有印象吗?
答:(嗯,跟记忆中的一样)想起来了,解释优先级反转
面试官:那你知道这个问题是怎么解决的吗?
答:苹果提供了一种可以替代它的锁,但是原理我不记得了(内心很崩溃)
面试官:解释一堆。然后说这些东西你后面都可以再看一看。你知道@synthesize吗?他是干什么用的
答:可以用它给自动合成的getter和setter重命名
面试官(笑):的确是这个作用,但是它远不止这么简单。你说说如果我想阻止编译器自动合成,有哪几种方式呢?
答:可以用@dynamic。。。
面试官:除此之外呢,想想你用readonly的时候会自动合成吗?
答:对,还有readonly........

一个讨论的过程,慢慢引导我,有五种方式都可以阻止,原理是什么。感觉学到了很多。然后详细解释@synthesize的原理

然后说,这些问题可能太高级了,毕竟你也不怎么用到,看你简历做了一些UIKit相关的动画,问些偏使用的吧。说说UIAnimation 用block创建动画的方式,动画执行过程中,block中的代码会被执行多次吗?
答:不会,它是通过插值,计算出每个时刻图层的属性,然后直接改变CALayer。
面试官:嗯,的确不会执行多次,那你知道它里面到底做了什么吗?会不会用到coreanimation的一些东西
答:(内心很崩溃,除了插值还做了啥,犹豫中)
面试官:解释一堆。然后说知道touch begin吗?解释一下
答:解释手指点击屏幕的事件传递过程。
面试官:你刚刚说的传递过程可以被改变吗,如果我一个按钮,想扩大他的点击范围,该怎么做呢?
答:解释可以拦截,可以改写判断触摸点是否在当前view上。
面试官:如果我直接去调用了touch begin,就是说,我触摸屏幕这个动作已经被处理了,你刚刚说的事件传递还会传递下去吗?
答:其实没太get到他的意思。于是又是一堆解释

面试官:问你两个基础知识吧,一面问了一些,但是有一些没有涉及到。能解释下HTTPS吗?解释下他加密的完整流程
答:(内心真的很崩溃,三次握手四次挥手我都背了,连ARP RARP我都背了,就侥幸没有背这个)按照印象说了一下,第一步就说错了,被打断了。
面试官:你没背这个吗?我以为你肯定背了,面试不是都会背一下吗?然后说这个就四步,背一下就好。那你知道DNS吗?解释一下
答:解释DNS和解析流程。(中途有一步我都不确定我说的对不对,就停了一下,面试官说,没错就是这样,你继续说)
面试官:知道TTL吗?解释一下
答:缓存的保存时间
面试官:哪里缓存的保持时间呢,浏览器?操作系统?还是你刚刚说的本地域名服务器
答:应该三个都有吧
面试官:其实只是本地域名服务器(解释操作系统缓存为什么不需要,以及操作系统缓存时间怎么决定)

面试官:来做个算法题吧,给你找个简单的,这个真的很简单,判断链表是否是回文链表。让我先说暴力破解的方法(放一个数组里),分析时间复杂度和空间复杂度。然后说有一个时间复杂度O(n) 空间复杂度O(1)的方案,能不能快速想出来。
答:最后还是没想出来。面试官说没事,先写暴力破解吧,或者写伪代码也行。
最后问我:你这个方案,只有一个节点能判断吗,奇偶都能判断吗?然后说怎么做到空间复杂度O(1),就是链表反转一半,边反转边判断。

反问环节。

总结:二面面试官也很nice,一共面了80分钟左右,一直是一种讨论的状态,感觉在给我上课,后面问HTTPS和DNS感觉是故意给我找台阶下。但是抓住一个问题一直问,就很崩溃。其实这些问题我都有看过,但是没有刻意去记,就一直处于那种有点印象又说不出来的状态,真的很崩溃。而且面试经验也不够,准备不充分,最后的算法也是面试经典算法题了,我都不知道。唉

虽然感觉二面凉了,还是许愿字节三面,不想从头开始了。
祝大家都能顺利上岸!


#字节跳动iOS面经##面经##校招##字节跳动##iOS工程师#
全部评论
大佬你是社招,校招,还是实习?
点赞 回复 分享
发布于 2020-10-02 13:39
大佬投的哪个部门
点赞 回复 分享
发布于 2020-09-29 18:11
大佬,问一下写代码要求用什么语言,是OC么?能用C++么?
点赞 回复 分享
发布于 2020-09-29 12:35

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
咦哟,从去年八月份开始长跑,两处实习转正都失败了,风雨飘摇,终于拿到offer了更新一下面试记录:秋招:多部门反复面试然后挂掉然后复活,具体问了啥已经忘了,只是被反复煎炸,直至焦香😋春招:base北京抖音hr打来电话说再次复活,准备面试,gogogo北京抖音一面:六道笔试题:1.promise顺序2.定义域问题3.flat展开4.并发请求5.岛屿数量算法(力扣)深度,广度都写6.忘记了,好像也是算法,难度中等其他问题多是框架底层设计,实习项目重难点~~~秒过😇北京抖音二面:三道笔试题:(为什么只有三道是因为第三道没做出来,卡住了)1.中等难度算法(忘记啥题了,应该是个数组的)2.认识js的继承本质(手写继承模式,深入js的面相对象开发)3.手写vue的响应式(卡在了watch,导致挂掉)---后知后觉是我的注册副作用函数写得有问题,有点紧张了其他题目多是项目拷打,项目亮点,对实习项目的贡献~~~第二天,挂,but立马复活转战深圳客服当天约面深圳客服一面:六道笔试题,由于面过太多次字节,面试官叫我直接写,不用讲,快些写完😋,具体都是些继承,深拷贝(注意对数组对象分开处理,深层次对象,循环引用),加中等难度算法题~~~秒过深圳客服二面:口诉八股大战:大概囊括网络,浏览器渲染原理,动画优化,时间循环,任务队列等等(你能想到的简单八股通通拉出来鞭尸😋)算法题:笔试题6道:1:找出数组内重复的数,arr[0]-arr[n]内的数大小为[1-n],例如[1,2,2,3,3]返回[2,3],要求o(n),且不使用任何额外空间(做到了o(n),空间方面欠佳,给面试官说进入下一题,做不来了)2:原滋原味的继承(所以继承真滴很重要)3:力扣股票购买时机难度中等其他滴也忘记了,因为拿到offer后鼠鼠一下子就落地了,脑子自动过滤掉可能会攻击鼠鼠的记忆😷~~~秒过深圳客服三面:项目大战参与战斗的人员有:成员1:表单封装及其底层原理,使用成本的优化,声明式表单成员2:公司内部库生命周期管理成员3:第三方库和内部库冲突如何源码断点调试并打补丁解决成员4:埋点的艺术成员5:线上项目捷报频传如何查出内鬼成员6:大文件分片的风流趣事成员7:设计模式对对碰成员8:我构建hooks应对经理的新增的小需求的故事可能项目回答的比较流利,笔试题3道,都很简单,相信大家应该都可以手拿把掐😇~~~过过过无hr面后续煎熬等待几天直接hr打电话发offer了,希望大家也可以拿到自己心仪的offer
法力无边年:牛哇,你真是准备得充分,我对你没有嫉妒,都是实打实付出
查看19道真题和解析
点赞 评论 收藏
分享
评论
7
32
分享

创作者周榜

更多
牛客网
牛客企业服务