字节跳动macOS工程师面试复盘

Posted by CoderLeonidas on October 15, 2019

字节跳动macOS工程师面试复盘

面试间都爆满了,所以在大厅里面试的。面试官人很好,上来就和我握手,人也很年轻

面试官没有让我自我介绍,估计已经从简历里知道了一些我的信息了,所以直接开始面试,以下是我能回忆起来的面试题:

面试题

  • 0 之前工作中负责什么模块,用的什么语言
  • 1 项目中用到了哪些框架
  • 2 怎么做解耦
  • 3 OC里如果一个方法找不到会有什么现象,举几个可能出现这种现象的场景
  • 4 在OC项目里如果程序崩溃要怎么调试,断点打在什么地方
  • 5 有用Instrument进行调试代码的经历吗
  • 6 项目中遇到的最难的技术难题是什么,怎么解决的
  • 7 对c++语言了解吗?c++和OC在语言上最大的区别是什么
  • 8 include 和 import 的区别是什么
  • 9 计算机基础的中的IO是什么概念
  • 10 函数printf和memcopy,哪个是有IO操作的
  • 11 socket算不算有IO操作
  • 12 算法题:2个单向链表有一个交点,形成Y字形,用C语言定义链表节点,并写一个函数求出这2个链表的首个交点位置节点,要求空间复杂度为O(1),使用的是面试官的笔记本,上边只安装了VSCode
  • 13 介绍一下自己的项目
  • 14 看视频过程中涉及到哪些协议
  • 15 什么是长连接和短连接
  • 16 静态库和动态库的区别,分别在内存中的什么位置
  • 17 数组和链表的区别
  • 18 还有什么问题想问的

面试时长

整个面试时间大约1小时15分钟

感受:

  • 1 问的问题都不是很难,但是有些确实是自己没准备好或者基础薄弱的
  • 2 因为自己对计算机基础、网络、这块不是很了解,所以有9、10、11这3题没答上来。
  • 3 因为长期使用的OC语言,最近又专注于Swift的自学,所以C++和C语言没有考虑到,并且已经有近5年没用了,能看懂C++和C语言的代码,但是不会写,所以编程题就撞枪口上了。
  • 4 来而编程题本身是比较简单的,因为一开始我没想清楚,还没写完面试官就来看我的逻辑并指出了我的错误,所以比较尴尬,没有继续写下去,继续问其他题目了。
  • 5 另外编程的时候,面试官给的电脑装的是VSCode,而不是我平时熟悉的XCode,所以不太会用,这点也是意料之外。
  • 6 其中我有提议编程题能不能用Swift语言来做,但是面试官认为我一定是懂C语言的,并且编程工具用的是VSCode,所以依然让我用C语言。
  • 7 总体感觉问的问题都不难,都是平时自己不关心的问题。而自己比较关注的问题反而没有用到,没机会向面试官更好的展示自己

反思:

  • 1 气场不能丢,交流要放松自然些
  • 2 计算机基础、网络知识薄弱,需要加强
  • 3 C++和C语言是比较底层且基础的语言,需要掌握,最起码平时刷算法题的时候可以尝试用C语言也写一遍
  • 4 一定要好好准备自己的项目,其中遇到的问题,回答的时候要有条理,不能支支吾吾
  • 5 字节跳动确实比较重视算法,平时需要多练。我在面试前3天时间看完了《剑指offer》,并在LeetCode上用Swift做了大量算法题。说实话,时间紧加上先前没有数据结构与算法的基础,所以做起来很吃力,对于一些题目不能立马产生思路。后来回顾感觉这题算法题其实很简单。算法题的解题思路,不光要懂书本上的各种概念和常规方法,也需要自己动脑找更好的tips,比如这个算法题,就可以先找出2个链表的长度差值delta,先让长的链表移动游标节点到delta位置,然后在一个循环中同时遍历2个链表,当2个链表的游标节点next指针相同时,就是本题的答案了。同时时间复杂度为O(N),空间上没有分配额外的内存,所以是O(1)。