杂项

Author:Helene

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。转载请注明来自Helene的博客


1、浏览器怎么渲染页面(浏览器输入网址按下回车之后发生了什么)

浏览器工作原理:从 URL 输入到页面展现到底发生了什么?

1、键盘或触屏输入URL并回车确认

2、URL解析/DNS解析查找域名IP地址

3、网络连接发起http请求

4、HTTP报文传输过程

5、服务器接收数据

6、服务器响应请求

7、服务器返回数据

8、客户端接收数据

9、浏览器加载/渲染页面

10、打印绘制输出

2、commonjs 和 es6 模块化

前端科普系列-CommonJS:不是前端却革命了前端 CommonJs和ES6 module的区别是什么呢

CommonJs是一种模块规范,最初被应用于nodejs,成为nodejs的模块规范

运行在浏览器端的 JavaScript 由于也缺少类似的规范,在 ES6 出来之前,前端也实现了一套相同的模块规范 (例如: AMD),用来对前端模块进行管理。

自 ES6 起,引入了一套新的 ES6 Module 规范,在语言标准的层面上实现了模块功能,而且实现得相当简单,有望成为浏览器和服务器通用的模块解决方案。但目前浏览器对 ES6 Module 兼容还不太好,我们平时在 Webpack 中使用的 export 和 import,会经过 Babel 转换为 CommonJS 规范。在使用上的差别主要有:

1、CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。

2、CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。

3、CommonJs 是单个值导出,ES6 Module可以导出多个

4、CommonJs 是动态语法可以写在判断里,ES6 Module 静态语法只能写在顶层

5、CommonJs 的 this 是当前模块,ES6 Module的 this 是 undefined

3、redux(数据流)

首先dispatch一个action

然后reducer会收到这个action,根据这个action对状态进行处理

状态修改后会被处理容器捕捉到

从而对相关界面进行更新

4、详解JS深拷贝与浅拷贝

详解JS深拷贝与浅拷贝

5、两个等号和三个等号差别,比如比较类型转化怎么做的

=== ==

6、节流和防抖

浅谈js防抖和节流

防抖:

对于短时间内连续触发的事件(比如滚动事件),防抖的含义就是让某个时间期限内,事件处理函数只执行一次。

节流:

如果短时间内大量触发同一事件,那么在函数执行一次之后,该函数在指定时间内不再工作,直到过了这段时间才重新生效。

防抖和节流常用情景:

1、搜索框input事件,可以使用节流方案

2、页面resize事件,因为只需要判断最后一次变化状况,可以使用防抖

7、301/302等状态码等常见状态码

http状态码:301与302

301与302都是重定向。也就是说原来访问的url跳转到另一个url上。

其中:301是永久重定向,302代表暂时性重定向

8、promise then是微任务 .catch呢

微任务(Microtask)

Promise 的处理程序(handlers).then、.catch 和 .finally 都是异步的,都是微任务。

9、深拷贝json.parse(Json.stringify())能拷贝function吗,缺点

[详解JS深拷贝与浅拷贝](https://www.jb51.net/article/192518.htm

不能

10、什么时候会引起内存泄漏

JS造成内存泄漏的几种情况实例分析

1、闭包

2、意外的全局变量 (为避免这个问题可以在文件开头添加'use strict';)

3、定时器定时器setTimeout setInterval(当不需要setInterval或者setTimeout时,定时器没有被clear)

11、怎么实现没修改文件的时候从缓存中获取,修改才获取最新文件

1、给修改的文件添加版本号,比如是js文件:

<script type="text/javascript" th:src="@{/js/test/index.js(v=#{js.version})}"></script>

12、git分支一般多少

Git 分支设计规范

13、如何处理递归内存溢出

1、添加错误判断语句,对错误进行判断

2、限制递归次数

14、taro在不同平台的实现原理

多端统一开发框架 - Taro

15、type和interface区别

type和interface区别

type是定义类型别名的关键字,通常用于定义联合类型,原始类型等等,比如封装axios请求中method类型
定义就可以用type关键字,而接口不可以。

接口可以合并,比如定义多个同名接口它们会合并到一个,而 type 不可以。

因此,通常我们描述对象的单个数据结构可以用 interface,如果描述的对象有多种数据结构的可能,我们可以定义多个接口用联合类型,然后用 type 给这个联合类型定义一个别名。

16、对于本地多个版本node怎么管理

nvm是node版本管理工具)

17、redux中connect的作用

作用:连接React组件与 Redux store。

18、ES5如何实现块级作用域

使用立即执行函数

(function(){
var a = 1;
})();

19、什么时候会用到闭包

前端面试中让你困惑的闭包、原型、原型链究竟是什么?

希望某些变量常驻内存中的时候

20、react的bind方法作用

bind作用

为了在回调函数中使用this,不然那个this就是undefined

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // 为了在回调中使用 `this`,这个绑定是必不可少的
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState(state => ({
      isToggleOn: !state.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

ReactDOM.render(
  <Toggle />,
  document.getElementById('root')
);

21、如何带领团队

学会如何带领一个团队

22、module.exports和export的区别

module.exports公开了它指向的对象

exports公开了它指向的属性

34、–save和–save-dev区别

--save安装并添加条目到package.json文件的dependencies。
--save-dev安装并添加条目到package.json文件的devDependencies。

区别主要是:
devDependencies通常是开发的工具(例如测试的库),而dependencies则是与生产环境中应用程序相关。

35、如何自己实现new

36、如何实现bind

37、如何复制prototype原型链上的方法

38、如何实现onmouseout事件以及onkeyup事件

39、pwa以及实现

40、层叠样式

41、z-index

42、bem

43、mvc和mvvm区别