完美

[学习|工作|博客|交流平台|完美起航]

作者头像zyw3272018.03.24 16:12 

node基础知识学习

写出Math Array String 自带的方法,各五个给String,添加一个 getLengt()方法,例如var str ='sss'; str.getLength();,结果为 3用 javascript 实现数组去重书写正则表达式,匹配 浮点数下列代码的输出结果varUser={ count:1, getCount:function(){ returnthis.count; } }; console.log(User.getCount()); varfunc=User.getCount; console.log(func());说说你对闭包的理解,闭包的好处编写代码实现,每隔一分钟异步读取一次 file.logs 文件 ,输出文件中的信息怎么解决 javascript 嵌套回调问题session 的原理,客户端禁用cookie后 怎么使用session遍历一个 javascript 对象,例如{name:'lucy',age:15}express 怎么获取,get 和post方式的传参完成一个函数,接受数组作为参数,数组元素为整数或者数组,数组元素包含整数或数组,函数返回扁平化后的数组如:[1,[2,[[3,4],5],6]]=>[1,2,3,4,5,6]

node 45613 3

作者头像zyw3272018.03.24 16:09 

nodejs理论学习

Node基础概念1.为什么要用node?参考答案:总结起来node有以下几个特点:简单强大,轻量可扩展.简单体现在node使用的是javascript,json来进行编码,人人都会;强大体现在非阻塞IO,可以适应分块传输数据,较慢的网络环境,尤其擅长高并发访问;轻量体现在node本身既是代码,又是服务器,前后端使用统一语言;可扩展体现在可以轻松应对多实例,多服务器架构,同时有海量的第三方应用组件.2. node的构架是什么样子的?参考答案:主要分为三层,应用app >> V8及node内置架构>>操作系统. V8是node运行的环境,可以理解为node虚拟机.node内置架构又可分为三层:核心模块(javascript实现) >> c++绑定>> libuv + CAes + http.3. node有哪些核心模块?参考答案: EventEmitter, Stream, FS, Net和全局对象node全局对象1. node有哪些全局对象?参考答案: process, console, Buffer和exports2. process有哪些常用方法?参考答案: process.stdin, process.stdout, process.stderr, process.on, process.env, process.argv, process.arch, process.platform, process.exit3. console有哪些常用方法?参考答案: console.log/console.info, console.error/console.warning, console.time/console.timeEnd, console.trace, console.table4. node有哪些定时功能?参考答案: setTimeout/clearTimeout, setInterval/clearInterval, setImmediate/clearImmediate, process.nextTick5. node中的事件循环是什么样子的?参考答案: event loop其实就是一个事件队列,先加入先执行,执行完一次队列,再次循环遍历看有没有新事件加入队列.但是请务必注意,这一个事件队列的循环,一次只执行一个事件,然后下一次循环再执行一个事件.这是由于javascript的单线程机制导致的,如果一次循环多个事件,就可能会阻塞其它代码的执行.异步执行的叫IO events, setImmediate是在当前队列立即执行,setTimout/setInterval是把执行定时到到后面的队列,process.nextTick是在当前执行完,下次遍历前执行.所以总体顺序是: IO events >> setImmediate >> setTimeout/setInterval(注册事件) >> process.nextTick.6. node中的Buffer如何应用?参考答案: Buffer是用来处理二进制数据的,比如图片,mp3,数据库文件等.Buffer支持各种编码解码,二进制字符串互转.EventEmitter1.什么是EventEmitter?参考答案: EventEmitter是node中一个实现观察者模式的类,主要功能是

node 46381 1

作者头像zyw3272018.03.24 15:40 

node理论学习

1. 启动一个Node Server,通过这个Server访问一个php文件,怎么输出运行解析php后的结果?2. 怎么在Node里实现一个类似php里的sleep()函数?functionsleep(milliSeconds){ varstartTime=newDate().getTime(); while(newDate().getTime()<startTime+milliSeconds); }; sleep(10000);3. Node 自诩异步编程是它的优势,为什么在引用外部包的时候(require()函数)是同步方法,而非异步方法4. Node 里有readFile和对应的同步方法readFileSync,但http.get() 却没有 http.getSync(),如果要实现一个http.getSync(),怎么做?

node 32133 0

作者头像zyw3272018.03.24 15:21 

nodejs相关原理

