字节iOS客户端面经(内含完整秋招面试经历)
引言:
21届秋招过来人,现已成功上岸并入职字节,谨以此贴,记录我的秋招经历。
同时回馈牛客,喝水不忘挖井人,感谢牛客上各位朋友无私的分享,让我少走了很多弯路,得到了很多帮助。
还要感谢字节的面试官和HR,不断的给予我鼓励和肯定,让我一直坚持下来。
前倾提要
- 北邮本科+专硕,专业是通信工程+电子通信工程;
- 技能点:C++、自学过iOS开发;
- 投递的都是iOS移动客户端开发;
秋招字节面经:
我的秋招经历比较反复,整理了其中一部分面经放在这里,完整的面试记录链接我会贴在后面。
一面
- 自我介绍,是否了解swift语言(OC选手)?
- 问了UITableView使用时的感受?有什么优缺点?
- UI布局是用的代码还是什么?是否做过机型匹配相关的工作?
- 然后问了网络请求用的什么做的,我回答了session和AFN,然后顺势问了用过哪些第三方库。回答还用过SDwebimage。
- 顺着问了sdwebimage做了什么工作,和我们直接从网络上拉图片相比有什么不同?
- get和post的区别,还是幂等性和安全性的问题,这次针对的是安全性
- 问http有哪些头部字段?
- 问了keep alive,keep alive怎么工作?
- 有没有做过断点续传的相关工作?
- https的工作机制?
- notification的post与响应会在哪个线程?
- 然后具体问了,如果一个类被销毁了,然后给他发送通知还会响应吗?
- 然后开始C++大礼包,C++中的new与malloc有什么区别?
- C++虚函数工作原理
- 构造函数析构函数是否可以为虚函数
- 重载与重写?
- vector与list的区别,访问和插入的速度哪个快?为什么?
- memcopy个strcopy有什么区别?
- 算法题,数组中超过一半的数字。不能用map和set这种可以直接排血的数据结构。剑指原题。
一面比较基础,但是当时C++没来得及复习,好在算法题秒了,应该是三天内通知过了约下一面。
二面
- 先评价之前的面试有哪些表现不足?
- tableview的优化有总结吗?在性能和内存上
- 内存复用,背后的数据结构,设计原则中一般会设计一个对象池,这个是怎么做?
- cell高度动态计算
- KVO的原理
- C++ 11 左右值引用。
- 引用和指针的区别?
- 如果一个类存在父类,基类的虚构函数要用virtual修饰为什么?
- 如果子类没有额外的成员变量,如果子类是个空实现,没有变量没有方***有问题吗?
- 声明为虚函数有什么变化?
- 虚表生成和地址引用发生在什么时期?
- OC里面怎么解决多态问题?
- 先问了多态的定义是什么?
- 分类为什么可以用来做多继承?怎么实现?
- 菱形继承问题怎么解决?什么是菱形继承?
- OC内存管理了解?引用计数的原理是什么?(OC有更高级的GC,但是iOS上只考虑引用计数)
- 引用计数为什么会导致循环引用?
- 一般怎么解决循环引用?
- weak怎么置nil?原理了解吗?
- 其他的高级内存管理,其他的GC了解吗
- JAVA的GC机制了解吗?
- 深浅拷贝?
- C++怎么做深拷贝?
- OC深拷贝
- 对于string 的copy和array的copy 是一样的吗?面试官的意思是,copy实际上调用的是copywithZone,所以不同子类复写的实现应该是不一样的。
- 限定NSArray的copy,那引用一个NSArray 和copy 一个NSArray的区别在哪?
- IOS怎么加载一个进程?
- iOS的虚拟内存了解吗?不了解的话说一下普通的虚拟内存。
- 缺页中断和页置换算法
- 用户态和内核态切换发生在什么时候?切换时机?
智力题
1、random7 求 random5 2、3L 5L 杯子 4L 水
算法题:
给定一个char数组,使用字符+次数的方式进行压缩,次数为1时只保留字符。 返回新的char数组 in:['a','a','b','b','c','c','c','d'] out:['a', '2', 'b', '2', 'c', '3', 'd'] 问:如果某个字符超过10个怎么处理?
三面
自我介绍
tableView和collectionView,如果有数据变更的时候,是这个数据源的reload还是有定向的更新?
开发的环境是linux的C++,c++的标准?
写了一段C++的代码,返回一个对象然后赋值,大概类似下面:
class A 是一个类 A GetTest() { A a; return a; } A s; s = GetTest(); 问,这个过程中调用了哪些函数?
操作系统的文件系统?
项目中多线程场景
对自己的评价?在这个软开的领域有什么擅长的地方?优势
算法题
题目:S-expression解析和计算 s-expressions, sexprs, sexps是一种数据表示方法,在lisp语言里发明并流行 An s-expression is classically defined as an atom, or an expression of the form (x . y) where x and y are s-expressions. 例如,使用s-expression来表达计算: (* 2 (+ 3 4)) 结果是14 下面请写出代码来计算下面这种的s-expression的结果: atom: + - * int 第一个label一定是计算操作符:+ - * 后面一定是数字,或者expr,注意:数字可以是多个。
其他公司的offer情况?什么时候能来实习?
后面对自己的定位,想发展成为什么样的工程师?
觉得读研对自己的最大的帮助是?
反问,工作时间安排之类的
面试官补充问:喜欢什么样的工作的团队氛围和节奏?沟通上的倾向。
哪里人?
小结:
综合整个秋招面试感受,字节的效率以及面试体验都是最好的,基本上三天就有反馈,会沟通下次面试的时间(时间都挺人性化的集中在10点和3点,没有反人类的12点面试)。
客户端的面试确实不要求客户端基础,考察的重点是各种计算机基础,我虽然会一些iOS,入职时是完全当0基础对待的。然后其实我的面试表现都挺一般的,但是在面试过程中,面试官很耐心,全程都有引导,非常的和气,而且都很年轻,看起来和师兄师姐没什么两样,确实对于缓解面试压力起了很大的作用。
并且HR也真的很nice,一直鼓励我多试一试。HR有一句话对我很关键:面试过程中的成长性也是考察的一个重要素质。这个当时挺戳中我的,所以我坚持每次面试后及时复盘,力争上次的错误下次不犯,守得云开见月明。
实习感受:
20年11月左右秋招尘埃落地,21年三月上旬过来实习感受了一番。来之前我是非常忐忑的,入职当天起了个大早,然后待了小段时间后就没什么顾虑了。入职时会分配mentor,新人的任何问题,包括工作和生活,都可以询问mentor,mentor都很强的,完全不需要有心理压力,团队的氛围是很开放自由的。新人的checklist上甚至还会有和mentor完成约饭的item 🐶。然后mentor会根据你的技能点和你沟通,制定合适的学习和发展路线,并且定时review,一切诉求都可以沟通。
福利方面,三餐全包,每日有下午茶,外加零食不限量,反正不管饿不饿都在吃。此外还有顶配Mac、丰富的活动日,免费健身房以及住房补贴,各种福利拉满。当时还没入职就已经收到校招礼盒、春节礼盒一大堆福利。
最后:
希望我的经历对大家有那么些许参考的价值,也欢迎大家加入字节一起fighting。现在应该正是字节提前批最后的时候,多一次尝试的机会不要害怕,字节的效率是非常可靠的。需要内推的同学可以私信我内推码。
附上我的面试经历链接