持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
今日面试2家小型公司,感觉面试环节还行。就是谈薪阶段较为尴尬。
一.前端知识
1. SSR(服务器渲染)
对于服务器渲染的争议一直都没有停止,SSR带来的工程维护的成本以及他对SEO带来的优化到底哪个更重要。优化SEO使用预渲染同样可以实现。
服务器渲染原理
- 起一个node服务
- 把
react根组件renderToString渲染成字符串一起返回前端 - 前端再重新
render一次,绑定bundle.js预渲染原理
是在 webpack 构建阶段的最后,在本地启动一个 phantomjs,访问配置了预渲染的路由,再将 phantomjs 中渲染的页面输出到 html 文件中,并建立路由对应的目录。
2. tree-shaking
树摇的概念与其名字相同:摇掉不会被执行的代码。
webpack5在环境production下打包的话,默认开启tree-shaking,在develope环境下则不会开启。
sideEffects 对于存在副作用的文件,tree-shaking后可以会导致代码丢失。
// utils.js
function effect(){
console.log('effect')
}
// 全局副作用
Function.prototype.call = xxxx
export default {effect}
// a.js
import {effect} form './utils.js'
xxxxxx
上述例子中,utils.js导出的effect函数并没有被a.js使用,如果进行树抖将import {effect} form './utils.js'删除,那么utils.js中的全局副作用就会丢失。所以就需要特殊的配置。
sideEffects可以在package.json中设置
// 所有文件都有副作用,全都不可 tree-shaking
{
"sideEffects": true
}
// 没有文件有副作用,全都可以 tree-shaking
{
"sideEffects": false
}
// 只有这些文件有副作用,
// 所有其他文件都可以 tree-shaking,
// 但会保留这些文件
{
"sideEffects": [
"./src/file1.js",
"./src/file2.js"
]
}
二.算法
对称二叉树
递归比较二叉树的值。较为简单。
三.面经
1. 某金融服务公司
1.1求一下代码输出
var a = { x: 1 };
var b = a;
a.x = a;
a = b = { x: 1 };
console.log(a);
console.log(b);
1.2求一下代码输出
Promise.resolve().then(() => {
console.log("promise1");
setTimeout(() => {
console.log("setTimeout1");
}, 0);
});
setTimeout(() => {
console.log("setTimeout2");
Promise.resolve().then(() => {
console.log("promise2");
});
});
1.3 对类的继承的理解
几种继承方式的比较:
| 继承方式 | 优点 | 缺陷 |
|---|---|---|
| 原型链继承 | 能够实现函数复用 | 1.引用类型的属性被所有实例共享;2.创建子类时不能向超类传参 |
| 借用构造函数 | 1. 避免了引用类型的属性被所有实例共享; 2. 可以在子类中向超类传参 | 方法都在构造函数中定义了,每次创建实例都会创建一遍方法,无法实现函数复用 |
| 组合继承 | 融合了原型链继承和构造函数的优点,是Javascript中最常用的继承模式 | 创建子类会调用两次超类的构造函数 |
| 原型继承 | 在没有必要兴师动众地创建构造函数,而只是想让一个对象与另一个对象保持类似的情况下,原型式继承完全可以胜任 | 引用类型的属性会被所有实例共享 |
| 寄生式继承 | 可以增强对象 | 使用寄生式继承来为对象添加函数,会由于不能做到函数复用造成效率降低,这一点与构造函数模式类似;同时存在引用类型的属性被所有实例共享的缺陷 |
| 寄生组合继承 | 复制了超类原型的副本,而不必调用超类构造函数;既能够实现函数复用,又能避免引用类型实例被子类共享,同时创建子类只需要调用一次超类构造函数 | - |
1.4 HTML的渲染过程
DOM-> CSSOM -> 渲染树 -> GUI合成渲染
1.5 SPA的优缺点
优点:
- 页面跳转流畅,不会出现闪烁。
- 减少了公共资源的请求量。
缺点:
- 首屏加载慢。
- 不利于SEO
1.6 对于闭包的应用
防抖以及节流。
1.7 对于项目性能优化
- 防抖、节流
- 页面的回流、重绘
- http缓存
- 路劲后缀写全,加快构建的时候匹配的速度。
- 多图页面的懒加载
- 将库文件打包成CDN,减少服务器压力。
- 大文件上传下载的分时函数
2. 某无人机数据服务商
没问什么技术的题,聊了很多关于带团队的事。
四.其他
There is only one heroism in the world: to see the world as it`s and to love it