面试对技术掌握不仅仅要会用,还要求了解原理,应该如何应对?
来源:12-6 性能优化-示例
公路不是鹿
2019-11-07
本人目前离职,坐标杭州,前端工作两年多将近三年,最近面试了好多公司(C轮D轮以上的中高级岗位),发现现在更爱问一些webpack性能优化,底层原理的东西;
面试官基本会照着简历扣,然后结合目前公司职位要求深入问一下;
经常被问到的问题有:
1
性能优化方面你具体都做过哪些(除了图片懒加载,CDN,缓存节省请求这些),其实更想问的是webpack分批打包等这种工程实战方向的优化(因为有些公司项目打包很慢,有些产品是运行在pos机上所以招人也是为了解决这些问题),我答出了可以使用rollup(他问了和wepack的本质区别)还答出了使用过happpack,和gzip这些插件,然后面试官就会问这两个插件的原理是什么?还有其他提高性能的方案吗?有自己动手实现过loader和plugins吗?两者什么区别?
2
vue源码有看过吗? nextTick的原理是什么?(滴滴)
3
你对自己有怎样的规划,最近在关注哪些新技术?这个问题我没答好我扯了一下大前端node工程化,pwa,vue3,flutter相关的东西,这地方应该充分准备一下,面试官肯定会深入问,再就是结合职位描述,有些岗位是招跨端开发的;
4
面试有赞的时候问了一下ES6和其他模块化的区别,我大概答出来了,然后又问,require.js的实现原理是什么?vue数据劫持发生在哪个阶段?vue数组处理(push方法的改动)相关源码有看过吗?(这里我没答出来)
5
某D轮公司,问了xss和csrf相关问题,我把概念和防御措施答出来了,然后他问了两个问题,富文本编辑器中应该如何避免xss(我大概答了一下属性方法过滤,实体转义这些),然后他又问session和Token有什么区别,防御CSRF的时候token方法存在哪里要每次都销毁吗?(这里我答的是使用过后要销毁然后随机生成,他给出这样每次销毁会存在并发问题,建议我把token存在window对象上)
6
某D轮公司,如果线上遇到问题,你是怎么处理的?如何回滚?如何打tag命令是什么?分支是如何管理的呢?https为什么更加安全仅仅是ssl吗?DNS加载过程是怎样的?
7
h5 或者小程序首屏加载慢怎么办? (我答出服务端渲染和一些资源整合相关),他问了服务端渲染和SEO有哪些方案,是怎么处理的?如何做到服务端渲染,如何满足SEO(我答出meta头里处理,然后单独一套页面做SEO这里我了解也不多)
8
大搜车还问了一些 缓存相关的头部,我大概答出来etag ,last-modified cache-control;不过他又问了这几个的优先级,问了no-cache和no-store的区别(这里我是真没记住没印象了);然后还问了node自动化构建相关和node内存溢出该如何调试;
像一些vue3的变化,或者网络头优先级区别,这些问题在网上倒是可以搜到.
但是一些SSR/SEO方案,webpack性能方案,线上异常回滚方案,这些也是经常被问到的,而且网上众说纷纭,自己个人也没有太多这方面的业务练习,该如何应对呢?
谢谢老师!
2回答
-
我先一个一个回答你具体的问题。
1. webpack 确实是前端最常用的打包工具,问 webpack 也是情理之中的,webpack 性能优化也是常问的问题。其实网上有很多答案,具体可以搜一下,比我在这里说的都全。happypack ,公共库不重复打包,dll 等。另外,webpack 的一些原理,建议可以具体看一些 webpack 的专题,有系列博客,书籍或者慕课网的课程等。webpack 现在已经是一个单独的知识领域的,你得单独学习。不能指望
2. vue 源码是否看过这个应该不影响你能否入职。关键在于,vue 的一些执行过程和原理是否了解,这些没必要看源码就能知道。nextTick 是常用的一个 API ,它考察的就是 vue 的异步渲染,渲染之后再执行 nextTick 钩子。
3. 自己如何规划的这种问题,你就随意发挥了,说一下接下来想学的东西即可。但是切忌好高骛远,实实在在的说。
4. ES6 模块化是静态编译,require.js 是动态加载,所以 ES6 模块化可以做 tree shaking 。这是最大的区别。vue 数据劫持、push 方法的监听,这都是 vue 响应式的原理,也都不用看源码。vue 数据劫持发生在模板解析、收集依赖的时候。push 或者其他数组 API 是通过修改原型做监听的,比较复杂,这里没法详细解释。
5. session 和 token 最大的区别,session 存放在 server 端,可 token 存储在客户端。至于 token 放在哪里,这个没有标准,看自己业务需求了。
6. 线上问题肯定先回滚,再去排查。打 tag 是一种比较简单的上线、回滚方式,可以搜一下 git tag 的相关操作。分支管理,一般就是 master 是上线分支,dev 是待上线、其他的都是 feature-xxx fix-xxx 分支。https 安全在于信息加密,可以去查一下 https 的加密过程。DNS 查询一般分为浏览器级别、操作系统级别、服务器级别。
7. SSR 肯定是解决首屏性能的最好方案。至于 SEO ,首先必须得是 SSR ,再去做一些 keyword description 关键字等优化。
8. 浏览器缓存机制,这是一个常见问题,问题涉及范围较广,可以去查查。node 内存监控,最好的方式是服务器的 APM 服务,即实时监控服务器 CPU 内存 硬盘等等,如阿里 node 。
212019-11-07 -
双越
2019-11-07
再说一下这些问题如何去学习。
第一,你还是要有自己的一套知识体系,知道前端涵盖了哪些知识范围和知识点,哪些是单个知识点,哪些是汇总起来的系统知识点。
第二,针对系统的知识点,得专门去找相应的专题文章、书籍、博客去深入研究。
这些问题应该都属于高级面试的,甚至有些属于服务端的。我也正在计划升级《JS 高级面试课》,看了一下你的问题,应该大部分都在我的升级范围之内(当然还有其他的高级面试题)。我会尽自己最大努力,尽快把课程升级完,让大家看个痛快。
在升级尚未完成之前,大家可以针对单个问题,单独向我提问。
30
相似问题