前言
博主投递了阿里巴巴 业务平台事业部 的 前端内推,但是还是要笔试。阿里的前端笔试编程难度不大,但是对于基础知识的考查十分仔细,挖死角,角度刁钻。
阿里笔试不允许切换界面,截图也不行;需保持摄像头的开启;编程面板为白板,回车也不带缩进的那种。。。。
把能记住的题目和自己的答案放上来,欢迎一起讨论。。。
笔试时长: 1h
一、单项选择题
-
以下事件中能监听 input 输入的内容变化的是:a
a. change
b. input
c. blur
d. hover
-
http 1.1 和 http2.1 大部分考 请求头
-
websocket 大部分考 请求头
-
BFC
二、不定项选择题
-
react 的生命周期函数中能使用 setState 的是:b
a.componentWillMount
b.componentDidMount
c.componentWillUpdate
d.componentDidUpdate
e.render
-
*关于Promise,下列说法正确的是:b d
a.Promise.resolve 返回一个 Promise 对象,状态为 fufilled
b.Promise.rejected 返回一个 Promise 对象,状态为 rejected
c. Promise.all 中当所有 Promise 为 fufilled 或 rejected 时,状态为 fufilled
d.Promise.race 中当有一个 Promise 为 fufilled 时,状态为 fufilled
e.Promise.all 的所有参数都要是Promise 对象
f.Promise.race 的所有参数都要是Promise 对象
-
关于异步,下列说法正确的是:微队列,宏队列,node 中的异步机制
-
关于node 的说法,下列说法正确的是:
三、编程输入题(白板)
- 根据规定生成二维数组
输入 column 和 target ;生成如下的 二维数组:
1.column: 4 target: 6
result: [
[1, 1, 1, 1],
[1, 1, 0, ‘’]
]
2.column: 3 target: 6
result: [
[1, 1, 1],
[1, 1, 1],
[0, 0, '’]
]
二维数组中1的个数刚好等于 target;
多出来的部分用0填充,并且最后一项必须是 字符串 ‘*’
function createMatrix(column, target) {
const matrix = [];
// 在此处输入你的代码
let count = 0;
while(count < target) {
const arr = [];
for(let i = 0;i < column;i++) {
if(count === target) {
arr.push(0);
} else {
arr.push(1);
count++;
}
}
matrix.push(arr);
}
// 考虑特殊情况
if(matrix[matrix.length - 1][column - 1] === 1) {
matrix.push(Array(column).fill(0));
}
matrix[matrix.length - 1][column - 1] = '*';
return matrix;
}
- 编写金额格式化功能函数 formateAmount
实现一个 formateAmount 函数,可以处理金额的格式
保留符号,小数点后两位,每三位加逗号
还需要判断是否为合法输入,如果输入不是金额,输出 ‘-’
例如:
formateAmount(23000000) => ‘23,000,000’
formateAmount(’-23.00000000’) => ‘-23.00’
formateAmount(‘2e6’) => ‘2,000,000’
formateAmount(‘Apple’) => ‘-’
function formateAmount(amount) {
// 在这里输入你的代码
let amountNum = Number(amount);
if (isNaN(amountNum)) {
return '-';
}
// 如果为负数
let symbol = '';
if (amountNum < 0) {
symbol = '-';
}
const amountStr = amount + '';
// 截取 整数部分
const intStr = (Math.abs(amountNum) + '').split('.')[0];
// 如果含有小数点
const floatStr = (amountStr.indexOf('.') !== -1) ? amountStr.split('.')[1] : '';
// 处理整数部分
let result = '';
const intLen = intStr.length;
for (let i = intLen - 1; i >= 0; i--) {
// 此处注意 下标是从大到小的
const index = intLen - i - 1;
if ((!(index % 3)) && index) {
result = ',' + result;
}
result = intStr[i] + result;
}
// 处理小数部分
const floatLen = floatStr ? floatStr.length : 0;
if(floatLen) {
result += '.';
}
for (let i = 0; i < 2 && i < floatLen; i++) {
result += floatStr[i];
}
return symbol + result;
}
- 如果你来设计淘宝H5的首页,在 Disabled cache 的情况下,怎么实现秒加载
当时想到的是 性能优化,图片处理懒加载 等。。。大佬说这个可能是考 PWA。。
继续努力!