21届秋招7面字节iOSer小白菜终于上岸

谨以此贴,记录我挣扎的秋招经历。
同时回馈牛客,喝水不忘挖井人!
感谢牛客上各位朋友无私的分享,让我少走了很多弯路,得到了很多帮助!
长文预警~

自我情况介绍

  1. 北邮本科+专硕,专业是通信工程+电子通信工程;
  2. 无实习经历,实验室项目不相关;
  3. 本科学过C++,玩过一点iOS开发;
  4. 算法基础薄弱;
  5. 投递的都是iOS移动客户端开发。

  简述一下实习准备的过程,实习面经计划另写一篇贴以作记录,也方便大家按照阶段参考。

  • 2020-2-10 ~ 2-20,这段时间把C++过了一遍,b站上找的讲课视频;
  • 2020-2-20 ~ 3-13,在leetcode中开始了《剑指offer》第一题,把主要的题都写(抄)了一遍,大概四五十道的样子,比较花哨的题就没写了,基本上每道题写了自己的题解;
  • 2020-3-3 开始,整理牛客上的C++面试宝典,然后还有github上搜的知识点汇总,比如CSNotesSkill-Tree 。git上有很多优质的知识点整理,我复习的主要是操作系统和计网,设计模式和数据库都抛了。
  • 2020-3-15 开始投递实习,第一个面试是字节跳动,安排在3-31。
    2020-3-31 ~ 4-14,连续面试,字节、腾讯、小米、蘑菇街等。
    最后拿到了小米iOS的实习,但是后来北京疫情反复,又不能远程,就干脆投奔秋招了。在如今看来是一个相当后悔的决定。
    实习一定要去! 实习转正 = 多一次秋招机会,而且秋招什么神仙打架难度,实习转正真的容易多了。
    以上是找实习的总体时间线过程,详细内容和感受以后再展开~

秋招准备

实验室的工作持续到07-15才完全放人,但是在7月初就开始着手准备了。

  1. 07-07 ~ 07-15(项目):找了网上的课程做个简单项目,但是iOS真的不好找。时间都比较久远。最后做了个简单的新闻类iOS APP项目。
    总结:这部分的时间显然花的太少了,面试的展开基本从项目开始,上来就是问项目有什么难点?其实不一定项目要全部完成,面面俱到。可以在一定完成度的基础上,专注于研究一两个点,从优化的角度做一些改善。在碰壁的过程中才会总结出自己的东西,这样面试有话说,过程真实,只跟着课程走,会缺少那种困扰好几天尝试很多办法才把问题解决的经历。而且面试问你难点,不是真要有什么技术突破,体现你研究问题解决问题的思维过程比较重要。
  2. 07-06 ~ 08-13(刷题):由于找实习期间笔试感觉很多倒在了动态规划上,所以七月份有大约20天在集中攻克动态规划专题。然后按照专题来,链表专题,树专题等。最后leetcode大概120道左右,通过的提交次数是230左右(有一些重复刷的题)。
    总结:刷题要求看个人情况,算法后端通过算题刷人很严重。但是客户端来说,现在看来,当时刷的那么多动态规划基本没用上过。客户端面试基本不会问那么难,而笔试遇到的动态规划又不是我能在两个小时内写出来的。所以就有点鸡肋,当然动态规划本身还是很好玩的,以后能用到也不一定。面试最多的还是《剑指offer》,leetcode上的hot 100中的树、链表、字符串和数组,外加排序,都是基础中的基础。
  3. 08-15 ~ 08-25:计网和操作系统重新整理,深入理解。
    总结:梳理完知识点后,多看面经。面经里会出现一些更深入和细节的问法,多看看,面试的时候才能快速反应过来,不至于尬住。
  4. 08-15这几天花时间重新改了简历,开始投递秋招。投递公司按照自己的医院列了个优先级,因为我想去南方,所以优先选择的是广东和上海的岗位。
    总结:简历上措辞要慎重,要确保任何一个点,以及它横向纵向扩展的内容,你都是了然于胸的,不然写上去就是送命题。
  5. 08-04 ~ 08-11:iOS的OC语言知识点复习:新浪于海老师的一个课程梳理了一遍完整的。
  6. 8月底就返校了,开始宿舍里面试的日子了
  7. 我秋招面试过的公司是:腾讯(一面挂)、字节(offer)、虎牙(一面挂)、京东(二面挂)、网易(一面挂)、shopee(一挂)、58同城(offer)和金山WPS(没面了)。

