- nodejs事件循环
event.stopPropagation()
、event.preventDefault()
和event.stopImmediatePropagation()
stopPropagation()
阻止捕获和冒泡阶段中当前事件的进一步传播。但是,它不能防止任何默认行为的发生;例如,对链接的点击仍会被处理。preventDefault()
可以阻止事件触发后默认动作的发生。它也不能阻止附加到相同元素的相同事件类型的其它事件处理器。stopImmediatePropagation()
方法阻止监听同一事件的其他事件监听器被调用。
- cookie属性
- httpOnly可以防止XSS攻击
- sameSite可以防止CSRF攻击
- 默认端口
- telent(远程登录,明文传输):23
- ssh(加密):22
- http:80
- https:443
- ftp:20和21
- stmp(邮件):25
- pop2:109
- pop3:110
- imap:143
- 应用层协议
- 基于TCP的有FTP、Telnet、SMTP、HTTP、POP3与DNS
- 基于UDP的有TFTP、SNMP与DNS
- 其中DNS既可以基于TCP,也可以基于UDP。
- 输出题(Promise)
html
<div id="div1">
<div id="div2">
<div id="div3"></div>
</div>
</div>
<script>
const fn = () => {
return new Promise(resolve => {
setTimeout(resolve, 100);
})
}
const fn1 = async (e) => {
await fn();
e.stopPropagation();
console.log('1');
}
const fn2 = async (e) => {
console.log('2');
}
const fn3 = (e) => {
console.log('3');
setTimeout(() => {
e.stopPropagation();
})
}
document.getELementById('div1').addEventListener('click', fn1, true);
document.getELementById('div2').addEventListener('click', fn2);
document.getELementById('div3').addEventListener('click', fn3, true);
</script>
结果:3,2,1
- async/await是Promise的语法糖,基于Generator实现,在书写异步代码的时候更有优势,在异常处理上相比Promise反而没有优势,被async标记的函数总是会返回promise,即使里面没有await。
- 输出题
js
document.body.addEventListener('click', (e) => {
console.log('1');
});
document.body.addEventListener('click', (e) => {
e.stopPropagation();
console.log('2');
}, true);
结果:2
- 算法题
- 给一个数组,最开始在第一个元素的位置,有三种情况可以跳:
- 向前跳一步(i不越界即可)
- 向后跳一步(i不越界即可)
- 或者跳到下一个和它相等的元素的位置
- 求到达最后一个元素的最少次数。
- 例如:
[-123,-400,-123,100,489,23,888,100,23,-400]
- -123 前进一步到 -400,然后再跳一步到达最后的 -400,共两步。
- 给一个数组,最开始在第一个元素的位置,有三种情况可以跳:
js
const solve = (arr)=>{
let dp = Array(arr.length).fill(Infinity);
dp[0] = 0;
for(let i = 1; i < arr.length; i++){
dp[i] = Math.min(dp[i], dp[i - 1] + 1);
for(let j = i - 1; j >= 0; j--){
if(arr[i] === arr[j]){
dp[i] = Math.min(dp[i], dp[j] + 1);
}
}
for(let j = i - 1; j >= 0; j--){
dp[j] = Math.min(dp[j], dp[i] + i - j);
}
}
return dp[arr.length - 1];
}
console.log(solve([-123,-400,-123,100,489,23,888,100,23,-400]))