var util = require('util'); var EventEmitter = require('events'); function MyEmitter() { EventEmitter.call(this); } // 构造函数 util.inherits(MyEmitter, EventEmitter); // 继承 var em = new MyEmitter(); em.on('hello', function(data) { console.log('收到事件hello的数据:', data); }); // 接收事件,并打印到控制台 em.emit('hello', 'EventEmitter传递消息真方便!');
13、如何通过stream实现一个文件的复制
答:
var fs = require("fs"); var rs = fs.createReadStream(“1.jpg"); var ws = fs.createWriteStream("2.jpg"); rs.pipe(ws);
14、如何理解node的同步和异步
答:
”同步模式”就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;”异步模式”则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
15、使用node构建一个服务器并对向”/post”发起的post请求进行处理,要求拿到post请求传输的数据(不包括文件上传)
答:
var http = require("http"); var queryString = require("querystring"); var server = http.createServer(function (req,res) { if(urlObj.pathname == "/post"){ var str = ""; req.on("data",function (chunk) { str+=chunk; }); req.on("end",function () { var query = queryString.parse(str); console.log(query); }) res.end("你请求的地址是"+urlObj.pathname); } }); server.listen(8080);
16、用node模拟客户端发起请求
答:
var http = require("http"); var request = http.request({ host:"localhost", port:"8080", path:"/request", method:"post" },function (res) { res.on("data",function (chunk) { console.log(chunk.toString()); }); }); request.write("user=zhang&pass=111"); request.end("请求结束");//结束本次请求
17、图片预加载的意义和原理
答:
预加载图片是提高用户体验的一个很好方法。图片预先加载到浏览器中,这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速、无缝地发布,也可帮助用户在浏览网站内容时获得更好的用户体验。
实例代码:
//obj.imgArr 图片数组 //obj.loadingProgress 加载进度 //obj.loadingOver 加载结果 (function (){ var imgObjs = []; loadingFn = function (obj) { var index = 0; for (var i = 0; i < obj.imgArr.length; i++) { var imgObj = new Image(); imgObj.onload = function() { index++; imgObjs.push(this); if (obj.loadingProgress){ obj.loadingProgress(index, this); } if (index > obj.imgArr.length-1){ obj.loadingOver(imgObjs); } } imgObj.src = obj.imgArr[i]; } console.log(obj); }
18、浏览器页面有哪三层构成,分别是什么,作用是什么?
答:
浏览器页面构成:结构层、表示层、行为层
分别是:HTML、CSS、JavaScript
作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaScript实现一些客户端的功能与业务。
19、什么是语义化的HTML?
答:
直观的认识标签,对于搜索引擎的抓取有好处,用正确的标签做正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析,在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于SEO。使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
20、CSS居中(包括水平居中和垂直居中)
答:
水平居中设置:
1.行内元素
设置 text-align:center;
2.Flex布局
设置display:flex;justify-content:center; (灵活运用,支持Chroime,Firefox,IE9+)
垂直居中设置:
1.父元素高度确定的单行文本(内联元素)
设置 height = line-height;
2.父元素高度确定的多行文本(内联元素)
a:插入 table (插入方法和水平居中一样),然后设置 vertical-align:middle;
b:先设置 display:table-cell 再设置 vertical-align:middle;
块级元素居中方案
水平居中设置:
1.定宽块状元素
设置 左右 margin 值为 auto;
2.不定宽块状元素
a:在元素外加入 table 标签(完整的,包括 table、tbody、tr、td),该元素写在 td 内,然后设置 margin 的值为 auto;
b:给该元素设置 displa:inine 方法;
c:父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left:50%;
垂直居中设置:
使用position:absolute(fixed) ,设置left、top、margin-left、margin-top的属性;
利用position:fixed(absolute)属性,margin:auto这个必须不要忘记了;
利用display:table-cell属性使内容垂直居中;
使用css3的新属性transform:translate(x,y)属性;
使用:before元素;
21、CSS3有哪些新特性?
答:
CSS3实现圆角(border-radius: 8px),阴影(box-shadow: 10px),
对文字加特效(text-shadow),线性渐变(gradient),变换(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
还增加了更多的CSS选择器,多背景,rgba等
22、事件委托是什么?
答:
利用事件冒泡的原理,使自己的所触发的事件,让它的父元素代替执行!
23、什么叫优雅降级和渐进增强?
答: