一:node.js理解
1:Node.js 是一個(gè)運(yùn)行在服務(wù)端的框架绣夺,它的底層就使用了 V8 引擎吏奸。也就是說Node.js是用來做后端的技術(shù)。nodejs是服務(wù)端的js平臺(tái)陶耍。
2:大量使用了使用事件驅(qū)動(dòng)來實(shí)現(xiàn)異步開發(fā)奋蔚。使用了一個(gè)事件驅(qū)動(dòng),非阻塞式的I/O模型此外物臂,在實(shí)時(shí)的Web應(yīng)用上采用了基于 WebSocket 的推送技術(shù)旺拉,客戶端和服務(wù)器端都可以發(fā)起通信,能夠自由地交換數(shù)據(jù)棵磷。非常優(yōu)雅、實(shí)用的打通了前后端晋涣。
3:NodeJS是異步單線程的仪媒,應(yīng)用的是異步回調(diào)的方法,也就是異步的I/O谢鹊。
解釋:當(dāng)進(jìn)程執(zhí)行的時(shí)候算吩,不會(huì)等待結(jié)果的返回,而是直接執(zhí)行下面的語句佃扼,直到進(jìn)入事件循環(huán)偎巢,當(dāng)數(shù)據(jù)庫(kù)執(zhí)行返回結(jié)果的時(shí)候會(huì)將事件發(fā)送到事件隊(duì)列,等線程進(jìn)入事件循環(huán)之后才會(huì)調(diào)用之前的回調(diào)函數(shù)兼耀。
也就是nodejs的工作原理其實(shí)就是事件循環(huán)压昼。每一條nodejs的邏輯都是寫在回調(diào)函數(shù)里面的,而回調(diào)函數(shù)都是返回之后才異步執(zhí)行的瘤运。
4:NodeJS的應(yīng)用場(chǎng)景
NodeJs適合應(yīng)用在具有大量的細(xì)小的http請(qǐng)求環(huán)境下窍霞,例如web的即時(shí)聊天程序,或者上萬人同時(shí)在線的游戲服務(wù)器拯坟。不用考慮http請(qǐng)求次數(shù)過多的問題但金。
二:Ajax獲取數(shù)據(jù)時(shí)遇到亂碼問題:
1:中文亂碼就是因?yàn)閏ontentType沒有指定編碼
解決:在jquery-1.6.1文件中,搜索’contentType’
? ? ? ? ? ?然后在application/x-www-form-urlencoded后面加上; charset=UTF-8
? ? ? ? ? ?最終變成contentType:”application/x-www-form-urlencoded; charset=UTF-8”即可郁季。
2:接收頁面的編碼問題
解決:由于異步對(duì)象XMLHttpRequest在處理返回的responseText的時(shí)候冷溃,是按UTF-8編碼進(jìn)行 ? ? ? ? ? ? ?解碼的。所以post方式的話梦裂,必須把這個(gè)頁面另存一下似枕,將頁面文件的編碼改為 UTF-8 ? ? ? ? ? ? ? ?(請(qǐng)務(wù)必記住)。
? ? ? ? ? ? 編碼函數(shù)encodeURIComponent(string)
三:ajax異步提交的數(shù)據(jù)一般接收不到的原因
①:js里面的ajax代碼的提交方式要和你目標(biāo)地址的接受方式要一致塞琼,例如你在使用ajax提交數(shù)據(jù)的時(shí)候菠净,使用的方法是get方法進(jìn)行提交的,并且提交地址為b.PHP文件里面的test方法,那么當(dāng)你在b.php頁面的test方法下進(jìn)行接收ajax異步提交過來的數(shù)據(jù)時(shí)毅往,也必須要get方法進(jìn)行接收牵咙,否則你是接收不到數(shù)據(jù)的!反之post方法提交的情況亦然攀唯!
②:在ajax方法體中組織json數(shù)據(jù)時(shí)洁桌,json數(shù)據(jù)的name( 例子如{'name':'值'} )在進(jìn)行選擇時(shí)不要和本頁面的其它已有的name雷同,特別是你這個(gè)ajax方法所在的函數(shù)上個(gè)調(diào)用的你的也有同樣的name話侯嘀,你當(dāng)前的name是傳遞不過去的另凌,
四:json 和字符串轉(zhuǎn)換
1:$.parseJSON( obj) ? 轉(zhuǎn)對(duì)象 ? ?jquery插件支持
2:JSON.parse(jsonstr); json字符串轉(zhuǎn)換成json對(duì)象
3:JSON.stringify(jsonobj); json對(duì)象轉(zhuǎn)換成json對(duì)符串
3:eval('(' + jsonstr + ')'); json字符串轉(zhuǎn)換成json對(duì)象,注意需要在json字符外包裹一對(duì)小括號(hào)
五:把js字符串轉(zhuǎn)化為可執(zhí)行的程序(解析為對(duì)象)
1:eval()
? ? ? ? ? ?var dataObj=eval("("+data+")");//
? ? ? ? ? 為什么要 eval這里要添加 “("("+data+")");//”呢?
? ? ? ? ?原因在于:eval本身的問題戒幔。 由于json是以”{}”的方式來開始以及結(jié)束的吠谢,在JS中,它會(huì)被當(dāng)成一個(gè)語句塊來處理诗茎,所以必須強(qiáng)制性的將它轉(zhuǎn)換成一種表達(dá)式工坊。
? ? ? ? ? 加上圓括號(hào)的目的是迫使eval函數(shù)在處理JavaScript代碼的時(shí)候強(qiáng)制將括號(hào)內(nèi)的表達(dá)式(expression)轉(zhuǎn)化為對(duì)象,而不是作為語句(statement)來執(zhí)行
2:data =(new Function("","return "+json))();
六:url有哪些部分
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出敢订,一個(gè)完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”王污,這代表網(wǎng)頁使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議楚午,如HTTP昭齐,F(xiàn)TP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
2.域名部分:該URL的域名部分為“www.aspxfans.com”矾柜。一個(gè)URL中阱驾,也可以使用IP地址作為域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符把沼。端口不是一個(gè)URL必須的部分啊易,如果省略端口部分,將采用默認(rèn)端口
4.虛擬目錄部分:從域名后的第一個(gè)“/”開始到最后一個(gè)“/”為止饮睬,是虛擬目錄部分租谈。虛擬目錄也不是一個(gè)URL必須的部分。本例中的虛擬目錄是“/news/”
5.文件名部分:從域名后的最后一個(gè)“/”開始到“捆愁?”為止割去,是文件名部分,如果沒有“?”,則是從域名后的最后一個(gè)“/”開始到“#”為止昼丑,是文件部分呻逆,如果沒有“?”和“#”菩帝,那么從域名后的最后一個(gè)“/”開始到結(jié)束咖城,都是文件名部分茬腿。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分宜雀,如果省略該部分切平,則使用默認(rèn)的文件名
6.錨部分:從“#”開始到最后,都是錨部分辐董。本例中的錨部分是“name”悴品。錨部分也不是一個(gè)URL必須的部分
7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分简烘,又稱搜索部分苔严、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”孤澎。參數(shù)可以允許有多個(gè)參數(shù)届氢,參數(shù)與參數(shù)之間用“&”作為分隔符。
七:瀑布流實(shí)現(xiàn)原理
瀑布流可以有多列,每一個(gè)item(單元格)的高度可以不相同,但是寬度必須一樣.排列的方式是,從左往右排列,哪一列現(xiàn)在的總高度最小,就優(yōu)先排序把item(單元格)放在這一列.這樣排完所有的單元格后,可以保證每一列的總高度都相差不大
先通過計(jì)算出一排能夠容納幾列元素覆旭,然后尋找各列之中所有元素高度之和的最小者悼沈,并將新的元素添加到該列上,然后繼續(xù)尋找所有列的各元素之和的最小者姐扮,繼續(xù)添加至該列上,如此循環(huán)下去衣吠,直至所有元素均能夠按要求排列為止茶敏;
八:不確定寬高的圖片水平垂直居中
方法一:
方法二:
九:相同代碼量 網(wǎng)頁加載速度不同:
可以在不同的地區(qū)的服務(wù)器上都放一份
十:angular數(shù)據(jù)綁定策略
1:@綁定:傳遞一個(gè)字符串作為屬性的值
2;=綁定:指定獲取屬性的類型為父作用域的屬性
3:&綁定:傳遞的是父作用域中的函數(shù)
十一:form一次提交多個(gè)文件
1:input type="file" name="img"multiple="multiple"
2:用ajax中formdata