从网易到字节,专升本的校招经验分享

AlwaysBeta

共 6149字,需浏览 13分钟

 · 2022-07-24

最近看到一篇文章,作者专升本,可以说并没有多么豪华的背景,最终签约字节。一路走来,可以看到作者背后的努力和付出,分享给大家,与大家共勉。

本文转载自 itsuki,转载信息如下:

作者:itsuki
链接:https://itsuki.cn/article/177

如果有小伙伴看过我之前发过的 2021 总结文章, 就知道我当时的一些情况, 去年的这个时候, 我也在准备秋招, 刷着题目、看面经等等, 这篇文章来说一说校招自己的一些心得, 备战秋招, 需要准备简历、算法、专业知识、项目/实习这四个大方面。

以下都是文字, 有点枯燥, 但是有用~

简历

首先是简历的问题, 最好是找朋友、学长学姐看看, 问一问他们有没有修改建议, 或者在掘金上面找关于简历的文章, 进行相对应的修改, 这个我就不细细展开了。

这里推荐几篇掘金的文章, 可以参考一下~

  • 如何写「前端简历」,能敲开字节跳动的大门?
  • 看过 100 份前端简历之后,汇总一下常见的问题
  • [译] 如何写一篇杀手级的软件工程师简历

算法题

刷算法要有目的性,知道面试、笔试(随缘)中常考哪些对于准备校招很有帮助。我一开始比较盲目,所以刷这个刷那个,浪费了很多时间,所以在这里推荐几个对我帮助比较大的仓库。

笔试算法题:

  • 李威威大佬
  • acwing 算法基础课也可以试试(不过需要几十块 💰)

面试算法题:

  • CodeTop 前五页
  • 剑指 offer
  • leetcode Top100

笔试算法题,我比较推荐李威威,他的 leetcode 题解以及 github 操作对新人比较友好,面试算法题可以优先刷 CodeTop,其次就是剑指 offer、leetcode Top100。

别看到以为很多就慌了,面试算法题这三个里面有很多重复的,刷完我相信面试的时候 80% 的题都可以做出来(不敢说的太绝对,怕对打脸,哈哈哈哈哈)。

刷题

在我刷题的话,我会先看看有没有思路,搜索自己脑海中的算法,看看哪个比较适合,如果没有思路的话,先暴力破解看看能不能弄出来,暴力解法锻炼一个想法到实现的过程以及编码能力,如果暴力不能弄出来的话,可以看看题解,看看别人的思路,再尝试把它写出来,我自己是会把一个题目反复刷,我觉得 y 总有一句话说得很好: “一遍不知道,刷个五遍,我就不信你不知道”。

特别是一开始学一个算法的时候,很容易陷入一看就会、一做就废的情况,别慌张,大家也是这么过来,你需要时间好好成长。

我一般会多看看几个人的题解,看不同人的答案,每个人看待问题的角度和解题思路都不一样,多学一种思路面试、笔试多一份把握(这个真的有用、特别是面试中的算法题)。

如果一直在刷某一系列的题,可以尝试进行总结,比如说二分查找 二分的使用场景,什么时候用到二分,这个自己去总结,下次比如说看到有序的时候,看到每次都可以排除一半的情况,能不能想到二分?

合理的背模版,基础算法(比如说排序)这些最好是自己能够轻车熟路的写出来。

算法准备好了,别忘了熟悉笔试的环境,原因有两点:

  1. 我们可能平时用 leetcode 使用的多,它不需要我们处理输入和输出,但是笔试中绝大多数是要自己处理输入、输出的,所以你要搞清楚你所使用语言的输入、输出,特别是输出,有时候多个空格啥的,比较难排查。
  2. 刷题的时候不妨使用牛客、leetcode 等网站上的编辑器,尽量脱离本地 ide(个人建议)。

我问了一些校招的小伙伴,他们说一般是本地 ide,但是我自己在笔试以及面试过程中,有一些情况是网站的 ide,所以采不采用看个人啦。

我在刷题的时候,很少借用智能提示、一般都是自己敲, 原因有两个:

  1. 笔试有时候是在某些网站(牛客、赛码)上进行,如果没有提示的话, 那就直接尬住了,比如说想使用 Java 的优先队列 Prority 单词不会写, 知道思路想写也写不出来。
  2. 加深 API 的熟练度、加快自己打字速度(好像没啥用),面试很多情况都是牛客等网站,说实话我感觉它们的代码提示不得行,还不如自己手敲快一点。

平时用 IDEA、vscode 有智能提示舒服得很,但是网页上的 Ide,不要对它抱有太高的期望,有智能提示算是不错的啦,当然如果笔试的时候允许你在本地 ide 写是最好的。

笔试

