版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
歷年前端大廠面試必備(一)
一、HTML/CSS篇
1、如何刷新瀏覽器的應(yīng)用緩存?
【僅供參考】
應(yīng)用緩存通過變更,”標(biāo)簽后的版本號來刷新,如下所示:
CACHEMANIFEST
#version2.0
/icketang.css
/icketang.js
/icketang.png
NETWORK:
login,php
2、HTML5如何實現(xiàn)跨域?
【僅供參考】
在服務(wù)器端設(shè)置允許在其他域名下訪問,例如允許所有域名訪問以下內(nèi)容。
response.setHeader(z,Access-Control-Allow-Originzz,〃*〃);
response.setHeader(zzAccess-Control-Allow-Methodsz/,“POST");
response.setHeader(,zAccess-Control-Allow-Headers,z,z,x-requested-with,content-
type");
3、與HTML4比較,HTML5廢棄了哪些元素?
【僅供參考】
廢棄的元素包括frame>frameset、noframe>applet、big>center和basefonto
4、如果把HTML5看成一個開放平臺,它的構(gòu)建模塊有哪些?
【僅供參考】
如果把HTML5看成一個開放平臺,它的構(gòu)建模塊至少包括以下幾個,如<navXheader><section>
<footer>0
Wnav>標(biāo)簽用來將具有導(dǎo)航性質(zhì)的鏈接劃分在一起,使代碼結(jié)構(gòu)在語義化方面更加準(zhǔn)確
〈header》標(biāo)簽用來定義文檔的頁眉。
〈section〉標(biāo)簽用來描述文檔的結(jié)構(gòu)。
(footer》標(biāo)簽用來定義頁腳。在典型情況下,該元素會包含文檔作者的姓名、文檔的創(chuàng)作日期
和聯(lián)系信息
5、請你說一下WebWorker和WebSocket的作用。
【僅供參考】
第1/26頁
WebWorker的作用如下:
(1)通過worker=newWorker(url)加載一個JavaScript文件,創(chuàng)建一個Worker,同時返
回一個Worker實例
(2)用worker.postMessage(data)向Worker發(fā)送數(shù)據(jù)
(3)綁定worker,onmessage接收Worker發(fā)送過來的數(shù)據(jù)
(4)可以使用worker,terminate()終止一個Worker的執(zhí)行。
WebSocket的作用如下。
它是Web應(yīng)用程序的傳輸協(xié)議,提供了雙向的、按序到達的數(shù)據(jù)流。它是HTML5新增的協(xié)議,
WebSocket的連接是持久的,它在客戶端和服務(wù)器之間保持雙工連接,服務(wù)器的更新可以及時推
送到客戶端,而不需要客戶端以一定的時間間隔去輪詢。
6、本地存儲的數(shù)據(jù)有生命周期嗎?
【僅供參考】
本地存儲的數(shù)據(jù)沒有生命周期,它將一直存儲數(shù)據(jù),直到用戶從瀏覽器清除或者使用
JavaScript代碼移除。
7、應(yīng)用緩存中的回退是什么?
【僅供參考】
應(yīng)用緩存中的回退會幫助你指定在服務(wù)器不可訪問時,顯示某文件。例如在下面的manifest文
件中,如果用戶輸入了“/home”,同時服務(wù)器不可到達,“404htm”文件應(yīng)送達。
FALLBACK:
/home//404.html
8、HTML5新增了哪些功能AP?
【僅供參考】
新增的功能API包括MediaAPI、TextTrackAPI、ApplicationCacheAPI、User
Interaction、DataTransferAPI、CommandAPI、ConstraintValidationAPI、History
API
9、如何在頁面上實現(xiàn)一個圓形的可點擊區(qū)域
【僅供參考】
1map+area或者svg
2、border-radius
3、純js實現(xiàn),一個點不在圓上的算法
10、簡述一下你對HTML語義化的理解?
【僅供參考】
用正確的標(biāo)簽做正確的事情。
html語義化讓頁面的內(nèi)容結(jié)構(gòu)化,結(jié)構(gòu)更清晰,便于對瀏覽器、搜索引擎解析;即使在沒有樣
式CSS情況下也以一種文檔格式顯示,并且是容易閱讀的;
第2/26頁
搜索引擎的爬蟲也依賴于HTML標(biāo)記來確定上下文和各個關(guān)鍵字的權(quán)重,利于SEO;
使閱讀源代碼的人對網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護理解。
11、如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信?
【僅供參考】
在標(biāo)簽頁之間,調(diào)用localstorge.cookies等數(shù)據(jù)存儲,可以實現(xiàn)標(biāo)簽頁之間的通信
12、什么是SVG?
【僅供參考】
SVG即可縮放失量圖形(ScalableVectorGraphics)0它是基于文本的圖形語言,使用文
本、線條、點等來繪制圖像,這使得它輕便、顯示迅速。
13、子元素如何垂直水平居中?你會用哪幾種方式?不使用margin和padding的情況下
【僅供參考】
方法一:使用flex,無論子元素是行級元素還是塊級元素,都能搞定
.parent{
display:flex;
justify-content:center;//水平居中
align-items:center;//垂直居中
)
方法二:如果子元素是行級元素,text-align和line-height就可以解決
.parent{
height:200px;
width:200px;
text-align:center;
line-height:200px;//Sameasheight
)
如果子元素是塊級元素,使用table-cell+vertical-align也可以解決
.parent{
display:table-cell;
vertical-align:middle;
)
.child{
margin:0auto;
)
方法三:transform可以解決
第3/26頁
.parent{
position:relative;
)
.child{
position:absolute;
top:50%;
left:50%;11從相對父元素寬高50%的地方開始繪制子元素
transform:translate(-50%,-50%);//把繪制好的子元素,往上和左邊,平移子元素50%
的寬高
)
14、無樣式內(nèi)容閃爍(FOUC)FlashofUnstyleContent**
【僅供參考】
@import導(dǎo)入CSS文件會等到文檔加載完后再加載CSS樣式表。因此,在頁面DOM加載完成到CSS導(dǎo)
入完成之間會有一段時間頁面上的內(nèi)容是沒有樣式的。
解決方法:使用link標(biāo)簽加載CSS樣式文件。因為link是順序加載的,這樣頁面會等到CSS下載
完之后再下載HTML文件,這樣先布局好,就不會出現(xiàn)F0UC問題。
15、vertical-align什么時候生效
【僅供參考】
父元素(inline-block\block)必須含有l(wèi)ine-height(inline元素有無皆可),子元素中的
(inline-block/inline元素)vertical-align才能起作用
當(dāng)父元素沒有設(shè)置line-height時,只對行內(nèi)元素的兄弟元素對齊有用,無法子元素居中對齊父
元素
16、我們會在寫css的時候做一些標(biāo)簽選擇器的初始化樣式?為什么?比如:
【僅供參考】
body,ul,ol,li,p,hl,h2,h3,h4,h5,h6,form,fieldset,table,td,img,div{margin:0;padding:0
;border:。;}
body{background:#fff;color:#333;font-size:12px;margin-top:5px;font-
family:"SimSun","宋體","ArialNarrow”;}
ul,ol{list-style-type:none;}
select,input,img,select{vertical-align:middle;}
a{text-decoration:none;}
a:link{color:#009;}
a:visited{color:#800080;}
a:hover,a:active,a:focus{color:4c00;text-decoration:underline;}
第4/26頁
為了保證默認的標(biāo)簽樣式在不同瀏覽器能有一致的效果
17、如何讓文字換行
【僅供參考】
word-wrap,word-break,white-space都可以做到
word-wrap:normal;遇到空格才換行
word-break:break-all;把所有字符(包括空格)當(dāng)一行,遇到邊界換行
word-break:break-word;先按空格換行,再拆分單詞和word-wrap:break-word一樣
white-space:normal;正常遇到空白換行
white-space:no-wrap;空白都不換行,一行顯示所有
word-wrap和word-break在flex布局下的效果,word-wrap不能換行,word-break可以。
但是如果二者都有width或者min-widt邸艮制,效果一樣。
〈divstyle二〃border:lpxsolidred;width:200px;height:200px;display:flex;〃>
〈divstyle="flex:1;word-wrap:break-
word;z/>dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd</div>
〈divstyle="min-width:lOOpx;border:lpxsolidgreen,z>sss</div>
</div>
〈divstyle二〃border:lpxsolidred;width:200px;height:200px;display:flex;〃>
〈divstyle二〃flex:1;word-break:break-
word;,z>dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd</div>
〈divstyle="min-width:lOOpx;border:lpxsolidgreenzz>sss</div>
</div>
18、移動端lpx邊框怎么設(shè)置
【僅供參考】
/*方法1*/
.border{
width:100%;
height:lpx;
background:red;
}
/*方法2*/
,border(
border-image:url(border.png)
)
/*方法3*/
第5/26頁
.border{
box-shadow:000lpx#000;
)
19、CSSSprite(雪碧圖,精靈圖)是什么,談?wù)勥@個技術(shù)的優(yōu)缺點?
【僅供參考】
就是把很多圖標(biāo)合并到一張圖上,然后根據(jù)圖片的位置(background-position)加上顯示的寬
高來控制具體用哪個圖標(biāo),這樣可以減少網(wǎng)絡(luò)請求,但是制作和使用會顯得復(fù)雜一些。
20、calc,support,media各自的含義及用法?
【僅供參考】
?support主要是用于檢測瀏覽器是否支持CSS的某個屬性,其實就是條件判斷,如果支持某個
屬性,你可以寫一套樣式,如果不支持某個屬性,你也可以提供另外一套樣式作為替補。
calc()函數(shù)用于動態(tài)計算長度值。calc()函數(shù)支持“+”,,“*”,“/”運算;
?media查詢,你可以針對不同的媒體類型定義不同的樣式。
二、JS/ES6/TS篇
1、請說一下你常用的字符串方法(至少七個)
【僅供參考】
trimO:去首尾空格
split(sep,limit):將字符串分割為字符數(shù)組,limit為從頭開始執(zhí)行分割的最大數(shù)量
indexOf(str):返回str在父串中第一次出現(xiàn)的位置,若沒有則返回T
lastlndexOf(str):返回str在父串中最后一次出現(xiàn)的位置,若沒有則返回T
substr(start,length):從字符索引start的位置開始,返回長度為length的子串
substring(from,to):返回字符索引在from和to(不含)之間的子串
slice(start,end):返回字符索引在start和end(不含)之間的子串
toLowerCase():將字符串轉(zhuǎn)換為小寫
toUpperCaseO:將字符串轉(zhuǎn)換為大寫
replace(strl,str2):strl也可以為正則表達式,用str2替換strl
concat(strl,str2,...):連接多個字符串,返回連接后的字符串的副本
match(regex):搜索字符串,并返回正則表達式的所有匹配
charAt(index):返回指定索引處的字符串
charCodeAt(index):返回指定索引處的字符的Unicode的值
fromCharCode():將Unicode值轉(zhuǎn)換成實際的字符串
search(regex):基于正則表達式搜索字符串,并返回第一個匹配的位置
valueOfO:返回原始字符串值
2、for循環(huán)與forEach循環(huán)的區(qū)別?
【僅供參考】
第6/26頁
for循環(huán)中可以使用break、continue不用使用return因為它有循環(huán)體,且不是函數(shù);
forEach循環(huán)不能使用break、continue,可以return,因為它執(zhí)行的是函數(shù);
3、怎么降維數(shù)組[[1,2],[3,4]]->[1,2,3,4]
【僅供參考】
使用遞歸循環(huán),把所有元素放到一個新數(shù)組
Array,prototype,concat.apply(口,[[1,2],[3,41]);
4、如何使用JS刪除cookie
【僅供參考】
如果要刪除cookie以便后續(xù)嘗試讀取cookie,則只需將過期日期設(shè)置為過去的時間。
咱們應(yīng)該定義cookie路徑以確保刪除正確的cookie。
如果未指定路徑,某些瀏覽器將不允許咱們刪除cookie
5、圖片img標(biāo)簽title與alt屬性的區(qū)別
【僅供參考】
title屬性:光標(biāo)移入要顯示圖片文字
alt屬性:當(dāng)圖片加載失敗時要顯示的文字
6、var、let、const區(qū)別?
【僅供參考】
var存在變量提升。
let只能在塊級作用域內(nèi)訪問。
const用來定義常量,必須初始化,不能修改(對象特殊)
7、基本數(shù)據(jù)類型和引用數(shù)據(jù)類型有什么區(qū)別?
【僅供參考】
(1)變量直接賦值時:
基本數(shù)據(jù)類型賦值的是數(shù)據(jù)的副本,原數(shù)據(jù)的更改不會影響傳入后的數(shù)據(jù)。
引用數(shù)據(jù)類型賦值的是數(shù)據(jù)的引用地址,原數(shù)據(jù)的更改會影響傳入后的數(shù)據(jù)。
(2)兩者在內(nèi)存中的存儲位置:
基本數(shù)據(jù)類型存儲在棧中。
引用數(shù)據(jù)類型在棧中存儲了指針,該指針指向的數(shù)據(jù)實體存儲在堆中。
8^toStringO與valueOf()的區(qū)別
【僅供參考】
toStringO方法返回一個表示該對象的字符串。
valueOfO方法返回指定對象的原始值,如果對象沒有原始值,貝UvalueOf將返回對象本身
9、null/undefined的區(qū)別
第7/26頁
【僅供參考】
null值:屬于null類型,代表“空值〃,代表一個空對象指針;使用typeof運算得到
“object”,所以你可以認為它是一個特殊的對象值。
undefined值:屬于undefined類型,當(dāng)一個聲明的變量未初始化賦值時,得到的就是
undefinedo使用typeof運算得到"undefined",
10、事件綁定和普通事件有什么區(qū)別?
【僅供參考】
普通事件會覆蓋掉,只執(zhí)行后者方法
dom.onelick=function(){}
事件綁定不會覆蓋掉,會依次執(zhí)行
addEventListener('click),function(){},true)
11、請說出三種減低頁面加載時間的方法
【僅供參考】
壓縮css、js文件
合并js、css文件,減少http請求(精靈圖)
外部js、css文件放在最底下
減少dom操作,盡可能用變量替代不必要的dom操作
12、說一下innerHTML與innerText的作用與區(qū)別?
【僅供參考】
作用:都可以獲取或者設(shè)置元素的內(nèi)容
區(qū)別:innerHTML可以解析內(nèi)容中的html標(biāo)簽
innerText不能解析內(nèi)容中的html標(biāo)簽
13、如何在TypeScript中實現(xiàn)繼承
【僅供參考】
繼承是一種從另一個類獲取一個類的屬性和行為的機制。繼承成員的類稱為基類,繼承這些成
員的類稱為派生類。
classShape{
Area:number
constructor(area:number){
this.Area=area
)
)
classCircleextendsShape{
display():void{
console,log(“圓的面積:“+this.Area)
第8/26頁
varobj=newCircle(320);
obj.display()
14、TypeScript中?.,??,?。海琠,**等符號的含義?
【僅供參考】
?.可選鏈
??類似與短路或,??避免了一些意外情況,0,NaN以及〃",false被視為false值。只有
undefind,null被視為false值。
!.在變量名后添加!,可以斷言排除undefined和null類型
_,聲明該函數(shù)將被傳遞一個參數(shù),但您并不關(guān)心它
!:待會分配這個變量,ts不要擔(dān)心
**求累
15、TypeScript支持哪些面向?qū)ο蟮男g(shù)語
【僅供參考】
1.模塊
2.類
3.接口
4.繼承
5.數(shù)據(jù)類型
6.成員函數(shù)
16、TS的接口是什么意思?
【僅供參考】
接口是在我們的應(yīng)用程序中充當(dāng)契約的結(jié)構(gòu),它定義了要遵循的類的語法,這意味著實現(xiàn)接口的
類必須實現(xiàn)它的所有成員.它不能被實例化,但是可以被實現(xiàn)它的類對象引用。
interfaceinterface_name{
//字段聲明
//方法聲明
17、枚舉和常量枚舉的區(qū)別?
【僅供參考】
枚舉會被編譯時會編譯成一個對象,可以被當(dāng)作對象使用
const枚舉會在typescript編譯期間被刪除,const枚舉成員在使用的地方會被內(nèi)聯(lián)進來,
避免額外的性能開銷
18、下面Set結(jié)構(gòu),打印出的size值是多少
【僅供參考】
lets=newSet();
第9/26頁
s.add([l]);s.add([l]);
console.log(s.size);
答案:2
兩個數(shù)組[1]并不是同一個值,它們分別定義的數(shù)組,在內(nèi)存中分別對應(yīng)著不同的存儲地址,因
此并不是相同的值都能存儲到Set結(jié)構(gòu)中,所以size為2
19、理解async/await以及對Generator的優(yōu)勢
【僅供參考】
async/await的介紹:
asyncawait是用來解決異步的,async函數(shù)是Generator函數(shù)的語法糖
使用關(guān)鍵字async來表示,在函數(shù)內(nèi)部使用await來表示異步
async函數(shù)返回一個Promise對象,可以使用then方法添加回調(diào)函數(shù)
當(dāng)函數(shù)執(zhí)行的時候,一旦遇到await就會先返回,等到異步操作完成,
再接著執(zhí)行函數(shù)體內(nèi)后面的語句
async較Generator的優(yōu)勢:
(1)內(nèi)置執(zhí)行器。Generator函數(shù)的執(zhí)行必須依靠執(zhí)行器,而Aysnc函數(shù)自帶執(zhí)行器,
調(diào)用方式跟普通函數(shù)的調(diào)用一樣
(2)更好的語義。async和await相較于*和yield更加語義化
(3)返回值是Promise。async函數(shù)返回的是Promise對象,
比Generator函數(shù)返回的Iterator對象方便,可以直接使用then0方法進行調(diào)用
20、Promise構(gòu)造函數(shù)是同步執(zhí)行還是異步執(zhí)行,那么then方法呢?
【僅供參考】
創(chuàng)建Promise時,傳入的回調(diào)函數(shù)的執(zhí)行,是同步的
promise對象上then函數(shù)中的回調(diào)執(zhí)行,是異步的
三、Vue/ReactjB
1、什么是propdrilling,如何避免?
【僅供參考】
在構(gòu)建React應(yīng)用程序時,在多層嵌套組件來使用另一個嵌套組件提供的數(shù)據(jù)。最簡單的方法
是將一個prop從每個組件一層層的傳遞下去,從源組件傳遞到深層嵌套組件,這叫做prop
drillingo
propdrilling的主要缺點是原本不需要數(shù)據(jù)的組件變得不必要地復(fù)雜,并且難以維護。
為了避免propdrilling,一種常用的方法是使用ReactContext0通過定義提供數(shù)據(jù)的
Provider組件,并允許嵌套的組件通過Consumer組件或useContextHook使用上下文數(shù)據(jù)
2、解釋Reducer的作用
【僅供參考】
第10/26頁
Reducers是純函數(shù),它規(guī)定應(yīng)用程序的狀態(tài)怎樣因響應(yīng)ACTION而改變。Reducers通過接受
先前的狀態(tài)和action來工作,然后它返回一個新的狀態(tài)。它根據(jù)操作的類型確定需要執(zhí)行哪
種更新,然后返回新的值。如果不需要完成任務(wù),它會返回原來的狀態(tài)
3、你對“單一事實來源”有什么理解?
【僅供參考】
Redux使用“Store”將程序的整個狀態(tài)存儲在同一個地方。因此所有組件的狀態(tài)都存儲在
Store中,并且它們從Store本身接收更新。單一狀態(tài)樹可以更容易地跟蹤隨時間的變化,并
調(diào)試或檢查程序
4、這三個點(...)在React干嘛用的?
【僅供參考】
擴展運算符或者叫展開操作符,對于創(chuàng)建具有現(xiàn)有對象的大多數(shù)屬性的新對象非常方便,在更
新state時經(jīng)常這么用
5、什么是虛擬D0M?
【僅供參考】
虛擬DOM是真實DOM在內(nèi)存中的表示,ul的表示形式保存在內(nèi)存中,并且與實際的D0M同步,這是
一個發(fā)生在渲染函數(shù)被調(diào)用和元素在屏幕上顯示的步驟,整個過程被稱為調(diào)和
6、怎樣解釋React中render0的目的
【僅供參考】
每個React組件強制要求必須有一個render()o它返回一個React元素,是原生DOM組件的
表示。如果需要渲染多個HTML元素,則必須將它們組合在一個封閉標(biāo)記內(nèi),例如〈form〉、
〈group>、<p>等。此函數(shù)必須保持純凈,即必須每次調(diào)用時都返回相同的結(jié)果
7、為什么不直接更新state?
【僅供參考】
如果試圖直接更新state,就不會重新渲染組件
需要使用setState()方法更新state,它對state對象進行更新,當(dāng)state改變時,組件通過重
新渲染來響應(yīng)
8、Redux有哪些優(yōu)點?
【僅供參考】
Redux的優(yōu)點如下:
結(jié)果的可預(yù)測性-由于總是存在一個真實來源,即store,因此不存在如何將當(dāng)前狀態(tài)與動
作和應(yīng)用的其他部分同步的問題。
可維護性-代碼變得更容易維護,具有可預(yù)測的結(jié)果和嚴格的結(jié)構(gòu)。
服務(wù)器端渲染-你只需將服務(wù)器上創(chuàng)建的store傳到客戶端即可。這對初始渲染非常有用,
并且可以優(yōu)化應(yīng)用性能,從而提供更好的用戶體驗。
第11/26頁
開發(fā)人員工具-從操作到狀態(tài)更改,開發(fā)人員可以實時跟蹤應(yīng)用中發(fā)生的所有事情。
社區(qū)和生態(tài)系統(tǒng)-Redux背后有一個巨大的社區(qū),這使得它更加迷人。一個由才華橫溢的人組
成的大型社區(qū)為庫的改進做出了貢獻,并開發(fā)了各種應(yīng)用。
易于測試-Redux的代碼主要是小巧、純粹和獨立的功能。這使代碼可測試且獨立。
組織-Redux準(zhǔn)確地說明了代碼的組織方式,這使得代碼在團隊使用時更加一致和簡單
9、依賴其它數(shù)據(jù)計算生成一個新的數(shù)據(jù)屬性;
【僅供參考】
2、當(dāng)里邊依賴的其它數(shù)據(jù)發(fā)生改變,就會重新計算,
10、Vuex用過嗎?簡單介紹一下?
【僅供參考】
狀態(tài)管理模式+庫
相當(dāng)于共享倉庫,方便任何組件直接獲取和修改。
state-數(shù)據(jù)【存項目共享狀態(tài),是響應(yīng)式的,store的數(shù)據(jù)改變,所有依賴此狀態(tài)的組件會更
新】
$store.state,count
mutations-方法【同步函數(shù),只建議在這個地方修改數(shù)據(jù)】
inc(state,參數(shù)唯一){}
$store.commitCinc',2)
actions-【異步操作】【提交的是mutations,不直接修改狀態(tài)】
increment(context,num){context,commit()}
this.$store.dispatch('',arg)
getters-包裝數(shù)據(jù)【store的計算屬性,可緩存】
show:function(state){}
this.$store.getters.show
傳參,返回函數(shù):show(state){returnfunction(參數(shù)){return...}}【不會緩存數(shù)據(jù)】
11、$on()函數(shù)有什么用?
【僅供參考】
監(jiān)聽當(dāng)前實例上的自定義事件。事件可以由vm.$emit觸發(fā)
12、組件間通訊方式
【僅供參考】
props/$emit
(1)父組件向子組件傳值(props將數(shù)據(jù)自上而下傳遞)
(2)子組件向父組件傳遞數(shù)據(jù)($emit和v-on來向上傳遞信息)
eventBus事件總線($emit/$on)
通過EventBus進行信息的發(fā)布與訂閱
第12/26頁
vuex:
是全局數(shù)據(jù)管理庫,可以通過vuex管理全局的數(shù)據(jù)流
ref/$refs
ref:這個屬性用在子組件上,它的用用就指向了子組件的實例,可以通過實例來訪問組件的數(shù)
據(jù)和方法
依賴注入(provide/inject)
provide和inject是vue提供的兩個鉤子,和data、methods是同級的。并且provide的書寫形
式和data一樣。
provide鉤子用來發(fā)送數(shù)據(jù)或方法。
inject鉤子用來接收數(shù)據(jù)或方法
$parent/$children
使用$parent可以讓組件訪問父組件的實例(訪問的是上一級父組件的屬性和方法)。
使用$children可以讓組件訪問子組件的實例,但是,$children并不能保證順序,并且訪
問的數(shù)據(jù)也不是響應(yīng)式的。
$attrs/$listeners
實現(xiàn)組件之間的跨代通信。
13、Vue中的key有什么作用?
【僅供參考】
key是為Vue中vnode的唯一標(biāo)記,通過這個key,我們的diff操作可以更準(zhǔn)確、更快
速。
Vue的diff過程可以概括為:oldCh和newCh各有兩個頭尾的變量oldStartlndex.
oldEndlndex和newStartlndex、newEndIndex,它們會新節(jié)點和舊節(jié)點會進行兩兩對比,即一
共有4種比較方式:newStartlndex和oldStartlndex、newEndlndex和oldEndlndex、
newStartIndex和oldEndlndex、newEndlndex和oldStartlndex,如果以上4種比較都沒
匹配,如果設(shè)置了key,就會用key再進行比較,在比較的過程中,遍歷會往中間靠,一旦
Startldx>Endldx表明oldCh和newCh至少有一個已經(jīng)遍歷完了,就會結(jié)束比較。
所以Vue中key的作用是:key是為Vue中vnode的唯一標(biāo)記,通過這個key,我們的
diff操作可以更準(zhǔn)確、更快速!
更準(zhǔn)確:因為帶key就不是就地復(fù)用了,在sameNode函數(shù)a.key===b.key對比中可以避
免就地復(fù)用的情況。所以會更加準(zhǔn)確。
更快速:利用key的唯一性生成map對象來獲取對應(yīng)節(jié)點,比遍歷方式更快,源碼如下:
functioncreateKeyToOldldx(children,beginldx,endldx){
leti,key
constmap={}
for(i=beginldx;i<=endldx;++i){
第13/26頁
key=children[i].key
if(isDef(key))map[key]=i
)
returnmap
}
14、Vuex如何區(qū)分state是外部直接修改,還是通過mutation方法修改的?
【僅供參考】
在vuex底層會有一個committing變量,初始值false;當(dāng)通過mutation方法修改數(shù)據(jù)時
把committing變量變成true;如果是直接改變的變量則不改變committing變量
15、描述一下vue在生命周期的beforeMount階段時,頁面是怎么樣的
【僅供參考】
beforeMount執(zhí)行時,數(shù)據(jù)和虛擬D0M樹已經(jīng)都加載完成,但是這時數(shù)據(jù)沒有渲染
16、Vue原理總結(jié)
【僅供參考】
【模板編譯】將template模板,經(jīng)過編譯系統(tǒng)后生成VNode,(模板字符串一AST-Render函
數(shù))
【渲染】然后再通過渲染系統(tǒng)來將VNode生成真實DOM(document.createElement&&Mount掛載
到真實DOM節(jié)點上)
【響應(yīng)式】通過響應(yīng)式系統(tǒng)對數(shù)據(jù)進行監(jiān)聽,當(dāng)數(shù)據(jù)發(fā)生改變時,觸發(fā)依賴項(組件)
[Diff&Patch]組件內(nèi)收到通知后,會通過diff算法對比VNode的變化,盡可能復(fù)用代碼,找
出最小差異,保證性能消耗最小。
【渲染】拿到需要新增/刪除/修改的VNode后,逐一去操作真實D0M進行修改(通過選擇器選擇
到對應(yīng)真實D0M節(jié)點進行修改)
17、什么是Proxy?
【僅供參考】
Proxy:代理,是ES6新增的功能,可以理解為代理器(即由它代理某些操作)。
Proxy:對象用于定義或修改某些操作的自定義行為,可以在外界對目標(biāo)對象進行訪問前,對
外界的訪問進行改寫。
Proxy是ES6中新增的一個特性JavaScript中用來表示由它來‘代理'某些操作
Proxy是ES6中新增的一個特性,翻譯過來意思是"代理",用在這里表示由它來“代理”某些
操作。Proxy讓我們能夠以簡潔易懂的方式控制外部對對象的訪問。其功能非常類似于設(shè)計模
式中的代理模式。
Proxy可以理解成,在目標(biāo)對象之前架設(shè)一層“攔截”,外界對該對象的訪問,都必須先通過
這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。
使用Proxy的核心優(yōu)點是可以交由它來處理一些非核心邏輯(如:讀取或設(shè)置對象的某些屬性
前記錄日志;設(shè)置對象的某些屬性值前,需要驗證;某些屬性的訪問控制等)。從而可以讓對
象只需關(guān)注于核心邏輯,達到關(guān)注點分離,降低對象復(fù)雜度等目的。
第14/26頁
18、說一下v-model的作用
【僅供參考】
v-model:
雙向綁定,用于表單元素綁定數(shù)據(jù),數(shù)據(jù)的改變會響應(yīng)到頁面;
頁面表單元素value的改變,同樣也會響應(yīng)到數(shù)據(jù)
19、說一下vm.$once()的作用
【僅供參考】
監(jiān)聽一個自定義事件,但是只觸發(fā)一次。一旦觸發(fā)之后,監(jiān)聽器就會被移除。
20、Vue是如何實現(xiàn)數(shù)據(jù)雙向綁定的?
【僅供參考】
如果被問到Vue怎么實現(xiàn)數(shù)據(jù)雙向綁定,大家肯定都會回答通過Object,definePropertyO
對數(shù)據(jù)進行劫持,但是Object,definePropertyO只能對屬性進行數(shù)據(jù)劫持,不能對整個對象
進行劫持。
同理無法對數(shù)組進行劫持,但是我們在使用Vue框架中都知道,Vue能檢測到對象和數(shù)組(部
分方法的操作)的變化,那它是怎么實現(xiàn)的呢?我們查看相關(guān)代碼如下:
/**
*ObservealistofArrayitems.
*/
observeArray(items:Array<any>){
for(leti=0,1=items,length;i<1;i++){
observe(items[i])//observe功能為監(jiān)測數(shù)據(jù)的變化
)
/**
*對屬性進行遞歸遍歷
*/
letchildOb=!shallow&&observe(val)//observe功能為監(jiān)測數(shù)據(jù)的變化
通過以上Vue源碼部分查看,我們就能知道Vue框架是通過遍歷數(shù)組和遞歸遍歷對象,從而
達到利用Object,definePropertyO也能對對象和數(shù)組(部分方法的操作)進行監(jiān)聽。
四、Webpack/RollupM
1、如何解決循環(huán)依賴問題
【僅供參考】
第15/26頁
Webpack中將require替換為webpack_require,會根據(jù)moduleld到installedModules找
是否加載過,加載過則直接返回之前的export,不會重復(fù)加載。
2、有哪些常見的Plugin?他們是解決什么問題的?
【僅供參考】
html-webpack-plugin:可以復(fù)制一個有結(jié)構(gòu)的html文件,并自動引入打包輸出的所有資源
(JS/CSS)
c1ean-webpack-plugin:重新打包自動清空dist目錄
mini-css-extract-plugin:提取js中的css成單獨文件
optimize-css-assets-webpack-plugin:壓縮css
uglifyjs-webpack-plugin:壓縮js
commons-chunk-p1ugin:提取公共代碼
define-plugin:定義環(huán)境變量
3、有哪些常見的Loader?他們是解決什么問題的?
【僅供參考】
file-loader:把文件輸出到一個文件夾中,在代碼中通過相對URL去引用輸出的文件
url-loader:和file-loader類似,但是能在文件很小的情況下以base64的方式把文件內(nèi)容
注入到代碼中去
source-map-loader:加載額外的SourceMap文件,以方便斷點調(diào)試
image-loader:加載并且壓縮圖片文件
babel-loader:把ES6轉(zhuǎn)換成ES5
css-loader:加載CSS,支持模塊化、壓縮、文件導(dǎo)入等特性
style-loader:把CSS代碼注入到JavaScript中,通過D0M操作去加載CSS。
eslint-loader:通過ESLint檢查JavaScript代碼
4、webpack3和webpack4的區(qū)別
【僅供參考】
mode/-mode參數(shù),新增了mode/-mode參數(shù)來表示是開發(fā)還是生產(chǎn)
(development/production)production側(cè)重于打包后的文件大小,development側(cè)重于
goujiansud移除loaders,必須使用rules(在3版本的時候loaders和rules是共存的但是到4的
時候只允許使用rules)移除了CommonsChunkPlugin(提取公共代碼),用
optimization.splitChunks和optimization.runtimeChunk來代替支持es6的方式導(dǎo)入JSON文
件,并且可以過濾無用的代碼
5、webpack如何配置多入口文件?
【僅供參考】
entry:{
home:resolve(_dirname,"src/home/index.js"),
about:resolve(_dirname,"src/about/index.js")
第16/26頁
用于描述入口的對象。你可以使用如下屬性:
dependOn:當(dāng)前入口所依賴的入口。它們必須在該入口被加載前被加載。
filename:指定要輸出的文件名稱。
import:啟動時需加載的模塊。
library:指定library選項,為當(dāng)前entry構(gòu)建一個library。
runtime:運行時chunk的名字。如果設(shè)置了,就會創(chuàng)建一個新的運行時chunko在webpack
5.43.0之后可將其設(shè)為false以避免一個新的運行時chunko
publicPath:當(dāng)該入口的輸出文件在瀏覽器中被引用時,為它們指定一個公共URL地址
6、webpack的核心概念
【僅供參考】
Entry:入口,Webpack執(zhí)行構(gòu)建的第一步將從Entry開始,可抽象成輸入。告訴webpack要使
用哪個模塊作為構(gòu)建項目的起點,默認為./src/index.js
output:出口,告訴webpack在哪里輸出它打包好的代碼以及如何命名,默認為./dist
Module:模塊,在Webpack里一切皆模塊,一個模塊對應(yīng)著一個文件。Webpack會從配置的
Entry開始遞歸找出所有依賴的模塊。
Chunk:代碼塊,一個Chunk由多個模塊組合而成,用于代碼合并與分割。
Loader:模塊轉(zhuǎn)換器,用于把模塊原內(nèi)容按照需求轉(zhuǎn)換成新內(nèi)容。
Plugin:擴展插件,在Webpack構(gòu)建流程中的特定時機會廣播出對應(yīng)的事件,插件可以監(jiān)聽這
些事件的發(fā)生,在特定時機做對應(yīng)的事情。
7、npm打包時需要注意哪些?如何利用webpack來更好的構(gòu)建?
【僅供參考】
Npm是目前最大的JavaScript模塊倉庫,里面有來自全世界開發(fā)者上傳的可復(fù)用模塊。
你可能只是JS模塊的使用者,但是有些情況你也會去選擇上傳自己開發(fā)的模塊。
關(guān)于NPM模塊上傳的方法可以去官網(wǎng)上進行學(xué)習(xí),這里只講解如何利用webpack來構(gòu)建。
NPM模塊需要注意以下問題:
要支持CommonJS模塊化規(guī)范,所以要求打包后的最后結(jié)果也遵守該規(guī)則。
Npm模塊使用者的環(huán)境是不確定的,很有可能并不支持ES6,所以打包的最后結(jié)果應(yīng)該是采用ES5
編寫的。并且如果ES5是經(jīng)過轉(zhuǎn)換的,請最好連同SourceMap一同上傳。
Npm包大小應(yīng)該是盡量?。ㄓ行﹤}庫會限制包大?。?/p>
發(fā)布的模塊不能將依賴的模塊也一同打包,應(yīng)該讓用戶選擇性的去自行安裝。這樣可以避免模
塊應(yīng)用者再次打包時出現(xiàn)底層模塊被重復(fù)打包的情況。
UI組件類的模塊應(yīng)該將依賴的其它資源文件,例如.css文件也需要包含在發(fā)布的模塊里。
8、Loader機制的作用是什么?
【僅供參考】
webpack默認只能打包js文件,配置里的module,rules數(shù)組配置了一組規(guī)則,告訴Webpack在
遇到哪些文件時使用哪些Loader去加載和轉(zhuǎn)換打包成js。
注意:
use屬性的值需要是一個由Loader名稱組成的數(shù)組,Loader的執(zhí)行順序是由后到前的;
第17/26頁
每一個Loader都可以通過URLquerystring的方式傳入?yún)?shù),例如cssToader?minimize中
的minimize告訴css-loader要開啟CSS壓縮。
9、什么是Tree-sharking?
【僅供參考】
指打包中去除那些引入了但在代碼中沒用到的死代碼。在wepack中jstreeshaking通過
UglifyJsPlugin來進行,css中通過purify-CSS來進行。
10、理解babel-preset-env
【僅供參考】
babel-preset-es2015:可以將es6的代碼編譯成es5.
babel-preset-es2016:可以將es7的代碼編譯為es6.
babel-preset-es2017:可以將es8的代碼編譯為es7.
babel-preset-latest:支持現(xiàn)有所有ECMAScript版本的新特性
11、plugin的作用
【僅供參考】
plugin是一個類,類中有一個apply()方法,主要用于Plugin的安裝,可以在其中監(jiān)聽一些來自
編譯器發(fā)出的事件,在合適的時機做一些事情。
12、lazyloading(模塊懶加載)
【僅供參考】
借助import。語法異步引入組件,實現(xiàn)文件懶加載:prefetch,preloading
webpack提倡多寫異步代碼,提升代碼利用率,從而提升頁面性能
先加載主業(yè)務(wù)文件,prefetch利用網(wǎng)絡(luò)空閑時間,異步加載組件
import(/*webpackPrefetch:true/'LoginModal');
preload和主業(yè)務(wù)文件一起加載,異步加載組件
import(/webpackPreload:true*/'ChartingLibrary');
13、HMR熱模塊更新
【僅供參考】
借助webpack.HotModuleReplacementPlugin(),devServer開啟hot
場景1:實現(xiàn)只刷新css,不影響js
場景2:js中實現(xiàn)熱更新,只更新指定js模塊
if(module,hot){
module,hot.acceptC./library.jsJ,function0{
//Dosomethingwiththeupdatedlibrarymodule---
});
第18/26頁
14、Plugin(插件)的作用是什么?
【僅供參考】
Plugin是用來擴展Webpack功能的,通過在構(gòu)建流程里注入鉤子實現(xiàn),它給Webpack帶來了
很大的靈活性。
Webpack是通過plugins屬性來配置需要使用的插件列表的。plugins屬性是一個數(shù)組,里面的
每一項都是插件的一個實例,在實例化一個組件時可以通過構(gòu)造函數(shù)傳入這個組件支持的配置
屬性。
15、webpack-dev-server和http服務(wù)器的區(qū)別
【僅供參考】
webpack-dev-server使用內(nèi)存來存儲webpack開發(fā)環(huán)境下的打包文件,并且可以使用模塊熱更
新,比傳統(tǒng)的http服務(wù)對開發(fā)更加有效。
16、Webpack的基本功能有哪些?
【僅供參考】
代碼轉(zhuǎn)換:TypeScript編譯成JavaScript、SCSS編譯成CSS等等
文件優(yōu)化:壓縮JavaScript、CSS、html代碼,壓縮合并圖片等
代碼分割:提取多個頁面的公共代碼、提取首屏不需要執(zhí)行部分的代碼讓其異步加載
模塊合并:在采用模塊化的項目有很多模塊和文件,需要構(gòu)建功能把模塊分類合并成一個文件
自動刷新:監(jiān)聽本地源代碼的變化,自動構(gòu)建,刷新瀏覽器
代碼校驗:在代碼被提交到倉庫前需要檢測代碼是否符合規(guī)范,以及單元測試是否通過
自動發(fā)布:更新完代碼后,自動構(gòu)建出線上發(fā)布代碼并傳輸給發(fā)布系統(tǒng)。
17、webpack的工作原理?
【僅供參考】
WebPack可以看做是模塊打包機:它做的事情是,分析你的項目結(jié)構(gòu),找到JavaScript模塊以及
其它的一些瀏覽器不能直接運行的拓展語言(Sass,TypeScript等),并將其轉(zhuǎn)換和打包為合
適的格式供瀏覽器使用。在3.0出現(xiàn)后,Webpack還肩負起了優(yōu)化項目的責(zé)任。
18、gulp/grunt與webpack的區(qū)別是什么?
【僅供參考】
三者都是前端構(gòu)建工具,grunt和gulp在早期比較流行,現(xiàn)在webpack相對來說比較主流,不過
一些輕量化的任務(wù)還是會用gulp來處理,比如單獨打包CSS文件等。
grunt和gulp是基于任務(wù)和流(TasksStream)的。
類似jQue:ry,找到一個(或一類)文件,對其做一系列鏈?zhǔn)讲僮鳎铝魃系臄?shù)據(jù),整條鏈?zhǔn)?/p>
操作構(gòu)成了一個任務(wù),多個任務(wù)就構(gòu)成了整個web的構(gòu)建流程。
webpack是基于入口的。
webpack會自動地遞歸解析入口所需要加載的所有資源文件,然后用不同的Loader來處理不同的
文件,用Plugin來擴展webpack功能。
19、sourceMap
第19/26頁
【僅供參考】
是一個映射關(guān)系,將打包后的文件隱射到源代碼,用于定位報錯位置
配置方式:
例如:devtool:'source-map'
加不同前綴意義:
inline:不生成映射關(guān)系文件,打包進main.js
cheap:L只精確到行,不精確到列,打包速度快2.只管業(yè)務(wù)代碼,不管第三方模塊
module:不僅管業(yè)務(wù)代碼,而且管第三方代碼
eval:執(zhí)行效率最快,性能最好
最佳實踐:
開發(fā)環(huán)境:cheap-module-eval-source-map
線上環(huán)境:cheap-mudole-source-map
20、webpack的熱更新是如何做到的?說明其原理?
【僅供參考】
1、在webpack的watch模式下,文件系統(tǒng)中某一個文件發(fā)生修改,webpack監(jiān)聽到文件變
化,根據(jù)配置文件對模塊重新編譯打包,并將打包后的代碼通過簡單的JavaScript對象保存
在內(nèi)存中。
2、webpack-dev-server和webpack之間的接口交互,而在這一步,主要是dev-server的
中間件webpack-dev-middleware和webpack之間的交互,webpack-dev-middleware調(diào)用
webpack暴露的API對代碼變化進行監(jiān)控,并且告訴webpack,將代碼打包到內(nèi)存中。
3、webpack-dev-server對文件變化的一個監(jiān)控,這一步不同于第一步,并不是監(jiān)控代碼變化
重新打包。當(dāng)我們在配置文件中配置了devServer.watchContentBase為true的時候,Server
會監(jiān)聽這些配置文件夾中靜態(tài)文件的變化,變化后會通知瀏覽器端對應(yīng)用進行l(wèi)ivereloado
注意,這兒是瀏覽器刷新,和HMR是兩個概念
4、webpack-dev-server代碼的工作,該步驟主要是通過sockjs(webpack-dev-server的依
賴)在瀏覽器端和服務(wù)端之間建立一個websocket長連接,將webpack編譯打包的各個階段
的狀態(tài)信息告知瀏覽器端,
同時也包括第三步中Server監(jiān)聽靜態(tài)文件變化的信息。瀏覽器端根據(jù)這些socket消息
進行不同的操作。當(dāng)然服務(wù)端傳遞的最主要信息還是新模塊的hash值,后面的步驟根據(jù)這一
hash值來進行模塊熱替換。
webpack-dev-server/client端并不能夠請求更新的代碼,也不會執(zhí)行熱更模塊操作,而
把這些工作又交回給了webpack,webpack/hot/dev-server的工作就是根據(jù)webpack-dev-
server/client傳給它的信息以及dev-server的配置決定是刷新瀏覽器呢還是進行模塊熱更
新。當(dāng)然如果僅僅是刷新瀏覽器,也就沒有后面那些步驟了。IIotModuleReplacement.runtime
是客戶端HMR的中樞,它接收到上一步傳遞給他的新模塊的hash值,它通過
JsonpMainTemplate.runtime向server端發(fā)送Ajax請求,服務(wù)端返回一個json,該json
包含了所有要更新的模塊的hash值,獲取到更新列表后,該模塊再次通過jsonp請求,獲取
到最新的模塊代碼。
5、決定HMR成功與否的關(guān)鍵步驟,在該步驟中,HotModulePlugin將會對新舊模塊進行對
第20/26頁
比,決定是否更新模塊,在決定更新模塊后,檢查模塊之間的依賴關(guān)系,更新模塊的同時更新
模塊間的依賴引用。最后一步,當(dāng)HMR失敗后,回退到livereload操作,也就是進行瀏覽
器刷新來獲取最新打包代碼。
五、性能/瀏覽器/其他篇
1、哪些方法可以提升網(wǎng)站前端性能?
【僅供參考】
精靈圖合并,減少HTTP請求;壓縮HTML、CSS、JavaScript文件;使用CDN托管靜態(tài)文件;使用
localstorage緩存和mainfest應(yīng)用緩存。
2、針對HTML,如何優(yōu)化性能?
【僅供參考】
具體方法如下。
(1)對于資源加載,按需加載和異步加載
(2)首次加載的資源不超過1024KB,即越小越好。
(3)壓縮HTML、CSS、JavaScript文件。
(4)減少DOM節(jié)點。
(5)避免空src(空src在部分瀏覽器中會導(dǎo)致無效請求)。
(6)避免30*、40*、50*請求錯誤
(7)添加Favicon,ico,如果沒有設(shè)置圖標(biāo)ico,則默認的圖標(biāo)會導(dǎo)致發(fā)送一個404或者500請
求。
3、性能優(yōu)化六大指標(biāo)
【僅供參考】
六大指標(biāo)基本囊括大部分性能優(yōu)化細節(jié),可作為九大策略的補充。筆者根據(jù)每條性能優(yōu)化建議
的特征將指標(biāo)劃分為以下六方面。
「加載優(yōu)化」:資源在加載時可做的性能優(yōu)化
「執(zhí)行優(yōu)化」:資源在執(zhí)行時可做的性能優(yōu)化
「渲染優(yōu)化」:資源在渲染時可做的性能優(yōu)化
「樣式優(yōu)化」:樣式在編碼時可做的性能優(yōu)化
「腳本優(yōu)化」:腳本在編碼時可做的性能優(yōu)化
「V8引擎優(yōu)化」:針對V8引擎特征可做的性能優(yōu)化
4、常見的瀏覽器內(nèi)核有哪些?
【僅供參考】
Trident內(nèi)核:IE,MaxThon,TT,TheWorld,360,搜狗瀏覽器等。[又稱MSHTML]
Gecko內(nèi)核:Netscape6及以上版本,F(xiàn)F,MozillaSuite/SeaMonkey等
Presto內(nèi)核:0pera7及以上。[Opera內(nèi)核原為:Presto,現(xiàn)為:Blink;]
Webkit內(nèi)核:Safari,Chrome等。[Chrome的:Blink(WebKit的分支)]
第21/26頁
5、平時你是如何對代碼進行性能優(yōu)化的?
【僅供參考】
利用性能分析工具監(jiān)測性能,包括靜態(tài)Analyze工具和運行時的Profile工具(在Xcode工具欄
中依次單擊Product-Profile項可以啟動)。
比如測試程序的運行時間,當(dāng)單擊TimeProfiler項時,應(yīng)用程序開始運行,這就能獲取到運
行整個應(yīng)用程序所消耗時間的分布和百分比。為了保證數(shù)據(jù)分析在同一使用場景下的真實性,
一定要使用真機,因為此時模擬器在Mac上運行,而Mac上的CPU往往比iOS設(shè)備要快。
6、針對CSS,如何優(yōu)化性能?
【僅供參考】
具體優(yōu)化方法如下。
(1)正確使用display屬性,display屬性會影響頁面的渲染,因此要注意以下幾方面。
display:inline后不應(yīng)該再使用width、height、margin、padding和float。
display:inline-block后不應(yīng)該再使用float。
display:block后不應(yīng)該再使用vertical-aligno
display:table-*后不應(yīng)該再使用margin或者float。
(2)不濫用floato
(3)不聲明過多的font-size。
(4)當(dāng)值為0時不需要單位。
(5)標(biāo)準(zhǔn)化各種瀏覽器前綴,并注意以下幾方面。
瀏覽器無前綴應(yīng)放在最后。
CSS動畫只用(-webkit-無前綴)兩種即可。
其他前綴包括-webkit-、-moz-、-ms-、無前綴(Opera瀏覽器改用blink內(nèi)核,所以-0-被淘
汰)
(6)避免讓選擇符看起來像是正則表達式。高級選擇器不容易讀懂,執(zhí)行時間也長。
(7)盡量使用id、class選擇器設(shè)置樣式(避免使用style屬性設(shè)置行內(nèi)樣式)
(8)盡量使用CSS3動畫。
(9)減少重繪和回流。
7、請說一下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國數(shù)字集中病人監(jiān)護系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國加密電子郵件服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 中國中式快餐行業(yè)未來趨勢預(yù)測分析及投資規(guī)劃研究建議報告
- 2025年中國鐵鋁酸鹽水泥行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國通風(fēng)系統(tǒng)設(shè)備行業(yè)市場深度研究及投資戰(zhàn)略規(guī)劃報告
- 2025年度人工智能技術(shù)研發(fā)合同簽約與管理方案
- 2025年度智能交通信號控制系統(tǒng)固定總價合同約定
- 2025年度講座教授學(xué)術(shù)講座版權(quán)轉(zhuǎn)讓合同
- 2025年度廣告印刷品售后服務(wù)合同范本
- 2025年國際貿(mào)易醫(yī)療器械買賣合同標(biāo)準(zhǔn)
- 避暑旅游目的地評價指標(biāo)、閾值和評價等級表、人體舒適度、度假氣候指數(shù)和旅游氣候指數(shù)計算方法
- 允許一切發(fā)生:過不緊繃松弛的人生
- 注塑生產(chǎn)過程控制流程
- 教科版六年級科學(xué)下冊 (廚房里的物質(zhì)與變化)教學(xué)課件
- 公務(wù)員面試應(yīng)急應(yīng)變題目大全及解析
- 浙江省炮制規(guī)范2015版電子版
- 冰心《童年的春節(jié)》
- 鄭州小吃詳細地點
- 上海高考英語詞匯手冊
- 2021年江蘇省淮安市淮陰中學(xué)高一政治下學(xué)期期末試題含解析
- 公共政策工具-課件
評論
0/150
提交評論