什么是错误优先的回调函数?如何避免回调地狱?如何用Node来监听80端口?什么是事件循环?哪些工具可以用来保证一致的编程风格?运算错误与程序员错误的区别?使用NPM有哪些好处?什么是stub?举个使用场景?什么是测试金字塔?对于HTTP API,如何利用测试金字塔?你最喜欢的HTTP框架,并说明原因?现在,我们依次来解答这些问题吧。什么是错误优先的回调函数?错误优先的回调函数用于传递错误和数据。第一个参数始终应该是一个错误对象, 用于检查程序是否发生了错误。其余的参数用于传递数据。例如:fs.readFile(filePath, function(err, data) { if (err) { //handle the error } // use the data object});解析:这个题目的主要作用在于检查被面试者对于Node中异步操作的一些基本知识的掌握。  如何避免回调地狱你可以有如下几个方法:模块化:将回调函数分割为独立的函数使用Promises使用yield来计算生成器或Promise解析:这个问题有很多种答案,取决你使用的场景,例如ES6, ES7,或者一些控制流库。  如何用Node监听80端口这题有陷阱!在类Unix系统中你不应该尝试去监听80端口,因为这需要超级用户权限。 因此不推荐让你的应用直接监听这个端口。目前,如果你一定要让你的应用监听80端口的话,你可以有通过在Node应用的前方再增加一层反向代理 (例如nginx)来实现,如下图所示。否则,建议你直接监听大于1024的端口。方向代理指的是以代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器, 并且将服务器返回的结果发送给客户端。关于反向代理的更多内容,建议你阅读这篇文章。解释:这个问题用于检查被面试者是否有实际运行Node应用的经验。  什么是事件循环Node采用的是单线程的处理机制(所有的I/O请求都采用非阻塞的工作方式),至少从Node.js开发者的角度是这样的。 而在底层,Node.js借助libuv来作为抽象封装层, 从而屏蔽不同操作系统的差异,Node可以借助livuv来来实现多线程。下图表示了Node和libuv的关系。Libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个事件循环, 以异步的方式将任务的执行结果返回给V8引擎。可以简单用下面这张图来表示。每一个I/O都需要一个回调函数——一旦执行完便推到事件循环上用于执行。 如果你需要更多详细的解释,可以参考这个视频。 你也可以参考这篇文章。解释:这用于检查Node.js的底层知识,例如什么是libuv,它的作用是什么。  哪些工具可以用来保证一致性的代码风格你可以选择如下的工具:JSLintJSHintESLintJSCS– 推荐在团队开发中,这些工具对于编写代码非常的有帮助,能够帮助团队开发者强制执行规定的风格指南, 还能够通过静态分析捕获常见的错误。解析:用于检查被面试者是否有大型项目开发经验。  运算错误与程序员错误的区别运算错误并不是bug,这是和系统相关的问题,例如请求超时或者硬件故障。而程序员错误就是所谓的bug。解析:这个题目和Node关系并不大,用于考察面试者的基础知识。  使用NPM有哪些好处?通过NPM,你可以安装和管理项目的依赖,并且能够指明依赖项的具体版本号。 对于Node应用开发而言,你可以通

node 21938 1

作者头像zyw3272018.03.21 20:26 

javascript面向对象

面向对象的三大特性封装继承 自己没有的,拿别人过来用,就是继承多态 父类引用指向子类的对象(JavaScript中用不到)创建对象的四种方式使用字面量创建对象varo={key:value,key:value...}用一个创建一个,不能复用,造成代码冗余,资源浪费使用内置构造函数创建对象varo=newObject(); varo=newArray();创建出来的对象都是空的对象,要手动的去为对象添加属性。造成代码重复封装简单的工厂函数(不推荐使用)functioncreateObj(){ varobj={}; obj.xx=xxx; returnobj; }自定义构造函数function构造函数名{ this.xxx=xxx; //.... }0.构造函数名首字母要大写 1.构造函数一般和new关键字一起使用 2.构造函数返回值默认为新创建好对象 如果手动返回基本数据类型,不影响默认返回值,如果返回的是对象,那么新创建出来的对象将不会返回,取而代之的是return后面的对象构造函数(constructor)的执行步骤 1.使用new关键字创建对象 2.调用构造函数,将new创建出来的对象赋值给构造函数内的this 3.使用this给新创建出来的对象增加成员 4.默认返回新创建出来的这个对象原型构造函数存在问题构造函数中的方法,每新创建一个对象的时候,该对象都会重新的创建一次这个方法,每个独享独占一个方法 但是该方法内容完全相同,所以造成资源浪费1.解决办法1 将构造函数内的方法,进行提取,放在构造函数外面,在构造函数内部进行引用赋值 那么创建出来的对象,都会指向构造函数外面的这个函数,达到共享的目的 问题:全局变量增多,造成全局变量污染,代码结构混乱,不容易维护2.解决办法2 使用原型原型原型是什么?在构造函数创建出来的时候,系统会默认的创建并关联一个对象,这个对象就是原型,原型对象默认是空对象 默认的原型对象中会有一个属性constructor指向该构造函数原型的作用原型对象中的成员,可以被使用和它关联的构造函数创建出来的所有对象共享原型对象的使用使用对象的动态特性,为原型对象添加成员直接替换原型对象注意事项: 直接替换原型对象,会导致替换之前创建的对象的原型和替换之后创建的对象的原型不一致原型的使用该注意事项1.使用对象访问属性的时候,会现在对象中查找,如果找到了就直接使用 如果没有找到,就去原型中查找 2.使用对象设置属性的时候,只会在对象本身中查找,不会去原型中查找,如果在对象本身中没有找到这个属性 则给该对象新增一个属性,如果在对象中有这个属性,修改这个属性 3.如果在原型对象中有引用类型的属性,那么使用对象进行修改该属性内容,则其他所有跟这个原型对象相关的对象都会受到影响 Person.prototype.car = {}; var p = new Person( ); p.car = {}; //这是修改属性 p.car.brand= ""; //这是修改属性的内容 4.一般情况下不会将属性添加到原型对象中 只会将需要共享的方法,添加到原型对象中proto1.这个属性不是标准属性,所以存在通用性问题 2.一般不推荐使用这个属性 3.调试的时候,可以使用这个属性 4.这个属性是原型中的属性替换原型时候的注意事项: 在新替换的原型中,没有constructor属性,会影响三角结构关系的合理性 s

javascript 25160 1

作者头像zyw3272018.03.20 20:34 

JavaScript基础知识

JavaScript的基本组成ECMAScript 语法规范DOM 操作dom元素的apiBOM 操作浏览器对象的apiJavaScript数据类型简单数据类型stringnumberbooleanundefined复杂数据类型ObjectArrayDateRegExpFunctionStringNumberBooleannullMath部分关键字的使用in判断属性是否存在于对象中for in 遍历对象的 键typeof 判断对象的类型 返回值是string类型的 引用类型中,除了function其他的对象都是object类型delete删除对象的属性删除未使用var声明的变量返回值为boolean 表示是否删除成功注意:删除的属性如果不存在,返回true删除的如果是原型中的属性,返回true 但是删除不成功break continuebreak 用来终止循环continue 用来跳出当前循环,继续下次循环=== 和 ===== 要判断数据类型和值是否相等== 值判断值是否相等|| 和 &&表达式1 || 表达式2 如果 表达式1 就 返回 表达式1 否则 返回 表达式2表达式1 && 表达式2 如果 表达式1 就 返回 表达式2 否则 返回 表达式1值类型和引用类型值类型: 存储的是数据本身的值就是值类型的数据引用类型:存储的是数据的地址的值就是引用类型的数据,数据自己在内存中单独存储值类型的赋值:直接将存储的数据复制一份赋值给新的变量 两个变量独立存在互不影响引用类型赋值:将存储的数据的地址复制一份赋值给新的额便令 两个变量指向同一个对象,相互影响异常处理异常的最大的特征:一旦发生异常,后面的代码都不会再执行异常处理语句 try catch finally如何手动抛出异常: throw 任何东西, catch中会抓到该东西try{ //可能出现异常的代码 }catch(e){ //e就是出现异常的异常信息 //出现异常后的处理代码 }finally{ //不管有没有出现异常,都会执行的代码 //一般用来释放资源 }面向对象的基本介绍面向对象是什么?面向对象是一种思维方式. 是将解决问题的关注点放到解决问题所需要的一些列对象上。面向过程是什么?面向过程是一种思维方式. 是将解决问题的关注点放到解决问题的详细的步骤上。面向过程和面向对象的关系面向对象是对面向过程的封装!!!什么是对象?万物皆对象JavaScript中什么是对象键值对儿的集合就是对象

javascript 22556 1

作者头像zyw3272018.03.18 17:15 

axios的相关笔记

1、axios的特点有哪些?答:一、Axios 是一个基于 promise的 HTTP 库,支持promise所有的API二、它可以拦截请求和响应三、它可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据四、安全性更高,客户端支持防御 XSRF2、axios有哪些常用方法?答:一、axios.get(url[, config]) //get请求用于列表和信息查询二、axios.delete(url[, config]) //删除三、axios.post(url[, data[, config]]) //post请求用于信息的添加四、axios.put(url[, data[, config]]) //更新操作3、说下你了解的axios相关配置属性?答:`url`是用于请求的服务器URL`method`是创建请求时使用的方法,默认是get`baseURL`将自动加在`url`前面,除非`url`是一个绝对URL。它可以通过设置一个`baseURL`便于为axios实例的方法传递相对URL`transformRequest`允许在向服务器发送前,修改请求数据,只能用在'PUT','POST'和'PATCH'这几个请求方法`headers`是即将被发送的自定义请求头headers:{'X-Requested-With':'XMLHttpRequest'},`params`是即将与请求一起发送的URL参数,必须是一个无格式对象(plainobject)或URLSearchParams对象params:{ ID:12345 },`auth`表示应该使用HTTP基础验证,并提供凭据这将设置一个`Authorization`头,覆写掉现有的任意使用`headers`设置的自定义`Authorization`头auth:{ username:'janedoe', password:'s00pers3cret' },'proxy'定义代理服务器的主机名称和端口`auth`表示HTTP基础验证应当用于连接代理,并提供凭据这将会设置一个`Proxy-Authorization`头,覆写掉已有的通过使用`header`设置的自定义`Proxy-Authorization`头。proxy:{ host:'127.0.0.1', port:9000, auth::{ username:'mikeymike', password:'rapunz3l' } },keep-alivevue性能

axios 12534 2

作者头像zyw3272018.03.18 17:11 

Vuex的学习

1、vuex有哪几种属性?答:有五种,分别是 State、 Getter、Mutation 、Action、Module2、vuex的State特性是?答:一、Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般Vue对象里面的data二、state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新三、它通过mapState把全局的 state和 getters 映射到当前组件的 computed 计算属性中3、vuex的Getter特性是?答:一、getters 可以对State进行计算操作,它就是Store的计算属性二、 虽然在组件内也可以做计算属性,但是getters 可以在多组件之间复用三、 如果一个状态只在一个组件内使用,是可以不用getters4、vuex的Mutation特性是?答:一、Action 类似于 mutation,不同在于:二、Action 提交的是 mutation,而不是直接变更状态。三、Action 可以包含任意异步操作5、Vue.js中ajax请求代码应该写在组件的methods中还是vuex的actions中?答:一、如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。二、如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用,并包装成promise返回,在调用处用async await处理返回的数据。如果不要复用这个请求,那么直接写在vue文件里很方便。6、不用Vuex会带来什么问题?答:一、可维护性会下降,你要想修改数据,你得维护三个地方二、可读性会下降,因为一个组件里的数据,你根本就看不出来是从哪来的三、增加耦合,大量的上传派发,会让耦合性大大的增加,本来Vue用Component就是为了减少耦合,现在这么用,和组件化的初衷相背。

vuex 8631 3

作者头像congming2018.03.18 17:06 

vue生命周期的学习

1、什么是vue生命周期?答: Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。2、vue生命周期的作用是什么?答:它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。3、vue生命周期总共有几个阶段?答:它可以总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后4、第一次页面加载会触发哪几个钩子?答:第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted 这几个钩子5、DOM 渲染在 哪个周期中就已经完成?答:DOM 渲染在 mounted 中就已经完成了。6、简单描述每个周期具体适合哪些场景?答:生命周期钩子的一些使用方法: beforecreate : 可以在这加个loading事件,在加载实例时触发 created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用 mounted : 挂载元素,获取到DOM节点 updated : 如果对数据统一处理,在这里写上相应函数 beforeDestroy: 可以做一个确认停止事件的确认框 nextTick: 更新数据后立即操作dom

vue 3455 2

作者头像congming2018.03.18 17:05 

vue相关原理学习(二)

一、请说下具体使用vue的理解?答:1、使用vue不必担心布局更改和类名重复导致的js重写,因为它是靠数据驱动双向绑定,底层是通过Object.defineProperty() 定义的数据 set、get 函数原理实现。2、组件化开发,让项目的可拓展性、移植性更好,代码重用性更高,就好像农民工建房子,拿起自己的工具包就可以开工。项目经理坐等收楼就好。3、单页应用的体验零距离接触安卓原生应用,局部组件更新界面,让用户体验更快速省时。4、js的代码无形的规范,团队合作开发代码可阅读性更高。二、你觉得哪些项目适合vue框架?答:1、数据信息量比较多的,反之类似企业网站就无需此框架了。2、手机web和app应用多端共用一套界面的项目,因为使用vue.cli+webpack后的前端目录,非常有利于项目的跨平台部署。三、怎么理解MVVM模式的这些框架?答:1、M就是Model模型层,存的一个数据对象。2、V就是View视图层,所有的html节点在这一层。3、VM就是ViewModel,它通过data属性连接Model模型层,通过el属性连接View视图层。四、PC端项目你会在哪些场景使用Vue框架?答:上万级数据需要瀑布流更新和搜索的时候,因为数据庞大的时候,用原生的dom操作js和html都会有列表的html布局,迭代很困难。再一个dom节点的大面积添加会影响性能。那么vue为什么解决这些问题呢?第一:只需用v-for在view层一个地方遍历数据即可,无需复制一段html代码在js和html两个地方。第二:vue通过Virtual Dom就是在js中模拟DOM对象树来优化DOM操作。

vue 1586 0

a6bfb44cbd5549740eb36647f36ef83a