2020校園招聘前端筆試卷(一 )總結(jié)
下面哪幾個和?[http://store.company.com/dir/page.html](http://store.company.com/dir/page.html)?符合同源策略?
解析:
同源的定義:如果兩個 URL 的?protocol、port?(en-US)?(如果有指定的話)和?host?都相同的話,則這兩個 URL 是同源。
例如:協(xié)議://主機(jī)/路徑
2.關(guān)于DOMContentLoaded和load事件說法正確的是?
解析:
DOMContentLoaded
當(dāng)純HTML被完全加載以及解析時,DOMContentLoaded事件會被觸發(fā),而不必等待樣式表,圖片或者子框架完成加載。Load
當(dāng)一個資源及其依賴資源已完成加載時,將觸發(fā)load事件。
? ?整體流程:
? ?DOM文檔加載的步驟為:
? ?①解析HTML結(jié)構(gòu)。
? ?②加載外部腳本和樣式表文件。
? ?③解析并執(zhí)行腳本代碼。
? ?④DOM樹構(gòu)建完成。//執(zhí)行DOMContentLoaded
? ?⑤加載圖片等外部文件。
? ?⑥頁面加載完畢。//執(zhí)行l(wèi)oad
3.如何在?div?容器里展示?<div></div>?這幾個字符?
4.以下是哪一組全是塊級元素?
解析:
一、什么叫塊級元素?
? ? ? ?塊級元素會新起一行,它可以包含行內(nèi)元素和其他塊級元素,并且可以設(shè)置寬高
二、什么叫行內(nèi)元素?
? ? ? ?同一行內(nèi),無法設(shè)置寬高
三、常見的塊級元素
? ? ? div,h1-h6,p,pre,ul,ol,li,form,table,label等
四、常見的行內(nèi)元素
? ? ??a,img,span,i(斜體),em(強(qiáng)調(diào)),sub(下標(biāo)),sup(上標(biāo))等
5.<div?class="box?box1?box2"?style="color:#222">hello</div>,?
?這個div里面最終的字體顏色是什么?
.box{
??color:#999;
}
.box{
??color:#333?!important;
}
.box2{
??color:#666
}
解析:!important 為最優(yōu)先
? ? ? ? ? ?style行內(nèi)樣式第二大
? ? ? ? ? ?多個class設(shè)置同一樣式,取最后一個
6.以下不是box-sizing的屬性是?
解析:content-box:在寬度和高度之外繪制元素的內(nèi)邊距和邊框
? ? ? ? ? ?border-box:由元素設(shè)定的寬度和高度決定了元素的邊框盒
? ? ? ? ? ?inherit:規(guī)定應(yīng)從父元素繼承 box-sizing 屬性的值
7.以下不是CSS偽類選擇器的是?
解析:
偽類選擇器的分類:
一、鏈接偽類選擇器
:link? ? ? 未訪問的鏈接?
:visited 已訪問的鏈接?
:hover? 鼠標(biāo)移動到鏈接上?
:active? 選定的鏈接?
二、結(jié)構(gòu)(位置)偽類選擇器
:first-child :選取屬于其父元素的首個子元素的指定選擇器
:last-child :選取屬于其父元素的最后一個子元素的指定選擇器
:nth-child(n) : 匹配屬于其父元素的第 N 個子元素,不論元素的類型,正數(shù)
:nth-last-child(n) :選擇器匹配屬于其元素的第 N 個子元素的每個元素,不論元素的類型,從最后一個子元素開始計數(shù),倒數(shù)。 n 可以是數(shù)字、關(guān)鍵詞或公式
三、目標(biāo)偽類選擇器
URL 帶有后面跟有錨名稱 #,指向文檔內(nèi)某個具體的元素。這個被鏈接的元素就是目標(biāo)元素(target element)。
:target 選擇器可用于選取當(dāng)前活動的目標(biāo)元素
8.‘-1?>>>?32?的值為(??)’
解析:“>>>”運(yùn)算符執(zhí)行無符號右移位運(yùn)算。它把無符號的 32?位整數(shù)所有數(shù)位整體右移。
對于無符號數(shù)或正數(shù)右移運(yùn)算,無符號右移與有符號右移運(yùn)算的結(jié)果是相同的。
對于負(fù)數(shù)來說,無符號右移將使用 0?來填充所有的空位,同時會把負(fù)數(shù)作為正數(shù)來處理,所得結(jié)果會非常大,完成右移操作后,最高位為1代表負(fù)數(shù)
9.[1?<?2?<?3,?3?<?2?<?1]
解析:運(yùn)算順序為從左到右,先得到boolean值,再轉(zhuǎn)換成對應(yīng)值0(false),1(true)比較,得到最后的boolean值
10.['1',?'2',?'3'].map(parseInt)?(?)
解析:
①map函數(shù)
將數(shù)組的每個元素傳遞給指定的函數(shù)處理,并返回處理后的數(shù)組,所以 ['1','2','3'].map(parseInt) 就是將字符串1,2,3作為元素;0,1,2作為下標(biāo)分別調(diào)用 parseInt 函數(shù)。即分別求出 parseInt('1',0), parseInt('2',1), parseInt('3',2)的結(jié)果
②parseInt函數(shù)
以第二個參數(shù)為基數(shù)來解析第一個參數(shù)字符串
接收兩個參數(shù)parseInt(string,radix)
string:字母(大小寫均可)、數(shù)組、特殊字符(不可放在開頭,特殊字符及特殊字符后面的內(nèi)容不做解析)的任意字符串
radix:解析字符串的基數(shù)(規(guī)則如下){
?區(qū)間范圍介于2~36之間
當(dāng)參數(shù)為 0,parseInt() 會根據(jù)十進(jìn)制來解析
如果忽略該參數(shù),默認(rèn)的基數(shù)規(guī)則:
? ?如果 string 以 "0x" 開頭,parseInt() 把 string 的其余部分解析為十六進(jìn)制數(shù)parseInt("0xf")? ?//15?
? ?如果 string 以 0 開頭,其后的字符解析為八進(jìn)制或十六進(jìn)制的數(shù)字;parseInt("08")?//8
? ?如果 string 以 1 ~ 9 的數(shù)字開頭,parseInt() 將把它解析為十進(jìn)制的整數(shù)parseInt("88.99f")? //88
??只有字符串中的第一個數(shù)字會被返回。parseInt("10.33")? ?//返回10
? 開頭和結(jié)尾的空格是允許的。parseInt(" 69 10 ")? ?//返回69
? 如果字符串的第一個字符不能被轉(zhuǎn)換為數(shù)字,返回 NaN
}
所以parseInt('1',0) ,默認(rèn)10進(jìn)制解析 結(jié)果為1
? ? ? ?parseInt('2',1),?radix參數(shù)為1,不在區(qū)間內(nèi),結(jié)果為NaN
? ? ? ?parseInt('3',2),radix參數(shù)為2,以二進(jìn)制解析,但二進(jìn)制要求0或1開頭,所以違反規(guī)則,結(jié)果為NaN
11.let?a?=?{?c:1?}
let?b?=?a
a?=?1
b.c?=?2
a.c?=?(?)?
解析:a為對象開辟一塊內(nèi)存空間,地址為0x巴拉巴拉
? ? ? ? ? ?將a賦值給b,此時b也是對象,與a指向同一個地址
? ? ? ? ? ?然后a再賦值為1,改變了它的類型為number,原有a對開辟內(nèi)存地址的指向消失,原有b的指向仍然存在
? ? ? ? ? ?對b中的c賦值為2
? ? ? ? ? ?a此時只是個number類型,又不是對象,哪來的c,所以是undefined
12.console.log(1);
setTimeout(()?=>?{console.log(2)},?0);
console.log(3);
Promise.resolve(4).then(b?=>?{
console.log(b);
});
console.log(5);
解析:首先我們要知道js的代碼執(zhí)行順序是從上到下按順序執(zhí)行的,當(dāng)然這只針對同步
那么,也就是說定時器setTimeout和Promise屬于異步范疇,異步是在所有同步代碼執(zhí)行完之后執(zhí)行
其中Promise的代碼總是優(yōu)先于setTimeout的代碼執(zhí)行
他倆中出現(xiàn)任意同類型代碼,按順序執(zhí)行
13.Math.abs(-6.666)?的結(jié)果是多少?
沒啥說的
14.替換字符串?bilibili?替換字符串中所有的b變成大寫B(tài)
解析
delete方法用于刪除對象的指定元素(包括變量和函數(shù)),要注意的是不能刪除原型鏈上的屬性,也不能刪除具有DontDelete特性的元素,但可以刪除eval中申明的元素
什么是具有DontDelete特性的元素?
什么是eval中申明的元素?
replace方法
用法:stringObject.replace(regexp/substr,replacement)
regexp/substr:規(guī)定子字符串或要替換的模式的 RegExp 對象。
請注意,如果該值是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉(zhuǎn)換為 RegExp 對象。
replacement:一個字符串值。規(guī)定了替換文本或生成替換文本的函數(shù)。
toUpperCase()方法
全部轉(zhuǎn)成大寫
15.[1,2,3,4,5]?的數(shù)組的基礎(chǔ)上?刪除第一個?和?最后一位
slice(start,end)最后一個元素通通用-1指代
16.function?setname(name){
?this.name?=?name
}
setname.prototype.printName?=?function(){?console.log(this.name)?}
let?a?=?new?setname("cc")
a.name?=?"dd"
a.__proto__.name?=?"ee"
a.__proto__.printName()??//??
a.printName()?//??
考察作用域鏈和原型鏈
什么是作用域鏈,什么是原型鏈?
作用域是針對變量的,它的特點就是,先在自己的變量范圍中查找,如果找不到,就會沿著作用域往上找,一直找到你要的變量為止,這個查找的過程就叫作用域鏈。(作用域只會向上查找)
原型鏈?zhǔn)轻槍?gòu)造函數(shù)的,比如我先創(chuàng)建了一個函數(shù),然后通過一個變量new了這個函數(shù),那么這個被new出來的函數(shù)就會繼承創(chuàng)建出來的那個函數(shù)的屬性,然后如果我訪問new出來的這個函數(shù)的某個屬性,但是我并沒有在這個new出來的函數(shù)中定義這個變量,那么它就會往上(向創(chuàng)建出它的函數(shù)中)查找,這個查找的過程就叫做原型鏈。(就和繼承一樣,如果自身沒有定義就會繼承父元素的樣式)
所以這道題就要分成兩條互不干擾的鏈來看
17.const?players?=?[?{name:?'UZI',?team:?'RNG',?position:?'ADC'},?
{name:?'theshy',?team:?'IG',?position:?'TOP'},?
{name:?'Metoer',?team:?'BLG',?position:?'Jungle'},
{name:?'ADD',?team:?'BLG',?position:?'TOP'},
{name:?'Scout',?team:?'EDG',?position:?'Middle'},
{name:?'iBoy',?team:?'EDG',?position:?'ADC'},
{name:?'Baolan',?team:?'IG',?position:?'Support'},?
{name:?'Xiaohu',?team:?'RNG',?position:?'Middle'}]?
獲取列表中戰(zhàn)隊名是BLG?位置上路的?選手對象?
players.filter(x=> x.position === 'TOP' && x.team === 'BLG')? ? √
解析:考察庫函數(shù),轉(zhuǎn)義字符,查詢條件
庫函數(shù):filter--通稱過濾器,對容器內(nèi)每個item進(jìn)行操作,篩選出符合條件的重構(gòu)
轉(zhuǎn)義字符:

