关于javascript:自学转行成前端工程师三面拿下字节跳动offer

3次阅读

共计 3219 个字符,预计需要花费 9 分钟才能阅读完成。

我是一名前端工程师,艰深地说,就是一只程序猿。

尽管大学业余也确实是 IT 相干业余,但求学期间划水四年,幸运未挂科并顺利毕业,找的第一份工作是软件公司的销售类职位,想着多少也算业余相干欢快入职,却无论如何适应不了酒桌上的觥筹交错,工作得痛苦不堪。某天一激动辞了职,而后因为下一步没有方向开始了漫长的就业生涯。

我曾经记不太分明为什么本人过后要抉择前端开发这一方向了。不过前端入门的确简略,不须要一点编程常识你就能做出一个丑陋的动态页面,甚至还能做出动画成果,总而言之,非常容易让人有成就感。或者这就是起因吧。

学习了差不多半年,次要是看网上的视频课程,买了一些学习前端的最新的书籍,刷了很多公司面试题,我开始找工作,而后发现岗位尽管不少,但邀请面试的少之又少。

转行后的第一份工作

第一个面试机会来自一家初创公司,面试之前我缓和到胃不难受。面试官含糊其辞地问我一天能做几个页面。我愣住了,答复从未测试过,所以不好说,于是他现场让我做了一个简略的页面当作测试,而后对速度示意大略称心,随即示意我通过了面试。

我对这样的草率感到大为吃惊,又理解到公司并没有其余前端人员,思量之下还是回绝了这个机会。

在面试我当初所在的这家公司的时候,总监面试我的时候问:“为什么之前始终自学,当初却决定进去找工作?”

我答复:“因为没钱了要过不下去了。”

起初公司老板面试我的时候,问我:“有没有本人学习能力不错的实际证明?”

我想半天答复刚刚总监说我学得还挺快的。

起初我把面试的过程讲给同学听的时候,他笑得前仰后合。不过好在这场面试的终局是好的——我顺利入职啦。

在这家公司做了大略一年半之久,因为集体职业谋求,这家公司无奈提供本人业余和职业倒退的条件,心愿换一家公司,争取到倒退的条件。

这次和之前刚转行找工作不一样,投的都是一些大厂,心愿本人当前有更好的倒退,当然了啦,大公司工资终点高,福利待遇好,这个是毋庸置疑的。

投了很多公司,字节跳动算是比拟心仪的公司,在面试前筹备了很久,刷了很多面试题,,能够说筹备得非常充沛了。

面经局部

一面 -70mins

  • 屏幕正中间有个元素 A, 随着屏幕宽度的减少,
    始终须要满足以下条件:

    • A 元素垂直居中于屏幕 *
    • A 元素间隔屏幕左右边距各 10px;
    • A 元素外面的文字”A”的 font-size:20px;程度垂直居中;
    • A 元素的高度始终是 A 元素宽度的 50%; (如果搞不定能够实现为 A 元素的高度固定为 200px;)
    • 请用 html 及 css 实现

函数中的 arguments 是数组吗?若不是,如何将它转化为真正的数组

请说出以下代码打印的后果

 if ([] == false) {console.log(1);};
 if ({} == false) {console.log(2);};
 if ([]) {console.log(3);};
 if ([1] == [1]) {console.log(4);};

请说出以下代码打印的后果

 async function async1() {console.log('async1 start');
 await async2();
 console.log('async1 end');
 }
 async function async2() {console.log('async2');
 }
 console.log('script start');
 setTimeout(function () {console.log('setTimeout');
 }, 0);
 async1();
 new Promise(function (resolve) {console.log('promise1');
 resolve();}).then(function () {console.log('promise2');
 });
 console.log('script end');

