阿里云电话一面 (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) 回帖