首页 > 阿里云电话一面+笔试
头像
sumisu
编辑于 2021-04-06 10:11
+ 关注

阿里云电话一面+笔试

阿里云电话一面  (2021.3.12   33分钟)

1.模仿网易云音乐的项目,有遇到什么困难吗,怎么解决的呢?
2.js的闭包
3.为什么要有闭包,闭包解决了哪些问题?
4.es6中extends继承怎么实现的?
5.let,const,var有什么区别?
6.js里面有哪些基本类型?
7.es6新增哪些对象?多了哪些类型?
8.遍历数组的所有元素有哪些方法?这些遍历方法的使用场景上有什么差别?
9.有哪些场景是forEach替换不了for循环的?
10.讲讲项目中的vuex(又被问到了,下次要去了解一下)
11.vue里面双向数据绑定是怎么实现的? 开发者订阅者模式
12.具体讲讲js怎么实现开发者订阅者模式的呢?
13.addEventListener是js本身就提供的还是要自己实现的? (面试官说不是js本身提供的)
14.css样式有投入精力去学习吗?
15.布局有使用flex布局吗?
16.position:absolute定位是相对于哪个元素定位? 离它最近的已经定位了的父元素
17.那个父元素有什么特色?
18.两侧中间的布局方式1:2:1,能想到用哪样的方式去实现吗? 圣杯布局,flex布局
19.flex布局具体怎么写? flex-grow
20.学校里面没有教前端方面的课程,为什么选择学习前端?
21.计算机网络,对http协议有了解吗?
22.http2.0做了哪些优化比http1.0性能好?
23.请求的文本协议格式是?比如请求头由哪些组成?
24.get和POST请求有什么区别?
25.除了get和POST,还有哪些常见的请求方法?
26.head请求主要是用于什么场景下使用?
27.浏览器缓存,存储
28.sessionStorage和localStorage的主要区别?
29.localStorage中存的内容可以跨域访问吗?

反问环节:
建议:计算机基础要扎实,比如计算机网络,操作系统,数据结构等。需要有好奇心,对vue实现的功能。要深入理解一些框架底层原理。遍历数组的时候会如何选择方法之类。这些方面可以加强。
目前部门正在做的工作:前端业务应用的分类,给内部人员使用的平台 ,B端。用react做界面,交互,用前端方式简化用户的操作。


阿里云笔试(2021.3.17) 一个小时3道js编程题

// 题目一
// 函数防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
function debounce(func, wait) {
	let tm;
  return () => {
    clearTimeout(tm); //先清除定时器
    tm = setTimeout(func,wait); //再设置重新计时
  }
}


// 函数节流:规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
function throttle(func, wait) {
	let tm;
  return () => {
    if(tm) { //如果设置了tm,则说明已经触发过了,不再生效
      return;
    }
    tm = setTimeout( () => {
      func();
      tm = null;
    },wait);
  }
}


// 题目二设计一个算法,将一个二维数组中每一行作截断,截掉尾部连续为 null、undefined、"" 的部分,如:

// trim([
// [1, 2, 3, 0],
// [1, "a", 3, 0, "", undefined, null],
// ["a", "", "b", "c", null, "d", 0, null, ""],
// ])
// 得到的值为:

// [
// [1, 2, 3, 0],
// [1, "a", 3, 0],
// ["a", "", "b", "c", null, "d", 0],
// ]
function trim(source) {
	for(let i=0;i < source.length;i++){
    let len = source[i].length;
    let flag = 0; 
    for(let j=len-1;j >= 0;j--){
      if(source[i][j] !== "" &&  source[i][j] !== null && source[i][j] !== undefined){
        flag = 1; //遇到不为空的字符了
      }
      if(!flag && (source[i][j] === "" || source[i][j] === null || source[i][j] === undefined)){
        source[i].splice(j,1);
      }
    }
  }
  return source;
}

console.log(trim([
  [1, 2, 3, 0],
  [1, "a", 3, 0, "", undefined, null],
  ["a", "", "b", "c", null, "d", 0, null, ""],
]))


/** 题目三:
*# 请完成ECMAScript 2019中新增Array flat方法的polyfill版本实现
* ECMAScript 2019 新增的 Array 的 flat 方法,该方法将一个多维数组扁平化为一维,请你写一个 polyfill 实现该提案。示例代码如下:
* 多维数组扁平化
* @param depth {Number} 嵌套数组的深度,默认值为1
**/
// 示例
const arr1 = [1, [2, 3]];
console.log(arr1.flat());
// [1, 2, 3]
const arr2 = [1, [2, 3, [4]]];
console.log(arr2.flat());
// [1, 2, 3, [4]];
const arr3 = [1, [2, 3, [4]]];
console.log(arr3.flat(2));
// [1, 2, 3, 4];
const arr4 = [1, , [3, 4]];
console.log(arr4.flat());
// [1, 3, 4]
// 递归方式
Array.prototype.flat = function flat(depth) {
  // todo
  // your code here
  if(depth == undefined) { //嵌套数组的深度,默认值为1
    depth = 1;
  };
  
  let arr = []; //保存结果
  
  this.forEach((item) => {
    if(Array.isArray(item) && depth > 1) {
      arr = arr.concat(item.flat(depth-1),[]);
    }else {
      arr = arr.concat(item,[]);
    }
  })
  return arr;
}

都说牛客的许愿很灵,我也来一个。  许愿二面过!


更多模拟面试

全部评论

(5) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