秋招面经汇总(长文)

这里主要讲字节的7次面试吧,其他公司的单独写好了,方便大家搜索公司名字的时候能查到吧。

1、08-26-字节飞书一面

  1. 自我介绍,还问过是否了解swift语言。。。
  2. 问了UITableView使用时的感受?有什么优缺点?
  3. 代码的布局是用的代码还是什么?是否做过机型匹配相关的工作?
  4. 然后问了网络请求用的什么做的,我回答了session和AFN,然后顺势问了用过哪些第三方库。回答还用过SDwebimage。
    这里好像还问了做的项目是否是有后台的?
  5. 然后就问了sdwebimage做了什么工作,和我们直接从网络上拉图片相比有什么不同?
  6. 然后是get和post的区别,还是幂等性和安全性的问题,这次针对的是安全性,问:我回答post会上传数据修改服务器资源,所以是不安全的,然后反问,难道get不能上传数据吗?
  7. 问http有哪些头部字段?
  8. 问了keep alive,keep alive怎么工作?
  9. 有没有做过断点续传的相关工作?
  10. https的工作机制?
  11. notification的post与响应会在哪个线程?大概是这么一个问题,这个正好之前被tx问了通知是否为线程安全的?然后回去查了一下。
  12. 然后具体问了,如果一个类被销毁了,然后给他发送通知还会响应吗?
  13. 然后开始C++大礼包
  14. C++中的new与malloc有什么区别?
  15. C++虚函数工作原理
  16. 构造函数析构函数是否可以为虚函数
  17. 重载与重写?
  18. vector与list的区别,访问和插入的速度哪个快?为什么?
  19. memcopy个strcopy有什么区别???
  20. 算法题,数组中超过一半的数字。不能用map和set这种可以直接排血的数据结构。剑指原题。

一面比较基础,但是当时C++没来得及复习,好在算法题秒了,应该是三天内通知过了约下一面。


2、09-04-字节飞书二面

周五上午11点,飞书二面。

  1. 开篇自我介绍针对第三个项目,为什么要做这个项目,是怎么学习这个项目的?感觉是考察做技术的动机,和钻研的热情之类的,
  2. 三个项目中的难点,以及如何解决
  3. h5网页播放是否有性能测试(项目里的)
  4. C++ linux项目这个是如何做的,他的意思应该是问系统设计,但是我主要的是回答硬件设计。。。
  5. 自相关循环是怎么做?(通信里的)
  6. 第一个新闻的app,代码规模有多大?数据来源是什么?
  7. 有没有做过性能优化方面的工作,加载图片,多线程拉取。。。
  8. 多线程遇到什么问题?回答了死锁
  9. 多线程访问同一个资源的冲突问题,加锁,互斥锁信号量。
  10. 回归到基础问题了:
  11. iOS系统分为哪些架构?
  12. 遇到过哪些crash的情况?
  13. 了解哪些设计模式?
  14. delegate是如何实现的?这个是要怎么回答?我回答的委托机制如何实现,但是感觉他问的是,delegate这个代码逻辑上如何实现的。
  15. 沙盒机制了解吗?
  16. swift了解吗?如果要你用swift,自己开发一个项目,开发周期为一周,你如何做?
  17. 算法题,链表环入口,用了双指针,分析了一下时间复杂和空间复杂度,问进一步有没有优化空间,回答不知道,面试官解释是希望每个问题都有自己的理解,如何去提升
  18. 最后补充问了,要设计一个内存池,如何设计?应该实现一些什么功能?
  19. 知道内存碎片是什么吗?
  20. 职业规划?
  21. 反问环节:

3、09-14字节飞书三面

自我介绍;
有哪些View
用view的时候如何选择?
项目难点;
如何解决项目难点,怎么想出解决方案?
有没有实习?
死锁,死锁避免?
算法:最大连续子数组的和。
dp,优化空间,我用了原数组,然后不让用,结果改成其他变量的时候出了问题,没调试出来。。。。

三面感觉挂在了算法?09-16问了HR未通过,09-24二志愿捞。


4、09-29 字节抖音创作工具 一面