在笔试的时候要把握时间,我一般会先把所有的题目都扫一眼 看看哪个题目有思路,然后就做那一道题目(全都不会, 叉出去),然后分为三种情况:

  1. AC: 能够很快的 AC, 🐮 呀。
  2. 卡思路: 某一道题目一直卡在 80%、90% 的时候,这种可能是卡边界、输出、超时了,比如说传一个特殊值(null、’’、在数据范围內特别大的值),看看哪一步没有做好边界判断,如果是返回字符串的题目,要小心有没有多打空格。
  3. 完全不会: 如果实在不知道怎么写,可以尝试”骗”测试用例,我称之为(面向测试用例编程),比如说有一些题目问你返回true、false,这种最简单,你直接返回true、false就可以过一定的测试用例,当然企业笔试不会那么傻,出只有两种可能性的题目,那不妨试试一些特殊值,比如说0、''字符串这种特殊的样例,或者说看看能不能把测试用例的答案搞出来,如果搞出来测试用例的答案,至少也可以过一些用例,总比空着好一点。

面试

面试比较看运气和临场发挥能力,运气好出得那个你就会,那就美滋滋了, 而面试中的算法,经过我这么多轮面试的手撕题,无非就是这几种: 链表、滑动窗口、栈、优先队列、二分、二叉树、回溯、深搜/广搜,动态规划相对来说比较少,但是主要是这些,所以可以刷上面推荐的算法面试资源的题目。

其次面试中我总结了四个要点:

  1. 我一般会掌握至少两种解法,就拿最简单的两数之和,有暴力、Map、双指针的方式,面试的时候看到我用暴力的解法写出来了,面试官可能要求进行优化、或者换一种思路来实现,如果优化、换一种思路也能够写出来了就是一个加分项。
  2. 我基本上都会使用本地 ide 进行 debug,了解每一行做了什么,为什么要这么写,这个很重要,在面试过程中有很多面试官会在你写完之后会要你解释一下,然后还会问时间、空间复杂度以及思路是什么。
  3. 在面对没有思路的题目时,可以问一下面试官可以提示一下吗? 先把思路理清楚再去写,你写代码的过程面试官都能看到,如果你总是删了改、改了删的话,会给面试官一种想到哪里写到哪里,没有整体的把握,即兴 freestyle? (我就是这么过来的,导致有一些面评就是想到哪里写到哪里, 没有整理把握,扎心了。)
  4. 如果代码有一点点问题,别慌,这个时候就是考验的是 debug 能力, 我一般都会准备好笔和纸在旁边,然后自己在草稿本上把流程走一遍,看看哪里有问题然后再做相对应的修改。

专业知识

接下来就是专业方面知识的准备了,我当时是边刷算法边准备专业方面的知识,比如说一天上午写算法题,下午看面经啥的。

最快速的路

我个人觉得比较好准备秋招的方式就是: 看牛客网上的面经,不懂的地方去搜索,根据自己的查到资料,用自己的话总结出一个答案出来,不是直接复制别人的!

总结出一个答案也可以理解成: 用自己的语言描述出一个问题的答案。

为什么我要这么说呢? 现在去网上搜面试题一大堆,他们都会告诉你答案, 然后把这个答案强行灌输给你,这个就是问题的答案,你就答这个就可以了,但是你自己不去实践,自己不去动手你可能都不知道,有些答案是错的,或者说答得并不全。

所以在准备的时候,别偷懒,一个问题自己去搜索然后实践总结出自己的答案,我相信这种方式并不会比你直接背答案慢!

八股文除外(为什么会有八股文这种东西!)

题外话: 当时和小伙伴调侃,牛客怎么面经还没更新,哈哈哈哈哈。

多说

在准备的面试过程中,面经就是面试官,你就是面试人,自己在心里进行解释,解释的清楚说明你懂了,解释不清楚就说明不懂,一定要去找出自己的答案。

千万不要有一种错觉,这个我知道、可以跳过,我之前也有这种错觉,以为自己知道就真的知道了,但是自己知道和面试官说清楚是两码事,能够用简单清晰的语言跟面试说清楚才是真正的理解,我之前春招就是以为自己知道就是真的知道了,然后春招的时候说的支支吾吾,表达也不清楚。

多写

前端会出现实现一个 xxx 这样子的手撕题,这种题目很考验代码功底,在你写的时候,面试官能够变量命名、api 的使用、函数是否封装等各个方面对你有一个整体的了解。

我的建议是多写代码,去看别人的代码,看他们写代码的风格、思路以及命名,有什么地方可以借鉴的。

最简单的一个例子: 实现一个数组去重、排序、扁平。

var arr = [
  [1222],
  [6785],
  [3459, [1112, [113, [14]]]],
];
fn(arr); // 去重 + 扁平 + 排序

我们可能就直接一把嗦了,但是这样子写的话,不利于代码复用的,我们尽可能的保证一个函数只做一件事情,所以我们不妨将这个拆成三个函数,然后再利用一个辅助函数让它依次执行。

// 去重
const unique = (arr) => [...new Set(arr)];

