2021面經(jīng)不易懂筆記

用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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市攒射,隨后出現(xiàn)的幾起案子醋旦,更是在濱河造成了極大的恐慌,老刑警劉巖会放,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲齐,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸦概,警方通過查閱死者的電腦和手機箩张,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窗市,“玉大人先慷,你說我怎么就攤上這事∽刹欤” “怎么了论熙?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長摄狱。 經(jīng)常有香客問我脓诡,道長,這世上最難降的妖魔是什么媒役? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任祝谚,我火速辦了婚禮,結(jié)果婚禮上酣衷,老公的妹妹穿的比我還像新娘交惯。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布席爽。 她就那樣靜靜地躺著意荤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪只锻。 梳的紋絲不亂的頭發(fā)上玖像,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音齐饮,去河邊找鬼捐寥。 笑死,一個胖子當(dāng)著我的面吹牛祖驱,可吹牛的內(nèi)容都是我干的上真。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼羹膳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了根竿?” 一聲冷哼從身側(cè)響起陵像,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寇壳,沒想到半個月后醒颖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡壳炎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年泞歉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿辩。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡腰耙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铲球,到底是詐尸還是另有隱情挺庞,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布稼病,位于F島的核電站选侨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏然走。R本人自食惡果不足惜援制,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芍瑞。 院中可真熱鬧晨仑,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至码泛,卻和暖如春猾封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背噪珊。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工晌缘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痢站。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓磷箕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阵难。 傳聞我的和親對象是個殘疾皇子岳枷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容