阿里国际 ae 1面

2024.9.12

阿里国际 ae 一面

1、问题:请至少写 4 种 CSS 方案实现元素垂直和水平居中

<div class="box center1 center2">
	<div class="inner inner3">33</div>
</div>

<style>
	.box {
		width: 200px;
		height: 200px;
	}
	.inner {
		width: 50px;
		height: 50px;
	}

	.center1 {
		text-align: center;
		/* 比较新的css支持 */
		align-content: center;
	}

	.center2 {
		display: flex;
		/* grid 也可以 */
		align-items: center;
		justify-content: center;
	}

	.center3 {
		display: relative;
	}
	.inner3 {
		display: absolute;
		top: 0;
		right: 0;
		left: 0;
		bottom: 0;
		margin: auto;
	}

	.center4 {
		display: relative;
	}
	.inner4 {
		display: absolute;
		top: 50%;
		left: 50%;
		transform: translate(-50%, -50%);
	}
</style>

2、问题:下面代码输出为 true 的是?

A. console.log([] === []);B. console.log(undefined == 0);C. console.log(undefined == false);D. console.log(false == '');

D, 没问题

3、问题:以下哪项可以去除变量 str 中的所有空格

A. str.replace(/\s*/g,"")B. str.replace(/^\s|\s$/g,"")C. str.replace(/^\s*/, "")D. str.replace(/(\S*$)/g, "")

A,没问题

4、问题:请回答以下代码执行结果

console.log('同步代码 1')

setTimeout(() => {
	console.log('setTimeout')
}, 0)

new Promise((resolve) => {
	console.log('同步代码 2')
	resolve()
}).then(() => {
	console.log('promise.then')
})

console.log('同步代码 3')

<!-- 同步代码1 --><!-- 同步代码2 --><!-- 同步代码3 --><!-- promise.then --><!-- setTimeout -->

5、问题:请回答点击 content 后以下代码的执行结果

<div id="box1">
	<div id="box2">content</div>
</div>
<script>
	const $ = document.querySelector.bind(document)
	const box1 = $('#box1')
	const box2 = $('#box2')
	box1.addEventListener(
		'click',
		() => {
			console.log('box1 true')
		},
		true,
	)
	box1.addEventListener(
		'click',
		() => {
			console.log('box1 false')
		},
		false,
	)

	box2.addEventListener(
		'click',
		() => {
			console.log('box2 true')
		},
		true,
	)
	box2.addEventListener(
		'click',
		() => {
			console.log('box2 false')
		},
		false,
	)
</script>

<!-- box2 false -->

错了,重复注册不会被覆盖,会都执行,正确的后面看看

6、问题:请回答以下 TS 代码的执行结果。如果有错误 请描述出来。

var user = {
	level: null,
	level1: 0,
}
var level1 = user.level ?? '暂无等级' // 暂无等级
var level2 = user.other_level ?? '暂无等级' // 暂无等级
var level3 = user.level1 ?? '暂无等级' // 0
console.log(level1, level2, level3)

var num = 2 ** 3
console.log(num)

// 暂无等级 暂无等级 0// 8

分析没问题,但是 level2 应该是报错

7、问题:请修改以下代码,在控制台中每隔 1s 打印数组中的一个元素,直到最后一个元素打印完成

var arr = [1, 2, 3, 4, 5]

for (var i = 0; i < arr.length; i++) {
	setTimeout(function () {
		console.log(arr[i])
	}, 1000)
}

var arr = [1, 2, 3, 4, 5]

for (let i = 0; i < arr.length; i++) {
	setTimeout(function () {
		console.log(arr[i])
	}, 1000)
}

有点问题,1000 也应该处理一下,不然都是一次性打印出来了

8、问题:如何在 setInterval 中读取最新的 count 值? 如何让 num 可以递增?

import { useEffect, useState } from 'react'

export default function App() {
	const [num, setNum] = useState(0)
	const [count, setCount] = useState(0)

	useEffect(() => {
		setCount(1)
		setInterval(() => {
			console.log(count)
			setNum(num + 1)
		}, 500)
	}, [])

	console.log('num:', num)
	return null
}

import { useEffect, useState } from 'react'

export default function App() {
	const [num, setNum] = useState(0)
	const [count, setCount] = useState(0)

	useEffect(() => {
		setCount(1)
		setInterval(() => {
			// setCount接受的变量直接传给下面这个
			console.log(count)
			setNum((num) => num + 1)
		}, 500)
	}, [])

	console.log('num:', num)
	return null
}

没啥问题

9、问题:如何实现以下方法调用

add(1, 2)(3) //6;
add(1)(2, 3) //6;

const add = (a, b, c) => a + b + c

const curry = (fn) => {
	const newFn = (...rest) => {
		if (rest.length >= fn.length) {
			return fn(...rest)
		} else {
			return (...newRest) => newFn(...rest, ...newRest)
		}
	}
	return newFn
}

const curriedAdd = curry(add)
curriedAdd(1, 2)(3) //6;
curriedAdd(1)(2, 3) //6;

柯里化,没啥问题,问了我想写 js 实现还是算法,选的 js 实现后出的这一题

全部评论
佬,是不是打电话过来,钉钉面的,没发邮件
点赞 回复 分享
发布于 09-15 19:30 福建

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务