// 扁平
const flatten = (arr) =>
  arr.reduce((acc, v) => acc.concat(Array.isArray(v) ? flatten(v) : v), []);

// 排序
const sort = (arr) => arr.slice().sort((a, b) => a - b);

// 管道函数
const pipe = (...fns) =>
  fns.reduce(
    (f, g) =>
      (...args) =>
        g(f(...args))
  );

pipe(flatten, unique, sort)(arr);

项目和实习

项目

有多少小伙伴和我一样,写到一半或者写完了就不管了,把它放在那里,然后写简历的时候就尴尬了,心比较虚,不知道自己做了啥,也不知道怎么做的,所以我的简历在春招的时候项目一直都是一个博客(19 年写的)以及 xxx 管理系统。

到秋招的时候,我觉得这样子不行,然后用自己喜欢的技术重构了前端并且一直在迭代更新,做完之后我发现一个完整的产品,能够不断的去迭代开发,它要比你做一半、做完了不管的项目强太多了,因为一个完整的产品你会参与到技术选型、UI 设计、后端接口开发(数据库设计)、前端开发、开发维护、可能的话自己搭建 ci/cd,这些东西都是自己去尝试的。

特别是优化某一个变量名、优化某一个方法、解决某一个 bug、进行一些点的性能优化的时候这些都是你可以面试中展示的点,因为它是你一直迭代的项目, 所以你也会非常熟悉,如果要你讲项目难点,你也可以娓娓道来。

实习

如果在一家公司实习的话,面试官还会问关于实习的东西,最容易问的问题是实习做了什么,为什么要做这个,做这个碰到了什么问题,有了解做这个的背景嘛? 所以在准备的时候以”为什么、做什么、怎么做”的来进行准备, 好好的了解下当前业务的背景以及一些难点。

小结

总结就是: 扬长避短、禁止埋坑。

  1. 面试官对你的了解,就是通过简历,所以他肯定会问简历上的东西,每一个知识点都要搞明白,别想着为了简历光鲜亮丽,啥都写上去,到时候面试有你难受的,别给自己埋坑。
  2. 面试中的时候,如果碰到不会的问题直接说不会,面试官不会因为这一个问题否定掉这一整场面试。
  3. 面试中问你实习内容,自己在准备的时候最好去总结好你当时实习做了什么,为什么要这么做,实习中碰到的难点,这个是比较重要的(项目也是如此)。

反问环节

最后一般都有反问环节,我个人一般问一下四点:

  1. 问下这种面试感觉怎么样, 然后有什么需要提升的点
  2. 问问刚刚面试中不会的东西
  3. 问问专业的方向
  4. 公司的做什么、技术栈、新人培养方案

这个可以参考一下别人是怎么问的。

一些小问题

心态

不管自己面试发挥的怎么样,一定要摆正心态,如果发挥的好,给自己积极的心理暗示,好好准备是有回报的,如果发挥的没有达到自己的要求,那就好好复盘,把不会的地方搞明白,谁都会有不清楚、不明白的知识点。

允许自己犯错,切记不要有”一场面试不行,就否定自己”,我之前就是这样子, 面试的不好就心情比较低落, 然后影响自己的复习节奏, 现在感觉有点不太值得。

学历

xxx 公司这么厉害,我技术不好、学历不好,进得去嘛,不要慌,光脚不怕穿鞋的,先投了再说,万一进去了呢,谁也说不定呢。

学历不好可以试试找一个实习攒经验,或者在 github 上尝试开源的东西,总之就是拿得出可以体现你技术水平的东西(学校、实习、开源等方式)。

专升本

一般专升本的同学,简历上只需要写本科时间就好了,如果中间有面试官问起来学校时间两年再说自己专升本,如果面试到了 hr 面,最好说一下自己的专升本学历,担心有些公司不知道你是专升本发了 offer 给你,然后入职了再说自己专升本可能会毁 offer,一般 hr 面过了就说明公司是收专升本的,就不需要慌了。

我该什么时候投

去年我是在 7 月份开始投的,那个时候提前批刚开始,投了字节、百度、网易等公司,我觉得能早点投就早点投,那个时候提前批的字节进到 hr 面, 网易雷火、百度拿到了 offer,还是挺不错的,所以有提前批啥的可以先试试,相当于多一次锻炼自己的机会。

很多同学可能想着是还没学完,会被吊打啥的,不敢投,不要怕,你可以先投一些公司,涨涨经验,再去冲大公司,毕竟真正的面试和自己准备是不一样的,以面试来检验复习成果,用复习来准备面试,相互促进,良性循环。

写在最后

最后做一个小总结,以上的内容:

  1. 做好准备
  2. 稳住节奏
  3. 做好复盘
  4. 保持心态
  5. 拿到 offer!!!

很高兴你能够看到这里,希望我的一点校招心得能够对你有所帮助。最后,每一个努力的人都值得一个 offer 。


推荐阅读:

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报