你能描述一下漸進(jìn)增強(qiáng)和優(yōu)雅降級之間的不同嗎?
優(yōu)雅降級:Web站點(diǎn)在所有新式瀏覽器中都能正常工作职恳,如果用戶使用的是老式瀏覽器夫植,則代碼會檢查以確認(rèn)它們是否能正常工作。由于IE獨(dú)特的盒模型布局問題,針對不同版本的IE的hack實(shí)踐過優(yōu)雅降級了,為那些無法支持功能的瀏覽器增加候選方案斤寂,使之在舊式瀏覽器上以某種形式降級體驗(yàn)卻不至于完全失效.
漸進(jìn)增強(qiáng):從被所有瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎(chǔ)瀏覽器的額外樣式和功能的钠糊。當(dāng)瀏覽器支持時垫言,它們會自動地呈現(xiàn)出來并發(fā)揮作用。
線程與進(jìn)程的區(qū)別
一個程序至少有一個進(jìn)程瞻讽,一個進(jìn)程至少有一個線程鸳吸。線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高速勇。
另外层释,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個線程共享內(nèi)存快集,從而極大地提高了程序的運(yùn)行效率贡羔。
線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個獨(dú)立的線程有一個程序運(yùn)行的入口个初、順序執(zhí)行序列和程序的出口乖寒。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中院溺,由應(yīng)用程序提供多個線程執(zhí)行控制楣嘁。
從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中珍逸,有多個執(zhí)行部分可以同時執(zhí)行逐虚。但操作系統(tǒng)并沒有將多個線程看做多個獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配谆膳。這就是進(jìn)程和線程的重要區(qū)別叭爱。
說說你對語義化的理解?
1:去掉或樣式丟失的時候能讓頁面呈現(xiàn)清晰的結(jié)構(gòu):html本身是沒有表現(xiàn)的漱病,我們看到例如<h1>是粗體买雾,字體大小2em把曼,加粗;<strong>是加粗的漓穿,不要認(rèn)為這是html的表現(xiàn)嗤军,這些其實(shí)html默認(rèn)的css樣式在起作用,所以去掉或樣式丟失的時候能讓頁面呈現(xiàn)清晰的結(jié)構(gòu)不是語義化的HTML結(jié)構(gòu)的優(yōu)點(diǎn)晃危,但是瀏覽器都有有默認(rèn)樣式叙赚,默認(rèn)樣式的目的也是為了更好的表達(dá)html的語義,可以說瀏覽器的默認(rèn)樣式和語義化的HTML結(jié)構(gòu)是不可分割的僚饭。
2.屏幕閱讀器(如果訪客有視障)會完全根據(jù)你的標(biāo)記來“讀”你的網(wǎng)頁纠俭。
3.PDA、手機(jī)等設(shè)備可能無法像普通電腦的瀏覽器一樣來渲染網(wǎng)頁(通常是因?yàn)檫@些設(shè)備對CSS的支持較弱)浪慌。
4.有利于SEO:和搜索引擎建立良好溝通冤荆,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標(biāo)簽來確定上下文和各個關(guān)鍵字的權(quán)重。
5.便于團(tuán)隊(duì)開發(fā)和維護(hù)权纤,語義化更具可讀性钓简,是下一步吧網(wǎng)頁的重要動向,遵循W3C標(biāo)準(zhǔn)的團(tuán)隊(duì)都遵循這個標(biāo)準(zhǔn)汹想,可以減少差異化外邓。
你如何對網(wǎng)站的文件和資源進(jìn)行優(yōu)化?
期待的解決方案包括:文件合并文件最小化/文件壓縮使用CDN托管緩存的使用(多個域名來提供緩存)其他古掏。
為什么利用多個域名來提供網(wǎng)站資源會更有效损话?
1.CDN緩存更方便
2.突破瀏覽器并發(fā)限制(一般每個域名建立的鏈接不超過6個)
3.Cookieless,節(jié)省帶寬槽唾,尤其是上行帶寬一般比下行要慢
4.對于UGC的內(nèi)容和主站隔離丧枪,防止不必要的安全問題(上傳js竊取主站cookie之類的)。正是這個原因要求用戶內(nèi)容的域名必須不是自己主站的子域名庞萍,而是一個完全獨(dú)立的第三方域名拧烦。
5.數(shù)據(jù)做了劃分,甚至切到了不同的物理集群钝计,通過子域名來分流比較省事恋博。這個可能被用的不多。
請說出三種減少頁面加載時間的方法私恬。(加載時間指感知的時間或者實(shí)際加載時間)
1.優(yōu)化圖片
2.圖像格式的選擇(GIF:提供的顏色較少债沮,可用在一些對顏色要求不高的地方)
3.優(yōu)化CSS(壓縮合并css,如margin-top,margin-left...)
4.網(wǎng)址后加斜杠(如www.campr.com/目錄本鸣,會判斷這個“目錄是什么文件類型疫衩,或者是目錄。)
5.標(biāo)明高度和寬度(如果瀏覽器沒有找到這兩個參數(shù)永高,它需要一邊下載圖片一邊計算大小隧土,如果圖片很多提针,瀏覽器需要不斷地調(diào)整頁面命爬。這不但影響速度曹傀,也影響瀏覽體驗(yàn)。當(dāng)瀏覽器知道了高度和寬度參數(shù)后饲宛,即使圖片暫時無法顯示皆愉,頁面上也會騰出圖片的空位,然后繼續(xù)加載后面的內(nèi)容艇抠。從而加載時間快了幕庐,瀏覽體驗(yàn)也更好了。)
6.減少http請求(合并文件家淤,合并圖片)异剥。
如果你參與到一個項(xiàng)目中,發(fā)現(xiàn)他們使用Tab來縮進(jìn)代碼絮重,但是你喜歡空格冤寿,你會怎么做?
建議這個項(xiàng)目使用像EditorConfig之類的規(guī)范為了保持一致性青伤,接受項(xiàng)目原有的風(fēng)格督怜,直接使用VIM的retab命令
如果今年你打算熟練掌握一項(xiàng)新技術(shù),那會是什么狠角?
node.js号杠,html5,css3丰歌,less等姨蟋。
請談一下你對網(wǎng)頁標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)重要性的理解。
w3c存在的意義就是讓瀏覽器兼容性問題盡量小立帖,首先是他們對瀏覽器開發(fā)者的約束芬探,然后是對開發(fā)者的約束。
什么是FOUC(無樣式內(nèi)容閃爍)厘惦?你如何來避免FOUC偷仿?
FOUC(Flash Of Unstyled Content)--文檔樣式閃爍
<style type="text/css"media="all">@import"../fouc.css";</style>而引用CSS文件的@import就是造成這個問題的罪魁禍?zhǔn)住E會先加載整個HTML文檔的DOM宵蕉,然后再去導(dǎo)入外部的CSS文件酝静,因此,在頁面DOM加載完成到CSS導(dǎo)入完成中間會有一段時間頁面上的內(nèi)容是沒有樣式的羡玛,這段時間的長短跟網(wǎng)速别智,電腦速度都有關(guān)系。解決方法簡單的出奇稼稿,只要在<head>之間加入一個<link>或者<script>元素就可以了薄榛。
doctype(文檔類型)的作用是什么讳窟?你知道多少種文檔類型?
此標(biāo)簽可告知瀏覽器文檔使用哪種HTML或XHTML規(guī)范敞恋。該標(biāo)簽可聲明三種DTD類型丽啡,分別表示嚴(yán)格版本、過渡版本以及基于框架的HTML文檔硬猫。
HTML 4.01規(guī)定了三種文檔類型:Strict补箍、Transitional以及Frameset。
XHTML 1.0規(guī)定了三種XML文檔類型:Strict啸蜜、Transitional以及Frameset坑雅。
Standards(標(biāo)準(zhǔn))模式(也就是嚴(yán)格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標(biāo)準(zhǔn)的網(wǎng)頁,而Quirks(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計的網(wǎng)頁衬横。
瀏覽器標(biāo)準(zhǔn)模式和怪異模式之間的區(qū)別是什么裹粤?
W3C標(biāo)準(zhǔn)推出以后,瀏覽器都開始采納新標(biāo)準(zhǔn)蜂林,但存在一個問題就是如何保證舊的網(wǎng)頁還能繼續(xù)瀏覽遥诉,在標(biāo)準(zhǔn)出來以前,很多頁面都是根據(jù)舊的渲染方法編寫的悉尾,如果用的標(biāo)準(zhǔn)來渲染突那,將導(dǎo)致頁面顯示異常。為保持瀏覽器渲染的兼容性构眯,使以前的頁面能夠正常瀏覽愕难,瀏覽器都保留了舊的渲染方法(如:微軟的IE)。這樣瀏覽器渲染上就產(chǎn)生了Quircks mode和Standars mode惫霸,兩種渲染方法共存在一個瀏覽器上猫缭。IE盒子模型和標(biāo)準(zhǔn)W3C盒子模型:ie的width包括:padding\border。標(biāo)準(zhǔn)的width不包括:padding\border
在js中如何判斷當(dāng)前瀏覽器正在以何種方式解析壹店?
document對象有個屬性compatMode,它有兩個值:BackCompat對應(yīng)quirks mode猜丹,CSS1Compat對應(yīng)strict mode。
盒子垂直居中方法
position: absolute;left:50%;top:50%;width:400px;
height:400px;margin-left:-200px;margin-top:-200px;
eval是做什么的
它的功能是把對應(yīng)的字符串解析稱js代碼運(yùn)行硅卢;
應(yīng)該避免使用eval,不安全射窒,非常耗能.
setState 和 replaceState 的區(qū)別
setState 是修改其中的部分狀態(tài),相當(dāng)于 Object.assign将塑,只是覆蓋脉顿,
不會減少原來的狀態(tài) replaceState 是完全替換原來的狀態(tài),相當(dāng)于賦值点寥,將原來的 state 替換為另一個對象艾疟,如果新狀態(tài)屬性減少,那么 state 中就沒有這個狀態(tài)了
react diff 原理
把樹形結(jié)構(gòu)按照層級分解,只比較同級元素蔽莱。
給列表結(jié)構(gòu)的每個單元添加唯一的 key 屬性弟疆,方便比較。
React 只會匹配相同 class 的 component(這里面的 class 指的是組件的名字) 合并操作盗冷,調(diào)用 component 的 setState 方法的時候, React 將其標(biāo)記為 dirty.
到每一個事件循環(huán)結(jié)束, React 檢查所有標(biāo)記 dirty 的 component 重新繪制. 選擇性子樹渲染怠苔。開發(fā)人員可以重寫 shouldComponentUpdate 提高 diff 的性能
狀態(tài)(state)和屬性(props)之間有何區(qū)別
State 是一種數(shù)據(jù)結(jié)構(gòu),用于組件掛載時所需數(shù)據(jù)的默認(rèn)值正塌。
State 可能會隨著時間的推移而發(fā)生突變嘀略,但多數(shù)時候是作為用戶事件行為的結(jié)果恤溶。
Props(properties 的簡寫)則是組件的配置乓诽。props 由父組件傳遞給子組件,并且就子組件而言咒程,props 是不可變的(immutable)鸠天。
組件不能改變自身的 props,但是可以把其子組件的 props 放在一起(統(tǒng)一管理)帐姻。Props 也不僅僅是數(shù)據(jù)--回調(diào)函數(shù)也可以通過 props 傳遞稠集。
.shouldComponentUpdate 是做什么的?
shouldComponentUpdate 這個方法用來判斷是否需要調(diào)用 render 方法重新描繪 dom饥瓷。因?yàn)?dom 的描繪非常消耗性能剥纷,如果我們能在 shouldComponentUpdate 方法中能夠?qū)懗龈鼉?yōu)化的 dom diff 算法,可以極大的提高性能呢铆。
當(dāng)你調(diào)用 setState 的時候晦鞋,發(fā)生了什么事?
將傳遞給 setState 的對象合并到組件的當(dāng)前狀態(tài)棺克,這將啟動一個和解的過程悠垛,構(gòu)建一個新的 react 元素樹,與上一個元素樹進(jìn)行對比( diff )娜谊,從而進(jìn)行最小化的重渲染
在書寫高效CSS時會有哪些問題需要考慮确买?
1.樣式是:從右向左的解析一個選擇器;
2.ID最快纱皆,Universal最慢有四種類型的key selector湾趾,解析速度由快到慢依次是:ID、class派草、tag和universal 搀缠;
3.不要tag-qualify(永遠(yuǎn)不要這樣做ul#main-navigation{}ID已經(jīng)是唯一的,不需要Tag來標(biāo)識澳眷,這樣做會讓選擇器變慢胡嘿。);
4.后代選擇器最糟糕(換句話說钳踊,下面這個選擇器是很低效的:html body ul li a{})衷敌;
5.想清楚你為什么這樣寫勿侯;
6.CSS3的效率問題(CSS3選擇器(比如:nth-child)能夠漂亮的定位我們想要的元素,又能保證我們的CSS整潔易讀缴罗。但是這些神奇的選擇器會浪費(fèi)很多的瀏覽器資源助琐。);
7.我們知道#ID速度是最快的面氓,那么我們都用ID兵钮,是不是很快。但是我們不應(yīng)該為了效率而犧牲可讀性和可維護(hù)性舌界。
如果網(wǎng)頁內(nèi)容需要支持多語言掘譬,你會怎么做?
下面這些問題需要考慮:
1.應(yīng)用字符集的選擇呻拌,選擇UTF-8編碼
2.語言書寫習(xí)慣&導(dǎo)航結(jié)構(gòu)
3.數(shù)據(jù)庫驅(qū)動型網(wǎng)站
Javascript中葱轩,執(zhí)行時對象查找時,永遠(yuǎn)不會去查找原型的函數(shù)藐握?
Object.hasOwnProperty(proName):是用來判斷一個對象是否有你給出名稱的屬性靴拱。不過需要注意的是,此方法無法檢查該對象的原型鏈中是否具有該屬性猾普,該屬性必須是對象本身的一個成員袜炕。
css 動畫和 js 動畫的差異
代碼復(fù)雜度,js 動畫代碼相對復(fù)雜一些
動畫運(yùn)行時初家,對動畫的控制程度上偎窘,js 能夠讓動畫,暫停笤成,取消评架,終止,css 動畫不能添加事件
動畫性能看炕泳,js 動畫多了一個 js 解析的過程纵诞,性能不如 css 動畫好