序言

基于个人在公司的发展情形,以及对未来前端路的展望,这月开始零散请假安歇调度,并出去找公司试试水。

我方向探求头衔是中高等的前端职位,大厂的口试机会很大程度还是要看缘分。
目前面了 2 家中小型创业公司,事情地点上海。

下面就回顾下口试中涉及的题目,在自己做总结复习的同时,能和各位前端道友共同互换进步。
(以下题目答案可能有误,看见谅)

jsp中table上下居中回想及总结前端面试题亲自阅历 PHP

下面开始吧:

常用的布局办法?

回答:流式布局。

我是 java 出身,对前端偏页面设计这块很薄弱,以是平时很少有干系的积累。

常用布局办法,分为如下几种:

静态(固定)布局:传统针对 pc 真个设计办法,常日限定页面宽度,让全体布局稳定。
对付移动端,会利用其他域名来做新的布局设计。
流式布局:也叫百分比布局。
对元素模块的宽高设计百分比,这样能让页面在不同设备下,有“自适应”的调度,但如果在差异较大的设备尺寸下会显得“奇怪”。
弹性布局:基于 flex css 的新特性,使得在当代浏览器中布局设计劳动力开释。
相应式布局:以 bootstrap 为先驱,依赖 media 预备不同设备尺寸的设计,让网页适用多端。

居中实现办法?

我回答:

水平居中:text-align、 margin、flex、position + float 、position + transform;

垂直居中:height+line-height 、 table 、position + margin、position + transform;

方法肯定不止这些,平时事情中我还是方向于调试为主,可以参考如下两个链接:

css 水平居中的几种实现办法css 垂直居中的几种实现办法

相应式布局实现?

我回答:media 、rem

就平时开拓,都是抓个主流组件 UI 库搞吧搞吧,也没有特殊须要同时兼容 pc or 移动端。

真要我设计相应式布局,首先还是回归 bootstrap 看看最佳实践是怎么个办法;

除了对网格栅栏的设计外,另一方面还要找公司设计师一共指定 UI 风格,毕竟设计相差过大写代码也是痛楚的,还不如两套项目。

flex=1 什么意思?

我回答:没有用过,是类似 background 综合的写法。
但表示用过 flex-direction 、flex-wrap、justify-content。

flex 是对弹性布局内 item 元素的 flex-grow、flex-shrink、flex-basis 的缩写,当然我平时没有分外设置过,没这方面的需求。
类似针对 item 还有 order、align-self 之类的属性。

网页性能剖析?

我回答:利用 network 来看各个资源的加载,在构建端做文件大小,打包质量等管控。

后问,还有吗?

利用 chrome 浏览器性能剖析工具 performance ,结果录制得出报告,剖析全体资源的加载,到运行全体周期的情形。
(当然实际开拓,很少对这方面有落地性的指标)

讲下页面重绘重排?

这是基于上面个问题的坑。

我回答:html 加载到浏览器后,会形成 dom 树,异步加载完 css 资源后会形成 css 树,两者结合天生

渲染树(render tree),浏览器针对其做元素的排列(重排),终极进行重绘。

涉及几何元素长宽,位置,dom 的修正都会引起重绘,反复的重排、重绘都会对浏览器性能造成开销。
以是像主流框架都会内部实现一套虚拟 dom 机制。

浏览器剖析报告获取?

我回答:客户端没有故意识的拉出报告剖析,不过自己在 node 做事端有过类似的剖析。

之前在 node 端碰着性能问题,就结合 node 的 heapdump 模块拉出运行时的 dump 文件,扔到 chrome 等分析。
实在都是 profile 文件,相信事理都是类似的。

说下浏览器缓存?

我回答:cookie loaclstorage ?但不是口试官须要的。

我现在搜索了下,除了平时我知道的 expires ,还有 cache-contro 、last-modified 、etag ,表示平时细节还是关注太少。

说下断点续传?

我回答:没用过,但核心是根据文件已读 length 来掌握做事器之后的资源吐出?

但实在是根据 range 和 content-range 两个要求头标识来做的掌握,并且做事器返回的状态码为 206 。

