5.15 拼多多笔试
三个题目
1. Promise
有两个信号0和1。
- 先发送信号 1
- 200ms 后发送信号 0
- 100ms 后发送信号 1
- 150ms 后发送信号 0
- 在 300ms 重复以上过程 5 次
var delay = function(s) {
retrun new Promise(function(resolve, reject) {
setTimeout(resolve, s);
});
};
var n = 5;
while(n--){
delay().then(function(){
Signal(1);
return delay(200);
}).then(function(){
signal(0);
return delay(100);
}).then(function(){
signal(1);
return delay(150);
}).then(function(){
signal(0);
return delay(300);
})
}
2. 链表实现大整数加法
有两个链表 Listnode,头指针代表这个大整数的个位,往后是十位、百位,以此类推。用链表实现大整数加法。
// Listnode a, Listnode b 代表两个多位正整数;
var function plus(a, b){
var sum = new Listnode;
sum.head = a.head + b.head;
while (a.next || b.next) {
sum.next = a.next + b.next;
}
retrun sum;
}
3. Dom操作
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
</ul>
有一个列表,默认背景为白色。
- 进入 ul 时,里面的 li 变为灰白相间的颜色;
- 进入 li 时,li 变成浅黄色;
- 离开 li 还在 ul 内部时,恢复到 1 的情况;
- 离开 ul 时变成全白。
使用鼠标事件
// 获取UL元素
var ul = document.getElementsByTagName('ul')[0];
// 获取所有LI元素
var liArr = ul.getElementsByTagName('li');
// 1. 当鼠标移入UL时,按Li的奇偶将背景颜色设置为灰色和白色
ul.onmouseover = function() {
for (var i = 0; i < liArr.length; i++) {
if (i % 2 === 0) {
liArr[i].style.backgroundColor = '#f2f2f2'; // 设置偶数项的背景色为 #f2f2f2
} else {
liArr[i].style.backgroundColor = '#fff'; // 设置奇数项的背景色为 #fff
}
}
};
// 2. 当鼠标移入特定Li时,对应的背景颜色设置为浅黄色
for (var i = 0; i < liArr.length; i++) {
liArr[i].onmouseover = function() {
this.style.backgroundColor = '#ffffe0'; // 设置当前LI元素的背景色为 #ffffe0
}
// 3. 如果鼠标移出了LI,但还在UL内部时,恢复1所描述的背景颜色;
liArr[i].onmouseout = function() {
ul.onmouseover();
}
}
// 4. 如果鼠标移出了UL则全部变回白色背景。
ul.onmouseout = function() {
for (var i = 0; i < liArr.length; i++) {
liArr[i].style.backgroundColor = '#fff'; // 设置所有LI元素的背景色为 #fff
}
};