Skip to content
On this page
  • 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]))

MIT Licensed | Copyright © 2021 - 2022