一:node.js理解
1:Node.js 是一个运行在服务端的框架,它的底层就使用了 V8 引擎。也就是说Node.js是用来做后端的技术。nodejs是服务端的js平台。
2:大量使用了使用事件驱动来实现异步开发。使用了一个事件驱动,非阻塞式的I/O模型此外,在实时的Web应用上采用了基于 WebSocket 的推送技术,客户端和服务器端都可以发起通信,能够自由地交换数据。非常优雅、实用的打通了前后端。
3:NodeJS是异步单线程的,应用的是异步回调的方法,也就是异步的I/O。
解释:当进程执行的时候,不会等待结果的返回,而是直接执行下面的语句,直到进入事件循环,当数据库执行返回结果的时候会将事件发送到事件队列,等线程进入事件循环之后才会调用之前的回调函数。
也就是nodejs的工作原理其实就是事件循环。每一条nodejs的逻辑都是写在回调函数里面的,而回调函数都是返回之后才异步执行的。
4:NodeJS的应用场景
NodeJs适合应用在具有大量的细小的http请求环境下,例如web的即时聊天程序,或者上万人同时在线的游戏服务器。不用考虑http请求次数过多的问题。
二:Ajax获取数据时遇到乱码问题:
1:中文乱码就是因为contentType没有指定编码
解决:在jquery-1.6.1文件中,搜索’contentType’
然后在application/x-www-form-urlencoded后面加上; charset=UTF-8
最终变成contentType:”application/x-www-form-urlencoded; charset=UTF-8”即可。
2:接收页面的编码问题
解决:由于异步对象XMLHttpRequest在处理返回的responseText的时候,是按UTF-8编码进行 解码的。所以post方式的话,必须把这个页面另存一下,将页面文件的编码改为 UTF-8 (请务必记住)。
编码函数encodeURIComponent(string)
三:ajax异步提交的数据一般接收不到的原因
①:js里面的ajax代码的提交方式要和你目标地址的接受方式要一致,例如你在使用ajax提交数据的时候,使用的方法是get方法进行提交的,并且提交地址为b.PHP文件里面的test方法,那么当你在b.php页面的test方法下进行接收ajax异步提交过来的数据时,也必须要get方法进行接收,否则你是接收不到数据的!反之post方法提交的情况亦然!
②:在ajax方法体中组织json数据时,json数据的name( 例子如{'name':'值'} )在进行选择时不要和本页面的其它已有的name雷同,特别是你这个ajax方法所在的函数上个调用的你的也有同样的name话,你当前的name是传递不过去的,
四:json 和字符串转换
1:$.parseJSON( obj) 转对象 jquery插件支持
2:JSON.parse(jsonstr); json字符串转换成json对象
3:JSON.stringify(jsonobj); json对象转换成json对符串
3:eval('(' + jsonstr + ')'); json字符串转换成json对象,注意需要在json字符外包裹一对小括号
五:把js字符串转化为可执行的程序(解析为对象)
1:eval()
var dataObj=eval("("+data+")");//
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行
2:data =(new Function("","return "+json))();
六:url有哪些部分
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
七:瀑布流实现原理
瀑布流可以有多列,每一个item(单元格)的高度可以不相同,但是宽度必须一样.排列的方式是,从左往右排列,哪一列现在的总高度最小,就优先排序把item(单元格)放在这一列.这样排完所有的单元格后,可以保证每一列的总高度都相差不大
先通过计算出一排能够容纳几列元素,然后寻找各列之中所有元素高度之和的最小者,并将新的元素添加到该列上,然后继续寻找所有列的各元素之和的最小者,继续添加至该列上,如此循环下去,直至所有元素均能够按要求排列为止;
八:不确定宽高的图片水平垂直居中
方法一:
方法二:
九:相同代码量 网页加载速度不同:
可以在不同的地区的服务器上都放一份
十:angular数据绑定策略
1:@绑定:传递一个字符串作为属性的值
2;=绑定:指定获取属性的类型为父作用域的属性
3:&绑定:传递的是父作用域中的函数
十一:form一次提交多个文件
1:input type="file" name="img"multiple="multiple"
2:用ajax中formdata