第 41 - 50 題
第 41 題:下面代碼輸出什么
var a = 10;
(function () {
console.log(a)
a = 5
console.log(window.a)
var a = 20;
console.log(a)
})()
解析:第 41題
第 42 題:實現(xiàn)一個 sleep 函數(shù)
比如 sleep(1000) 意味著等待1000毫秒府树,可從 Promise殷勘、Generator笤昨、Async/Await 等角度實現(xiàn)
//Promise
const sleep = time => {
return new Promise(resolve => setTimeout(resolve, time))
}
sleep(1000).then(() => {
console.log(1)
})
//Generator
function* sleepGenerator(time) {
yield new Promise(function (resolve, reject) {
setTimeout(resolve, time);
})
}
sleepGenerator(1000).next().value.then(() => { console.log(1) })
//async
function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time))
}
async function output() {
let out = await sleep(1000);
console.log(1);
return out;
}
output();
//ES5
function sleep(callback, time) {
if (typeof callback === 'function')
setTimeout(callback, time)
}
function output() {
console.log(1);
}
sleep(output, 1000);
解析:第 42 題
第 43 題:使用 sort() 對數(shù)組 [3, 15, 8, 29, 102, 22] 進(jìn)行排序,輸出結(jié)果
let arr = [3, 15, 8, 29, 102, 22]
arr.sort((a, b) => a - b);
console.log(arr)
解析:第 43 題
第 44 題:介紹 HTTPS 握手過程
1尉桩、客戶端使用https的url訪問web服務(wù)器,要求與服務(wù)器建立ssl連接
2、web服務(wù)器收到客戶端請求后, 會將網(wǎng)站的證書(包含公鑰)傳送一份給客戶端
3舌涨、客戶端收到網(wǎng)站證書后會檢查證書的頒發(fā)機(jī)構(gòu)以及過期時間, 如果沒有問題就隨機(jī)產(chǎn)生一個秘鑰
4、客戶端利用公鑰將會話秘鑰加密, 并傳送給服務(wù)端, 服務(wù)端利用自己的私鑰解密出會話秘鑰
5扔字、之后服務(wù)器與客戶端使用秘鑰加密傳輸
解析:第 44 題
第 45 題:HTTPS 握手過程中囊嘉,客戶端如何驗證證書的合法性
解析:第 45 題
第 46 題:輸出以下代碼執(zhí)行的結(jié)果并解釋為什么
var obj = {
'2': 3,
'3': 4,
'length': 2,
'splice': Array.prototype.splice,
'push': Array.prototype.push
}
obj.push(1)
obj.push(2)
console.log(obj)
1.使用第一次push,obj對象的push方法設(shè)置 obj[2]=1;obj.length+=1
2.使用第二次push革为,obj對象的push方法設(shè)置 obj[3]=2;obj.length+=1
3.使用console.log輸出的時候扭粱,因為obj具有 length 屬性和 splice 方法,故將其作為數(shù)組進(jìn)行打印
4.打印時因為數(shù)組未設(shè)置下標(biāo)為 0 1 處的值震檩,故打印為empty琢蛤,主動 obj[0] 獲取為 undefined
解析:第 46 題
第 47 題:雙向綁定和 vuex 是否沖突
解析:第 47 題
第 48 題:call 和 apply 的區(qū)別是什么蜓堕,哪個性能更好一些
1、Function.prototype.apply和Function.prototype.call 的作用是一樣的博其,區(qū)別在于傳入?yún)?shù)的不同套才;
2、第一個參數(shù)都是慕淡,指定函數(shù)體內(nèi)this的指向背伴;
3、第二個參數(shù)開始不同峰髓,apply是傳入帶下標(biāo)的集合傻寂,數(shù)組或者類數(shù)組,apply把它傳給函數(shù)作為參數(shù)携兵,call從第二個開始傳入的參數(shù)是不固定的疾掰,都會傳給函數(shù)作為參數(shù)。
4徐紧、call比apply的性能要好静檬,平常可以多用call, call傳入?yún)?shù)的格式正是內(nèi)部所需要的格式
解析:第 48 題
第 49 題:為什么通常在發(fā)送數(shù)據(jù)埋點請求的時候使用的是 1x1 像素的透明 gif 圖片浪汪?
解析:第 49 題
第 50 題:(百度)實現(xiàn) (5).add(3).minus(2) 功能巴柿。
例: 5 + 3 - 2凛虽,結(jié)果為 6
// 5 + 3 - 2死遭,結(jié)果為 6
Number.prototype.add = function (number) {
if (typeof number !== 'number') {
throw new Error('請輸入數(shù)字~');
}
return this + number;
};
Number.prototype.minus = function (number) {
if (typeof number !== 'number') {
throw new Error('請輸入數(shù)字~');
}
return this - number;
};
console.log((5).add(3).minus(2));
解析:第 50 題
第 51 - 60 題
第 51 題:Vue 的響應(yīng)式原理中 Object.defineProperty 有什么缺陷?
為什么在 Vue3.0 采用了 Proxy凯旋,拋棄了 Object.defineProperty呀潭?
解析:第 51 題
第 52 題:怎么讓一個 div 水平垂直居中
解析:第 52 題
第 53 題:輸出以下代碼的執(zhí)行結(jié)果并解釋為什么
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x)
console.log(b.x)
復(fù)制代碼
解析:第 53 題
第 54 題:冒泡排序如何實現(xiàn),時間復(fù)雜度是多少至非, 還可以如何改進(jìn)钠署?
解析:第 54 題
第 55 題:某公司 1 到 12 月份的銷售額存在一個對象里面
如下:{1:222, 2:123, 5:888},請把數(shù)據(jù)處理為如下結(jié)構(gòu):[222, 123, null, null, 888, null, null, null, null, null, null, null]荒椭。
解析:第 55 題
第 56 題:要求設(shè)計 LazyMan 類谐鼎,實現(xiàn)以下功能。
LazyMan('Tony');
// Hi I am Tony
LazyMan('Tony').sleep(10).eat('lunch');
// Hi I am Tony
// 等待了10秒...
// I am eating lunch
LazyMan('Tony').eat('lunch').sleep(10).eat('dinner');
// Hi I am Tony
// I am eating lunch
// 等待了10秒...
// I am eating diner
LazyMan('Tony').eat('lunch').eat('dinner').sleepFirst(5).sleep(10).eat('junk food');
// Hi I am Tony
// 等待了5秒...
// I am eating lunch
// I am eating dinner
// 等待了10秒...
// I am eating junk food
復(fù)制代碼
解析:第 56 題
第 57 題:分析比較 opacity: 0趣惠、visibility: hidden狸棍、display: none 優(yōu)劣和適用場景。
解析:第 57 題
第 58 題:箭頭函數(shù)與普通函數(shù)(function)的區(qū)別是什么味悄?構(gòu)造函數(shù)(function)可以使用 new 生成實例草戈,那么箭頭函數(shù)可以嗎?為什么侍瑟?
解析:第 58 題
第 59 題:給定兩個數(shù)組唐片,寫一個方法來計算它們的交集丙猬。
例如:給定 nums1 = [1, 2, 2, 1],nums2 = [2, 2]费韭,返回 [2, 2]茧球。
解析:第 59 題
第 60 題:已知如下代碼,如何修改才能讓圖片寬度為 300px 揽思?注意下面代碼不可修改袜腥。
<img src="1.jpg" style="width:480px!important;”>
解析:第 60 題
第 61 - 70 題
第 61 題:介紹下如何實現(xiàn) token 加密
解析:第 61 題
第 62 題:redux 為什么要把 reducer 設(shè)計成純函數(shù)
解析:第 62 題
第 63 題:如何設(shè)計實現(xiàn)無縫輪播
解析:第 63 題
第 64 題:模擬實現(xiàn)一個 Promise.finally
解析:第 64 題
第 65 題: a.b.c.d
和 a['b']['c']['d']
,哪個性能更高钉汗?
解析:第 65 題
第 66 題:ES6 代碼轉(zhuǎn)成 ES5 代碼的實現(xiàn)思路是什么
解析:第 66 題
第 67 題:數(shù)組編程題
隨機(jī)生成一個長度為 10 的整數(shù)類型的數(shù)組羹令,例如 [2, 10, 3, 4, 5, 11, 10, 11, 20]
,將其排列成一個新數(shù)組损痰,要求新數(shù)組形式如下福侈,例如 [[2, 3, 4, 5], [10, 11], [20]]
。
解析:第 67 題
第 68 題: 如何解決移動端 Retina 屏 1px 像素問題
解析:第 68 題
第 69 題: 如何把一個字符串的大小寫取反(大寫變小寫小寫變大寫)卢未,例如 ’AbC' 變成 'aBc' 肪凛。
解析:第 69 題
第 70 題: 介紹下 webpack 熱更新原理,是如何做到在不刷新瀏覽器的前提下更新頁面的
解析:第 70 題
第 71 - 80 題
第 71 題: 實現(xiàn)一個字符串匹配算法辽社,從長度為 n 的字符串 S 中伟墙,查找是否存在字符串 T,T 的長度是 m滴铅,若存在返回所在位置戳葵。
解析:第 71 題
第 72 題: 為什么普通 for
循環(huán)的性能遠(yuǎn)遠(yuǎn)高于 forEach
的性能,請解釋其中的原因汉匙。
[圖片上傳失敗...(image-2eeb30-1575446538468)]
<figcaption></figcaption>
解析:第 72 題
第 73 題: 介紹下 BFC拱烁、IFC、GFC 和 FFC
解析:第 73 題
第 74 題: 使用 JavaScript Proxy 實現(xiàn)簡單的數(shù)據(jù)綁定
解析:第 74 題
第 75 題:數(shù)組里面有10萬個數(shù)據(jù)噩翠,取第一個元素和第10萬個元素的時間相差多少
解析:第 75 題
第 76 題:輸出以下代碼運行結(jié)果
// example 1
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
console.log(a[b]);
---------------------
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
console.log(a[b]);
---------------------
// example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';
a[c]='c';
console.log(a[b]);
復(fù)制代碼
解析:第 76 題
第 77 題:算法題「旋轉(zhuǎn)數(shù)組」
給定一個數(shù)組戏自,將數(shù)組中的元素向右移動 k 個位置,其中 k 是非負(fù)數(shù)伤锚。
示例 1:
輸入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3
輸出: [5, 6, 7, 1, 2, 3, 4]
解釋:
向右旋轉(zhuǎn) 1 步: [7, 1, 2, 3, 4, 5, 6]
向右旋轉(zhuǎn) 2 步: [6, 7, 1, 2, 3, 4, 5]
向右旋轉(zhuǎn) 3 步: [5, 6, 7, 1, 2, 3, 4]
復(fù)制代碼
示例 2:
輸入: [-1, -100, 3, 99] 和 k = 2
輸出: [3, 99, -1, -100]
解釋:
向右旋轉(zhuǎn) 1 步: [99, -1, -100, 3]
向右旋轉(zhuǎn) 2 步: [3, 99, -1, -100]
復(fù)制代碼
解析:第 77 題
第 78 題:Vue 的父組件和子組件生命周期鉤子執(zhí)行順序是什么
解析:第 78 題
第 79 題:input 搜索如何防抖擅笔,如何處理中文輸入
解析:第 79 題
第 80 題:介紹下 Promise.all 使用、原理實現(xiàn)及錯誤處理
解析:第 80 題
第 81 - 90 題
第 81 題:打印出 1 - 10000 之間的所有對稱數(shù)
例如:121屯援、1331 等
解析:第 81 題
第 82 題:周一算法題之「移動零」
給定一個數(shù)組 nums猛们,編寫一個函數(shù)將所有 0 移動到數(shù)組的末尾,同時保持非零元素的相對順序玄呛。
示例:
輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 復(fù)制代碼
說明:
- 必須在原數(shù)組上操作阅懦,不能拷貝額外的數(shù)組。
- 盡量減少操作次數(shù)徘铝。
解析:第 82 題
第 83 題:var耳胎、let 和 const 區(qū)別的實現(xiàn)原理是什么
解析:第 83 題
習(xí)題: https://blog.csdn.net/qq_37024887/article/details/106784068
第 84 題:請實現(xiàn)一個 add 函數(shù)惯吕,滿足以下功能。
add(1); // 1 add(1)(2); // 3 add(1)(2)(3)怕午;// 6 add(1)(2, 3); // 6 add(1, 2)(3); // 6 add(1, 2, 3); // 6 復(fù)制代碼
解析:第 84 題
第 85 題:react-router 里的 <Link>
標(biāo)簽和 <a>
標(biāo)簽有什么區(qū)別
如何禁掉
<a>
標(biāo)簽?zāi)J(rèn)事件废登,禁掉之后如何實現(xiàn)跳轉(zhuǎn)。
解析:第 85 題
第 86 題:(京東郁惜、快手)周一算法題之「兩數(shù)之和」
給定一個整數(shù)數(shù)組和一個目標(biāo)值堡距,找出數(shù)組中和為目標(biāo)值的兩個數(shù)。
你可以假設(shè)每個輸入只對應(yīng)一種答案兆蕉,且同樣的元素不能被重復(fù)利用羽戒。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
復(fù)制代碼
解析:第 86 題
第 87 題:在輸入框中如何判斷輸入的是一個正確的網(wǎng)址。
解析:第 87 題
第 88 題:實現(xiàn) convert 方法虎韵,把原始 list 轉(zhuǎn)換成樹形結(jié)構(gòu)易稠,要求盡可能降低時間復(fù)雜度
以下數(shù)據(jù)結(jié)構(gòu)中,id 代表部門編號包蓝,name 是部門名稱驶社,parentId 是父部門編號,為 0 代表一級部門测萎,現(xiàn)在要求實現(xiàn)一個 convert 方法亡电,把原始 list 轉(zhuǎn)換成樹形結(jié)構(gòu),parentId 為多少就掛載在該 id 的屬性 children 數(shù)組下硅瞧,結(jié)構(gòu)如下:
// 原始 list 如下
let list =[
{id:1,name:'部門A',parentId:0},
{id:2,name:'部門B',parentId:0},
{id:3,name:'部門C',parentId:1},
{id:4,name:'部門D',parentId:1},
{id:5,name:'部門E',parentId:2},
{id:6,name:'部門F',parentId:3},
{id:7,name:'部門G',parentId:2},
{id:8,name:'部門H',parentId:4}
];
const result = convert(list, ...);
// 轉(zhuǎn)換后的結(jié)果如下
let result = [
{
id: 1,
name: '部門A',
parentId: 0,
children: [
{
id: 3,
name: '部門C',
parentId: 1,
children: [
{
id: 6,
name: '部門F',
parentId: 3
}, {
id: 16,
name: '部門L',
parentId: 3
}
]
},
{
id: 4,
name: '部門D',
parentId: 1,
children: [
{
id: 8,
name: '部門H',
parentId: 4
}
]
}
]
},
···
];
復(fù)制代碼
解析:第 88 題
第 89 題:設(shè)計并實現(xiàn) Promise.race()
解析:第 89 題
第 90 題:實現(xiàn)模糊搜索結(jié)果的關(guān)鍵詞高亮顯示
[圖片上傳失敗...(image-aea64e-1575446538470)]
解析:第 90 題
第 91 - 100 題
第 91 題:介紹下 HTTPS 中間人攻擊
解析:第 91 題
第 92 題:已知數(shù)據(jù)格式份乒,實現(xiàn)一個函數(shù) fn 找出鏈條中所有的父級 id
const value = '112' const fn = (value) => { ... } fn(value) // 輸出 [1, 11零酪, 112] 復(fù)制代碼
[圖片上傳失敗...(image-21d53f-1575446538470)]
解析:第 92 題
第 93 題:給定兩個大小為 m 和 n 的有序數(shù)組 nums1 和 nums2冒嫡。請找出這兩個有序數(shù)組的中位數(shù)拇勃。要求算法的時間復(fù)雜度為 O(log(m+n))四苇。
示例 1:
nums1 = [1, 3]
nums2 = [2]
復(fù)制代碼
中位數(shù)是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
復(fù)制代碼
中位數(shù)是(2 + 3) / 2 = 2.5
解析:第 93 題
第 94 題:vue 在 v-for 時給每項元素綁定事件需要用事件代理嗎?為什么方咆?
解析:第 94 題
第 95 題:模擬實現(xiàn)一個深拷貝月腋,并考慮對象相互引用以及 Symbol 拷貝的情況
解析:第 95 題
第 96 題:介紹下前端加密的常見場景和方法
解析:第 96 題
第 97 題:React 和 Vue 的 diff 時間復(fù)雜度從 O(n^3) 優(yōu)化到 O(n) ,那么 O(n^3) 和 O(n) 是如何計算出來的瓣赂?
解析:第 97 題
第 98 題:(京東)寫出如下代碼的打印結(jié)果
function changeObjProperty(o) {
o.siteUrl = "http://www.baidu.com"
o = new Object()
o.siteUrl = "http://www.google.com"
}
let webSite = new Object();
changeObjProperty(webSite);
console.log(webSite.siteUrl);
復(fù)制代碼
解析:第 98 題
第 99 題:(bilibili)編程算法題
用 JavaScript 寫一個函數(shù)榆骚,輸入 int 型,返回整數(shù)逆序后的字符串煌集。如:輸入整型 1234妓肢,返回字符串“4321”。要求必須使用遞歸函數(shù)調(diào)用苫纤,不能用全局變量碉钠,輸入函數(shù)必須只有一個參數(shù)傳入纲缓,必須返回字符串。
解析:第 99 題
第 100 題:(京東)請寫出如下代碼的打印結(jié)果
function Foo() { Foo.a = function() { console.log(1) } this.a = function() { console.log(2) } } Foo.prototype.a = function() { console.log(3) } Foo.a = function() { console.log(4) } Foo.a(); let obj = new Foo(); obj.a(); Foo.a(); 復(fù)制代碼
解析:[第 100 題](https://github.com/Advanced-Frontend/Daily-