沪江(23问)
- JS的原型
Javascript规定,每一个函数都有一个prototype对象属性,指向另一个对象(原型链上面的)。
prototype(对象属性)的所有属性和方法,都会被构造函数的实例继承。这意味着,我们可以把那些不变(公用)的属性和方法,直接定义在prototype对象属性上。
- 变量作⽤域链
但我们要使用一个变量时,我们会从当前作用域查找,如果查不到,就去到父级的变量域查找有没有这个变量,一直查到全局作用域,这就是变量的作用域链了。
我们在调试时,可以看到函数里有[[scope]] 属性: 指向⽗级变量对象和作⽤域链,也就是包含了⽗级的 [[scope]]
- call、apply、bind的区别
call和apply都是调用函数,不同的是call的函数参数和原函数,apply则是把参数放在数组里,再拆解开,分配给原函数。当我们不知道传入传递函数变量有多少个参数,用apply可以解决这个问题。
bind是将函数的this指向一个新的变量。不会调用函数。
- 防抖和节流的区别
函数节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件后才触发一次函数。 比如在页面的无限加载场景下,我们需要用户在滚动页面时,每隔一段时间发一次 Ajax 请求,而不是在用户停下滚动页面操作时才去请求数据。这样的场景,就适合用节流技术来实现。
- 介绍各种异步⽅案
- promise的then链式回调
- async、await的同步方式
- react⽣命周期
挂载期、更新期、卸载期
- 介绍Fiber
Fiber 其实指的是一种数据结构,它可以用一个纯 JS 对象来表示:
const fiber = {
stateNode, // 节点实例
child, // 子节点
sibling, // 兄弟节点
return, // 父节点
}
Fiber会根据Fiber树结构和事件优先级来更新。
- 前端性能优化
- 尽量最小化文件,结合Http缓存
- 减少关键CSS的数量,加快页面渲染
- 避免用Table布局
- 避免使用CSS的计算样式
- 图片的懒加载
- 使用事件代理 减少Dom元素事件绑定
- 使用### 防抖(debounce)/节流(throttle)### 减少Dom的不必要更新
- 介绍DOM树对⽐
Dom树的对比。
从Root元素开始,对比元素的属性,如果元素中有子元素,还有对比子元素。
- react中的key的作⽤
加快Dom的Diff运算,例如:如果key在这一层不存在,则认为是新增的元素,这样就不用对齐其中的属性来确定是否新增元素了。
- 如何设计状态树
- 根据业务类型分开
- 尽量不要太深,扁平化
- 介绍xss,xsrf
跨站脚本攻击(Cross Site Scripting);
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF;
- http缓存控制
第一次向服务器发请求时,浏览器会缓存协商。
后续向服务器发请求时,检查缓存是否过期,如果缓存过期,请求服务器,
- 项⽬中如何应⽤数据结构
能不用就不用
- native提供了什么能⼒给RN
React Native把React代码,转化成原生渲染,不需要借助WebView
- 如何做⼯程上的优化
- 代码压缩
- 自动编译
- 自动发布
- shouldComponentUpdate是为了解决什么问题
render频繁调用
- 如何解决props层级过深的问题
redux
- 前端怎么做单元测试
jest
- webpack⽣命周期
Webpack 函数的核⼼逻辑是:根据配置⽣成编译器实例 compiler,然后处理参数,执⾏ WebpackOptionsApply().process,根据参数加载不同内部插件。在有回调函数的情况下,根据是否是 watch 模式来决定要执⾏ compiler.watch 还是 compiler.run。
- webpack打包的整个过程
查找入口文件,根据入口文件和配置中的加载器,加载模块,文件编译,将结果输出到出口文件。
-
常⽤的plugins
-
BannerPlugin:对所有的文件打包后添加一个版权声明
-
uglifyjs-webpack-plugin: 对JS进行压缩混淆
-
HtmlWebpackPlugin:可以根据模板自动生成html代码,并自动引用css和js文件
-
Hot Module Replacement:在每次修改代码保存后,浏览器会自动刷新,实时预览修改后的效果
-
copy-webpack-plugin:通过Webpack来拷贝文件
-
extract-text-webpack-plugin:将js文件和css文件分别单独打包,不混在一个文件中
-
DefinePlugin: 编译时配置全局变量,这对开发模式和发布模式的构建允许不同的变量时非常有用
-
optimize-css-assets-webpack-plugin: 不同组件中重复的css可以快速去重
-
pm2怎么做进程管理,进程挂掉怎么处理
pm2是守护nodejs进程后台运行的,异常停止后可以自动重启,并且也可以袒护其它第三方的命令行程序,比如php的命令行
pm2 start 启动进程 pm2 stop 停止进程 pm2 list 查看所有进程
- 不⽤pm2怎么做进程管理
nodejs的多进程