面试记录专刊:第五、六天

184 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

今日面试2家小型公司,感觉面试环节还行。就是谈薪阶段较为尴尬。

一.前端知识

1. SSR(服务器渲染)

对于服务器渲染的争议一直都没有停止,SSR带来的工程维护的成本以及他对SEO带来的优化到底哪个更重要。优化SEO使用预渲染同样可以实现。
服务器渲染原理

  1. 起一个node服务
  2. react 根组件 renderToString渲染成字符串一起返回前端
  3. 前端再重新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