摘要:棧是操作系統(tǒng)在建立某個(gè)進(jìn)程時(shí)或者線程為這個(gè)線程建立的存儲(chǔ)區(qū)域。在具有多線程機(jī)制的操作系統(tǒng)中,處理機(jī)調(diào)度的基本單位不是進(jìn)程而是線程。一個(gè)進(jìn)程可以有多個(gè)線程,而且至少有一個(gè)可執(zhí)行線程。
WEB前端面試題的記錄(二)
1、一次完整的HTTP事務(wù)是怎樣的一個(gè)過程:
基本流程:
域名解析
發(fā)起TCP的3次握手
建立TCP連接后發(fā)起http請求
服務(wù)器端響應(yīng)http請求,瀏覽器得到html代碼
瀏覽器解析html代碼,并請求html代碼中的資源
瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給用戶
2、JSONP是什么?它是如何實(shí)現(xiàn)跨域的?為什么它可以實(shí)現(xiàn)跨域?
JSONP(JSON with Padding)是一個(gè)非官方的協(xié)議,它允許在服務(wù)器端集成Script tags返回至客戶端,通過javascript callback的形式實(shí)現(xiàn)跨域訪問。
由于同源策略的限制,XmlHttpRequest只允許請求當(dāng)前源(域名、協(xié)議、端口)的資源,為了實(shí)現(xiàn)跨域請求,可以通過script標(biāo)簽實(shí)現(xiàn)跨域請求(因?yàn)橥床呗圆蛔柚箘?dòng)態(tài)腳本插入,并且將腳本看作是從提供 Web 頁面的域上加載的),然后在服務(wù)端輸出JSON數(shù)據(jù)并執(zhí)行回調(diào)函數(shù),從而解決了跨域的數(shù)據(jù)請求。
3、閉包:函數(shù)能被外部調(diào)用到,則該作用連上的所有變量都會(huì)被保存下來。
作用:①可以讀取函數(shù)內(nèi)部的變量;②相當(dāng)于劃出了一塊私有作用域,避免數(shù)據(jù)污染;③讓變量始終保存在內(nèi)存中
使用全局變量被認(rèn)為是不好的習(xí)慣,而且容易造成錯(cuò)誤并且維護(hù)成本較高,所以js可以采用閉包的方式讀取函數(shù)的內(nèi)部變量。但是如果大量使用閉包就會(huì)造成過多的變量始終保存在內(nèi)存中,會(huì)造成內(nèi)存泄漏。
4、模塊化編程
①AMD(異步模塊定義) requirejs
defined(id,deps,factory)
require([dependency],function(){})
異步加載,瀏覽器不會(huì)失去響應(yīng)
它指定的回調(diào)函數(shù),只有前面的模塊都加載完成后,才會(huì)運(yùn)行,解決了依賴性問題
②CMD(通用模塊定義) seajs
模塊定義方式和模塊加載時(shí)機(jī)處理不同
defined(id,deps,factory)
function(require,exports,module)
module.exports = ______;
③區(qū)別:AMD依賴前置,在定義模塊的時(shí)候就要聲明其依賴的模塊;CMD就近依賴,只有在用到哪個(gè)模塊的時(shí)候再去require;
5、JS繼承與原型問題
Js所有的函數(shù)都有一個(gè)prototype屬性,這個(gè)屬性引用了一個(gè)對象,即原型對象,也簡稱原型。每一個(gè)對象都有原型,在瀏覽器中它體現(xiàn)在一個(gè)隱藏的 proto 屬性上。
當(dāng)一個(gè)對象需要調(diào)用某個(gè)方法時(shí),它回去最近的原型上查找該方法,如果沒有找到,它會(huì)再次往下繼續(xù)查找。這樣逐級(jí)查找,一直找到了要找的方法。 這些查找的原型構(gòu)成了該對象的原型鏈條。原型最后指向的是null。我們說的原型繼承,就是將父對像的方法給子類的原型。子類的構(gòu)造函數(shù)中不擁有這些方法和屬性。
6、一個(gè)頁面從URL到加載顯示完成,都發(fā)生了什么?
①通過DNS將該地址解析成IP地址;
②發(fā)起網(wǎng)絡(luò)連接,進(jìn)行http協(xié)議會(huì)話:客戶端發(fā)送報(bào)頭(請求報(bào)頭),服務(wù)端回饋報(bào)頭(響應(yīng)報(bào)頭)
③返回一個(gè)頁面(根據(jù)頁面上的外鏈的URL重新發(fā)送請求獲?。?br>④接收文件完畢,對加載到的資源進(jìn)行語法解析,以及相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(網(wǎng)頁渲染)
7、隊(duì)列、堆、棧的區(qū)別?
隊(duì)列是先進(jìn)先出:就像一條路,有一個(gè)入口和一個(gè)出口,先進(jìn)去的就可以先出去。而棧就像一個(gè)箱子,后放的在上邊,所以后進(jìn)先出。堆是在程序運(yùn)行時(shí),而不是在程序編譯時(shí),申請某個(gè)大小的內(nèi)存空間。即動(dòng)態(tài)分配內(nèi)存,對其訪問和對一般內(nèi)存的訪問沒有區(qū)別。
棧(Stack)是操作系統(tǒng)在建立某個(gè)進(jìn)程時(shí)或者線程為這個(gè)線程建立的存儲(chǔ)區(qū)域。在編程中,例如C/C++中,所有的局部變量都是從棧中分配內(nèi)存空間,實(shí)際上也不是什么分配,只是從棧頂向上用就行,在退出函數(shù)的時(shí)候,只是修改棧指針就可以把棧中的內(nèi)容銷毀,所以速度最快。
堆(Heap)是應(yīng)用程序在運(yùn)行的時(shí)候請求操作系統(tǒng)分配給自己內(nèi)存,一般是申請/給予的過程。由于從操作系統(tǒng)管理的內(nèi)存分配所以在分配和銷毀時(shí)都要占用時(shí)間,所以用堆的效率低的多!但是堆的好處是可以做的很大,C/C++對分配的Heap是不初始化的。
在Java中除了簡單類型(int,char等)都是在堆中分配內(nèi)存,這也是程序慢的一個(gè)主要原因。但是跟C/C++不同,Java中分配Heap內(nèi)存是自動(dòng)初始化的。在Java中所有的對象(包括int的wrapper Integer)都是在堆中分配的,但是這個(gè)對象的引用卻是在Stack中分配。也就是說在建立一個(gè)對象時(shí)從兩個(gè)地方都分配內(nèi)存,在Heap中分配的內(nèi)存實(shí)際建立這個(gè)對象,而在Stack中分配的內(nèi)存只是一個(gè)指向這個(gè)堆對象的指針(引用)而已。
8、什么是線程?進(jìn)程和線程的關(guān)系是什么?
線程可定義為進(jìn)程內(nèi)的一個(gè)執(zhí)行單位,或者定義為進(jìn)程內(nèi)的一個(gè)可調(diào)度實(shí)體。 在具有多線程機(jī)制的操作系統(tǒng)中,處理機(jī)調(diào)度的基本單位不是進(jìn)程而是線程。一個(gè)進(jìn)程可以有多個(gè)線程,而且至少有一個(gè)可執(zhí)行線程。
線程和進(jìn)程的關(guān)系:
(1)線程是進(jìn)程的一個(gè)組成部分.
(2)進(jìn)程的多個(gè)線程都在進(jìn)程地址空間活動(dòng).
(3)系統(tǒng)資源是分配給進(jìn)程的,線程需要資源時(shí),系統(tǒng)從進(jìn)程的資源里分配給線程.
(4)處理機(jī)調(diào)度的基本單位是線程.
9、CSS3中的transform屬性和transition屬性?
transform:
功能:使元素變形的屬性,其配合rotate(旋轉(zhuǎn)角度)、scale(縮放倍數(shù))、skew(扭曲元素)等參數(shù)一起使用
語法:
transform:rotate(旋轉(zhuǎn)角度);//正數(shù)為順時(shí)針、負(fù)數(shù)為逆時(shí)針;
transform:rotate(30deg);//順時(shí)針旋轉(zhuǎn)30度
transform:rotate(-20deg);//逆時(shí)針旋轉(zhuǎn)20度
transform:scale(縮放倍數(shù));
transform:scale(1.20);//放大1.2倍
transition:
功能:設(shè)置元素由樣式一變?yōu)闃邮蕉枰囊恍┳兓Ч?br>語法:transition: property duration timing-function delay ;
值 描述
transition-property 規(guī)定設(shè)置過渡效果的 CSS 屬性的名稱。
transition-duration 規(guī)定完成過渡效果需要多少秒或毫秒。
transition-timing-function 規(guī)定速度效果的速度曲線。
transition-delay 定義過渡效果何時(shí)開始。
10、什么是MVVM框架?
MVVM是Model-View-ViewModel的簡寫。
MVVM 是 Web 前端一種非常流行的開發(fā)模式,利用 MVVM 可以使我們的代碼更專注于處理業(yè)務(wù)邏輯而不是去關(guān)心 DOM 操作。目前著名的 MVVM 框架有 vue, avalon, angular 等,這些框架各有千秋,但是實(shí)現(xiàn)的思想大致上是相同的:數(shù)據(jù)綁定 + 視圖刷新。跟MVC一樣,主要目的是分離視圖(View)和模型(Model)。View可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的"View"上,當(dāng)View變化的時(shí)候Model可以不變,當(dāng)Model變化的時(shí)候View也可以不變。
在MVVM中,數(shù)據(jù)是核心,由于VIewModel與View之間的雙向綁定,操作了ViewModel中的數(shù)據(jù)(當(dāng)然只能是監(jiān)控屬性),就會(huì)同步到DOM,我們透過DOM事件監(jiān)控用戶對DOM的改動(dòng),也會(huì)同步到ViewModel。
MVVM框架的優(yōu)點(diǎn):
(1)方便測試
在MVC下,Controller基本是無法測試的,里面混雜了個(gè)各種邏輯,而且分散在不同的地方。有了MVVM我們就可以測試?yán)锩娴膙iewModel,來驗(yàn)證我們的處理結(jié)果對不對。
(2)便于代碼的移植
可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view重用這段視圖邏輯。比如iOS里面有iPhone版本和iPad版本,除了交互展示不一樣外,業(yè)務(wù)邏輯的model是一致的。這樣,我們就可以以很小的代價(jià)去開發(fā)另一個(gè)app。
(3)獨(dú)立開發(fā)
開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel),設(shè)計(jì)人員可以專注于頁面設(shè)計(jì),使用Expression Blend可以很容易設(shè)計(jì)界面并生成xml代碼。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82231.html
摘要:在標(biāo)簽中添加屬性,本質(zhì)上是跟在標(biāo)簽里面寫屬性時(shí)一樣的,所以屬性值最終都會(huì)編譯為字符串類型。這個(gè)節(jié)點(diǎn)包括很多,比如,以及一些方法等方法。一個(gè)對象有很多,該集合名字為,里面有其他以及,里面有很多。 一、變量類型和計(jì)算 JS中使用typeof能得到哪些類型 變量類型 值類型:變量本身就是含有賦予給它的數(shù)值的,它的變量本身及保存的數(shù)據(jù)都存儲(chǔ)在棧的內(nèi)存塊當(dāng)中 引用類型:引用類型當(dāng)然是分配到...
摘要:特意對前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
閱讀 2472·2021-11-24 09:39
閱讀 3518·2019-08-30 15:53
閱讀 594·2019-08-29 15:15
閱讀 2903·2019-08-26 13:23
閱讀 3212·2019-08-26 10:48
閱讀 643·2019-08-26 10:31
閱讀 748·2019-08-26 10:30
閱讀 2359·2019-08-23 18:32