​1. 最近的这个新闻APP,你负责的是什么工作?
2. 有什么难点?这里应该有一个简洁版的说法
3. 有没有用第三方框架?图片缓存?
4. NSCache有什么特点?
5. NSCache和字典有什么区别?
6. 多线程,访问会有什么问题;
7. 信号量和互斥锁
8. 互斥锁的特点以及和信号量的区别
9. 属性的多读单写
10. 然后getter方法中sync的话,不是同步吗,怎么多读?然后说现在往广度扩展一下,实际上就是深度不挖了的意思。
11. 死锁是什么?条件?避免?
12. 举一个OC中死锁的例子,或者写一段代码?这里我举例例子是dipatch_sync main queue
13. 内存映射?mmap是个什么函数?
14. 计算机是怎么存储0.1这个数的?
15. 怎么理解TCP的连接 ,可靠和字节流
16. 拥塞控制
17. 什么时候进入Close Wait状态?
18. c++中vector 和 list 有什么区别
19. map和unoder _map实现原理有什么区别?为什么有了map还要由一个unoder map?
20. 快排的复杂度,简述,然后是否稳定?
21. 算法题,池塘面积,输入输出debug遇到了一点点问题。

5、09-30字节抖音创作工具 二面

下午三点
无自我介绍,直接开怼;

  1. 先评价之前的面试有哪些表现不足?
  2. 我说广度和深度上都有不足,然后让我举例。
  3. 我 说浮点数这个,他说这是基础。。。
  4. tableview的优化有总结吗?在性能和内存上
  5. 内存复用,背后的数据结构,设计原则中一般会设计一个对象池,这个是怎么做?
  6. cell高度动态计算
  7. KVO的原理
  8. C++ 11 了解吗还是停留在03,左右值引用。
  9. 引用和指针的区别?
  10. 如果一个类存在父类,基类的虚构函数要用virtual修饰为什么?
    这里我回答时举例了,如果子类具有父类没有的一些成员变量,需要调用子类的析构函数去释放空间
  11. 如果子类没有额外的成员变量,如果子类是个空实现,没有变量没有方法,会有问题吗?
  12. 声明为虚函数有什么变化?
    多了虚表指针和虚函数表
  13. 虚表生成和地址引用发生在什么时期?
  14. OC里面怎么解决多态问题?
  15. 先问了多态的定义是什么?
  16. 分类为什么可以用来做多继承?怎么实现?
  17. 菱形继承问题怎么解决?什么是菱形继承?
  18. OC内存管理了解?引用计数的原理是什么?(OC有更高级的GC,但是iOS上只考虑引用计数)
  19. 引用计数为什么会导致循环引用?
  20. 一般怎么解决循环引用?
  21. weak怎么置nil?原理了解吗?
  22. 其他的高级内存管理,其他的GC了解吗
  23. JAVA的GC机制了解吗?
  24. 深浅拷贝?
  25. C++怎么做深拷贝?
  26. OC深拷贝
  27. 对于string 的copy和array的copy 是一样的吗?面试官的意思是,copy实际上调用的是copywithZone,所以不同子类复写的实现应该是不一样的。
  28. 限定NSArray的copy
  29. 那引用一个NSArray 和copy 一个NSArray的区别在哪?
  30. IOS怎么加载一个进程?
  31. iOS的虚拟内存了解吗?不了解的话说一下普通的虚拟内存。
  32. 缺页中断和页置换算法
  33. 用户态和内核态切换发生在什么时候?切换时机?
  34. 智力题
    1、random7 求 random5
    2、3L 5L 杯子 4L 水
  35. 算法题:
    给定一个char数组,使用字符+次数的方式进行压缩,次数为1时只保留字符。 返回新的char数组
    in:['a','a','b','b','c','c','c','d']
    out:['a', '2', 'b', '2', 'c', '3', 'd']
    问:如果某个字符超过10个怎么处理?

6、10-15 字节抖音创作工具三面

上午十一点,终面面试官不是做iOS的。。。

  1. 这次是一个简单的自我介绍;
  2. 项目难点
  3. 缓存大概的策略,什么时候使用缓存,缓存的什么周期
  4. 二级缓存是还没有实现吗?我应该说还没有实现完
  5. 如果实现这个二级缓存的话要考虑到哪些点呢?
  6. APP的开发周期大概是多久?
  7. 代码量大概多少?评估过吗?
  8. 过程中有哪些收获呢?
  9. 项目中新闻视频的资源怎么获取的?
  10. Json和XML有什么区别,优劣势?
  11. Cell复用的原理
  12. 和MVC MVP MVVM?
  13. 了解过设计模式吗?
  14. 项目中有用到过观察者模式吗?
  15. 还有其他的设计模式吗?
  16. 工厂模式,描述一下?
  17. 依赖注入了解吗?
  18. iOS学习过程?通过哪些途径去学习呢?
  19. 看过第三方库源码吗?
  20. 最近有在学什么吗?
  21. 接触iOS多长时间了?什么时候开始学?
  22. git的命令了解吗?
  23. git的机制,怎么实现代码的管理的?思想?
  24. C++智能指针
  25. 网络里边HTTP状态码?
  26. 断点续传的概念?
  27. 输入网址的过程,DNS解析
  28. 数据库了解吗?查询语句之类的?
  29. 写个代码
    反转单词,hello word变为word hello,空间复杂度O(1)

