前言
零零散散经历了一个月的面试,大厂小厂都有,新技术没有学多少,大多都是查缺补漏弥补一些知识的不足,又或者再有些重点上更加深入一步,总之历程还是很艰难的仍需继续努力。顺带着也要写月末总结,就加在一起了。
HTML
三大基础,HTML是我花费的时间最少的,也是相对来说最容易被忽视的。但是HTML可以说是最根本的,几场面试下来,我发现在HTML上栽的跟头是最多的,这里简单的整理下。
- meta,meta标签是HTML部分问的最多的,主要有定义字符集的meta(charset),优化seo的meta(keywords,description),移动端适配的meta(viewport),以及http-equiv属性的meta(expires,set-cookie)。
- 语义化,对于这方面的总结,我觉得还是要从两方面入手,一是使用正确的标签做正确的事,方便自己的开发以及别人源码的阅读;二是有利于搜索引擎优化(SEO)。同时H5的趋势也是向语义化靠齐,如新增header,footer,删除big之类的。
- 几组概念的辨析,load和DOMContentLoaded,defer与async,Link和@import。
- 表单组件,这也是一次被问到disabled和readonly的区别时,才发现自己对表单属性掌握的比较差,同时对于radio,select,checkbox,textarea等也要去写写demo了解他们的使用。
- 还有问到了localStorage能不能设置过期时间的问题,多个标签页如何通信的问题(webSocket,localStorage监听’storage’事件,SharedWorker)。
- 最后就是一些不太常用却很重要的标签,video,audio,以及canvas之类的,这方面学习的还不够,有待努力。
CSS
CSS是三个基础中学的最好的,首先因为最直观,遇到些不太清楚的问题写写demo就能懂个大概,然后配合一些经典书籍即可。因此关于CSS答错的概率也是最小的,当然也可能和问CSS的面试官不多有关。
- 最常问的自然还是居中,做个三列/三行布局,说说flex属性这样的问题,偶尔也碰到了结合JS的一些复杂布局,但是这样的准备也没什么必要,看你写的HTML多不多了。
- 渲染层与合成层,transform与top这样的比较问题。
- BFC也是常问的,顺带还能引出浮动,定位等问题。
- IFC往往是大家不太看重的,这部分考过我的就是’vertical-align和line-height’。
- 最后是JS和CSS动画之类的问题,这里有一类canvas动画。
JS
- 首先是JS的手写,至少要做到call,bind,apply,instanceof,curry,flat,JSONP,AJAX,事件委托,数组去重,继承,debouce,throttle,copy的手写,Promise我写过,但是没记住。除此之外还有event bus,和一些常见的算法的JS手写。
- 接着是JS基础,这个范围就很宽敞了,挑几个刺头,执行上下文,this,闭包,event loop,回调,还有稀奇古怪的var a = 1与a=1的区别,await加速等等。
- 垃圾回收也是常问的一块,配合V8去讲即可(新生代,老生代),这里往往也会问内存溢出和内存泄漏。
- ES6+的特性基本都会问,顺道再给你转到别的地方去,如TS,babel等。
- 最后除去DOM之外BOM的许多对象也会问,而且通常会问前端路由(location.hash,history)。
Node
node.js或多或少都会问点,不懂的话还是少埋坑:
- 模块化,这里又能扯很多,但是没人问我AMD,CMD的问题了。
- 核心模块,如path,process,http等,我个人掌握的不太好,但是也很少问这个。
- 然后是事件循环,和浏览器按照Node版本的区分开即可。
- 最后是多进程和多线程,被浅浅的问到了一次,说的不是很好,这是很深的一块内容了。
DOM
dom api绝对是非常热点的内容,毕竟现在数据驱动视图,MVVM概念火热,同时DOM API那么多,很难静下心去系统学习,我也只是学了常用的。
- 基础如node和element的关系,attribute和property,节点操作,classList以及event等。
- 事件模型,事件流,事件委托等
- 移动端事件,被问到一脸蒙蔽,典型的有touchstart和click的区别等。
网络
计算机网络问的也是比较多的,这部分常见的比较好背,但是想要全面的理解还是要费很大功夫的。
- 从输入URL到显示页面发生了什么。只有一次被问到,涉及的知识还是很多的,我是分为请求响应和解析渲染两部分来回答的。
- HTTP缓存,协商缓存,强缓存相关内容,头部字段,键值,缓存位置等。
- 跨域,也是经常被问到,每次回答都是从jsonp,cors,nginx三个角度展开,但除此之外还有src属性的HTML标签,websocket,postMessage通信等方式。
- 安全和cookie,多次被问到,无论从安全角度,还是从存储角度,还是从状态角度,哪儿都有他。
- 三握四挥,TCP流量、阻塞控制,HTTP状态码,HTTP方法,TCP和HTTP头部字段等,还有UDP与TCP比较之类的具体问题,我是没怎么被问到,但是也挺重要的。
- HTTPS被问到两次,从加密到数字签名再到TLS1.3都有涉及。
- HTTP2被问到多次,问的比较细致,建议好好准备。
工程化
主要从webpack和babel上讲,个人掌握的一般,被问到的也比较简单。
- 常见的loader,plugin,区别之类的,treeshaking,xhr都是用来干嘛的,也没让讲很清楚,大致说说就算结束了
- webpack生命周期
- babel对于syntax和api的处理方式
- babel-runtime和babel-polyfill的不同
- 性能优化,(白屏,如动态polyfill,loading以及SSR等)
这方面局限于我自己的学习程度不够,其实有很多题目可以深究。
React
个人常用React,虽然Vue也做过,但是避免挖坑还是没说,因此大部分问到的都是React的面试题。
- 生命周期
- setState的异步同步更新,函数签名等
- 所有通信方式(父子,子父,上下文,第三方)
- hooks,优点,缺点
- 怎么解决闭包陷阱?(useReducer或者useState的函数参数,useRef解决React异步回调的闭包陷阱)
- SSR流程走一遍。
- 周边,路由和Redux问我的倒是不多,这部分更看使用的熟练度吧。
- Fiber也没有被问到,suspend too.
- virtual DOM和key被问到两次,就简单说说渲染更新流程和diff就结束了。
- 性能优化。
- 还有些小知识,如合成事件,受控组件,bind(this)等
Vue
原因如上,题目较少
- 生命周期
- v-model,以及Vue怎么实现的观察者模式
- 比较一下Vue和React,为什么你选择React
设计模式
问到了观察者,适配器和单例。
其他技术
- TS只被问到了type和interface的区别
- WASM被问到了,也是简单的说说,反而写了的serverless和graphql的内容没被问到,不过了解也没有到侃侃而谈的地步,没被问的也是好事。
开放题目
- 被问到了怎么看待前后端分离,这个还真没有思考过,首先看如何定义前后端分类,首先,两者联系说紧密也紧密,说自成一体也没有毛病,因此目前的理解,如果前后端可以通过API交互完成整个Web服务,那么我们可以认为前后端是分离的。前后端分离前最典型的例子就是模板语法和服务端渲染,与如今SPA和SSR是有一定的区别的,前者传递是html,后者更多的是通过传递xhr。同时node作为前端工程化的基石,真正把前端从一个html页面提升到了web应用的高度,而庞大的web应用自然要做到各司其职,因此 从这个角度来说,前后的分离也是必须的。
答案很发散,可能随着更多的经验才能更好的体验吧。 - 被问到了自己的规划,从学习和工作两个角度去讲的,这个其实吧自己内心的想法和规划说出来就行,有问题修改,没问题就坚持下去。
- 还被问到了一些团队协作的问题,这种没有正确答案,从自身经历出发说出自己的理由即可。