字节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工程师#
全部评论
大佬,问一下写代码要求用什么语言,是OC么?能用C++么?
点赞 回复
分享
发布于 2020-09-29 12:35
大佬投的哪个部门
点赞 回复
分享
发布于 2020-09-29 18:11
淘天集团
校招火热招聘中
官网直投
大佬你是社招,校招,还是实习?
点赞 回复
分享
发布于 2020-10-02 13:39

相关推荐

发个腾讯的吧,刚面完,以为是kpi,所以没录音,能写多少是多少点击查看详情自我介绍介绍项目1.java和其他语言的区别,比如c++,python,各个方面2.知道几种编程思想,比如面向对象等等3.知道的设计模式4.jvm结构、垃圾回收算法5.乐观锁CAS6.数据结构了解哪些7.排序算法呢,说一下快排,时间复杂度。空间复杂度8.计网1.OSI七层,作用2.http状态码,502如何查找排除3.http报文结构4.https的过程,三次握手,TLS四次握手等等,认证过程5.了解过哪些加密算法,什么是对称加密和非对称加密6.cookie和session了解过吗,区别,集群里,session在一个服务器,请求分配到了其他服务器,怎么解决这种情况说了一些以后,提示我想想redis、mysql7.websocket了解过吗,。。。。我不知道8.http有哪些请求方法,然后给我个场景,问我怎么解决,具体忘了,反正他最后引导我是用head(应该)9.ping用过吗,基于什么协议10.DNS解析过程、我还说了两种方法,递归,迭代,问我迭代体现在哪11.DOS攻击是什么12.TCP三次握手。四次挥手,各阶段的状态,为什么要三次握手、四次挥手,状态那还问我,SYN_RECV之前服务器是什么状态13.为什么要等待2MSL14.TCP   UDP区别、应用场景,问我,游戏用的是什么,腾讯会议呢?我答是QUIC,不晓得对不对15.我看你这是个前后端分离项目,那么跨域问题怎么解决。我不知道。。。。16.静态资源问题,后面提醒我用CDN17.TCP拥塞控制四个过程。TCP滑动窗口了解过吗,讲一下18.TCP、UDP格式操作系统1.内核态、用户态,切换方式2.进程线程,区别、协程了解过吗(协程不知道)3.一个进程,你发现cup使用率很高,你怎么排查,我猜与协程有关,就往这方面答了4.一个线程阻塞到这里了,你怎么解决,我还是从协程方面5.进程间通信方式。调度算法6.虚拟内存了解过吗7.分段分页的调度算法8.OOM了解过吗,怎么排查,怎么解决9.什么是死锁,如何避免、解决redis、mysql1.redis持久化机制2.redis的数据结构3.其他想不起来了。。。。字数超了 #腾讯# #腾讯一
点赞 评论 收藏
转发
7 32 评论
分享
牛客网
牛客企业服务