小红书 10.16 一面 (50min)

自我介绍

混合问

vue/react这类框架出现的原因,解决了什么

(原生)Vanilia js -> JQuery -> Angular -> React/vue

JQuery (2006):

  • 内部解决浏览器对JS的兼容问题(原生JS需要为不同的浏览器编写不同的代码)
  • 链式调用,解决DOM操作繁琐问题
  • 写的更少,做得更多

Angular (2009):

  • MVC/MVVM 架构,将应用分为模型(Model)、视图(View)、控制器(Controller),解决了数据视图不同步的问题(数据变化后,需要手动找到对应的DOM元素并更新其内容/用户操作DOM后,也需要手动更新JS中的数据)
  • 双向数据绑定,响应式自动更新
  • 从操作DOM的思维转变到构建应用的思维

React (2013) / Vue (2014):

  • 虚拟DOM,大大提升了性能
  • 单向数据流,数据流更清晰可预测
  • 组件化,组件逻辑可复用灵活性低门槛

为什么用Monorepo,其他架构有没有实践,各自的优缺点

自己说项目

完整讲了响应式模块,从effect到深层实现再到各种API的实现和逻辑复用

数据变化响应式如何更新到页面上

runtime层,虚拟节点,diff头尾指针比对算法,最长上升子序列,最小化更新DOM节点

有没有除 Vue外 MVVM 的实践

学源码是出于什么原因

有没有用过AI编辑器(cursor、trae)

接触过React吗

项目是怎么学习和构建起来的

组件库跟视频,源码从入口拆解和画思维导图

常见的响应码

首屏优化的方法

讲了CDN、SSE、SSR、水和

事件循环场景题

1
2
3
4
5
6
7
8
9
10
11
12
setTimeout(function () {
console.log(1)
}, 0);

new Promise(resolve => {
console.log(2)
resolve()
console.log(3)
}).then(res => {
console.log(4)
})
console.log(5)

非常自信地说23541

变式

1
2
3
4
5
6
7
8
9
10
11
12
setTimeout(function () {
console.log(1)
}, 0);

new Promise((resolve, reject) => {
console.log(2)
resolve()
console.log(3)
}).then(res => {
console.log(4)
})
console.log(5)

犹豫地说23541

问为啥,还问这个4会不会输出

HTTP 和 HTTPS的区别

HTTPS怎么加密

非对称加密:交换身份验证和密钥
对称加密:数据传输

对称加密和非对称加密哪个算力消耗高

用户输入URL到页面渲染的全流程

遇到script标签会怎样

script非阻塞方法

defer、async

defer、async的区别

defer(延迟) async(异步)
HTML文档解析完后 脚本下载完后(立即执行)
保证先后顺序 脚本竞态
DOM树已构建完成 需小心操作DOM(DOM树可能未构建完成)
多脚本/依赖执行顺序/依赖DOM 独立(不依赖DOM,顺序无关紧要)/尽可能快执行

算法

力扣Hot 100:搜索二维矩阵 II

实现函数:
传入两个已知参数 (二维数组, 目标值),如果数组内存在目标值返回 true,反之返回 false
要求实现最优算法

二维数组:每一列从左往右递增,每一列从上往下递增
example:
[
[1,2,5,6,10],
[3,8,11,12,13],
[7,10,20,30,40],
[40,41,42,90,100],
[41,44,60,1000,10000]
]

目标值:
example:5

最后拿dfs实现了,但不是最优解法,定义二维数组的JS语法写错了被问是不是python写多了……

业务介绍

反问

问面试表现说是公司不让说,然后最后还是说了下算法这块扣分项有点多