18.[編程題]找出有序數(shù)組中和為sum的兩個數(shù)
找出有序數(shù)組(從小到大排列)中和為sum的兩個數(shù),要求復(fù)雜度為O(n),找到一組即可
輸入描述:
第一行:數(shù)組長度
第二行:數(shù)組各項的值
第三行:sum
輸出描述:
若存在,輸出和為sum的兩個數(shù),以空格分隔;若不存在,輸出notfound
輸入例子1:
5
1 3 4 6 8
10
輸出例子1:
4 6
輸入例子2:
5?
1 3 4 6 8
13
輸出例子2:
notfound
方法一:簡化二分法---雙兔吃草
方法二:key值唯一
用一個對象的key來存儲遍歷過的數(shù)字(value值任意,這里用的是0),每次循環(huán)只需判斷(sum-當(dāng)前值)的key值對應(yīng)的value是不是為0(為0就代表之前遍歷過這個數(shù)字)
19.[編程題]括號閉合
判斷由"()[]{}"6種括號組成的字符串是否合法
1. 所有括號必須閉合
2. 左括號必須在正確的位置閉合
輸入描述:
由6種符號組成的字符串
輸出描述:
合法則輸出"true",不合法輸出"false"
輸入例子1:
(]
輸出例子1:
false
輸入例子2:
{[][()()]}
輸出例子2:
true
輸入例子3:
{([)]}
輸出例子3:
false
1.利用 map 實現(xiàn)一一對應(yīng)key-value
2.利用棧
20.[編程題]上樓梯
有n級臺階,每一步可以走1級或2級,問一共有多少種走法
輸入描述:
臺階的級數(shù)n
輸出描述:
走法數(shù)量
輸入例子1:
2
輸出例子1:
2
例子說明1:
走法為1+1或2
輸入例子2:
3
輸出例子2:
3
例子說明2:
走法為1+1+1或1+2或2+1
解析:
考察--動態(tài)規(guī)劃
設(shè)k[i]代表爬到第i層的總解法數(shù)。從第三層開始的每一層可以從第 i- 1 層邁一步到達(dá),或者從第 i - 2層邁兩步到達(dá),所以解法數(shù)k[i] = k[i-1] + k[i-2] (i>2)?
此外考慮?k[1] = 1, k[2] = 2