- 博客(22)
- 收藏
- 关注
原创 Git面试题
介绍Git是一个分布式版本控制系统, 在这类系统中,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。 因为你在本地磁盘上就有项目的完整历史,所以近乎所有操作都是本地执行,举个例子,要浏览项目的历史,Git 不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。所以速度非常
2020-09-25 13:49:29
650
原创 Webpack面试题
为什么使用webpackwebpack是一个构建工具,随着前端技术发展之快,各种可以提高开发效率的新思想和框架被发明。但是这些东西,源代码无法直接运行,必须通过转换后才可以正常运行。构建工具就是做这件事情,把源代码转换成发布到线上的可执行 JavaScrip、CSS、HTML 代码。包括如下内容。代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等。文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等。代码分割:提取多个页面的公共代码、提
2020-09-24 16:32:33
251
原创 js常见面试问题
promise.all了解吗?promise.all可以怎么实现?const什么情况可以改变数据?const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于引用类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。基本
2020-09-16 09:50:15
453
原创 计算机网络常见面试题
HTTPS并非是应用层的新协议。只是HTTP通信接口部分用TSL/SSL协议代替。浏览器向服务器发送请求,服务器返回一个证书,里面包含公钥,浏览器校验证书合法的话,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器服务器用私有密钥解密获取对称密钥(服务器中的共有密钥和私有密钥是一对),然后,双方就通过对称密钥进行加密解密通信了...
2020-09-13 12:12:00
204
原创 ES5继承、ES5继承与ES6的区别
原型链:每一个构造含函数都有prototype属性 (是属性),这个prototype属性会指向一个对象,这个对象就是原型,然后每一个原型对象都会有一个constructor属性,指向它的构造函数,这样就形成了一种链式结构。并且每一个对象都有一个__protp__(dunder)属性,(obj.proto==Function.prototype),当我们访问一个对象的属性或方法时,如果这个对象没有这个属性或方法,就会顺着原型链向上查找。一、构造函数继承重点:用.call()和.apply()将父类构造函
2020-09-09 11:37:08
857
原创 css面试题总结
css样式表优先级!important>作为style属性写在元素标签里的内联样式> 内部样式/外联样式内部样式和外联样式在下面的优先级更高内联样式在下面,内联样式生效,外联样式被覆盖 <link rel="stylesheet" type="text/css" href="./test.css" /> <style> #pp{ color: green;
2020-09-06 08:59:20
621
原创 vue面试题总结
说一下vue2.x中如何监测数组变化针对数组的变化,Object.defineProperty 不能很好的支持,所以在Vue 中,采取了函数劫持的方法,Vue将data中的数组的原型指向了自己定义的方法。这样当调用数组push,splice,unshift等api时,可以更新依赖。如果数组中包含着引用类型,会对数组中的引用类型再次递归遍历进行监控。这样就实现了监测数组变化。由于原来的方法不能正常对数组进行数据劫持,所以我们要对data的数据类型进行区分,所以我们需要改写Observer类:class
2020-09-04 09:33:39
141
原创 react项目总结
你了解hook吗Hook 是react新特性,它是一些可以让你在函数组件里“钩入” React state 及生命周期等特性的js函数。通过使用 Hook,我们可以把组件内一个状态相关的功能放在在一起,而不要把它们拆分到不同的生命周期函数里。常用的hook:1.useState 通过在函数组件里调用它来给组件添加一些内部 state。useState 会返回一对值:当前状态和一个让你更新它的函数,你可以在事件处理函数中或其他一些地方调用这个函数。它类似 class 组件的 this.setState,
2020-09-02 10:16:08
419
原创 VUE项目总结
你是如何上传xlsx文件的?首先使用的是element-ui中的upload组件,然后给组件绑定on-change事件,选择文件之后触发事件回调,在回调函数中new一个FormData()实例,通过.append的方式添加属性值uploadChange (file, fileList) { const formFile = new FormData() const xfile = file.raw formFile.append('file', xfile)
2020-08-31 10:42:36
1189
原创 Vuex
摘录自文档,自己面试用的Vuex 是一个集中式状态管理库,当多个组件需要共享状态时使用,并且可以通过调试工具 devtools,保存状态快照,可以记录状态改变。 Vuex的核心是 store(仓库),store里面维护着state,getters,mutations,actions,modules。Vuex 和单纯的全局对象有以下两点不同:一、Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。如何在
2020-08-30 11:48:22
488
原创 async await
async 代表这是一个异步函数(里面可以有同步的代码),await 后面可以跟任何的JS 表达式,但是它最主要的意图是用来等待 Promise 对象的状态被 resolved。async返回promise对象,async函数像是把函数里面所有异步函数包装成一个promise对象,async函数return的值等于.then()里面回调函数的参数。如果await后面是 promise对象会造成异步函数停止执行并且等待 promise 的解决,如果promise状态由pedding变为resolved则继
2020-08-28 10:16:11
126
原创 JS事件循环event loop:浏览器与Node环境以及vue.nexttick
秋招面试被问到这个问题,查了很多文章,比较零散,所以自己集百家之长,做个整理什么是事件?事件:事件就是由于某种外在或内在的信息状态发生的变化,从而导致出现了对应的反应。比如说用户点击了一个按钮,就是一个事件;HTML页面完成加载,也是一个事件。一个事件中会包含多个任务。JavaScript引擎又称为JavaScript解释器,是JavaScript解释为机器码的工具,分别运行在浏览器和Node中。而根据上下文的不同,Event loop也有不同的实现:其中Node使用了libuv库来实现Event l
2020-08-26 22:42:37
274
原创 &&和||
&& 是与运算表达式,可以理解为当 && 前面的值为真时,执行 && 后面的表达式, && 前面的表达式为假时,返回false。|| 或运算表达式,可以理解为当 || 前面的值为假时,执行|| 后面的表达式。当 || 前面的表达式为真时,直接返回前面的表达式。...
2020-05-23 10:50:08
168
原创 HTML标签
<!DOCTYPE> 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。不同的HTML版本中元素标签大的有效性是不同的。(https://www.cnblogs.com/esshs/articles/157588.html)另外还有一个移动端的视口属性(https://www.runoob.com/w3cnote/viewport-deep-understanding.html)...
2020-05-19 09:38:16
143
原创 移动端web开发——视口
<meta name="viewport" content="width=device-width,initial-scale=1">设备像素:设备屏幕的物理像素,任何设备的物理像素的数量都是固定的。CSS像素:为Web开发者创造的,在CSS(和JavaScript)中使用的一个抽象的层。说明一下:web开发过程中,我们基本使用的都是CSS像素,设备像素基本不会用。例如:width:200px 的元素跨越了 200 个CSS像素。CSS像素相当于多少个设备像素取决于屏幕的特性(是否高密
2020-05-13 17:46:11
239
原创 JS获取子节点、父节点和兄弟节点id的方法
首先了解parentNode,parentElement;childNodes,children,nextSibling 和nextElementSibling的区别之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点的类型一共有3种,元素节点,文本节点,属性节点,从图中可以看出属性节点属于元素节点的分支,一般不常考虑。nextSibling属性与nextElementSibling属性的差别:nextSibling属性返回元素节点之后的兄弟节点(包括文本节.
2020-05-10 11:07:08
4562
原创 JS如何判断数组是Array类型
在说明如何判断一个对象为数组类型前,我们先巩固下js的数据类型,js一共有六大数据类型:number、string、object、Boolean、null、undefined。var str="string";console.log(typeof str); //stringvar num=1;console.log(typeof num); //numbervar bn=false;console.log(typeof bn); //booleanvar a;console.log(typ
2020-05-10 09:18:03
614
原创 JS多源广度优先搜索
广度优先搜索广度优先遍历是按层搜索,从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点所有未被访问的邻结点。访问完第一层后再访问第二层子节点,重复此方法,直到所有结点都被访问完为止。...
2020-04-29 08:54:18
202
原创 React高阶组件
高阶函数与高阶组件高阶函数,是一种特别的函数,接受的参数为函数,或者返回值也是函数成立条件,二者兼一即可。常见的高阶函数a).定时器:setTimeout()/setInterval()b).Promise:Promise(()=>{}) then(value=>{},reason=>{})c).数组遍历相关的方法: forEach()/ filter()/ map...
2020-04-26 11:39:13
124
原创 JS实现无限累加add(1)(2)(3)(4)
这个高阶函数实际也是一个闭包的结构,但是因为并没有把调用过的add赋值给全局变量,所以闭包中的变量a的值不会被保存,即调用结束便释放掉,不会记住之前调用产生过的结果。function add(a){ function s(b){ a = a+b; return s; } s.toString = function(){return a;} return s;}co...
2020-04-26 08:53:14
1500
原创 JS闭包
预备知识首先要明白,JS的作用域是静态作用域。即当定义一个function时,function的作用域是定义function时所在的作用域,而不是调用function时所在的作用域。静态作用域指的是一段代码,在它执行之前就已经确定了它的作用域,简单来说就是在执行之前就确定了它可以应用哪些地方的作用域(变量)。// 静态作用域:var a = 10;function fn() { va...
2020-04-25 15:48:10
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人