跳转至

字节面试

220621

虽然我很想快进到结果陈述,但果然还是从头开始说说发生了什么吧。

背景

6.15 18:38 在「Swift开发技术交流群」中一个哥们发「北京飞书开放平台团队招 iOS,实习社招都要,感兴趣的私」。我当天晚上十点半左右看到,刚好我要找暑期的实习,就加了他的QQ。他23:46过了我的好友,我发了「您好 我看到您在「Swift开发技术交流群」里面提到有iOS实习的消息 我现在是清华电子系大三的学生 之前有一些iOS/macOS开发基础 想请问一下您那边的实习需求。这是我的简历。然后他问我要PDF版的简历,我说明天晚上之前发给你。但实际上我很快改了之前申米哈游图形学的简历,然后在0:05的时候发了过去。那边也比较离谱,当天凌晨两点收到文件,十二点说开推,下午一点说联系好了,然后下午两点就有hr打电话给我约时间。我当时还要准备期末考试,所以说定在下周吧,最终说是6.21下午两点,五分钟之后邮件就发到我这边了。

其实挺神奇的。一个是我最开始觉得群里面的那个招聘很敷衍,不像是字节的。另一个是,我原本不了解字节,收到面试邮件后就去官网上看了看,还有一些分析的文章。结果我发现字节好像和腾讯和阿里是平起平坐的啊!这可太厉害了啊。我想了想可能他们那边比较急着招人来做项目吧,我看到那个哥们的空间好像说人不好招。嘛 毕竟是Swift,用的人本身就没多少吧。那我应该还挺合适的,毕竟有实际的iOS/macOS应用设计和开发经验。

但我开始准备面试是在6.20日的晚上。之前一个是期末考试,一个是CCCC的项目需求,还有一个大作业。总之没留很多时间准备。在面试前看了看 Cracking the Coding Interview 这本书。怎么说呢,有了一个对面试大概的印象吧。

面试

很快到两点,说实话我之前非常紧张。但大概提前十分钟突然就不紧张了,然后自如的打开会议室,等面试官进入。只有一个面试官,看起来很和蔼。大概问了这些:

  • 「讲一下你难忘的项目」
    • 我讲了浣熊财记,因为这是我最熟悉的项目了,绝大部分也都是我在构建。大概能凸显的我的能力是管理和开发吧。
  • 「看到你GitHub上的XCLog 简单介绍一下吧 如果有一些需求需要改进 你打算怎么做」
    • 这个我也很容易的详尽的回答了,毕竟是自己手底下的项目啊。
  • 「看到你的博客有关于Swiftfor并发 请问你知道Swift中哪几种多线程的方式呢」
    • 只回答了两种,一个是Swiftfor,还有一个是dispatch到非主线程,因为开发中不能让一些代码逻辑阻碍UI,所以一些操作要放到非主线程。现在想了一下 async await不是可以说嘛...不过自己没用过没说也就算了吧
  • 「看到你的博客有关于C/Rust/Python/Swift的比较 请问类型安全的语言在编译器上如何实现」
    • 不好意思 我不是很懂编译器。但我下学期选了编译原理,应该会有更深的了解吧。
  • 「问一些操作系统的问题吧 进程和线程的区别」
    • 刚学过操作系统还是很好答的。进程划分资源,线程共享单进程的资源,因此要考虑同步互斥。
  • 「线程切换的方式简单说说」
    • 虽然刚学过但是忘记了,提到了时间片轮转,然后还有关于优先级的调度方式,提了Stride算法。但说实话我不是很懂,所以面试官顺便教我了些相关的知识。

然后就是算法了,我真的一败涂地。

「优先队列了解吗」不了解「优先队列就是...」emmm「那咱们换道题目吧 链表知道吗」嗯「做一道链表倒排吧」

然后打开了在线的编辑器,直接开始写。我是真的麻了,就硬写。写之前问我用什么语言,我想了想Swift的指针我是不太熟悉,那还是C++吧,虽然C++不熟。

然后呢,写了可能20min?我连C++的空指针是哪个我都忘记了,nil NIL都试了编辑器报错。然后写了十分钟才想起来是NULL。然后还有编辑器一直有红线,我不知道哪里有问题,结果也差不多是十分钟的时候才想起来当时选择语言的时候,面试官问我要什么语言,他好给我LinkedNode的定义;当时他用了Swift的语法,写了public int data;,我当时复制粘贴早了,没改成C++的语法。害。

然后就是实际编写,这不就是很简单的算法吗,但说实话,我真的没怎么刷过LeetCodeC++非常不熟悉,刚开始真的写不出来。写到后面,突然就想明白了,用了lastcurrent两个变量,while一下马上写好了,但真的已经花了太久了。数据结构真的学的不太行。

(已经快一个小时了)「那我们今天面试就这样吧 你有什么想问的问题吗?」

请问飞书在线平台主要是做什么呢?「给开发者提供构建应用的框架,iOS上的,主要用Swift。」

这时我麻了。

