前端基础
html
1 | |
body中就是各种编辑页面的标签了
a标签
- target=”_blank”,意为在新窗口打开链接
- 锚点—可以在另一个标签加上id,如
<p id='use'>come</p>...<a href="#use">qqq</a>,点击qqq就会跳转到come <a href="#">qqq</a>回到页面顶部style="text-decoration:none;消除链接下划线href="javascript:;""避免默认跳转,相当于执行空js片段,可以用js的onclick -> e.preventDefault();达到相同的效果,阻止默认事件。1
2
3
4
5
6
7<a id="click" href='#'>Click Me!</a>
<script>
document.getElementById("click").onclick = function(e){
// 屏蔽原始事件
e.preventDefault();
}
</script>href="javascript:void(0);"一样,void 0其实就是undefined,不过更安全,因为undefined不是关键字。void 0 === undefined
html5新元素
- header nav section footer article aside
各层协议
应用层
- 超文本传输协议(HTTP):万维网的基本协议;
- 文件传输(TFTP简单文件传输协议);
- 远程登录(Telnet),提供远程访问其它主机功能, 它允许用户登录internet主机,并在这台主机上执行命令;
- 网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法, 以及配置管理,统计信息收集,性能管理及安全管理等;
- 域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址。
传输层(tcp、udp)
TCP
TCP 提供一种面向连接的、可靠的字节流服务
在一个 TCP 连接中,仅有两方进行彼此通信
tcp保证数据可靠性:
使用校验和,确认和重传机制来保证可靠传输
数据包编号,每个数据包都包含下一个包编号,如果收到连续三个一样的ack或者超时没有收到ack就会确认丢包,从而重传
使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
流量控制:
是利用灵活可变的滑动窗口控制流量,是为了解决发送数据扩快导致接收方来不及接收的问题。
具体是消息接收方会发送流量控制报文,通知发送方窗口大小,发送方发送的数据大小不能超过窗口大小。
拥塞控制:
拥塞控制,是为了避免过多的流量注入网络使得网络过载。具体方法包括:慢开始、拥塞避免、快重传和快恢复。
慢开始:刚开始建立连接的时候,发送窗口大小为1,然后逐步增加窗口的大小,如每次加倍。
拥塞避免:当发送窗口达到一个门限值之后,窗口大小不再每次加倍,而是每次+1,减缓窗口增大速度。
快重传: 快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期,这是因为此时网络状况良好,可以立即重传。
快恢复:执行“乘法减小”算法将发送窗口门限值减半,以门限值为起点(而非0值),然后执行拥塞避免算法。
三次握手:
浏览器发送有syn和seq的连接请求,并进入syn_send状态
服务器接收并回应ack和syn,然后进入syn_rcvd状态
浏览器再次发送确认
为什么三次握手:如果有一个之前废弃的链接突然像服务器重新发起了请求,服务器发送确认就代表链接建立了,然而浏览器并不会发送数据,这个链接就浪费了资源。
所以要三次握手建立可靠的链接。
四次挥手:
客户端发送fin包进入fin_wait状态
服务器接收信息并返回确认包,表明自己收到了请求但是还没准备关闭链接
服务器准备关闭连接,向客户端发送断开请求
客户端收到请求并返回一个确认ack包,服务期收到后就关闭连接,客户端等待两个周期后再关闭连接(防止出现重传)
为什么四次挥手,主要在第二次确认,服务器需要表示先知道了你的请求,但是我要把传送的数据发送完再告知断开连接。
可能出现的攻击
syn攻击:短时间发送大量不同ip的syn包,让正常的syn无法生效
TCP KeepAlive
真实情况会有很多意外断开tcp链接,但是另一方可能不知道,所以会隔一段时间发送一个探测包,如果收到回应就正常连接,如果还多次没有回应,则认为链接已经作废。
UDP
udp是无连接的,是尽力交付的,没有拥塞控制,支持一对一一对多,可能发生拥塞,导致大家都看不到。
网络层
- Internet协议(IP);
- Internet控制信息协议(ICMP);
链路层
- 地址解析协议(ARP);
- 反向地址解析协议(RARP)
进程与线程
进程:
系统进行资源分配和调度的基本单位,是正在运行的程序的实例,唯一标识符是PCB
进程终止,其子孙进程也全都终止,防止出现不可控进程
进程至少有 5 种状态:初始态、执行态、等待态、就绪态、终止态
线程:
独立运行和独立调度的基本单位,它可以和同一进程下的其他线程共享全部资源
区别与联系:
线程是进程中的一部分,一个进程可以有多个线程,但线程只能存在于一个进程中
开销方面:进程都有自己的独立数据空间,程序之间的切换开销大;线程也有自己的运行栈和程序计数器,线程间的切换开销较小。
共享空间:进程拥有各自独立的地址空间、资源,所以共享复杂,需要用IPC(Inter-Process Communication,进程间通信),但是同步简单。而线程共享所属进程的资源,因此共享简单,但是同步复杂,需要用加锁等措施。