阿里巴巴CBU技术部 前端实习一面凉经
面试时间:2021年7月13日 16:30
面试形式:在线网站写算法题+电话面试
面试时长:40min笔试+35min面试
面试感受:这种形式第一次见,到面试时间点,面试官给我的邮箱发一个测评网站,给我打电话让进入这个系统,给40分钟时间做三道题,可以使用本地IDE再粘贴上去,但是他可以实时看到系统界面。40分钟后打电话让讲讲算法的思路,讲了好一会儿我以为面试结束了,结果说现在我们正式开始面试吧 : ( 我还是太菜了,很多问题回答不上来,秋招再来试试吧。面试官态度很好,一直说没关系,试图找到一个我可以回答上来的问题,笑死根本找不到🤣
面试题目:
一、算法题
1.
/**
* 找出数组中第k大和第m大的数字相加之和
* 说明:实现一个方法,找出数组中第k大的和第m大的数字相加之和
* 示例:
* let arr = [1,2,4,4,3,5], k = 2, m = 4
* findTopSum(arr, k, m); // 第2大的数是4,出现2次,第4大的是2,出现1次,所以结果为10
*/
2.
/**
* 实现一个节流函数
* 节流是JS中重要的概念,尝试实现一个节流函数——它返回一个新函数,新函数即时连续多次执行,
* 但也只限制在`wait`的时间执行一次。并要求此节流函数第一次运行就会执行fn
*/
const throttle = (fn, wait) => {
}
3.
/**
* 获取嵌套数组深度
* 说明:给定一个带嵌套的数组,实现一个方法可获取嵌套数组的最大深度,
* 数组无嵌套子数组,则返回0,有一层嵌套子数组则1,依此类推。
* 示例:
* getArrayDeep([1, 2, [3, [1, [0]]]]); // 返回 3
* getArrayDeep([]); // 返回 0
* getArrayDeep([[[[]]]]); // 返回 3
* getArrayDeep([0, [2], [2, [3]]]); // 返回 2
*/
function getArrayDeep(a) {
}
讲算法思路额外问到的问题:
快排在最好情况和最坏情况下的时间复杂度是怎样的
apply和call有什么区别
二、面试题
1.作用域和作用域链
2.浏览器垃圾回收
3.宏任务、微任务
setTimeout(()=>{
console.log('2')
})
new promise().then(()=>{
console.log('3')})
console.log('4')
执行结果是什么?
4.Hook为什么不能用在if语句或循环中
5.dom元素写ref=XXX是什么意思
6.CSS画一个边长小于1px的线段或div怎么实现
#实习##面经##前端工程师#1.
/**
* 找出数组中第k大和第m大的数字相加之和
* 说明:实现一个方法,找出数组中第k大的和第m大的数字相加之和
* 示例:
* let arr = [1,2,4,4,3,5], k = 2, m = 4
* findTopSum(arr, k, m); // 第2大的数是4,出现2次,第4大的是2,出现1次,所以结果为10
*/
2.
/**
* 实现一个节流函数
* 节流是JS中重要的概念,尝试实现一个节流函数——它返回一个新函数,新函数即时连续多次执行,
* 但也只限制在`wait`的时间执行一次。并要求此节流函数第一次运行就会执行fn
*/
const throttle = (fn, wait) => {
}
3.
/**
* 获取嵌套数组深度
* 说明:给定一个带嵌套的数组,实现一个方法可获取嵌套数组的最大深度,
* 数组无嵌套子数组,则返回0,有一层嵌套子数组则1,依此类推。
* 示例:
* getArrayDeep([1, 2, [3, [1, [0]]]]); // 返回 3
* getArrayDeep([]); // 返回 0
* getArrayDeep([[[[]]]]); // 返回 3
* getArrayDeep([0, [2], [2, [3]]]); // 返回 2
*/
function getArrayDeep(a) {
}
讲算法思路额外问到的问题:
快排在最好情况和最坏情况下的时间复杂度是怎样的
apply和call有什么区别
二、面试题
1.作用域和作用域链
2.浏览器垃圾回收
3.宏任务、微任务
setTimeout(()=>{
console.log('2')
})
new promise().then(()=>{
console.log('3')})
console.log('4')
执行结果是什么?
4.Hook为什么不能用在if语句或循环中
5.dom元素写ref=XXX是什么意思
6.CSS画一个边长小于1px的线段或div怎么实现