1.1 走进 0 与 1
- 8位电路,最左侧的一条表示正负,0表示正数,1表示负数,最大 0111 1111,即127;则可以表示-128 ~ 127 的范围的数
- 正数的原码、反码、补码一致;
- 负数 原码:符号位为1,数值位同对应的正数的数位;反码: 除符号位对应原码取反;补码: 反码 +1
- 二进制整数最终以补码出现。
需要注意的是 -128的补码规定为 1000 0000,没有反码,原码; 这里面个人觉得需要体会的是“满” “溢”的思想,这里有一篇讲 -128 补码的问题;可以参下www.cnblogs.com/flowerslip/…
如: (35)+(-35)
= 0010 0011 + 1101 11101
= 10000 0000
= 0000 0000
= 0
- 1位,即1个bit,简写b; 8个bit组成一个字节,即1个Byte,简写B
- 位移运算,在左移<<与右移>>两种运算(
带符号位位移运算),符号位参与移动,除负数往右移动,高位补1之外,其余高位补0,在实际操作中 << 1 相当于 *2,而 >> 1,类似除2(低位舍去) >>>无符号位右移(注意不存在 <<< 左移的情况),当向右移动时,正负高位补0,正数不断向右移动的最小值是 0;负数不断向右移动最小值是1;- 实际编程中,位移运算仅作用于整型(32位)和长整型(64位)数上;整型移动的位数是一个mod 32的结果,即 35 >> 1 与 35 >> 33 是一样的结果
- 按位
或``(|),都为0,则为0; 按位与(&),都为1则为1;按位异或(^),相同为0,不同为1;按位取反(~),取反,
true ^ true = false
*逻辑与(&&)、逻辑或(||)都有短路功能
1.2 浮点数
计算机定义了两种小数,定点数 和 浮点数
1.2.1 科学计数法
- 如 a * 10 ^ n,也可以表示成aen,
1 <= |a| < 10
1.2.2 浮点数表示
- 符号位
- 阶码位
- 尾数位
1.2.3 加减运算
- 零值检测
- 对阶操作
- 尾数求和
- 结果规划化
1.2.4 浮点使用
在使用浮点数时推荐使用双精度;要求绝对精确的业务下,推进使用整型存储,如人民币用分,在数据库中保存小数时,推荐使用decimal类型,禁止使用float和double 类型
1.3 字符集与乱码
- ASCII: 26个英文大小写字母,10个数字,以及特殊字符,超过64(2^6)个,需要7组连续的信号标识,校验奇偶校验用一位(1bit),故8位基本满足英文字符的输入,即ASCII;
- GB2312: 一个字节(8bit,1bit做了使用)能标识128个字符。汉字个数较多,为兼容ascii,使用2字节,收录6763个常用汉字;
- GBK: 支持繁体,兼容gbk2312。
- Unicode: 为每种语言中的字符都设定了唯一编码,以满足跨语言交流的需要,分为编码方式和实现方式,其实现有三种: utf-8、utf-16、utf-32
- utf-8: 以字节为单位,针对Unicode的可变长度字符编码,用1~6个字节对unicode字符进行编码压缩,能用较少的字节表示最常用的字符
GBK编码,一个汉字占两个字节,一个英文字符占一个字节。UTF-8编码是变长编码,通常汉字占三个字节,扩展B区以后的汉字占四个字节,一个英文字符占一个字节;
1.5 TCP/IP
1.5.1 网络协议
TCP/IP 中文译为传输控制协议/英特网互联协议,这个大家族的还有HTTP、HTTPS、FTP、SMTP、UDP、ARP、PPP、IEEE802.x等
- TCP 分层框架
链路层: 以字节为单位,定义数据帧,写入源和目标机器的物理地址、数据、校验位。
MAC 地址长6个字符工48位,使用ifconfig-a 可查看MAC地址,如:f4:5c:89:ae:bd:23,f4:5c:89 即前24位管理机构统一分配,后24位由厂家自己分配,确保网卡全球唯一
网络层: 根据IP定义网络地址,区分网段,子网内根据地址解析协议(ARP)进行MAC寻址,子网外进行路由转发数据包,这个数据包即IP数据包- 传输层:数据包通过网络层发送到目标计算机后,确认身份,数据给应用程序,实现端口到端口通信。协议UDP TCP。
UDP 只是在IP数据包上加了端口等部分信息,面向无连接,不可靠,用于视屏通信、电话会议(少一帧无妨);
TCP 面向连接,是一种端到端通过失败重传机制建立的可靠数据传输方式
应用层:传输层的叔叔到达应用程序时,以某种统一规定的协议格式解读数据;SMTP 协议
总结数据发送过程:既定协议打包(应用层)-> 加上双方的端口(传输层)-> 加上双方IP地址(网络层)-> (链路层)加上双方MAC地址,并将数据查分成数据帧,经过多个路由器和网关后,到达目标机器。 "端口 —— IP地址 —— MAC地址" 进行数据的封装和返送,解包反之
1.5.2 IP协议
IP 面向无连接、无状态的,没有额外的机制保证发送的包是否有序到达。
- 协议结构比较简单,重点说 下数据包的生存时间,即 TTL ,它是数据包可经过的最多路由器总数。 TTL 初始值由源主机设置后,数据包在传输过程中每经过一个路由器 TTL 值则减 ,当该字段为 时,数据包被丢弃,并发送 ICMP 报文通知
源主机,以防止源主机无休止地发送报文
1.5.3 TCP建立连接
TCP:传输控制协议,是一种面向连接、确保数据在端到端间可靠传输的协议。
确保可靠传输:
对每一字节进行编号确认,校验每一数据包的有效性,超时重传,滑动窗口和拥塞控制等机制处理网络问题 TCP: FLAG位,置为1表示有效
- SYN: 用作建立连接时的同步信号
- ACK: 用于对收到的数据
进行确认,确认的数据由确认序列号表示 - FIN: 表示后面没有数据需要发送,意味着所建立的连接需要关闭
三次握手
- A 发出一个数据包并将SYN置为1。数据包的序列号为X
- B收到A的数据包后,通过SYN得知建立请求,相应发送一个数据包并将SYN和ACK置为1。包中序列号是Y,收到的包确认序列号必须是 x+1,表示收到A的SYN
- A 收到B的相应包后,需要发送确认包中ACK置1,并将确认序列号为y+1
三次握手的主要目的: 消息对等 和 防止超时脏连接(没有第三次握手,服务端只有等待)
1.5.4 TCP断开连接
TCP 是全双工通信,双方都能作为数据的发送方和接收方
四次挥手
- A 想要关闭连接,传递FIN信号给B
- B 应答ACK,告诉A可以断开,但需要等B处理完数据,在主动给A发送FIN信号。这时A处于半关闭状态(FIN_WAIT_2),无法在发送新的数据
- B 做好连接关闭前的准备工作后,发送FIN给A,此时B也进入半关闭状态。
- A 发送对B 的FIN的ACK后,进入TIME-WAIT状态,经过2MSL(Maximum Segment Lifetime)后,没有收到B传来的报文,则确定B已经A最后发送的ACK,此时TCP连接正式释放
1.5.5 连接池
我们使用连接来进行系统间交互;连接数的创建是受到服务器操作系统的fd(文件描述符)数量限制的。创建更多活跃的连接,需要消耗更多的fd,系统默认单个进程可同时拥有1024个fd,该值可以适当调整。
1.6 信息安全
1.6.1 黑客与安全
互联网企业信息安全体系,遵守CIA原则,即保密性(Confidentiality)、完整性(Intergrity)、可用性(Availability)
1.6.2 SQL 注入
预防
(1) 过滤特殊字符 (2) 禁止通过字符串拼接,严格使用参数绑定传入SQL参数 (3) 合理使用数据库访问框架,防止注入机制
1.6.3 XSS 与 CSRF
XSS 跨站脚本攻击 防范:对用户输入数据做过滤或者转义 CSRF 跨站请求伪造 防范:(1)CSRF Token验证,利用浏览器同源限制 (2)人机交互,校验短信等
1.6.5 HTTPS
-
DES 是对
称加密算法 -
SSL 安全套接字协议,作用于传输层于应用层之间
-
HTTPS 全称HTTP over SSL,HTTP传输上增加SSL协议的加密能力
-
RSA 将密码分成公钥和私钥,由于两个秘钥并不相同,所以称为
非对称加密