这次真的很可惜,隔了一个国庆假期都还是倒下了。最后算法题其实很简单,可是我太紧张了。。。设计模式答的也不好。本来到这里打算放弃了,第二天HR告诉我没通过,但是另一个部门有意,我想着还要煎熬三轮就想婉拒了,但是HR告诉我是另个部门的业务终面,然后我又打起精神刷了几天题,开始第七面。


7、10-21 字节跳动抖音影像终面

自我介绍

1、tableView和collectionView,如果有数据变更的时候,是这个数据源的reload还是有定向的更新?
2、开发的环境是linux的C++,c++的标准?
3、写了一段C++的代码,返回一个对象然后赋值,大概类似下面:

class A 是一个类

A GetTest()
{
    A a;
    return a;
}
A s;
s = GetTest();

     问,这个过程中调用了哪些函数?

4、操作系统的文件系统?
5、还记得操作系统的哪些内容?
6、项目中多线程场景
7、对自己的评价?在这个软开的领域有什么擅长的地方?优势
我答了比较喜欢钻研原理。然后让举个例子
8、举个例子,我就说了之前研究事件响应链的时候,在进入到APP的响应链之前,操作系统怎么做的,IOKit 到SpringBoard,然后mach port的这个流程。
9、coding了。。。。灾难

题目: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,注意:数字可以是多个。

最后没有完全写出来。。。
10、其他公司的offer情况?什么时候能来实习?
11、后面对自己的定位,想发展成为什么样的工程师?
12、觉得读研究对自己的最大的帮助是?
13、反问,工作时间安排之类的
14、面试官补充问:喜欢什么样的工作的团队氛围和节奏?沟通上的倾向。
15、哪里人?


11-03号HR谈了offer,如释重负,一瞬间有些恍惚,我真的熬过来了。

总结一下