实现 ES5 中 Function 原型的 bind 办法,使得以下程序最初能输入 ’success’

 function Animal(name, color) {
  this.name = name;
  this.color = color;
 }
 Animal.prototype.say = function () {return `I'm a ${this.color} ${this.name}`;
 };
 const Cat = Animal.bind(null, 'cat');
 const cat = new Cat('white');
 if (cat.say() === 'I\'m a white cat' && cat instanceof Cat && cat instanceof Animal) {console.log('success');
 }

请用算法实现,从给定的无序、不反复的数组 data 中,取出 n 个数,使其相加和为 sum。并给出算法的工夫 / 空间复杂度。(不须要找到所有的解,找到一个解即可)

 function getResult(data, n, sum) {}
  • 反诘环节

一面完结,第二天下午 hr 打电话约二面。

二面 -45mins

代码运行后果

var a = function () { this.b = 3;}
var c = new a();
a.prototype.b = 9;
var b = 7;
a();
console.log(b);
console.log(c.b); 
  • JS 继承如何实现
  • repeat 实现,应用 JS 实现一个 repeat 办法,调用这个 repeatedFunc(“hellworld”),会 alert4 次 helloworld, 每次距离 3 秒
function repeat(func, times, wait) {
}
const repeatFunc = repeat(alert, 4, 3000)
  • 代码题 + 逻辑:给定一个整数数组,每个元素大小都在 1- 100 之间,对这个数组进行排序。范畴扩充到 32 位整数怎么办?(能够敲代码,也能够讲思路)
  • hash 表构造,解决抵触的方法,hash 函数有什么类型
  • 凋谢题:学数据结构或者算法过程中,有没有什么中央感觉很奇妙
  • 反诘环节

二面完结,当晚 hr 打电话约三面,那个冲动啊,终于过了二面了

三面 -50mins

  • 模式匹配,
    1234567890 ->1,234,567,890(不是简略的 JS 函数,是应用正则做的,这边踩坑了)
  • 浏览器的缓存策略
  • 跨域问题
  • 我的项目的技术难点(讲了第一个‘难点’,大佬说,这如同不是难点吧?)
  • JS 如何性能监测,如何监测用户页面是否卡顿(不懂,强答,聊了一会大佬说跳过这问题吧)
  • 解决 hash 抵触的方法
  • 数组和链表的区别
  • 浏览器渲染过程
  • 手头 offer 状况
  • 为什么抉择前端?
  • 反诘环节

三面有感 :前两面都是做题 + 原理的面试状况,三面回归了聊技术的形式。可能因为是大佬面,总感觉压力很大,一股本人凉了的感觉(可能是因为太菜了),每个问题面试都会始终诘问,问到你答不进去为止才换问题。三面总共有两次被面试官说“不聊这个了,咱们换个话题吧”。

三面完结后,真的是慌得一批,复盘完感觉每个问题面试官都不是很称心,感觉凉了,着急得期待后果。恰巧是周五,如果当天等不到后果,那就可能要等到下一周了,果不其然当天没音讯。

周六下午等不住了,发短息问了 hr。要特别感谢 hr 谢谢,非工作工夫帮我查问后果,通知我通过了,第二天会分割我。(心田其实超级冲动)

总结

从转行到当初,差不多两年的工夫,虽不能和大佬相比,但也是学了很多货色。我集体在学习的过程中,习惯简略做做笔记,不便本人温习的时候可能疾速了解,当初将本人的笔记分享进去,和大家独特学习。

集体将这段时间所学的常识,分为三个阶段:

第一阶段:HTML&CSS&JavaScript 根底

第二阶段: 挪动端开发技术

第三阶段: 前端罕用框架

PS

  • 举荐学习形式:针对某个知识点,能够先简略过一下我的笔记,如果了解,那是最好,能够帮忙疾速解决问题;如果因为我的笔记太过简陋不了解,能够关注我当前我还会持续分享。
  • 大厂的面试难在,针对一个根底知识点,比方 JS 的事件循环机制,不会上来就问概念,而是换个角度,从题目动手,看你是否真正把握。所以对于概念的了解真的很重要。
正文完
 0