先端面接問題まとめ5
前言
続きます.
本文
1.React/Vueプロジェクトを書くとき、なぜコンポーネントにkeyを書くのか.vueとreactは、diffアルゴリズムを使用して新しい仮想ノードと古い仮想ノードを比較し、ノードを更新する役割を果たす.vueのdiff関数にあります.まずdiffアルゴリズムを理解することができます.クロスコントラストの場合、新しいノードと古いノードのヘッダとテールがクロスコントラストして結果が得られない場合、新しいノードのkeyに基づいて古いノード配列のkeyを比較し、対応する古いノード(ここではkey=>indexのmapマッピングに対応)を見つけます.見つからない場合は、新しいノードとみなされます.keyがなければ、対応する古いノードを検索する方法が採用されます.1つはmapマッピングであり、もう1つは遍歴検索である.比較すると.mapマッピングの速度はより速い.
2.bind関数を実現する
4.大数加算
続きます.
本文
1.React/Vueプロジェクトを書くとき、なぜコンポーネントにkeyを書くのか.vueとreactは、diffアルゴリズムを使用して新しい仮想ノードと古い仮想ノードを比較し、ノードを更新する役割を果たす.vueのdiff関数にあります.まずdiffアルゴリズムを理解することができます.クロスコントラストの場合、新しいノードと古いノードのヘッダとテールがクロスコントラストして結果が得られない場合、新しいノードのkeyに基づいて古いノード配列のkeyを比較し、対応する古いノード(ここではkey=>indexのmapマッピングに対応)を見つけます.見つからない場合は、新しいノードとみなされます.keyがなければ、対応する古いノードを検索する方法が採用されます.1つはmapマッピングであり、もう1つは遍歴検索である.比較すると.mapマッピングの速度はより速い.
2.bind関数を実現する
Function.prototype.bind1 = function(content){
var self = this
return function(){
return self.apply(content,arguments)
}
}
ポイントはthisを保存することです.呼び出された関数です.4.大数加算
function sub(a,b){
let res = ''
a = a.toString().split('')
b= b.toString().split('')
let c =0
if(a[0] == "-"||b[0] == '-'){
while(a.length||b.length){
c+= ~~a.pop()-~~b.pop()
res = c%10+res
c = c>9
console.log(c);
}
}
return res
}
5.無秩序で重複しない配列dataを与え、n個の数を取り出してsumに加算するfunction add(arr, n, sum) {
let l = arr.length
let result = []
if (l < n) {
console.log('err1');
return;
} else {
if (arr.length < n) {
console.log('err2');
return;
}
let flag = true;
while (flag) {
function radom(arr, n) {
let a = []
while (n) {
let zz = Math.floor(Math.random() * arr.length);
a.push(arr[zz])
arr.splice(zz, 1)
n--
}
return a
}
let zarr = []
arr.forEach(item => zarr.push(item))
let newarr = radom(zarr, n)
let test = newarr.reduce((a, b) => a + b)
if (test === sum) {
result = newarr
flag = false
}
}
}
return result;
}
この問題は、長い間考えていましたが、いい方法はありません.皆さんが交流してほしいです.