面试十题(4)

时间:2021-09-16 19:34:09   收藏:0   阅读:41

1. 介绍下 BFC 及其应用。

BFC 就是块级格式上下文,是页面盒模型布局中的一种 CSS 渲染模式,相当于一个独立的容器,里面的元素和外部的元素相互不影响。

  1. html 根元素
  2. float 浮动
  3. 绝对定位
  4. overflow 不为 visiable
  5. display 为表格布局或者弹性布局
  1. 清除浮动
  2. 防止同一 BFC 容器中的相邻元素间的外边距重叠问题

2. 在 Vue 中,子组件为何不可以修改父组件传递的 Prop?如果修改了,Vue 是如何监控到属性的修改并给出警告的。

3. js 实现sleep函数

// promise
const sleep = time => {
    return new Promise(resolve => setTimeout(resolve, time))
}
sleep(1000).then(() => {
    console.log(业务代码‘)
})

// async/await
const sleepPromise = (time) => {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time);
  })
}
async function sleep (time) {
    await sleepPromise(time);
    console.log(业务代码‘)
}
sleep(5000)

// generator
const sleepPromise = (time) => {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time);
  })
}
function* sleep(time) {
    yield sleepPromise(time);
}
sleep(5000).next().value.then(()=>{
    console.log(业务代码‘)
})
function sleep(delay) {
  var start = (new Date()).getTime();
  while ((new Date()).getTime() - start < delay) {
    continue;
  }
}
console.log(‘1‘)
sleep(5000)
console.log(‘2‘)
function sleep(time, callback) {
    setTimeout(callback, time)
}

sleep(time, () => {
    console.log(业务代码‘)
})

4. 双向绑定和 vuex 是否冲突

参考链接

5. 为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?

6. 实现 (5).add(3).minus(2) 功能。

Number.prototype.add = function (number) {
  if (typeof number !== ‘number‘) {
    throw new Error(请输入数字~‘);
  }
  return this.valueOf() + number;
};
Number.prototype.minus = function (number) {
  if (typeof number !== ‘number‘) {
    throw new Error(请输入数字~‘);
  }
  return this.valueOf() - number;
};
console.log((5).add(3).minus(2));
// 这里的~写成加号+ 减号- 都可以。但必须是一元表达式
// 匿名函数前面加~一元运算符就会转变成函数表达式,函数表达式后面加()
~ function(){
    function add(n){
      return this + n
    }
    function minus(n){
      return this - n
    }
    Number.prototype.add = add
    Number.prototype.minus = minus
}()
console.log((5).add(3).minus(2))

function addmin(){
    function add(n){
      return this + n
    }
    function minus(n){
      return this - n
    }
    Number.prototype.add = add
    Number.prototype.minus = minus
}
addmin()
console.log((5).add(3).minus(2))

7. Vue 的响应式原理中 Object.defineProperty 有什 么缺陷? 为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty?

  1. Object.defineProperty 无法监控到数组下标的变化,导致通过数组下标添加元素,不能实时响应;
  2. Object.defineProperty 只能劫持对象的属性,从而需要对每个对象,每个属性进行遍历,如果,属性值是对象,还需要深度遍历。Proxy 可以劫持整个对象,并返回一个新的对象。
  3. Proxy 不仅可以代理对象,还可以代理数组。还可以代理动态增加的属性。

补充回答:Object.defineProperty 本身有一定的监控到数组下标变化的能力,但是在 Vue 中,从性能/体验的性价比考虑,尤大大就弃用了这个特性。

8. div 水平垂直居中

// 父元素
box {
    display: flex;
    justify-content: center;
    align-items: center;
}
// 绝对定位
.div {
    width: 200px;
    height: 200px;
    background: green;
    position:absolute;
    left:0;
    top: 0;
    bottom: 0;
    right: 0;
    margin: auto;   
}
// margin 负间距
div {
    width:200px;
    height: 200px;
    background:green;
    position: absolute;
    left:50%;
    top:50%;
    margin-left:-100px;
    margin-top:-100px;
}
// transform 变形
div {
    width: 200px;
    height: 200px;
    background: green;
    position:absolute;
    left:50%;    /* 定位父级的50% */
    top:50%;
    transform: translate(-50%,-50%); /*自己的50% */
}

9. 下面代码执行结果及原因

var a = {n:1}
var b = a;
a.x = a = {n:2}
console.log(a.x) // undefined
console.log(b.x)    // {n: 2}

考察运算符的优先级,虽然赋值是从右往左,但是.的运算符比=的优先级高。所以先执行a.x = {n: 2}再执行a = {n: 2}

10. 冒泡排序如何实现,时间复杂度是多少, 还可以如何改进?

var a = [11,2,55,123,88,3,67];
function bubbleSort(arr) {
    console.time(‘time‘)
	for (var i = 0; i < arr.length; i++) {
		for (var j = 0; j < arr.length - i - 1; j++) {
			if (arr[j] > arr[j + 1]){
				let temp = arr[j]
				arr[j] = arr[j + 1]
				arr[j + 1] = temp
			}
		}
	}
	console.timeEnd(‘time‘)
	console.log(arr)
	return arr
}
bubbleSort(a)
var a = [11,2,55,123,88,3,67];
function bubbleSort1(arr) {
	console.time(‘time‘)
	var i = arr.length - 1;
	while(i > 0) {
		let pos = 0;
		for (var j = 0; j < i; j++) {
			if (arr[j] > arr[j + 1]) {
				pos = j
				let temp = arr[j]
				arr[j] = arr[j + 1]
				arr[j + 1] = temp
			}
		}
		i = pos
	}
	console.timeEnd(‘time‘)
	console.log(arr)
	return arr
}
bubbleSort1(a)

 

原文:https://www.cnblogs.com/jialuchun/p/15268119.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!