头条前端实习岗凉经有感

前言(人生第一次写掘金文章,望轻喷!)


虽然本身是计科院的学子,虽然接触前端已经一年半+,虽然系统复习理论知识体系已经一个月+,虽然又花了两周时间专门针对网上各类面经不难其烦的梳理,虽然有跟着大佬偷偷窃取头条面试第一手情报,奈何本身真的是太菜了仍是被吊起来打!偷偷记个小本本,回顾一下面试时本身是多么愚钝,主要为了记录下本身面试时的心路历程,以及对知识点的天马行空(贬义)(┬_┬)也但愿有面试头条的同志能收获一些情报 前端

面试正文呈上(回答的仅是我的拙见,欢迎指正)


  1. 头条面试官真是亲和呀,一上来就跟你嘘寒问暖,瞬间让人内心放松了不少。一开始就是基本状况了解,何时开始接触前端的呀?大学都学过什么课程呀? 最让人诧异的,面试官竟然丝绝不想问项目经历相关的问题(暗自庆幸,以前面试的大佬项目也是一带而过)!
  2. 谈谈JS中的类吧。 着重说了传统语言中类经过拷贝实现继承,而JS经过原型链实现继承。 那就谈谈原型吧。 说了构造函数建立的时候,会生成一个原型对象,本质上是一个对象,当在实例上找不到属性的时候会经过原型链在原型对象上查找该属性。那就谈谈对象吧。 瞬间就懵逼了,好像历来都没思考过这个问题吗,大脑瞬间过滤一下,大体说了下对象是JS中引用数据类型的一种等等不知所云。(ps: 面完以后躺在床上思绪万千,一直以来看各类原型,原型链的略高深内容本觉得略有成长,还曾沾沾自喜,却未曾想面试的时候对于一些最基础的概念竟不知从何答起,没法也没想到要把回答内容引导到熟悉的知识范畴,太沉溺与知识自己,没重视知识点的基本概念与知识点间的交错关系)
  3. 对继承有了解吧。 说了好几种继承方法,主要强调了组合继承的优缺点,以及寄生组合继承如何解决组合继承的缺点,原本还想说一下Class继承,一想本身没深刻了解过就没敢说了。那就手写个继承吧。 大体实现了个寄生组合继承。
  4. 谈一谈es6的新特性吧 首先说了箭头函数中this的特殊性,又说了let,const造成块做用域等等,接着结构赋值,模板字符串,函参默认值等等。 (原本看到有人的看法说,能够理解为箭头函数中没有this,所以其this是经过做用域查找的,没想到嘴贱的我竟然一不当心顺嘴说出了根据闭包查找,结果面试官就反问经过闭包?我冷静一想按照这个理解,setTimeout中的箭头函数应该就是经过闭包呀,但瞬间慌了正常调用的箭头函数可不是这样,赶忙纠正)
  5. 能实现个三栏布局吗 首先说了下flex布局,又说了absolute+margin布局,最后又说了float+margin/BFC布局,嘴贱的我说了BFC实现自适应有一些弊端,而后又巴拉巴拉说了一大堆,还好以前有准备。
  6. 说一说数组的方法吧。 先想到map、filter、forEach、every、some、reduce,又说了pop、push、shift等等。那应该对map挺熟悉的吧,来用reduce实现一个map函数吧。 菜是原罪啊(┬_┬),尽管面试官提醒了一下仍是没有实现,面完以后网上搜了一下,很懊悔很自责,感受应该能作出来的呀!若是一开始想太多无处下笔的时候,能想到先不用reduce实现个map,而后再将其改为reduce的形式,感受是能作出来的吧 (聊以自慰罢了,仍是代码写少了,以前手写代码的时候大可能是网上各类call、apply、bind、debounce之类,如今换了一下就不会写了,只能说明对JS这个语言没有彻底深刻的了解,仍是浮于表面的这个怎么实现,那个怎么实现,哦,看了别人的代码后我也能本身写出来了,我会了!我真棒!一遇到新的问题就懵逼就去找答案,没有想过本身实现能作到哪里,实现了以后又与别人的实现差在哪里。归根结底开发仍是要多写代码,多思考,注重理论和实践的结合啊!!!)
  7. 对JS事件循环有了解吧。 说了下JS是单线程执行的,用异步来实现非阻塞,而事件循环机制是协调执行栈顺序执行消息队列的一种机制。又说了脚本开始运行的时候代码从上而下执行,遇到异步事件就挂起交给对应的工做线程执行,主线程继续执行后面的任务,待异步完成后将回调放到对应消息队列里,JS同步代码执行完后会清空微任务队列,而后取一个宏任务执行,再清空微任务队列,又说了宏,微任务都有哪些。(感受本身回答的挺好的,还沾沾自喜,却不想言多必失) 你刚刚说工做线程,可是你不是说JS是单线程执行的吗? JS是单线程执行的呀,浏览器有好多线程啊,好比渲染,定时器,网络请求线程,但这不妨碍JS是单线程执行的呀(天真傲娇脸)。我又反问面试官,那JS事件循环究竟是什么样的啊?面试官说的啥我记不太清了,大体是说JS执行环境有浏览器和Node之别, 浏览器V8引擎的事件循环大体也就是你说的那样,可是node依托于libuv线程池。(原本对浏览器和node事件循环都有深刻了解过,但没想到问到JS事件循环的时候本能想到的是浏览器事件循环,且忽略了node事件循环。并且本身好像也只是知道两个事件循环有不一样,且学习了相关机制以备出题能写出执行顺序,可是却并没认真思考过JS及其宿主环境与事件循环的关系,真是不当心就成了洋洋得意的井底之蛙啊)
  8. 学过数据结构是吧,那实现个二叉树任意两节点间路径的查找吧。 (ps: 对不起我太菜了!!!)

面后总结


虽然写代码很菜,可是一直以为本身回答的时候作的很好,但当躺在床上的时候才发觉本身回答的也很屎,心得以下:node

  1. 头条是要招能手写简单业务逻辑,且对理论基础有必定认知的人,大概6:4开吧。而我自己代码就写的少,准备的还都是各类理论假大空,结果一动手就暴毙!
  2. 我对基础知识还算比较重视,常常会对一个知识点看各类文章,而后看到亮点且对本身有收获的知识点就偷走,记在小本本上。本觉得是一种摸索出来的很优秀的学习方法,却未曾想这些我认为正常的"真理"每每禁受不了事实的考验,大概是太沉溺与本身知足的"真理",却并无对其进行进一步的验证。
  3. 关于手写代码这一块,以为仍是平时要多写,多深挖各类实现的关联,这样对JS语言就会有更好的认识。而不是我会这个,我会那个,咦新人?我不会!
  4. 引导面试官,把问题引导到本身确信的,熟悉的知识,而不是本身主观臆测的地方。大忌呀,不过仍是由于对知识的不熟悉的缘由吧!

一些我认为很棒的知识讲解清单


  1. 前端缓存 看完之后收获颇多,把一直以来缓存位置的疑惑也给解决了
  2. Jsonp详解 终于知道Jsonp的真正运做原理了
  3. 跨域详解 各类跨域详解,用promise封装Jsonp实现方式,让我眼前一亮
  4. js常见的内存泄漏及解决方法总汇 不错的总结
  5. JS手写代码 其余都挺好的,感受防抖节流还见过更好的版本
  6. 前端安全知识 终于对XSS,CSRF有个清晰的认识了

终于写完了,人生第一次,真好!es6

相关文章
相关标签/搜索