webpack 优化

我回答:由于自己团队是多页面开拓办法,随着项目的增大,打包韶光也到分钟级别,对常规的 webpack 几个 loader 等配置进行调优降到 40s,末了故意识的对业务模块打包办法,乃至降到数秒级别。

当然有实际这方面的文章落地,感兴趣的同学可以看下:

webpack 优化:2 款工具帮你找到构建速率“变慢”的缘故原由webpack 优化:6 种办法让构建韶光达到秒级

webpack 实行顺序

我回答:没有关注过内部源码,不过试问是否是 entry 到 loader,再 plugins 终极到 output ,虽然我知道口试的点不是这个,但总比什么都不说的好。

数组利用过哪些 api

我回答:map、filter、slice、splice 之类。

水平数据构造转树形构造(手写代码)

又是一个接上一题的坑。

我回答:根据 for 循环+递归写了堆 js 代码。
我能想象口试官看到这堆 7788 代码的心里活动(彩笔)

实在我内心已经知道不是口试官的用意。
我实在想用 reduce ,但那时不好意思说出来,由于我平时没用过,当场如果用 reduce 写,我可能脑回路会中断。

下面是我回家实现的,大概思路如下:

异步方法用过哪些?promise 自己实现过吗?

我回答:async/await ,promise 之类。

promise 自己以前玩过,里面便是返回一个高阶函数。
(当然如果那时叫我手写,我又要gg了)

setTimout 事理?

我回答:js 单线程的,对付 setTimout 之类方法会延后实行,当“普通”函数在堆栈中实行完后,末了调用 setTimout 方法。

当然如果回答中能冒出个 事宜轮询 关键字会更加分,可以参考如下文章:

从事宜轮询 Event Loop,看 microTask、macroTask

ssr 实现

我回答:表示目前未用过 vue nuxt 等成熟 ssr 框架,我们的 pc 网站采取 koa + nunjucks/jade 直出页面做 seo 。
(我以为无论利用什么效果都是一样的,无非是字符串渲染。

后面表示,更方向于利用 vue 官网推举的 vue-server-renderer 之类的模块来对项目构建做集成之前有在这块做过 demo 。
无法预估第三方框架带来的风险,会选择偏根本的核心方案。

当然,如果前后端技能栈统一就另当别论了。

vue 源码

我回答:环绕 vue 的 动态相应式数据 和 ast 模板 乱说一通,由于最近刚学习过 vue 源码,内心实在不慌的,但措辞组织我以为有待梳理。

团队新技能选型

我回答:参考社区生态、团队投票、新技能办理的问题、和团队踩坑能力等做了阐述。

项目工程化

我回答:恰好在公司我卖力从项目搭建,团队开拓规范,到 jenkins 持续继续发布全体流程。
以是对此问题就有什么说什么,eslint、jspcd、jenkins 、团队约定之类用到的就都说了。

高流量应对处理

我回答:恰好我们公司架构调度,通过 aliyun 的 SLB 负载均衡实现 ECS 的水平扩容,然后能在高压时段紧急应对。

同时结合前周听到的 serverless 思想抛给口试官,希望得到一定的认可。
(虽然我还没实践过)

总结

大致题目如上,可能还有部分遗漏。
末了还是比较幸运的没有被口试官直接“赶走”,等到了 HR “收割”。
这里还是感谢口试官的耐心,有时候我胡言乱语起来,自己都不知道在表述什么。

对付这次面经,大体三点:

看重平时根本积累。
像浏览器缓存、css 常用的些实现等细节须要特意加深影象,口试不会给你个浏览器 or ide 利用 tab 来遐想试错,不然答不出很掉身份。
学习源码。
这个看觉悟吧,当碰着瓶颈自然就会往那方面研讨,真是让你说个 webpack 之类的道道,平时没研究过,光看别人的总结很随意马虎“看破”的。
看重发展。
团队、项目的现实状况更反应自我的代价,还是要勇于创新实践。
惭愧,我现在还没有写过一个断点续传功能。

期待下周能得到口试结果。