- 计算机基础
- 计算机网络协议
- IP协议
- ICMP
- TCP
- HTTPS
- 信息安全
- SQL注入
- XSS
- CSRF
- 面向对象
- 类
- 泛型
- JVM
- 字节码
- 类加载过程
物理层
数据链路层:IEEE 802.x
网络层:IP ARP
传输层:TCP/UDP
应用层:HTTP FTP SMTP
特点:面向无连接、无状态,没有额外机制保证发送的包是否有序到达。是唯一的。
主要功能:在WLAN中进行寻址,选择最佳路由。
生存时间TTL:表示IP报文被丢弃之前可以经过的最大路由数量。初始值由源主机设定,每经过一个路由减一,直到为零时丢弃,并发送ICMP报文通知主机。
最大传输单元:MTU
网络层协议,用于验证网络是否通畅、主机是否可达、路由是否可用。
TCP传输控制协议:面向连接的,可靠的,端对端的传输协议。
三次握手&四次挥手
为什么要三次握手:1)信息对等 2)确保连接建立成功 3)防止已经失效的连接重新传到服务器出现脏连接。
为什么要四次挥手:确保信息已经传输完毕
1.客户端请求HTTPS网址建立连接,将支持的算法列表发送给服务端;
2.服务端选择其中一种加密方式,将自己的身份信息以证书的形式发送给客户端:证书包含网站地址、加密公钥以及证书颁发机构等信息。
3.客户端验证证书合法性,如果合法,客户端生成一串用于对称加密的随机数密钥,用证书中的公钥进行加密。并传送给服务端。
4. 服务端接收后用私钥进行解密,得到随机数密钥。客户端与服务器双方利用这个会话密钥加密要传输的数据进行通信。
CIA原则:保密性、完整性、可用性。
SQL注入1)过滤用户输入参数中的特殊字符
2)禁止通过字符串拼接的SQL语句,严格使用参数绑定传入的SQL参数。
3)合理使用数据库访问框架提供的防注入机制
跨站脚本攻击:向正常用户请求的HTML页面中插入恶意脚本。
防范:对用户输入数据做过滤或者转义
跨站请求伪造:直接盗用用户身份执行黑客指定操作。
防范:1. CSRF Token验证。 2)增加人机交互
面向对象 vs 面向过程
面向过程:有顺序的完成一件事。不利于软件维护和复用。
面向对象:以对象为中心,万物皆可对象。
面向对象三大特性:继承、封装、多态。
继承:关键字:extends。 子类继承父类的全部方法和属性
封装:public > protected > 无 > private
多态:根据实际的运行对象类型,同一个方法会产生不同的结果,使得同一个行为具有不同的表现形式。
抽象类 vs 接口
| 抽象类 | 接口 | |
|---|---|---|
| 关键字 | abstract | interface |
| 继承或实现 | extends | implements |
| 方法实现 | 可以有 | 不能有,JDK8后运行有default |
| 方法访问控制符 | 无限制 | 默认public abstract |
| 属性访问控制符 | 无限制 | 默认public abstract |
| 静态方法 | 可以有 | JDK8后可以有 |
| 静态代码块 | 可以有 | 不能有 |
内部类
四种:
- 静态内部类:static class StaticInnerClass{};
好处:作用域不会扩展到包外;可以通过外部类.内部类的方法访问;内部类可以访问外部类中的所有静态属性和方法。 - 成员内部类:private class InstanceInnerClass{};
- 局部内部类:定义在方法或者表达式内部。
- 匿名内部类:(new Thread(){}).start()
序列化
- java原生序列化:Serializable: 要显示定义serialVersionUID.
- Hessian序列化:支持跨语言
- Json序列化:在序列化过程中抛弃了类型信息。
E(element) 、T(type of Object)、K(key)、V(value)
优势:在编译期对类型进行检查,使得类型安全;提升可读性、代码复用
机器码:机器码就是cpu能够直接读取并运行的代码,用二进制编码表示,也叫做机器指令码。
字节码:字节码是一种中间状态的二进制代码,是由源码编译过来的,可读性没有源码高。而且cpu也不能够直接读取字节码,在java中,字节码需要经过JVM虚拟机转译成机器码之后,cpu才能够读取并运行。
java源文件变成字节码过程:.java -> .class
字节码执行方式
- 解释执行
- JIT编译执行
- JIT编译与解释混合执行(默认模式)
加载:通过全限定类名获取编译后的二进制字节流,将这个二进制字节流的静态存储结构转化为运行时数据;生成java.lang.Class对象作为方法区中这个类各种数据的入口。
验证:验证Class文件中包含的信息是否符合《java虚拟机规范》,是否会对自身安全产生威胁
准备:为静态变量分配内存并设置初始值
解析:将常量池中的符号引用替换为直接引用
初始化:执行类构造器
加载器:
启动类加载器:lib目录下等
扩展类加载器/平台类加载器:lib/ext目录下
应用类加载器:用户类路径上所有的类库
双亲委派机制