不是应用开发啊。「嗯。」跟开发AppKit框架/SwiftUI框架/微信小程序差不多?写的是框架不是应用?「嗯。」好吧好吧。那我可能不太适合。您也看到了我的数据结构不是很好,我也没有花很多时间去刷LeetCode。我原本以为是写图形界面。「(纠正我说的内容中的三个错误 其中两个是)语言没有那么重要,重要的是看能力。数据结构不管你写什么,都是基本要掌握的东西,你可以不刷题,但是基础知识要掌握的很扎实。」像我这样项目经历很丰富,但是数据结构不太行的同学,有希望吗?「我再确认一下吧。」

面试结束

问题出在哪里呢?信息的不对称。我在面试结束的时候,才想起来应该提前问问那个内推我的哥们,飞书在线平台是做的什么。他只说iOS/Swift,我也没问太多啊。我自己喜欢也适合应用的实际开发,但是你让我开发框架我是真的不愿意。我甚至在面试最后我都想给面试官说,你别招我,我不适合。(当然还是很向往字节的,所以最后还是问了我有没有希望。)写到这段时候,我才想起来可以在字节的社招官网看一下这个岗位到底做什么工作、要什么样的人,https://jobs.bytedance.com/experienced/position/6704447287180921096/detail?use_ssr=1,这不是写的很清楚吗。只怪我没有提前问好,怪我没有提前查信息。太亏了啊,要是提前知道是这样的岗,我不直接把CCCC的项目鸽了,直接开始刷LeetCode啊。

我是那种倾向于看到实际的人。一个代码,能build,能run,修改一个地方之后马上能看到结果——OK,我做。喜欢图形学也是一样的,我想做的就是把计算机中的数据表达出来,呈现在屏幕上。而且说实话,我的数据结构和算法很菜,这份工作我可能真的做不来,甚至做着做着讨厌起来也说不准。

但我知道我这方面的能力是需要十足提升的,数据结构与算法必须重新找一个教程重修一遍,电子系讲的完全不够;Swift也不能仅仅局限于表层,深层的原理也必须懂;想要玩语言,编译器不能忽视,下学期的编译原理必须要学好。打算马上开始刷LeetCode,既然自己不喜欢C++,那就用Swift刷吧,先把简单和中等刷完吧,自己现在还有的是时间,之后自己肯定还要面这种试,所以,尽快准备吧。另外,很多东西也得更深入一些,不能仅仅说Build Successed就觉得没问题。

还是意识到自己很菜这个事实了,毕竟是电子系,不是计算机系或者软件学院的同学,没法指望计算机基础知识很牢固。自己的学习能力还是在线的,亡羊补牢,为时不晚,加油吧!

生活是生活,还是不能用生活的眼光去考量工作啊!


面试完顺手敲的碎碎念:

真的挺破防的 自己太菜了 数据结构和算法完全不会啊 我tm三年学了什么 真就完全没法和计算机系软件学院的同学比吗

没有核心的技术的话 只能被当作轮子使吗

能力到底是什么?学习能力够吗?

数据算法就那么重要吗?

什么是能力 什么是技能 什么是软件开发啊

面试官还是挺和蔼的 先问了我项目 要是先问我数据结构我不是直接死了吗

工作和生活真的是两码事儿 生活你想怎么来怎么来 工作就算了吧

我想要的工作是怎样的?

Swift+面向WWDC和AppleDoc的UI搭建啊

也算是对自己之后学习方向的一个调整吧

用框架和做框架是两回事儿吧


220624

后日谈

这几天也想了想软件开发的涵义。我想一种是面向用户的应用程序开发,这一种开发的核心是敏捷,以最快的速度上线产品;另一种是面向开发者的工具和框架开发,这一种开发的核心是稳定、性能和易用性,要做好长期支持的准备,开发周期往往更长。自己更倾向于第一种,因为我喜欢看的见的东西。

这几天经历了字节的面试,听了华为一个软硬件协同项目的线上交流会,我觉得上层软件在大型企业确实不会很看重,比如腾讯真正做的是云生态,华为做的是标准和研发这样子;毕竟用户软件,只要有学习能力,学一段时间总能写吧。觉得自己还是应该多关注底层的东西,操作系统啊,编译原理啊,性能优化这些,这些才是做软件一定要有的啊。因为我不是贵系或是软院的同学,这一方面我做的真的很差,因此要加把劲多学一些东西了。

目前觉得比较重要的事情有下面这几个:

  • 数据结构与算法重新入门
    • Cracking the Coding Interview (6th)
  • 看C标准书和Swift标准书
    • The C Programming Language (2nd Ritchie Kernighan)
    • ISO/IEC C11 Standard
    • Swift Programming Language 5.6
  • LeetCode刷题 用C和Swift语言 用记事本写代码
  • 复习操作系统
  • 学习编译原理 了解C的架构
    • 看Swift源码
  • 尝试看一些简单C代码的汇编指令 简单期间用RISC-V指令集和QEMU模拟器吧

备注

我在面试前后并没有在网页允许任何字节跳动面试方面的条款、同时在面试中面试官也并未提及面试保密相关的信息,因此我将此次面试经历做记录,发布在个人网站,作为第一次面试互联网大厂的经历,同时督促自己向着更优秀的自己出发。