还是按照时间线来总结一下吧?

  1. 对于将来要找工作的朋友们,有一个较为明确的职业规划,或者职业方向真的很重要。

    对于通信电气大类的伙伴们,无非就是

    • 互联网(算法、后端、前端、客户端、测开);
    • 通信类设备公司(华为、中兴、高通、OPPO、VIVO),职能种类更多大家可自查;
    • 国企、央企、事业单位等(不要小看这个选择,隐形福利很多很多,而且国企大牛同样很多,只是确实氛围和互联网不一样,考验人的自我驱动能力,但是轻松不少。能不能解决户口看具体公司)
    • 公务员系列(不同地区有各自的公务员岗位校招分配政策,要求一般有:党员、成绩排名前30%,国奖得主等,满足其一即可,大家多去学校的就业指导中心了解,老师们知道很多信息)
    • 其他,比如外企,我身边没有直接例子的我就不展开了~
  • 身边有提前想好要去互联网工作的同学,早早的在考研的时候就选择了偏向互联网的实验室,项目经历与工作岗位匹配,研一就开始刷题,最后不出意外轻轻松松拿到阿里的offer。

  • 也有开始就想好去国企的,提前准备申论和行测的考试。

    机会真的只留给有准备的人。而我的时间都花在偏向通信的项目,最后又不想去搞通信。且通信的话,基本上只能去华为的无线通信,中兴的基带软开,OPPO的通信协议等岗位。相对来说岗位少,待遇还是比互联网差点。而且身边充斥着去互联网的氛围,也算是被迫驱动,随波逐流吧。一如我考研的时候一般,随大流考个通信原理。本科和研究生一直没有长远一点的职业目标和方向,时间投入很分散,最后找工作就比较被动。

  • 如果你不知道想干什么,那更不应该每天混日子了
    你应该去花时间了解自己适合什么,最好的方式就是去实习。不知道自己是否适合互联网奋斗,那花几个月时间找个实习感受一下。有不少同学就是互联网实习了之后被劝退,转头就去国企的。而且多看看公司的招聘网站,了解职位要求的技能,对自己哪些方面欠缺也能有个概念。

  1. 对于互联网秋招本身,总结一下踩过的坑和个人的心得,希望能改大家带来些许帮助。
    1. 互联网秋招开始的时间:
        往年都说金九银十,但是实不相瞒,我今年听到的最早的提前批,是06-05的VIVO研发招聘。我当时都惊了。然后应该是7月份的字节提前批,8月初的腾讯提前批,至此秋招全面开启。因此,大佬们都是金8银9的。当然,10月也是主要招聘时段,只是大厂少了些坑。11月基本上接近尾声,开始全面开奖,比offer、毁offer、签三方等等。
        所以秋招是一个比较漫长的持久战,首先复习要开始的早。而且对于有些在实习的同学来讲,这是最艰难的时候,可能论文+实习+准备秋招都堆在了一起,但是似乎大家都是这么过来的。
        其次是抱好团,信息共享,面试问题集中讨论,一人面试等于多人都有收获,互相模拟面试,查漏补缺。对了,牛客网上有个ai模拟面试,可以多试试,听听自己回答的录音,肯定会有收获的。
        然后心态要平和,不要因为一时的面试表现而妄自菲薄,面试成长性也是一个重要的特质。
        最后坚持就是胜利。
    2. 投递简历的顺序安排
      我其实是想按照自己的意愿,将想去的公司分梯队投递,先面小公司练练手。奈何大厂开始的早而且普遍效率高,最后先面试的一般都是大厂。而像tx这样的基本就只有一次机会(大佬除外),所以还是要珍惜好每一次面试的机会,并且每次面试的表现都会被记录在案的哈。
    3. 关于内推
      现在内推一般不免笔试,所以内推最大的作用是帮你了解团队内部如何,以及靠谱的查进度。因此,内推人比内推本身重要,牛客上的内推我遇到过很靠谱的,也有没什么反馈的,看选的好不好了,肯建群留微信的一般是不错的,因为你至少能找到他。当然最最最最靠谱的还是直系师兄姐了~
    4. 面试本身
      1. 现在一般都是视频远程面试,牛客网上撕代码。我一般会录个音方便后续复盘。
      2. 自我介绍可以稍微简要一些,重在表现概括能力,稍微引导一下前面的几个问题。
      3. 然后对自己的项目要熟悉,各种引申的知识点要覆盖到。
      4. 基础知识点就是背诵八股文了,不过也不能完全照着网上的背诵,理解过这个知识点然后用自己的话概括是最好的,回答的时候要有一些停顿。但是真的要熟练,如果问了个基础题然后还支支吾吾想半天,真的挺减分(比如我,背的太差了)。
      5. 常见的算法题也要刷的熟练,最好是看到就有思路。不然,面试的时候写代码真的超级紧张,跟平时写题的水平差挺多。这个就无他,唯手熟尔。不知道怎么开始的先在leetcode上多混迹一段日子,有很多大佬经常出现在高赞题解中,他们一般有自己的公众号,跟着学学套路也是不错的。
      6. 面试完马上复盘总结,你不知道下一次面试是不是就在明天。基本上面来面去问题都在哪些范围里,从自己的面试经历沉淀自己,提升来的最直接。
      7. 面试究竟集中在一段时间好,还是分散好。这个事情我觉得可以拿出来说一下:
        • 集中的好处在于,背过的知识不用每次都重新捡起来,还热乎着,坏处是没有太多时间复盘,上次不会的这次又不会,很亏。
        • 分散的缺点就是上次背过的这次又要拿出来背一背。我之前面试的时候总喜欢把面试推迟,安排的错开,但是这样感觉并不好,每次复习的也不会问,反而丢了面试状态。
        • 我个人觉得,还是准备的差不多就冲了,拖拖拉拉也不是个事。

收尾了

好像讲得够多了,先到这里收一收吧,希望大家都能拿到心仪的offer~
任何问题欢迎私信留言,知无不言~

#字节跳动##校招##iOS工程师##面经#
全部评论
点赞 回复 分享
发布于 2020-11-05 19:09
楼主是抖音北京吗,昨天面了抖音HR面,说还在审批中😭
点赞 回复 分享
发布于 2020-11-06 15:50
看你这个抖音的面试总结。感觉问的不简单啊😂。单说iOS这块,其实把你当做中级工程师来问的
点赞 回复 分享
发布于 2021-03-07 00:56
用心了
点赞 回复 分享
发布于 2021-04-01 02:07

相关推荐

22 87 评论
分享
牛客网
牛客企业服务