引文
本文会介绍一个二本学历普通公司小小开发如何三年迈进字节跳动大门,主要讲的是方法、思维模式、认知升级、学习、技巧,对每个人都适用,对非技术岗位的打工人也通用。
介绍
开门见山,笔者在今年3月份成功拿到了字节前端offer,然而我的经历很平凡,来自一个普普通通的二本,并且在中小公司混迹了三年,还换了3家公司,有1家是被pua每天朝8晚11上6天,有1家还是被辞退的,因为一周要做50个页面就和PM撕逼就差打起来,可以说这种经历想进大厂真的是天方夜谭。你要是刚才很赞同这种想法,我觉得可以慢慢转换下思维模式了,我强烈推荐看看这段谈话,人生的剧本90%都不是我们自己选择的,包括出身、境遇、导师等都没法自己选择,我们要做的就是努力扮演好自己的角色;如果二本学历刚毕业就想着进大厂,往往会因为目标太高步子太大而扯到,我们要搞清楚大厂需要什么样的人,自己距离这样的人还有哪些差距,然后制定目标和学习计划一点点努力,找一些成功的大厂经历文章,去模仿去脚踏实地做,比如参考本篇文章笔者进大厂的真实历程。
面试四要素
简历
一份好的简历能让你跳出学历的桎梏,大厂HR一天要筛选几百份简历,精炼简洁一定是首要,结构排序也是很重要,重要的内容往上放,有以下几个方面可以改进:
结构
- 介绍:尽量暴露关键信息,比如会的技术栈、带过团队、个人学习方法、项目亮点难点
- 工作经历:清晰明确的写出工作干过的事情,承担的角色、个人贡献挑些有挑战的牛逼的写上
- 项目经历:主要是介绍清楚做了什么,担任了什么角色,写出项目的难点和怎么解决的,项目亮点,怎么实现的,原理是什么
- 个人技能:从了解、熟悉、掌握/精通三个维度写,了解的建议不写,被问到反而减分,掌握的一定是会原理,有自己的认知
- 加分项介绍:社区文章、gitlab、博客,不一定全写,挑有内容有深度的写一两个就行
- 获奖作品:不是国家级的建议不写
语言组织
用专业名词保持一致,每个结构下的内容结构都要清晰,比如项目经历下面都可以再分成项目角色、项目概述、项目亮点/难点、个人贡献四个维度,语言要简单通顺有逻辑
排版样式
黑白简历和彩色简历,有照片和没照片,这些细节往往会决定面试官对你的第一印象,至少说明彩色有照片排版好的同学是比其他人更加认真、细心、重视面试
基础功底
武功学的再好,基础不扎实,真正上场打的时候就没法灵活应变(参考马老师被one punch)。街霸5不知道大家有没有玩过,一个角色的连招技能表往往有好几页,但是真正能运用好关键的技能,能打出伤害最高的组合的人,一定是对这些技能都烂熟于心,并且有了自己的思考,练就出官方都意想不到的精彩Combo。比如面试官要问你一个知识点,你如果有自己的思考,就会从知识点的基础概念、运用场景、实现原理、优点缺点、相关知识等方面来回答,这就是有自己的思考,这种人必定是面试官很欣赏的人。试想歌手如果一味模仿别人,但没有自己特有的唱法,没有作词作曲的才能,没有一套自己的体系,那就没办法在挑剔的人群中火那么多年,顶多只能火一两年(除非有脑残粉)。
举个经典面试题例子,说一下继承
- 基础普通级:会说出继承的概念,原型继承、经典继承、组合继承、寄生组合式继承、es5继承的其中一种是如何实现,和背题没啥区别
- 有自己认知级:先说原型继承如何实现,并说出这种继承的问题是引用类型的属性被所有实例共享和在创建 Child 的实例时不能向Parent传参,然后说下借用构造函数(经典继承),他解决了原型继承的两个问题,但是又有新的问题是方法都在构造函数中定义,每次创建实例都会创建一遍方法,那能解决这个问题的自然是组合继承,那组合式继承就没有缺点了吗?当然是还能优化!组合继承最大的缺点是会调用两次父构造函数,如何解决呢,把寄生组合式继承搬出来说明白吧,这样有体系的知识认知是非常重要的,不仅能加强自己对知识点的掌握,还能面试场上一骑绝尘,一听就知道你很NB!
项目
你做的项目NB,那不重要,项目因为你而NB,那才是真的NB
跟基础一样重要的就是你的项目,对于做过的项目,至少要描述出来以下几个点
1.项目简介
- 一段清晰的描述:让面试官了解是干嘛的,做了什么业务,用户群体是谁,你对产品有多了解
- 使用的技术栈:知道你熟练什么,好用人所长
2.负责角色
- 至少写一个项目中的角色:如主开发,参与开发,主要负责人,架构师
3.项目难点
- 知难而能改进:做一个项目下来一定会遇到难点,能够好好复盘项目的人,一定知道难点在哪,如何解决的,有没有更优的解方案,遇到的阻塞点,如何协调之类的
4.项目亮点
- 加分加分加分:把用到的最牛的技术,改进别人的源码,和同类型的项目的优势等全写上,不一定是自己做的,但一定要熟悉怎么做的
闪光点
开源贡献、社区文章、上线的项目、酷炫的个人网站等等都搬出来,准备好几个最NB的来讲,最好把要讲的写下来好好组织下语言多训练下,战士上战场,还得真枪实弹演习下。还有还有!!什么学生会长、组这社团活动、志愿者这些我见一个砍一个,面试官是你的男朋友吗,这么关心你的大学生活?->_-
我是如何准备的
制定目标规划
早在一年前就定好了要去大厂的目标,当时还不大清楚大厂需要什么样的人,一个改变的契机是接触到前端早早聊发布的文章《你为什么迟迟进不去大厂》,总结来说,就是不要因为自身学历、非科班、转岗等因素妄自菲薄,你要做的是用90%的努力来填补这90%的缺陷,比如提升你的社区影响力,发布/参与热门开源作品,为公司项目做到极致的优化、加强团队管理能力等等。于是便拨云见雾,充满信心去一步一步规划如何进大厂,分别从优化简历、夯实面试知识点、训练手写代码提升代码能力、积极参与团队分享(训练语言组织能力和沟通力)、积极承担有挑战的项目提升综合能力(SPA转微前端)、优化团队项目(微前端)、保持阅读技术文章提升认知和知识广度(每天刷掘金首页)、积极参与开源项目改进(参与了开源微前端项目 qiankun的代码贡献)、发布技术文章提升影响力和写作能力(发布了剖析qiankun核心原理等文章)这些方面来一点点提升自己。
基础知识点
脑图梳理
用脑图梳理杂乱的知识点,不仅有助于记忆,还快速定位要找的知识和跳转链接文章,用蜘蛛爬行的方式把每个知识点延展开来,这和谷歌搜索引擎算法如出一辙,你甚至能在脑子里存储这张知识点图谱,因为这潜移默化地用到了联想和关键词记忆法,通过设置优先级和完成度,来加强关键点的印象,而再试想你小时候印象最深的事情,是不是都有一个“动人”的场景,而这个场景就是你联想到的一段段印象深刻的记忆画面的拼接,同样,脑图里的知识点也能以画面的形式呈现在脑海,你甚至可以把脑子当成一个画廊宫殿,给每个宫殿一个房间来放一个知识点以及和他相关的知识图谱。
建立自己的知识点文库
把一些知识点用问答的形式整理出来,多组织语言多改良结构,改到最好的版本然后梳理和记忆,这样不仅能帮你梳理知识结构,也能模拟面试场景,自己做自己的面试官,试着自己问自己这些问题,看能否给出满意答案,我发一个整理的知识库地址可以参考(注意不会的没有答案,有擅长和不擅长的很正常,重要的是把擅长的东西做到极致,如果面试问到不擅长的,可以直接说不会,不要不懂装懂,坦诚不装)
代码手写
列了常见的手写代码,目的都不是看你会不会写,而是看你怎么写的NB,比如节流和防抖,一般人就直接写一个闭包完事,但是真正NB的,是写出下面这种神仙代码(能秒懂的也是仙人)
function throttle(func, wait, options) {
var timeout, context, args, result;
var previous = 0;
if (!options) options = {};
var later = function() {
previous = options.leading === false ? 0 : new Date().getTime();
timeout = null;
func.apply(context, args);
if (!timeout) context = args = null;
};
var throttled = function() {
var now = new Date().getTime();
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = now;
func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
};
return throttled;
}
- 手写符合PromiseA+规范的代码
- 手写观察者模式代码
- 手写vue核心流程源码:实现响应式
- 手写常考js代码:new、call、bind、apply、继承、柯里化、闭包、节流、防抖……
手写常考css代码:所有div居中的实现、双飞翼/圣杯布局的所有实现、清除浮动的所有实现……
项目梳理
也是利用脑图梳理项目,从简介、职责、功能、痛点、亮点五个维度梳理,面试前一定要把这些烂熟于心,不一定要整理很多项目,挑一个最大的最NB的出来,好好给整理好了,倒背如流了,相信面试官不管问到哪都能巧舌如簧,就跟知道自己老婆所有缺点一样()
简历
前面已经说了很多了,这里强烈推荐一波ssh_晨曦时梦见兮的《📝 如何写「前端简历」,能敲开字节跳动的大门?》
让面试官找到你
简历也写好了,接下来要做的就是要让你的简历被大厂HR和技术面试官看到,我第一次投递字节简历是boss直聘上有字节的技术面试官找到我要的简历,当时很突然,也没怎么准备,结果自然就是石沉大海,甚至已读不回了,当时受到相当大的打击,但也没有放弃大厂目标,一直卧薪尝胆坚持上述的准备计划。第二年初春,刚逢成都字节客服平台团队成立的良机,于是HR从人才库中捞到我的简历让我更新后投递,因为这一年来一直在准备,所以二话不说优化了两天简历就投了,不知道是因为急招的原因,还是简历优化的比较到位,一周后就收到面试邀请。这里我其实也有运气的一部分,但是如果这一年内我什么也不做,放飞自我,相信就算简历通过也不一定能过面试。
总结下来有三点:
- 不要怕投简历:不管学历和工作经验,只要你有信心,那就投,不要怕投到很热门的部门,就算没过也会被热心美丽的HR小姐姐捞到其他部门,不要怕在一些平台投递会不会通不过筛选,都尝试下总有人能看到你,不要怕内推人投递简历不够格,内推人微信还能给你指导建议,帮你跟进投递进度,不要怕投了石沉大海,进入人才库热心美丽的HR小姐姐才更好捞人,简历冷冻期不存在的,只要部门需要,否则人才库中都没有记录,让热心美丽的HR小姐姐如何找到你?
- 时刻准备简历:每隔一段时间要更新和优化你的简历,可能这段时间你经历更丰富,看过的文章更有深度,形成了新的认知,学习了新的技能,贡献了更多开源代码和社区文章,时刻给你的简历加分,追求极致,这也是字节范里最关键的一条
- 时刻准备面试:机会永远是留给有准备的人,万一大厂明年新增很多部门急招人呢,试想下现在大厂HR突然找到你要简历,自己能不能有信心。就算简历过关,一面就挂那岂不是白做功,你的能力一定是在简历之上,从上述的几个方面着手,提前一年、半年稳扎稳打地准备,时刻提升自己,这样才会给面试官“惊喜”,觉得自己挖到宝了。记得当时一面的时候,我一直觉得自己答的不好,下来才知道一面评价是很棒,这和平时一点一滴养成的好习惯和自我提升有很大关系,让优秀成为习惯吧!
找早早聊评估简历
还不知道前端早早聊?也许这就是你一直没有进大厂的原因吧,还不快去关注加微信!
面试技巧
开头介绍
- 结构要明确:比如我是介绍个人情况+工作经历+掌握的技术+最近做过的项目+个人学习方法\体系+最近在看的书
- 事先练习:玩游戏的时候通常是看别人操作,脑子会了脚也会了就是手不会,光说不练假把式,别人是天天玩,你连手都没动一下还相会?提前写下来,合理组织下语言通畅,尽量简短清晰,别说简历里已经有的,多暴露你的长处
- 时间战术:结构为什么这么长,不就是为了让你简介的时候多说点,留给面试官问你题的时间少一点增加容错率吗?
甩知识体系
- 问你一个知识点,你把知识点的概念、场景、原理、优缺点说完后还不够,再接着扯知识点相关的知识,全部拉出来欧啦一遍,这样的好处就是,又能说一大堆拖延时间减少后面的问题,还能间接反应你对其他关联知识点的掌握程度,也在面试官心里默默加分了。我当时一个性能优化硬是说了将近10来分钟,只要不被打断,就是你的领域展开<_<
坦诚不装
- 问到不懂的不要勉强回答,不管是知识点还是项目情况,这里的不懂指的是不精通(站在面试官角度思考),面试官问了,你答了,面试官就会默认你是精通的,如果问到卡住了,反而会在面试官心里减分。如果只是熟悉或者了解的知识,可以提前给面试官说你只是了解,然后可以根据你的了解简单说一下,这样就算答的不好也不会给面试官太大心里落差
提前熟悉在线面试编辑器
- 答题的时候一定是在牛客或其他平台远程面,一定会让你在编辑器写代码或算法,这里有个技巧是面试前都可以利用这个编辑器手写下所有会的代码,看下编译有没有问题,还有算法也可以看看结果有没有正常打印,不要面试的时候才去熟悉,这样出问题只会更慌。我刚开始编译代码就出现问题了,setTimeout没生效,还好及时发现换了另外的代码,不然就完犊子
知错能改
- 如果前几面有笔试题没做对,下一面前一定要把题给重新做一遍做对,因为面试评价里会写做对的题目,然后面试官看到你下来自己改了,不用说一定也会给你加分的
面经分享
一面(50分钟) - 平级同事面
介绍:工作经验+开源项目贡献者+掘金新人作者+最近读过的书+自身优点缺点+最近做的项目(成功扯掉7分钟,被打断了)
- cdn怎么处理的,如何恢复?(基础)
- 说说浏览器缓存机制(基础)
- 说一说继承(语法)
- ES6如何继承(语法)
- 我不清楚微前端(我不信),你介绍一下是什么,解决了哪些问题?(基础)
- 说一下vue的数据绑定机制是如何实现的(框架)
- Proxy对比defineProperty做了哪些改善(语法)
- GitLab CI/CD 是你搭建的吗?(工程)
- 谈谈你的项目如何实现灰度发布的(工程)
- 算法题(算法)
给定长度为n的整形数组, 给定小一点的正数k, 找到数组中出现次数大于 n / k 的数字; 1. 假设 n = 100, k = 2, 那么需要找到数组中出现次数大于 50 的数。 1. 假设 n = 100, k = 10, 那么需要找到数组中出现次数大于 10 的数;时间复杂度尽量低该怎么做
二面(1个半小时) - 小组长面
介绍:工作经验+开源项目贡献者+掘金新人作者+最近读过的书+自身优点缺点+最近做的项目(成功扯掉10分钟)
- vue3相比vue2做了哪些优化(框架)
- 如何加快移动端渲染?(性能)
- 沙箱的实现原理(语法)
- 微应用路由如何注册(语法)
- 怎么用路由规则解决加载多个应用(语法)
- 前端模块化机制有哪些(工程)
- 你们的项目怎么进行分支管理的(工程)
- 你在项目中遇到哪些问题,是怎么解决这些问题的,你负责哪部分内容(业务)
- 使用Webapck做过哪些优化?(性能)
- 工程化方面做了什么优化吗(性能)
- 这个微前端项目有哪些亮点?(业务)
- 谈谈对可视化图表技术的选型(业务)
- 了解 monorepo 及其工具吗,比如: babel、 redux,gitflow,UT and E2E(工程)
算法题 (算法)
实现注入器,完成inject函数var DI = function(dependencies) { this.dependencies = dependencies; }; // Should return new function with resolved dependencies DI.prototype.inject = function(func) { // Your code goes here } // 要注入的依赖 var deps = { 'dep1': function() { return 'this is dep1'; }, 'dep2': function() { return 'this is dep2'; }, 'dep3': function() { return 'this is dep3'; }, 'dep4': function() { return 'this is dep4'; } }; // 新建一个“注射器” var di = new DI(deps); // 注射 var myFunc = di.inject(function(dep3, dep1, dep2) { return [dep1(), dep2(), dep3()].join(' -> '); }); // 测试 Test.assertEquals(myFunc(), 'this is dep1 -> this is dep2 -> this is dep3');
- 实现一个字符串匹配算法, 从长度为 n 的字符串 S 中, 查找是否存在字符串 T, T 的长度是 m, 若存在返回所在位置
三面(50分钟) - leader面
主要问的还是项目,比二面的时候问的更详细,抽丝剥茧的程度
- (自我介绍中说了职业规划)为什么想做管理?
- 你对你们的这个微前端应用的业务情况了解吗?面向的客户是谁?他们是怎么使用的?
- 做过Hybird App吗?做的这个App主要业务是什么?
- 你说你贡献过开源代码,能说说贡献了哪些内容吗?
- 说说微前端的实现原理?
- 你有什么想问的吗?
面试要点
可以看到上面的问题基本是以下几种类型构成
- 基础
- 业务
- 性能
- 工程
- 框架
这里不说答案了,答案题型永远在变化,唯有掌握题目背后的底层逻辑,才能够举一反三,相信看到这你已经知道该从何下手了
前端面试宝典
这里分享下笔者的知识宝典,里面对应着这几个方向的知识点都有梳理和学习链接,不夸张的说,没有这份知识宝典笔者绝对是进不了字节的
〉》〉》〉》〉》〉》〉》〉》〉》〉》
宝典在此
《〈《〈《〈《〈《〈《〈《〈《〈《〈
- 第一步:点击创建副本
- 最新面试信息
不知道什么时候字节招人?这里会定期更新!!还有内推链接哦
- 面试手册
这里有一些简历和面试的官方建议
- 内部模拟题
列了100道常考题,覆盖了所有知识点范围,可以帮你梳理和记忆答案,还能跳转知识点讲解文章学习,笔者只做了60道就成功毕业
- 面试要点解析
上百个知识点的学习计划表和学习链接都在这,妈妈再也不用担心你找不到最Nice的文章放心学习了
总结
以上便是本人进大厂前半年做的准备,总结下来是以下几个要点:
- 养成好习惯:提前准备,夯实自己,稳扎稳打,掌握方法,有体系有自律,随时回顾
- 掌握面试核心四要素:简历、基础、项目、闪光点
- 拥有自己的一套知识体系,整理成自己最清晰认知的语言,不断修正理解,不断写代码加强认知
- 制定学习计划和目标:一个月内学完多少知识点,几个月后要投递简历到大厂,简历什么时候找人评估,内推资源找谁要(SuperLLL8523),对症下药,查阅对应大厂高频面试考点并针对性复习
- 掌握自己的一套面试技巧
- 好好梳理你的项目,这是你跟面试官battle的重要武器
- 把简历上写的技术和项目都吃透,面试的过程是发现优点的过程,面试官一般不会问太深简历之外的问题,但前提是得把写上的东西都精通,并且答出来也是让别人懂你是精通的,另外如果问到简历之外自己了解或熟悉的,可以直接说了解但是可以用自己的理解来说一下,别直接说不懂,因为会给面试官一种有困难就放弃的印象。
最后打个广告
好消息!字节跳动又又又开始招人了!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。