面经练习(十四)
1.async/await执行原理
2.mouseover和mouseenter的区别
3.快速判断二叉树前序或后序遍历
4.找出字符串中连续出现次数最多的字符和次数
function chaozhao(str) {
let arr = str.split('')
let map = new Map();
let max = 1;
let max1 = 1;
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
if (arr[i + 1] == arr[i]) {
max++;
} else if (arr[i + 1] !== arr[i]) {
map.set(arr[i], max);
max = 1;
}
} else if (map.has(arr[i])) {
if (arr[i + 1] == arr[i]) {
max1++;
} else if (arr[i + 1] !== arr[i]) {
let max2 = map.get(arr[i]);
max1 > max2 ? max1 : max2;
map.set(arr[i], max1);
max1 = 1;
}
}
}
let result = [];
map.forEach(function(value, key) {
max = max > value ? max : value;
})
map.forEach(function(value, key) {
if (value == max) {
result.push(`${key}:${max}`);
}
})
return result;
}
let str = 'aaadjdoaaaaacccddaaaaaaaaaao';
console.log(chaozhao(str));
5.输入输出题 立即执行函数里面的变量提升
var v = 'hello';
(function() {
console.log(v);
function v() {
var v = 'happy';
console.log(v);
}
v();
})()
输出结果如下:
6.输入输出题 函数没有返回值输出undefined
var i = 1;
var n = m = 0;
function myFun(x) {
x = (x++) + 5;
}
n = myFun(1);
function anotherFun(x) {
x = (--x) + 5;
}
m = anotherFun(n);
console.log(n);
console.log(m);
两个函数里 都没有对x 进行 return 所以输出结果都是undefined
7.vue eventbus事件总线
8.异步加载在Vue生命周期哪个阶段更合理
9.图片垂直居中的方法:
1.父:line-height和text-align:center 子:vertical-align: middle
2.父:display:table-cell, vertical-align: middle , text-align:center 子:display:inline-block
3.flex布局 父:display:flex justify-content: center;
align-items: center;
4.绝对定位布局
5.转换成背景图片:
background:url (img/logo.png) no-repeat center center
10.vuex的核心概念
11.为什么link用href获取资源 script和img用src
12.css引入的两种方法link和@import的区别和用法
13.堆排序
function heapSort(array){
//1、创建最大堆:从最后一个节点的父节点开始
let len = array.length-1;
let lastIndex = Math.floor((len-1)/2);
for(let i=lastIndex; i>=0; i--){
maxHeap(array, len, i); //从最后一个节点的父节点开始层层向上
}
for(let i=len; i>0; i--){
let temp = array[0];
array[0] = array[i];
array[i] = temp;
maxHeap(array, i, 0);//去掉已排好序的节点,剩余节点重新构堆。
}
}
function maxHeap(array, heapSize, index){ //从最后一个子节点到第index节点构堆
//左子节点
let leftChild = 2*index+1;
//右子节点
let rightChild = 2*index +2;
//最大元素下标
let largestIndex = index;
//分别比较当前假设的最大节点和它的左右节点,找出最大值
if(leftChild<heapSize && array[leftChild]>array[largestIndex]){
largestIndex = leftChild;
}
if(rightChild<heapSize && array[rightChild]>array[largestIndex]){
largestIndex = rightChild;
}
if(largestIndex !== index){
let temp = array[largestIndex];
array[largestIndex] = array[index];
array[index] = temp;
//交换后,其子节点可能就不是最大堆了,需要对交换后的子节点重新调整
maxHeap(array, heapSize, largestIndex)
}
}
let array = [23,4,12,8,5,26,3,4,1];
heapSort(array);
console.log(array); //[1,3,4,4,5,8,12,23,26]