用TCP協(xié)議發(fā)送時濒旦,由于TCP是數(shù)據(jù)流協(xié)議勇垛,因此不存在包大小的限制(暫不考慮緩沖區(qū)的大惺ぢ薄)
HTTP/2 頭壓縮算法 —— HPACK
它對header進行壓縮丧靡,消除了多余的 header 字段,將漏洞限制到已知的安全攻擊歉秫,并且在受限的環(huán)境中具有有限的內(nèi)存需求
vue 是單向數(shù)據(jù)流
也就是數(shù)據(jù)總是從父組件傳遞到子組件中蛾洛,子組件無權(quán)修改父組件中的數(shù)據(jù)。因為當(dāng)父組件 可能存在多個子組件端考,假如子組件可以修改父組件的數(shù)據(jù),那么會導(dǎo)致其他依賴父組件的子組件都會受到影響揭厚。
div塊中高度總是寬度的一半
height: 0;12 padding: 25% 0;
項目中為啥用vuex却特?什么場景下才用得到?有沒有提前規(guī)劃好哪些模塊使用vuex筛圆?
由于傳參的方法對于多層嵌套的組件將會非常繁瑣裂明,并且對于兄弟組件間的狀態(tài)傳遞無能為力。我們經(jīng)常會采用父子組件直接引用或者通過事件來變更和同步狀態(tài)的多份拷貝太援。這樣通常會導(dǎo)致代碼無法維護闽晦。所以我們需要把組件的共享狀態(tài)抽取出來,以一個全局單例模式管理提岔。在這種模式下仙蛉,我們的組件樹構(gòu)成了一個巨大的“視圖”,不管在樹的哪個位置碱蒙,任何組件都能獲取狀態(tài)或者觸發(fā)行為荠瘪!另外,通過定義和隔離狀態(tài)管理中的各種概念并強制遵守一定的規(guī)則赛惩,我們的代碼將會變得更結(jié)構(gòu)化且易維護哀墓。
由于傳參的方法對于多層嵌套的組件將會非常繁瑣,并且對于兄弟組件間的狀態(tài)傳遞無能為力喷兼。所以需要抽離出組件的共享狀態(tài)篮绰,以全局單例模式存儲起來,使項目狀態(tài)集中式管理以及結(jié)構(gòu)化和更易維護季惯。
1 + []? ?// '1'? ? 1+ ['a'] // '1a'? ??1+ [1,2]? //? '11,2'
復(fù)雜數(shù)據(jù)類型在隱式轉(zhuǎn)換時會先轉(zhuǎn)成String吠各,然后再轉(zhuǎn)成Number運算
session落地方案
1?基于nginx的ip_hash策略來進行負(fù)載均衡,那么相同ip的機子勉抓,每一次請求的時候走孽,都會被請求到同一機子上。
2?借助一些mysql琳状,redis磕瓷,mongodb這些數(shù)據(jù)庫來進行集中式處理,將相應(yīng)的session存入這些地方
session儲存在內(nèi)存當(dāng)中,如果有兩臺服務(wù)器困食,會出現(xiàn)什么問題边翁,怎么解決
session丟失 不一致問題,用redis達到一致或者改成用jwt硕盹,session只存在一個服務(wù)器符匾,在負(fù)載均衡的作用下,用戶會被隨機打到A和B上瘩例,所以會出現(xiàn)有時登陸得了啊胶,有時登陸不了的情況。
首屏加載
dns預(yù)解析垛贤、使用緩存焰坪、使用cdn內(nèi)容分發(fā)加載vue、vue-router等資源聘惦、外部導(dǎo)入js某饰,css文件,css放在頭部善绎,js放在尾部黔漂,js預(yù)加載,圖片懶加載禀酱,圖片使用css sprite炬守,通過background-img、background-repeat剂跟、background-position控制劳较,js文件抽離公共代碼,盡量減少重繪和重排浩聋,減少dom節(jié)點操作观蜗,減少http請求。
for衣洁、forEach墓捻、map的性能區(qū)別
for > forEach > map
map 會返回一個等長數(shù)組,forEach 不會坊夫,所以 forEach 大于 map
cookie怎么加入token
js 創(chuàng)建 cookie 是用 document.cookie = 'token=221212fsfsfafas'
這里有個更方便的方法砖第,也是更安全的。
讓后端在接口的返回值 header 里添加 set-Cookie环凿,這樣的話瀏覽器會自動把 token 設(shè)置到 cookie 里梧兼。
還有,如果接口的返回值 header 里有設(shè)智听,Http-Only: true 的話羽杰,js 里是不能直接修改 cookie 的渡紫,這樣更安全點。
vue-router
兩種模式: hash和history兩種
hash模式就是通過location.hash拿到值考赛,調(diào)用onhashchange方法監(jiān)聽url變化
history模式是利用interface在HTML5中新增的方法History?
工作流程有如下幾步
1. url改變
2. 觸發(fā)監(jiān)聽事件
3. 改變vue-router里面的current變量
4. 監(jiān)視current變量(變量的監(jiān)視者)
5. 獲取對應(yīng)的組件
6. 調(diào)用vue實例render() 更新視圖
Vue性能優(yōu)化
分為四個:編碼階段/SEO/打包階段/用戶體驗
編碼階段
盡量減少data中的數(shù)據(jù)惕澎,data中的數(shù)據(jù)都會增加getter和setter,會收集對應(yīng)的watcher
v-if和v-for不能連用
如果需要使用v-for給每項元素綁定事件時使用事件代理
SPA 頁面采用keep-alive緩存組件
在更多的情況下颜骤,使用v-if替代v-show
key保證唯一
使用路由懶加載唧喉、異步組件
防抖、節(jié)流
第三方模塊按需導(dǎo)入
長列表滾動到可視區(qū)域
動態(tài)加載圖片懶加載
SEO優(yōu)化
預(yù)渲染
服務(wù)端渲染SSR
打包優(yōu)化
壓縮代碼
Tree Shaking/Scope Hoisting
使用cdn加載第三方模塊
多線程打包happypack
splitChunks抽離公共文件
sourceMap優(yōu)化
用戶體驗
骨架屏PWA
還可以使用緩存(客戶端緩存忍抽、服務(wù)端緩存)優(yōu)化八孝、服務(wù)端開啟gzip壓縮等。
SSR
服務(wù)端渲染:
將Vue在客戶端把標(biāo)簽渲染成HTML的工作放在服務(wù)端完成鸠项,然后再把html直接返回給客戶端干跛。
優(yōu)點:
SSR有著更好的SEO、并且首屏加載速度更快等優(yōu)點锈锤。
缺點:
比如我們的開發(fā)條件會受到限制驯鳖,服務(wù)器端渲染只支持beforeCreate和created兩個鉤子闲询,當(dāng)我們需要一些外部擴展庫時需要特殊處理久免,服務(wù)端渲染應(yīng)用程序也需要處于Node.js的運行環(huán)境。
服務(wù)器需要有更大的負(fù)載需求扭弧。
Vue2.0組件通信:
父子:prop/emit
獲取實例:$parent阎姥、$children
z總線:Vue.prototype.$bus = new Vue
跨組件:Vuex/$attrs、$listeners鸽捻、Provide呼巴、inject
Vue中組件生命周期調(diào)用順序
組件的創(chuàng)建到渲染順序是:先父后子,渲染完成的順序是:先子后父御蒲。
組件的銷毀操作是:先父后子衣赶,銷毀完成的順序是:先子后父。
加載過程:
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount- >子mounted->父mounted
子組件更新:
父beforeUpdate->子beforeUpdate->子updated->父updated
父組件更新:
父 beforeUpdate -> 父 updated
銷毀:
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
keep-alive:
實現(xiàn)組件緩存有兩個方法:
include: 參數(shù)可以是字符串或者正則表達式厚满,符合匹配的組件會被緩存
exclude:參數(shù)可以是字符串或者正則表達式府瞄,不符合匹配的組件會被緩存
有兩個鉤子:activated,deactivated
原理:最近最少使用算法(LRU)碘箍,是一種常用的頁面置換算法遵馆,選擇最近最久未使用的頁面予以淘汰
注意點:
頁面第一次加載的時候會觸發(fā)created和activated生命周期
如果地址欄有改變相當(dāng)于初始化,會觸發(fā)created和activated生命周期
如果地址欄沒有變化丰榴,只會出發(fā)activated生命周期
虛擬Dom以及key屬性的作用
虛擬Dom作用:抽象dom樹
由于在瀏覽器中操作DOM是很昂貴的货邓。頻繁的操作DOM,會產(chǎn)生一定的性能問題四濒。這就是虛擬Dom的產(chǎn)生原因换况。Virtual DOM本質(zhì)就是用一個原生的JS對象去描述一個DOM節(jié)點职辨。是對真實DOM的一層抽象。
key的作用是盡可能的復(fù)用 DOM 元素复隆。
key是diff算法對比新舊children的唯一標(biāo)識拨匆,作用是減少沒必要的diff算法的對比,盡可能復(fù)用dom節(jié)點元素挽拂。
新舊 children 中的節(jié)點只有順序是不同的時候惭每,最佳的操作應(yīng)該是通過移動元素的位置來達到更新的目的。
需要在新舊 children 的節(jié)點中保存映射關(guān)系亏栈,以便能夠在舊 children 的節(jié)點中找到可復(fù)用的節(jié)點台腥。key也就是children中節(jié)點的唯一標(biāo)識。
Vue模板編譯原理:
將template轉(zhuǎn)換成render绒北,具體步驟為:生成AST然后進行優(yōu)化黎侈,然后codegen,將ast樹轉(zhuǎn)換成可執(zhí)行代碼闷游。
Vue事件綁定
原生事件:addEventListener(事件名峻汉,回調(diào)函數(shù),冒泡還是捕獲脐往,默認(rèn)為false冒泡)
組件:$on @
v-model的原理
value + input方法的語法糖休吠。可以通過model屬性的prop和event屬性來進行自定義
Computed和Watch:
Computed是vue定義的計算屬性业簿,有緩存瘤礁,不支持異步,是一個具備緩存的訂閱者watcher梅尤,屬性改變更新視圖柜思,主要用于計算性能消耗大的場景,例如購物車巷燥。
watch是vue定義的監(jiān)聽器赡盘,沒緩存,支持異步缰揪,觀察的作用比較多陨享,一個數(shù)據(jù)影響多個數(shù)據(jù),應(yīng)用場景為需要異步的操作或者開銷較大的操作邀跃,例如搜索框
Vue2.0怎么監(jiān)聽數(shù)組的變化可以改變原數(shù)組的方法:
push霉咨,pop,shift拍屑,unshift途戒,sort,splice僵驰,reverse
理解:vue對上面的方法進行重寫喷斋,通過原型鏈指向了自己定義的數(shù)組原型方法唁毒,當(dāng)調(diào)用api時,可以通知依賴更新星爪,如果數(shù)組包括引用類型浆西,則會對數(shù)組的引用類型再次監(jiān)控。
webpack plugin的執(zhí)行順序:
從右到左顽腾,因為webpack選擇了函數(shù)式編程的compose方式近零,也就是compose模式,如果選擇pipe模式就從左到右
函數(shù)式編程compose和pipe
可以這么理解,例如有a,b兩個函數(shù)抄肖,compose(a,b) => a調(diào)用了b久信,后面的返回值作為前面的參數(shù),即從右到左漓摩;相反pipe(a,b) => b調(diào)用a, 前面的返回值作為后面的參數(shù)裙士,即從左到右。
MVVM
Model-View-ViewModel縮寫管毙,也就是把MVC中的Controler變成viewmodel腿椎。Model數(shù)據(jù)模型,View代表UI組件夭咬,ViewModel是連接兩者的橋梁啃炸,數(shù)據(jù)綁定到ViewModel之后渲染至頁面,視圖變化會通知ViewModel更改數(shù)據(jù)
Vue雙向綁定響應(yīng)式原理
觀察者模式: 定義對象一對多的依賴關(guān)系皱埠,當(dāng)對象狀態(tài)變化肮帐,所有依賴它的對象也會收到通知咖驮,松偶關(guān)系边器,觀察者和目標(biāo)直接進行交互。
發(fā)布-訂閱者模式:定義對象間一種一對多的依賴關(guān)系托修,當(dāng)一個對象的狀態(tài)發(fā)生改變時忘巧,所有依賴于它的對象都將得到通知。完全解偶睦刃,訂閱者和發(fā)布者互不干擾砚嘴,中間通過調(diào)度中心聯(lián)系。
Observe 監(jiān)聽器? Watcher 訂閱者? Compile 解析器 dep 發(fā)布訂閱者的調(diào)度中心
總結(jié):
1 監(jiān)聽器observer實現(xiàn)數(shù)據(jù)劫持涩拙,獲取data际长,給每個data加上數(shù)據(jù)監(jiān)聽,綁定Object.definedProperty的getter和setter函數(shù)
2 當(dāng)屬性改變時兴泥,會調(diào)用調(diào)度中心dep的notify()方法通知所有訂閱者watcher
3 訂閱者watcher調(diào)用update方法進行更新視圖操作工育,通知解析器compile進行編譯
4 解析器compile把 template 編譯成一段 document fragment,對每個節(jié)點進行解析搓彻,如果nodeType==3就找到?(雙大括號) 的文本插值如绸,進行replace替換嘱朽,更新視圖view,并初始化watcher訂閱者怔接。
事件循環(huán)? 執(zhí)行棧 + Event loop + web Apis
瀏覽器:一個settimeout執(zhí)行完才會執(zhí)行下一個settimeout?
node:所有settimeout都是一起的搪泳,執(zhí)行所有紅任務(wù),再執(zhí)行所有微任務(wù)
TCP/IP擁塞控制
原理:
擁塞: 請求資源大于可用資源扼脐,網(wǎng)絡(luò)資源供應(yīng)不足岸军,導(dǎo)致性能,吞吐量下降
擁塞控制:防止過多資源注入網(wǎng)絡(luò)瓦侮,導(dǎo)致網(wǎng)絡(luò)負(fù)荷過載凛膏,是一個全局性過程,涉及到所有的主機脏榆、路由器猖毫,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。
方法:慢開始( slow-start )须喂、擁塞避免( congestion avoidance )吁断、快重傳( fast retransmit )和快恢復(fù)( fast recovery )。
http簡單請求和非簡單請求
瀏覽器發(fā)送跨域請求坞生,如何判斷仔役?
瀏覽器在發(fā)送跨域請求的時候,會先判斷下是簡單請求還是非簡單請求是己,如果是簡單請求又兵,就先執(zhí)行服務(wù)端程序,然后瀏覽器才會判斷是否跨域
簡單請求:
對于簡單請求卒废,瀏覽器直接發(fā)出CORS請求沛厨。具體來說,就是在頭信息之中,增加一個Origin字段。
常見方法有:head慨丐、get叮趴、post
非簡單請求
非簡單請求是那種對服務(wù)器有特殊要求的請求
請求方法:PUT或DELETE,或者Content-Type字段的類型是application/json。
非簡單請求的CORS請求,會在正式通信之前,增加一次HTTP查詢請求剿牺,稱為"預(yù)檢"請求(preflight)。
會檢查:?Origin环壤、Access-Control-Request-Method和Access-Control-Request-Headers字段以后
瀏覽器先詢問服務(wù)器晒来,當(dāng)前網(wǎng)頁所在的域名是否在服務(wù)器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段镐捧。只有得到肯定答復(fù)潜索,瀏覽器才會發(fā)出正式的XMLHttpRequest請求臭增,否則就報錯。
js為啥單線程
JavaScript的單線程竹习,與它的用途有關(guān)誊抛。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動整陌,以及操作DOM拗窃。這決定了它只能是單線程,否則會帶來很復(fù)雜的同步問題泌辫。比如随夸,假定JavaScript同時有兩個線程,一個線程在某個DOM節(jié)點上添加內(nèi)容震放,另一個線程刪除了這個節(jié)點宾毒,這時瀏覽器應(yīng)該以哪個線程為準(zhǔn)
map和foreach區(qū)別
foreEach()方法:
針對每一個元素執(zhí)行提供的函數(shù)。
map()方法:
創(chuàng)建一個新的數(shù)組殿遂,其中每一個元素由調(diào)用數(shù)組中的每一個元素執(zhí)行提供的函數(shù)得來诈铛。
區(qū)別
forEach()方法不會返回執(zhí)行結(jié)果,而是undefined墨礁。也就是說幢竹,forEach()會修改原來的數(shù)組。而map()方法會得到一個新的數(shù)組并返回恩静。
解決非工程化項目初始化頁面閃動問題
vue頁面在加載的時候閃爍花括號{}}焕毫,v-cloak指令和css規(guī)則如[v-cloak]{display:none}一起用時,這個指令可以隱藏未編譯的Mustache標(biāo)簽直到實例準(zhǔn)備完畢驶乾。
vue中對象更改檢測的注意事項
對于已經(jīng)創(chuàng)建的實例邑飒,Vue不能動態(tài)添加根級別的響應(yīng)式屬性,但是可以使用Vue.set(object, key, value) 方法向嵌套對象添加響應(yīng)式屬性轻掩。
vue更新數(shù)組時觸發(fā)視圖更新的方法
這些方法如下:push() pop() shift() unshift() splice() sort() reverse()
vue如何監(jiān)聽鍵盤事件中的按鍵
<input v-on:keyup.13="submit">
什么是vue生命周期幸乒?
?Vue 實例從創(chuàng)建到銷毀的過程懦底,就是生命周期唇牧。. 也就是從開始創(chuàng)建、初始化數(shù)據(jù)聚唐、編譯模板丐重、掛載DOM-渲染、更新-渲染杆查、卸載等一系列的過程扮惦,我們稱這是 Vue 的生命周期。
Beforecreate亲桦、created崖蜜、beforeMount浊仆、Mounted、beforeUpdate豫领、Updated抡柿、BeforeDestroy、destroyed
vue中如何編寫可復(fù)用的組件
重點體現(xiàn)高內(nèi)聚低耦合等恐,可復(fù)用
組件由
狀態(tài)props洲劣,允許外部環(huán)境傳遞數(shù)據(jù)給組件
事件Events,允許組件觸發(fā)外部環(huán)境的副作用
片斷slots,?允許外部環(huán)境將額外的內(nèi)容嵌套在組件中。
<keep-alive></keep-alive>的作用是什么课蔬?
keep-alive 是 Vue 內(nèi)置的一個組件囱稽,可以使被包含的組件保留狀態(tài),或避免重新渲染二跋。
vue中子組件調(diào)用父組件的方法
this.$parent.event可以調(diào)用父組件身上的方法战惊,無需綁定在子組件身上。補充:有時候會失效扎即,暫未發(fā)現(xiàn)觸發(fā)點样傍,不建議使用。
$emit可以調(diào)用父組件在子組件身上自定義的事件铺遂,需要用@前綴衫哥。建議使用此種方式
props可以調(diào)用父組件綁定在子組件身上的事件,需要:前綴襟锐。在router-view身上使用失效
三種都可以實現(xiàn)子組件調(diào)用父組件的方法撤逢,但是效率有所不同,根據(jù)實際需求選擇合適的方法粮坞,嗯蚊荣,就醬~
vue.$nextTick
this.$nextTick()將回調(diào)延遲到下次 DOM 更新循環(huán)之后執(zhí)行,簡單的理解就是莫杈,當(dāng)你修改了data的值然后馬上獲取這個dom元素的值互例,是不能獲取到更新后的值,你需要使用$nextTick這個回調(diào)筝闹,讓修改后的data值渲染更新到dom元素之后在獲取媳叨,才能成功。
vue事件中如何使用event對象
通過將一個特殊變量 $event 傳入到回調(diào)中解決
vue-cli工程升級vue版本
手動package.json 里面修改vue的版本 同時修改 vue-template-compiler 為相同的版本.后者在devdepen....里面.然后npm install
vue中?key?值的作用
渲染列表時需要使用key來給每個節(jié)點做一個唯一標(biāo)識关顷,作用是減少沒必要的diff算法的對比進而高效渲染虛擬DOM節(jié)點糊秆。
vue常用的修飾符
.stop 阻止冒泡
.prevent 阻止行為
.number 限制只輸出number類型
.trim 去空格
.lazy 改變后再觸發(fā)
.native 監(jiān)聽原生事件
Vue兩個核心: 數(shù)據(jù)驅(qū)動(雙向數(shù)據(jù)綁定)、組件系統(tǒng)
數(shù)據(jù)驅(qū)動议双,也叫雙向數(shù)據(jù)綁定痘番。
Vue.js數(shù)據(jù)觀測原理在技術(shù)實現(xiàn)上,利用的是ES5Object.defineProperty和存儲器屬性: getter和setter(所以只兼容IE9及以上版本),可稱為基于依賴收集的觀測機制汞舱。核心是VM伍纫,即ViewModel,保證數(shù)據(jù)和視圖的一致性昂芜。
組件系統(tǒng)翻斟。
.vue組件的核心選項:
1、模板(template):模板聲明了數(shù)據(jù)和最終展現(xiàn)給用戶的DOM之間的映射關(guān)系说铃。
2访惜、初始數(shù)據(jù)(data):一個組件的初始數(shù)據(jù)狀態(tài)。對于可復(fù)用的組件來說腻扇,這通常是私有的狀態(tài)债热。
3、接受的外部參數(shù)(props):組件之間通過參數(shù)來進行數(shù)據(jù)的傳遞和共享幼苛。
4窒篱、方法(methods):對數(shù)據(jù)的改動操作一般都在組件的方法內(nèi)進行。
5舶沿、生命周期鉤子函數(shù)(lifecycle hooks):一個組件會觸發(fā)多個生命周期鉤子函數(shù)墙杯,最新2.0版本對于生命周期函數(shù)名稱改動很大。
6括荡、私有資源(assets):Vue.js當(dāng)中將用戶自定義的指令高镐、過濾器、組件等統(tǒng)稱為資源畸冲。一個組件可以聲明自己的私有資源嫉髓。私有資源只有該組件和它的子組件可以調(diào)用。
Vue的漸進式理解
主張最少邑闲,沒有多做職責(zé)之外的事算行,不像Angular,強主張苫耸,必須用它的模版機制和依賴州邢。vue.js只提供了vue-cli生態(tài)中最核心的組件系統(tǒng)和雙向數(shù)據(jù)綁定,其他東西需要什么引入什么褪子,不會強制要求量淌。
每個框架都不可避免會有自己的一些特點,從而會對使用者有一定的要求褐筛,這些要求就是主張类少,主張有強有弱,它的強勢程度會影響在業(yè)務(wù)開發(fā)中的使用方式渔扎。
package.json配置詳解
name:包名字
version:包版本,x.x.x的格式信轿,符合語義化版本規(guī)則
description:一些描述信息
main:入口文件晃痴,一般是index.js
scripts:指定了運行腳本命令的npm命令行縮寫残吩,默認(rèn)是空的test
author:作者信息
license:許可證,默認(rèn)是ISC倘核、有的默認(rèn)是MIT
請說出vue-cli工程中每個文件夾和文件的用處
vue-cli常用命令
1.? npm install:下載 node_modules 資源包的命令
2. npm run dev:?啟動 vue-cli 開發(fā)環(huán)境的 npm命令
3.??npm run build:?vue-cli 生成 生產(chǎn)環(huán)境部署資源 的 npm命令
4.?npm run build--report:?用于查看 vue-cli 生產(chǎn)環(huán)境部署資源文件大小的 npm命令
用于構(gòu)建vue的 vue-cli 工程都到了哪些技術(shù)泣侮,它們的作用分別是什么?
1紧唱、vue.js:vue-cli工程的核心活尊,主要特點是?雙向數(shù)據(jù)綁定?和?組件系統(tǒng)。
2漏益、vue-router:vue官方推薦使用的路由框架蛹锰。
3、vuex:專為 Vue.js 應(yīng)用項目開發(fā)的狀態(tài)管理器绰疤,主要用于維護vue組件間共用的一些 變量 和 方法铜犬。
4、axios( 或者 fetch 轻庆、ajax ):用于發(fā)起 GET 癣猾、或 POST 等 http請求,基于 Promise 設(shè)計余爆。
5纷宇、vux等:一個專為vue設(shè)計的移動端UI組件庫。
6蛾方、創(chuàng)建一個emit.js文件呐粘,用于vue事件機制的管理。
7转捕、webpack:模塊加載和vue-cli工程打包器作岖。
說說mongoDB和MySQL的區(qū)別
MongoDB 是一種非關(guān)系型數(shù)據(jù)庫,將數(shù)據(jù)存儲為一個JSON文檔五芝,屬于文檔型數(shù)據(jù)庫痘儡,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成,使用MongoDB查詢方式(類似JavaScript的函數(shù))枢步,占用空間大沉删,不支持join方法。Mysql是一種關(guān)系型數(shù)據(jù)庫醉途,不同引擎數(shù)據(jù)存儲方式不同矾瑰,使用SQL語句,占用空間小隘擎,支持join方法殴穴。
說說網(wǎng)絡(luò)分層里七層模型是哪七層
1)? 物理層:通過媒介傳輸比特,確定機械及電氣規(guī)范(比特Bit)
2)數(shù)據(jù)鏈路層:將比特組裝成幀和點到點的傳遞(幀F(xiàn)rame)
3)網(wǎng)絡(luò)層:負(fù)責(zé)數(shù)據(jù)包從源到宿的傳遞和網(wǎng)際互連(包PackeT)
4)傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(fù)(段Segment)
5)會話層:建立、管理和終止會話(會話協(xié)議數(shù)據(jù)單元SPDU)
6)表示層:對數(shù)據(jù)進行翻譯采幌、加密和壓縮(表示協(xié)議數(shù)據(jù)單元PPDU)
7)應(yīng)用層:允許訪問OSI環(huán)境的手段(應(yīng)用協(xié)議數(shù)據(jù)單元APDU)
相關(guān)協(xié)議:
應(yīng)用層:應(yīng)用層劲够、表示層、會話層(從上往下)(HTTP休傍、FTP征绎、SMTP、DNS)
傳輸層(TCP和UDP)
網(wǎng)絡(luò)層(IP)
物理和數(shù)據(jù)鏈路層(以太網(wǎng))
attribute和property的區(qū)別是什么
property是DOM中的屬性磨取,是JavaScript里的對象人柿;
attribute是HTML標(biāo)簽上的特性,它的值只能夠是字符串忙厌;
簡單理解凫岖,Attribute就是dom節(jié)點自帶的屬性,例如html中常用的id慰毅、class隘截、title、align等汹胃。
而Property是這個DOM元素作為對象婶芭,其附加的內(nèi)容,例如classname着饥、clientHeight等犀农。
談一下MVC和MVVM
MVC,包含model數(shù)據(jù)模型宰掉、view視圖呵哨、controller控制器,業(yè)務(wù)邏輯等
View 傳送指令到 Controller
Controller 完成業(yè)務(wù)邏輯后轨奄,要求 Model 改變狀態(tài)
Model 將新的數(shù)據(jù)發(fā)送到 View孟害,用戶得到反饋
所有的通信都是單向的。
MVVM
View:UI界面 ?
ViewModel:它是View的抽象挪拟,負(fù)責(zé)View與Model之間信息轉(zhuǎn)換挨务,將View的Command傳送到Model; ?
Model:數(shù)據(jù)訪問層
區(qū)別與MVC單向訪問玉组,viewModal與modal可以雙向訪問谎柄,view和viewModal也可以雙向訪問
Git fetch和git pull的區(qū)別
git fetch:相當(dāng)于是從遠程獲取最新版本到本地,不會自動merge
git pull:相當(dāng)于是從遠程獲取最新版本到本地惯雳,自動merge
優(yōu)先選擇git fetch朝巫,因為不建議自動合并,要考慮根據(jù)當(dāng)時情況選擇合并代碼
Document.write()?的用法
Document.write()?方法將一個文本字符串寫入一個由?document.open()?打開的文檔流
如果在頁面加載完畢石景,文檔流已經(jīng)閉合劈猿,再使用document.write則會先執(zhí)行document.open()創(chuàng)建一個新文檔流拙吉,這個新文檔流將會覆蓋替換掉之前的文檔流.
簡述對AMD、CMD糙臼、CommonJs的理解
1庐镐、AMD/CMD/CommonJs是JS模塊化開發(fā)的標(biāo)準(zhǔn)恩商,目前對應(yīng)的實現(xiàn)是RequireJs/SeaJs/nodeJs.
2变逃、CommonJs主要針對服務(wù)端,AMD/CMD主要針對瀏覽器端怠堪,所以最容易混淆的是AMD/CMD揽乱。
(順便提一下,針對服務(wù)器端和針對瀏覽器端有什么本質(zhì)的區(qū)別呢粟矿?服務(wù)器端一般采用同步加載文件凰棉,瀏覽器端可以異步加載。
也就是說需要某個模塊陌粹,服務(wù)器端便停下來撒犀,等待它加載再執(zhí)行。這里如果有其他后端語言掏秩,
如java或舞,經(jīng)驗的‘玩家’應(yīng)該更容易理解。而瀏覽器端要保證效率蒙幻,需要采用異步加載映凳,
這就需要一個預(yù)處理,提前將所需要的模塊文件并行加載好邮破。)
3诈豌、 AMD/CMD區(qū)別,雖然都是并行加載js文件抒和,但還是有所區(qū)別矫渔,
AMD是預(yù)加載,并行加載js文件的時候就會執(zhí)行
(因為還需要執(zhí)行摧莽,所以在加載某個模塊前庙洼,這個模塊的依賴模塊需要先加載完成);
而CMD是懶加載范嘱,雖然會一開始就并行加載js文件送膳,但是不會執(zhí)行,而是在需要的時候才執(zhí)行丑蛤。
4叠聋、AMD/CMD的優(yōu)缺點.一個的優(yōu)點就是另一個的缺點, 可以對照瀏覽受裹。
? ? ? ?AMD優(yōu)點:加載快速碌补,尤其遇到多個大文件虏束,因為并行解析,所以同一時間可以解析多個文件厦章。
? ? ? ?AMD缺點:并行加載镇匀,異步處理,加載順序不一定袜啃,可能會造成一些困擾汗侵,甚至為程序埋下大坑。
? ? ? ?CMD優(yōu)點:因為只有在使用的時候才會解析執(zhí)行js文件群发,因此晰韵,每個JS文件的執(zhí)行順序在代碼中是有體現(xiàn)的,是可控的熟妓。
? ? ? ?CMD缺點:執(zhí)行等待時間會疊加雪猪。因為每個文件執(zhí)行時是同步執(zhí)行(串行執(zhí)行),因此時間是所有文件解析執(zhí)行時間之和起愈,
尤其在文件較多較大時只恨,這種缺點尤為明顯。
5抬虽、如何使用官觅?CommonJs的話,因為nodeJs就是它的實現(xiàn)斥赋,所以使用node就行缰猴,也不用引入其他包。
AMD則是通過<script>標(biāo)簽引入RequireJs疤剑。
————————————————
如何設(shè)置cookie滑绒、修改cookie、刪除cookie
前兩個可以通過document.cookie進行設(shè)置和修改隘膘,可以通過將時間提前疑故,設(shè)置document.cookie的expires時間,來刪除cookie
說說嚴(yán)格模式的限制
變量必須聲明后再使用
函數(shù)的參數(shù)不能有同名屬性弯菊,否則報錯
不能使用with語句
禁止this指向全局對象
談?wù)剬軜?gòu)師的理解
1 了解項目的所有功能和構(gòu)想纵势,以及各功能點之間的關(guān)系和作用
2 選擇合適的項目開發(fā)模式
3?主要技術(shù)難點,并提出技術(shù)解決方案
4?選擇適合項目的第三方框架
5?項目開發(fā)的規(guī)范管钳,比如統(tǒng)一的文件命名規(guī)范等
6 產(chǎn)品的質(zhì)量控制方案钦铁,比如安排代碼審核、互相測試等等
說說你對Promise的理解
依照 Promise/A+ 的定義才漆,Promise 有四種狀態(tài):
pending: 初始狀態(tài), 非 fulfilled 或 rejected.
fulfilled: 成功的操作.
rejected: 失敗的操作.
settled: Promise已被fulfilled或rejected牛曹,且不是pending
————————————————
promise是現(xiàn)在比較流行的異步解決方案,可以解決因回調(diào)函數(shù)解決異步所導(dǎo)致的回調(diào)地獄問題醇滥,但是他的缺點是一但開始黎比,就無法取消超营,并且外部無法獲取promise的錯誤,需要調(diào)用回調(diào)函數(shù)捕獲阅虫。它狀態(tài)有4種演闭,pending初始狀態(tài),fulfilled成功狀態(tài)颓帝,rejected失敗狀態(tài)米碰,settled已成功或者已失敗后的狀態(tài),常見方法有promise.all,promise.race, promise.then, promise.catch等
談?wù)勀銓χ貥?gòu)的理解:
在不改變UI的前提下躲履,進行優(yōu)化见间,可以由多個方面聊闯,例如網(wǎng)站重構(gòu)工猜,可以考慮HTML、CSS菱蔬、JS篷帅、服務(wù)器、seo拴泌、webpack魏身、vue等方面
在低版本的IE瀏覽器里,ajax請求有嚴(yán)重的緩存問題蚪腐。
在請求地址不改變的情況下箭昵,只有第一次請求才會真正發(fā)送到服務(wù)器端,后續(xù)的請求都會從瀏覽器的緩存中獲取結(jié)果回季,即使服務(wù)器端數(shù)據(jù)更新了家制,客戶端拿到的還是舊的數(shù)據(jù)。
解決方案:在請求地址后面加請求參數(shù)泡一,保證每一次的請求參數(shù)的值的都不相同颤殴。
————————————————
事件、IE與火狐的事件機制有什么區(qū)別鼻忠?如何阻止冒泡涵但?
事件流描述的是從頁面中接受事件的順序,分為冒泡流和捕獲流帖蔓;
2.事件冒泡是指事件從最具體的元素接收矮瘟,然后逐級向上傳播,直到不具體的節(jié)點(通常指文檔節(jié)點)塑娇;而事件捕獲相反澈侠,它是從不具體的節(jié)點開始,逐步到最具體的節(jié)點钝吮;
3.IE的事件流是冒泡流厘贼,而火狐同時支持冒泡流和捕獲流漆羔;
4.阻止事件冒泡:e.stopPropagation()烹卒,IE則是使用e.cancelBubble = true;
GET和POST的區(qū)別
【⑾摇(1)get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)醇坝。
∫毓颉(2)get是將參數(shù)數(shù)據(jù)加到URL中,用戶可以看到呼猪。post是將內(nèi)容放置在http請求信息體內(nèi)傳送画畅,用戶看不到這個過程。
∷尉唷(3)對于get方法轴踱,服務(wù)器端是用Request.QueryString獲取變量的值,對于post方法谚赎,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)淫僻。
(4)get傳送的數(shù)據(jù)量較小壶唤,不能大于2kb雳灵。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制闸盔。但理論上悯辙,IIS4中最大量為80kb,IIS5中為100kb迎吵。
《阕(5)get安全性非常低,post安全性較高钓觉。但是執(zhí)行效率卻比post方法好茴肥。
僅用于POST請求? 在以下情況只能用POST請求(1.無法使用緩存文件;2.向服務(wù)器發(fā)送大量數(shù)據(jù)荡灾;3.發(fā)送包含未知字符的用戶輸入時瓤狐,post比get更穩(wěn)定也更可靠)
建議使用get方法的情況:1、get方式的安全性較Post方式要差些批幌,包含機密信息的話础锐,建議用Post數(shù)據(jù)提交方式2、在做數(shù)據(jù)查詢時荧缘,建議用Get方式皆警;而在做數(shù)據(jù)添加、修改或刪除時截粗,建議用Post方式信姓;
Flash ajax對比
Flash適合處理多媒體鸵隧、矢量圖形、訪問機器意推;對CSS豆瘫、處理文本上不足,不容易被搜索菊值。
Ajax對CSS外驱、文本支持很好,支持搜索腻窒;多媒體昵宇、矢量圖形、機器訪問不足儿子。
共同點:與服務(wù)器的無刷新傳遞消息瓦哎、用戶離線和在線狀態(tài)、操作DOM
IE和Chrome可以并行下載多少個資源典徊?
IE6 : 2
IE7: 4
IE8+ 6
FF 杭煎、Chrome: 6
Web應(yīng)用從服務(wù)器主動推送Data到客戶端有那些方式?
1 AJAX 輪詢(long-polling)方式
實現(xiàn)方法很簡單,就是客戶端通過Ajax每隔一段時間請求服務(wù)器卒落,這種方法缺陷很大,很消耗性能
注:它是Ajax輪詢的升級版蜂桶,客戶端向服務(wù)器端發(fā)送請求儡毕,服務(wù)端接收到請求后,保持連接扑媚,檢查數(shù)據(jù)是否有更新腰湾,有的話返回信息并斷開連接;數(shù)據(jù)沒有更新的話疆股,就一直和客戶端保持連接费坊,不返回信息。等到了服務(wù)端設(shè)置的超時的時間之后旬痹,還是沒有檢查到數(shù)據(jù)更新附井,那么服務(wù)端就會返回超時消息×讲校客戶端這邊永毅,不管請求成功還是失敗,或者請求超時人弓,都會再次向服務(wù)端發(fā)送請求沼死。這一過程,在這一頁面在瀏覽器打開期間崔赌,都會循環(huán)不斷意蛀。?
2 comet方式:comet是一種用于web的推送技術(shù)耸别,能夠讓服務(wù)器實時的將更新的信息傳送到客戶端,而不需要客戶端發(fā)出請求县钥。
2.1 HTTP長輪詢+JSONP長輪詢
2.2 XHR長輪詢
2.3 webSocket
列舉IE與其他瀏覽器不一樣的特性太雨?
IE使用innerText,F(xiàn)ireFox使用textContent魁蒜;
事件方面:IE:attachEvent:火狐是addEventListener囊扳;
內(nèi)核方面: IE:webkit? ? FF Gecko? Edge: EdgeHTML Safari: webkit2 Chrome Chromiun Opera: Chromiun
JS垃圾回收機制方法
標(biāo)記清除法: 常見變量標(biāo)記一次,去另一個環(huán)境也標(biāo)記一次兜看,然后JS垃圾回收機制根據(jù)變量標(biāo)記來決定是否清除該變量
引入計數(shù)法锥咸,不常見,就是變量被引入就加一细移,取消引入就-1搏予,當(dāng)變量計數(shù)變?yōu)?的時候,就會被清除
JS延遲加載的幾種方式
defer HTML4.01?腳本會被延遲到整個頁面都解析完畢之后再執(zhí)行弧轧。
async HTML5?腳本會被延遲到整個頁面都解析完畢之后再執(zhí)行雪侥,只適用于外部腳本
動態(tài)創(chuàng)建DOM方式
使用jQuery的getScript()方法
使用setTimeout延遲方法
讓JS最后加載?把js外部引入的文件放到頁面底部,來讓js最后引入精绎,從而加快頁面加載速度
什么是FOUC(無樣式內(nèi)容閃爍)?
如果使用import方法對CSS進行導(dǎo)入,會導(dǎo)致某些頁面在Windows 下的Internet Explorer出現(xiàn)一些奇怪的現(xiàn)象:以無樣式顯示頁面內(nèi)容的瞬間閃爍,這種現(xiàn)象稱之為文檔樣式短暫失效(Flash of Unstyled Content),簡稱為FOUC速缨。
原因大致為:
1,使用import方法導(dǎo)入樣式表代乃。
2旬牲,將樣式表放在頁面底部
3,有幾個樣式表搁吓,放在html結(jié)構(gòu)的不同位置原茅。
其實原理很清楚:當(dāng)樣式表晚于結(jié)構(gòu)性html加載,當(dāng)加載到此樣式表時堕仔,頁面將停止之前的渲染擂橘。此樣式表被下載和解析后,將重新渲染頁面摩骨,也就出現(xiàn)了短暫的花屏現(xiàn)象通贞。
解決方法:
使用LINK標(biāo)簽將樣式表放在文檔HEAD中。
————————————————
如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信仿吞?
1 調(diào)用localStorage?
2 cookie+setInterval
html5有哪些新特性滑频、移除了那些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題唤冈?如何區(qū)分 HTML 和 HTML5峡迷?
HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置绘搞,存儲彤避,多任務(wù)等功能的增加。
1夯辖、新特性:
拖拽釋放(Drag and drop) API
語義化更好的內(nèi)容標(biāo)簽(header,nav,footer,aside,article,section)
音頻琉预、視頻API(audio,video)
畫布(Canvas) API
地理(Geolocation) API
本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失蒿褂;
sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動刪除
表單控件圆米,calendar、date啄栓、time娄帖、email、url昙楚、search
新的技術(shù)webworker, websocket, Geolocation
2近速、移除的元素
純表現(xiàn)的元素:basefont,big堪旧,center削葱,font, s,strike淳梦,tt析砸,u;
對可用性產(chǎn)生負(fù)面影響的元素:frame谭跨,frameset干厚,noframes;
3螃宙、如何處理
支持HTML5新標(biāo)簽:
IE8/IE7/IE6支持通過document.createElement方法產(chǎn)生的標(biāo)簽,
可以利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽所坯,
瀏覽器支持新標(biāo)簽后谆扎,還需要添加標(biāo)簽?zāi)J(rèn)的樣式;
當(dāng)然最好的方式是直接使用成熟的框架芹助、使用最多的是html5shim框架
? <!--[if lt IE 9]>
? <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
? <![endif]-->
4堂湖、如何區(qū)分:
DOCTYPE聲明\新增的結(jié)構(gòu)元素\功能元素
常見的position定位方式如下:
static 默認(rèn)值。元素出現(xiàn)在正常的普通流中
relative 生成相對定位的元素状土,相對于其在普通流中的位置進行偏移无蜂。
fixed (老IE不支持)生成絕對定位的元素,通常相對于瀏覽器窗口或 iframe 進行定位蒙谓。
inherit 繼承父元素的position屬性斥季,但需要注意的是IE8以及往前的版本都不支持inherit屬性。
absolute 生成絕對定位的元素, 相對于最近一級的 不是 static 的父元素來進行定位,如果沒有找到的話酣倾,最終是根據(jù)body進行定位舵揭。
注意:
absolute定位的基準(zhǔn)是相對于最近一級的不是默認(rèn)值static的父元素(可以是absolute/relative/fixed等)來進行定位的,而不僅僅是相對于為position為relative的父級元素躁锡。父級元素還可以是absolute午绳、fixed定位
————————————————
1px問題
原因:設(shè)備像素比dpr導(dǎo)致,ipone6默認(rèn)dpr=2映之,即1個邏輯像素拦焚,在x軸和y軸方向,需要2個物理像素來顯示杠输,例如700rpx物理像素對應(yīng)邏輯像素為375rpx赎败,一般設(shè)計稿會用物理像素。
解決方法:
1 0.5px方案抬伺,利用媒體查詢判斷dpr設(shè)備像素比螟够,將1px設(shè)置為0.5px
2 利用viewport(可視區(qū)域)+rem, 設(shè)置meta?initial-scale=0.5(初始縮放比例)
快速 排序的思想并實現(xiàn)一個快排
歸并排序的思想并實現(xiàn)一個快排
棧和堆的區(qū)別:
棧區(qū):由編輯器自動分配釋放,存放函數(shù)的參數(shù)值峡钓,局部變量的值等(基本類型值)妓笙。
堆區(qū):由程序員分配釋放,若程序員不釋放能岩,程序結(jié)束時可能有OS(操作系統(tǒng))回收(引用類型值)寞宫。
棧(數(shù)據(jù)結(jié)構(gòu)):一種先進后出的數(shù)據(jù)結(jié)構(gòu),只允許表尾進行插入和刪除拉鹃。
堆(數(shù)據(jù)結(jié)構(gòu)):堆是一種特殊的完全二叉樹辈赋,當(dāng)且僅當(dāng)滿足所有節(jié)點的值總是不大于或不小于其父節(jié)點的值的完全二叉樹被稱之為堆。堆的這一特性稱之為堆序性
棧和隊列的區(qū)別:
棧是先進后出膏燕,隊列是先進先出钥屈。
棧的插入和刪除操作都是在一端進行的,而隊列的操作卻是在兩端進行的坝辫。棧只允許在表尾一端進行插入和刪除篷就,隊列只允許在表尾一端進行插入,在表頭一端進行刪除近忙。
CSS3新特性:
新增了偽類::first-of-type, :last-of-type, :only-child, :nth-child(), :enabled, :disabled:, :checked
比較重要彈性布局:display: flex, 及其一些列的屬性竭业。。及舍。
還有媒體查詢@media, 顏色rgba, 圓角border-radius, border-image, 陰影box-shadow, 盒子模型box-sizing等
動畫方面就:transfrom轉(zhuǎn)換, transition過渡未辆, animation動畫
CSS3新增偽類有那些?
p:first-of-type 選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素锯玛。
p:last-of-type? 選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素咐柜。
p:only-of-type? 選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素。
p:only-child? ? 選擇屬于其父元素的唯一子元素的每個 <p> 元素。
p:nth-child(2)? 選擇屬于其父元素的第二個子元素的每個 <p> 元素炕桨。
p:nth-of-type(odd) 獲取其父元素的字元素奇數(shù)標(biāo)簽p
nth-of-type(even)?獲取其父元素的字元素偶數(shù)標(biāo)簽p
:enabled? :disabled 控制表單控件的禁用狀態(tài)饭尝。
:checked? ? ? ? 單選框或復(fù)選框被選中。
優(yōu)先級算法如何計算献宫?
??ID選擇器的優(yōu)先級:1000
??類選擇器的優(yōu)先級:100
? 標(biāo)簽選擇器的優(yōu)先級:10
??優(yōu)先級可以累加
? 如果是同級的選擇器钥平,那么,后面一個姊途,則+1涉瘾,再后面一個,則+2
? 注意:再怎么累加捷兰,也不可能超越上限
? 注意:優(yōu)先級立叛,只會影響到相同屬性名的屬性
?ID選擇器 > 類選擇器=后代選擇器=子代選擇器 > 標(biāo)簽選擇器
??!important用于提升指定樣式規(guī)則的應(yīng)用優(yōu)先權(quán) ?優(yōu)先級最高
csss選擇符有哪些?哪些屬性可以繼承贡茅?下面我們來看一下css的選擇符與css中可以繼承的屬性有哪些秘蛇。
CSS選擇符:
id選擇器 (#id)
類選擇器 (.warning)
標(biāo)簽選擇器 (div、h1顶考、p)
相鄰選擇器 (h1+p)
子選擇器 (ul>li)
后代選擇器 (li a)
通配符選擇器 (*)
屬性選擇器 (class="fff")
偽類選擇器 (a:hover, a:active)
css中可以繼承的屬性:
1赁还、
字體系列屬性
font:組合字體
font-family:規(guī)定元素的字體系列
font-weight:設(shè)置字體的粗細(xì)
font-size:設(shè)置字體的尺寸
font-style:定義字體的風(fēng)格
font-variant:設(shè)置小型大寫字母的字體顯示文本,這意味著所有的小寫字母均會被轉(zhuǎn)換為大寫驹沿,但是所有使用小型大寫字體的字母與其余文本相比艘策,其字體尺寸更小。
font-stretch:允許你使文字變寬或變窄渊季。所有主流瀏覽器都不支持朋蔫。font-size-adjust:為某個元素規(guī)定一個 aspect 值,字體的小寫字母 "x" 的高度與 "font-size" 高度之間的比率被稱為一個字體的 aspect 值却汉。這樣就可以保持首選字體的 x-height驯妄。
2、文本系列屬性
text-indent:文本縮進
text-align:文本水平對齊
line-height:行高
word-spacing:增加或減少單詞間的空白(即字間隔)
letter-spacing:增加或減少字符間的空白(字符間距)
text-transform:控制文本大小寫
direction:規(guī)定文本的書寫方向
color:文本顏色
3合砂、元素可見性:
visibility
4富玷、表格布局屬性:caption-side、border-collapse既穆、border-spacing、empty-cells雀鹃、table-layout5幻工、列表屬性:list-style-type、list-style-image黎茎、list-style-position囊颅、list-style6、生成內(nèi)容屬性:quotes7、光標(biāo)屬性:cursor8踢代、頁面樣式屬性:page盲憎、page-break-inside、windows胳挎、orphans9饼疙、聲音樣式屬性:speak、speak-punctuation慕爬、speak-numeral窑眯、speak-header、speech-rate医窿、volume磅甩、voice-family、pitch姥卢、pitch-range卷要、stress、richness独榴、僧叉、azimuth、elevation括眠。
position:absolute和float屬性的異同
共同點的話彪标,對內(nèi)聯(lián)元素設(shè)置float和absolute屬性,可以讓元素脫離文檔流掷豺,并且可以設(shè)置其寬高捞烟。
不同點的話,float仍會占據(jù)位置当船,absolute會覆蓋文檔流中的其他元素题画。
cookie和session的區(qū)別
存儲位置
cookie由瀏覽器向服務(wù)器請求,由服務(wù)器響應(yīng)請求生成返回德频,存放在客戶端
session的數(shù)據(jù)信息存放服務(wù)端
內(nèi)存大小
cookie一般<=4kb苍息,瀏覽器限制最多cookie最多20個
session理論上沒有大小限制,但是考慮到性能問題壹置,不會存放太多竞思,服務(wù)器有session刪除機制
存儲方法:
cookie存儲方式為ASCII編碼字符串
session可以任意形式,不局限于string钞护,integer盖喷,list,map等难咕。
隱私策略不同
cookie對客戶端是可見的课梳,別有用心的人可以分析存放在本地的cookie并進行cookie欺騙距辆,所以它是不安全的。
session存儲在服務(wù)器上暮刃,對客戶端是透明對跨算,不存在敏感信息泄漏的風(fēng)險、
創(chuàng)建對象的方法
1 new Object()
2 字面量 var Person = {}
3 工廠模式椭懊,原理還是new Object,聲明一個函數(shù)诸蚕,傳入生產(chǎn)對象的參數(shù),返回不同的對象
function createPerson(name,age,job){
?var o = newObject();
?o.name = name;
?o.age = age;
?o.job = job;
?o.sayName = function(){
??alert(this.name);
?};
?returno;
}
var person1 = createPerson('Nike',29,'teacher');
var person2 = createPerson('Arvin',20,'student');
4 繼承方法創(chuàng)建對象
幾種繼承方法的優(yōu)缺點:
原型鏈繼承
核心:?將父類的實例作為子類的原型
優(yōu)點:簡單方便容易操作灾搏,既可以繼承原型身上的方法和屬性挫望,又能繼承構(gòu)造函數(shù)內(nèi)的方法和屬性
缺點:無法實現(xiàn)多繼承,不方便傳參狂窑,原型對象屬性被所有實例共享
構(gòu)造函數(shù)繼承:通過改變this的指向?qū)崿F(xiàn)繼承
優(yōu)點:方便傳參媳板,可以實現(xiàn)多繼承
缺點:只能繼承構(gòu)造函數(shù)的屬性和方法,不能繼承原型內(nèi)部的屬性和方法泉哈,無法實現(xiàn)函數(shù)復(fù)用蛉幸,浪費性能
實例繼承
核心:為父類實例添加新特性,作為子類實例返回
缺點:父類的實例丛晦,不支持多繼承
拷貝繼承
優(yōu)點:支持多繼承
缺點:效率低奕纫,內(nèi)存占用高,無法獲取父類不可枚舉的方法
組合繼承
核心:通過調(diào)用父類構(gòu)造烫沙,繼承父類的屬性并保留傳參的優(yōu)點匹层,然后通過將父類實例作為子類原型,實現(xiàn)函數(shù)復(fù)用
優(yōu)點:可傳參锌蓄、可復(fù)用升筏、修復(fù)構(gòu)造繼承引用屬性共享問題、可繼承父類原型內(nèi)部方法和屬性
缺點:需要new兩次
寄生組合繼承
核心:通過寄生方式瘸爽,砍掉父類的實例屬性您访,這樣,在調(diào)用兩次父類的構(gòu)造的時候剪决,就不會初始化兩次實例方法/屬性灵汪,避免的組合繼承的缺點
優(yōu)點:和組合繼承一樣,同時修復(fù)了組合繼承兩次new消耗性能問題
缺點:沒缺點
說說你對作用域鏈的理解柑潦?
當(dāng)代碼在一個環(huán)境中執(zhí)行時享言,會創(chuàng)建變量對象的一個作用域鏈(scope chain,不簡稱sc)來保證對執(zhí)行環(huán)境有權(quán)訪問的變量和函數(shù)的有序訪問渗鬼。作用域第一個對象始終是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對象担锤,變量訪問到window對象即被終止。
棧和堆的區(qū)別
堆(Heap)與棧(Stack)是開發(fā)人員必須面對的兩個概念乍钻,在理解這兩個概念時肛循,需要放到具體的場景下,因為不同場景下银择,堆與棧代表不同的含義多糠。一般情況下,有兩層含義:
(1)程序內(nèi)存布局場景下浩考,堆與棧表示兩種內(nèi)存管理方式夹孔;
(2)數(shù)據(jù)結(jié)構(gòu)場景下,堆與棧表示兩種常用的數(shù)據(jù)結(jié)構(gòu)析孽。
1.程序內(nèi)存分區(qū)中的堆與棧
棧由操作系統(tǒng)自動分配釋放 搭伤,用于存放函數(shù)的參數(shù)值、局部變量等袜瞬,其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧
堆由開發(fā)人員分配和釋放怜俐, 若開發(fā)人員不釋放,程序結(jié)束時由 OS 回收邓尤,分配方式類似于鏈表拍鲤。
2 數(shù)據(jù)結(jié)構(gòu)中的堆與棧
棧是一種線性表,先進后出
堆是一種樹形結(jié)構(gòu)汞扎,是一種特殊的完全二叉樹季稳,當(dāng)且僅當(dāng)滿足所有節(jié)點的值總是不大于或不小于其父節(jié)點的值的完全二叉樹被稱之為堆。
js有哪些內(nèi)置對象澈魄,數(shù)據(jù)封裝類對象景鼠?
數(shù)據(jù)封裝類對象:Object、Array痹扇、Boolean铛漓、Number、String
其他對象:Function帘营、arguments票渠、Math、Date芬迄、RegExp
常見的造成內(nèi)存泄漏的方法问顷,以及怎么解決?
1 意外的全局變量
2 被遺忘的計時器或回調(diào)函數(shù)
3?脫離 DOM 的引用
4? 閉包
解決方法:
1 使用 Chrome 發(fā)現(xiàn)內(nèi)存泄露
2 自動釋放禀梳,例如閉包變量直接賦值為null
dom屬于什么結(jié)構(gòu)杜窄,以及相關(guān)操作
創(chuàng)建新的節(jié)點
document.createDocumentFragment() // 創(chuàng)建一個DOM片段
document.createElement() //創(chuàng)建一個具體的元素
createTextNode() //創(chuàng)建一個文本節(jié)點
appendChild() //添加
removeChild() //移除
replaceChild() //替代
insertBefore() //插入
document.getElementsByTagName() //通過標(biāo)簽名稱
document.getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性
Bom常用屬性有哪些
location對象算途、history對象塞耕、Navigator對象、window對象
location對象
location.href-- 返回或設(shè)置當(dāng)前文檔的URL
location.search – 返回URL中的查詢字符串部分嘴瓤。例如 http://www.dreamdu.com/dreamd… 返回包括(?)后面的內(nèi)容?id=5&name=dreamdu
location.hash – 返回URL#后面的內(nèi)容扫外,如果沒有#莉钙,返回空 location.host – 返回URL中的域名部分,例如http://www.dreamdu.com
location.hostname – 返回URL中的主域名部分筛谚,例如http://dreamdu.com
location.pathname – 返回URL的域名后的部分磁玉。例如 http://www.dreamdu.com/xhtml/ 返回/xhtml/
location.port – 返回URL中的端口部分。例如 http://www.dreamdu.com:8080/xhtml/ 返回8080
location.protocol – 返回URL中的協(xié)議部分驾讲。例如 http://www.dreamdu.com:8080/xhtml/ 返回(//)前面的內(nèi)容http:
location.assign – 設(shè)置當(dāng)前文檔的URL
location.replace() – 設(shè)置當(dāng)前文檔的URL蚊伞,并且在history對象的地址列表中移除這個URL location.replace(url);
location.reload() – 重載當(dāng)前頁面
history對象
history.go() – 前進或后退指定的頁面數(shù)
history.go(num); history.back() – 后退一頁
history.forward() – 前進一頁
Navigator對象
navigator.userAgent – 返回用戶代理頭的字符串表示(就是包括瀏覽器版本信息等的字符串)
navigator.cookieEnabled – 返回瀏覽器是否支持(啟用)cookie
window對象
alert(str):用于向用戶展示一些用戶不可控的警告信息
confirm(str):用于向用戶展示一段信息并確認(rèn)結(jié)果
prompt(str秃殉,str): 用于向用戶展示一段信息并收集用戶輸入結(jié)果
print(): 顯示打印對話框(等同與點擊瀏覽器菜單欄打印選項)
find(): 顯示查找對話框(等同與點擊瀏覽器菜單欄查找選項)
————————————————
jQuery或zepto源碼有哪些寫的好的地方蚁署?
jquery源碼封裝在一個匿名函數(shù)的自執(zhí)行環(huán)境中喘鸟,有助于防止變量的全局污染温艇,然后通過傳入window對象參數(shù)哀九,可以使window對象作為局部變量使用杯拐,好處是當(dāng)jquery中訪問window對象的時候冒掌,就不用將作用域鏈退回到頂層作用域了晶府,從而可以更快的訪問window對象扎谎。同樣碳想,傳入undefined參數(shù),可以縮短查找undefined時的作用域鏈毁靶。
????(function( window, undefined ) {
?????????//用一個函數(shù)域包起來胧奔,就是所謂的沙箱
?????????//在這里邊var定義的變量,屬于這個函數(shù)域內(nèi)的局部變量预吆,避免污染全局
?????????//把當(dāng)前沙箱需要的外部變量通過函數(shù)參數(shù)引入進來
?????????//只要保證參數(shù)對內(nèi)提供的接口的一致性龙填,你還可以隨意替換傳進來的這個參數(shù)
????????window.jQuery = window.$ = jQuery;
????})( window );
jquery將一些原型屬性和方法封裝在了jquery.prototype中,為了縮短名稱拐叉,又賦值給了jquery.fn岩遗,這是很形象的寫法。
有一些數(shù)組或?qū)ο蟮姆椒ń?jīng)常能使用到凤瘦,jQuery將其保存為局部變量以提高訪問速度宿礁。
jquery實現(xiàn)的鏈?zhǔn)秸{(diào)用可以節(jié)約代碼,所返回的都是同一個對象蔬芥,可以提高代碼效率梆靖。
談?wù)劯右约扒宄拥姆椒ǎ?br>
浮動的框可以向左或向右移動,直到他的外邊緣碰到包含框或另一個浮動框的邊框為止笔诵。由于浮動框不在文檔的普通流中返吻,所以文檔的普通流的塊框表現(xiàn)得就像浮動框不存在一樣。浮動的塊框會漂浮在文檔普通流的塊框上
清除浮動的方法:
1 父元素定義高度
2 父元素定義overflow:hidden
3 BFC清除浮動
4 浮動元素后面元素加clear:both
5 浮動元素后面添加偽類:after,zoom
設(shè)計模式有哪幾種乎婿?談?wù)勀阍陧椖恐杏眠^哪些設(shè)計模式
工廠模式
單例模式
代理模式
觀察者模式
策略模式
s選擇符有哪些测僵?哪些屬性可以繼承?下面我們來看一下css的選擇符與css中可以繼承的屬性有哪些谢翎。
CSS選擇符:
id選擇器 (#id)
類選擇器 (.warning)
標(biāo)簽選擇器 (div捍靠、h1沐旨、p)
相鄰選擇器 (h1+p)
子選擇器 (ul>li)
后代選擇器 (li a)
通配符選擇器 (*)
屬性選擇器 (class="fff")
偽類選擇器 (a:hover, a:active)
css中可以繼承的屬性:
1、字體系列屬性
font:組合字體
font-family:規(guī)定元素的字體系列
font-weight:設(shè)置字體的粗細(xì)
font-size:設(shè)置字體的尺寸
font-style:定義字體的風(fēng)格
font-variant:設(shè)置小型大寫字母的字體顯示文本剂公,這意味著所有的小寫字母均會被轉(zhuǎn)換為大寫希俩,但是所有使用小型大寫字體的字母與其余文本相比,其字體尺寸更小纲辽。
font-stretch:允許你使文字變寬或變窄。所有主流瀏覽器都不支持璃搜。
font-size-adjust:為某個元素規(guī)定一個 aspect 值拖吼,字體的小寫字母 "x" 的高度與 "font-size" 高度之間的比率被稱為一個字體的 aspect 值。這樣就可以保持首選字體的 x-height这吻。
2吊档、文本系列屬性
text-indent:文本縮進
text-align:文本水平對齊
line-height:行高
word-spacing:增加或減少單詞間的空白(即字間隔)
letter-spacing:增加或減少字符間的空白(字符間距)
text-transform:控制文本大小寫
direction:規(guī)定文本的書寫方向
color:文本顏色
3、元素可見性:visibility
4唾糯、表格布局屬性:caption-side怠硼、border-collapse、border-spacing移怯、empty-cells香璃、table-layout
5、列表屬性:list-style-type舟误、list-style-image葡秒、list-style-position、list-style
6嵌溢、生成內(nèi)容屬性:quotes
7眯牧、光標(biāo)屬性:cursor
8、頁面樣式屬性:page赖草、page-break-inside学少、windows、orphans
9秧骑、聲音樣式屬性:speak版确、speak-punctuation、speak-numeral腿堤、speak-header阀坏、speech-rate、volume笆檀、voice-family忌堂、pitch、pitch-range酗洒、stress士修、richness枷遂、、azimuth棋嘲、elevation酒唉。
p:first-of-type 選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素。
p:last-of-type? 選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素沸移。
p:only-of-type? 選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素痪伦。
p:only-child? ? 選擇屬于其父元素的唯一子元素的每個 <p> 元素。
p:nth-child(2)? 選擇屬于其父元素的第二個子元素的每個 <p> 元素雹锣。
:enabled? :disabled 控制表單控件的禁用狀態(tài)网沾。
:checked? ? ? ? 單選框或復(fù)選框被選中。
:root 選擇文本的根元素蕊爵。
git fetch:相當(dāng)于是從遠程獲取最新版本到本地辉哥,不會自動merge