1.vue 的 v-for為什麼要加上 :key 以及為什麼不能用做陣列索引 從原理分析
因為vue
和react
的diff
演算法 需要判斷更新前後節點的對應關係,比如下圖的更新前的bde,更新後為bcde 插入了乙個c,如果沒有:key
的話,演算法無法判斷這個c是插入的,就會認為b之後的節點全部對不上,都執行patch
生成新的虛擬dom,就浪費了效能。
當我們用乙個唯一且穩定的值標識了陣列的元素之後,演算法就不用考慮順序以及對應關係,只比較:key
相同的元素即可
q:為什麼不能用陣列索引當key
?
a:因為陣列索引明顯不是乙個唯一且穩定的值,比如通過array.shift()
等方法可以輕鬆改變索引和元素對應關係,但是元素本身是沒有改變的,達不到減少效能開銷的目的
2.為什麼0.1+0.2!==0.3 分析並提出解決方案
參考解決js計算0.1+0.2 !==0.3
3.虛擬dom比操作真實dom效率和效能更高嗎?
真實dom效率更高,虛擬dom還需要diff
演算法等額外開銷,因為他們最終都是要掛載到真實dom上並觸發重排的。兩者都對於同步的修改有優化(只掛載/觸發一次重排)
4.生成1000個不重複的六位驗證碼字串陣列:
生成1000個不重複的六位驗證碼字串陣列:分析一下,此題關鍵是利用1.單個驗證碼6位數字0-9
2.一次1000個驗證碼。陣列形式返回
3.單次生成一批不能重複
function random():string
random()
生成隨機數,且不能重複。考慮到查重的演算法,map
是最簡單的,同時也可以使用set
/*
生成1000個不重複的六位驗證碼字串陣列:
1.單個驗證碼6位數字0-9
2.一次1000個驗證碼。陣列形式返回
3.單次生成一批不能重複
function random():string */
function
random()
return result
}// 生成單個不重複的字串
function
(map,result)
map.
set(randomstr,'')
result.
push
(randomstr)
}// 生成六位random字串函式
function
productrandomstr()
` }
return str
}console.
log(
random()
);
5.promise.resolve(a+b)實現累加:
這題當時沒做出來 後面問題鎖住了不給看 大概是這麼個題幹和解答
/*
funciton add(a,b)=>promise.resolve(a+b)
實現 function addup(arr) 累加返回結果
*/function
add(a,b)
async
function
addup
(arr)
return total
}console.
log(
addup([
1,2,
3,4]
).then
((value)
=>))
;
位元,位元組,千位元組
如果你被人問到什麼是位元?什麼是位元組?這些網路中資料傳輸的單位一定會讓你有點毫無頭緒的感覺。沒關係,這些都很好理解,看過了下面的內容你就可以有條有理的把問題一一解答了。首先說說最小的單位,我們通常都叫做bit,也就是位元,有的時候也稱為位。但不管怎麼稱呼,他們都是二進位制數中最小的單位。單位的概念...
位元組對齊 8位元組對齊
參考博文 參考1 參考2 參考3 在記憶體管理中經常使用位元組對齊來管理分配的記憶體。1 原理 2 演算法 2.1unsigned intcalc align unsigned int n,unsigned align 2.2 更好的演算法 unsigned intcalc align unsign...
2012 09 12 位元組轉換
位 位元 bit 這是記憶體中最小的單位,二進位制數序列中的乙個0或乙個1就是一比位元,在電腦中,乙個位元對應著乙個電晶體。位元組 b byte 是計算機中最常用 最基本的存在單位。乙個位元組等於8個位元,即1 byte 8bit。千位元組 kb kilo byte 電腦的記憶體容量都很大,一般都是...