读书笔记-java开发手册

计算机基础

计算机网络协议

物理层
数据链路层:IEEE 802.x
网络层:IP ARP
传输层:TCP/UDP
应用层:HTTP FTP SMTP

IP协议

特点:面向无连接、无状态,没有额外机制保证发送的包是否有序到达。是唯一的。
IP
主要功能:在WLAN中进行寻址,选择最佳路由。
生存时间TTL:表示IP报文被丢弃之前可以经过的最大路由数量。初始值由源主机设定,每经过一个路由减一,直到为零时丢弃,并发送ICMP报文通知主机。
最大传输单元:MTU

ICMP

网络层协议,用于验证网络是否通畅、主机是否可达、路由是否可用。

TCP

传输控制协议:面向连接的,可靠的,端对端的传输协议。
三次握手&四次挥手
为什么要三次握手:1)信息对等 2)确保连接建立成功 3)防止已经失效的连接重新传到服务器出现脏连接。
为什么要四次挥手:确保信息已经传输完毕

HTTPS

1.客户端请求HTTPS网址建立连接,将支持的算法列表发送给服务端;
2.服务端选择其中一种加密方式,将自己的身份信息以证书的形式发送给客户端:证书包含网站地址、加密公钥以及证书颁发机构等信息。
3.客户端验证证书合法性,如果合法,客户端生成一串用于对称加密的随机数密钥,用证书中的公钥进行加密。并传送给服务端。
4. 服务端接收后用私钥进行解密,得到随机数密钥。客户端与服务器双方利用这个会话密钥加密要传输的数据进行通信。

信息安全

CIA原则:保密性、完整性、可用性。

SQL注入

1)过滤用户输入参数中的特殊字符
2)禁止通过字符串拼接的SQL语句,严格使用参数绑定传入的SQL参数。
3)合理使用数据库访问框架提供的防注入机制

XSS

跨站脚本攻击:向正常用户请求的HTML页面中插入恶意脚本。
防范:对用户输入数据做过滤或者转义

CSRF

跨站请求伪造:直接盗用用户身份执行黑客指定操作。
防范:1. CSRF Token验证。 2)增加人机交互

面向对象

面向对象 vs 面向过程
面向过程:有顺序的完成一件事。不利于软件维护和复用。
面向对象:以对象为中心,万物皆可对象。

面向对象三大特性:继承、封装、多态。

继承:关键字:extends。 子类继承父类的全部方法和属性
封装:public > protected > 无 > private
多态:根据实际的运行对象类型,同一个方法会产生不同的结果,使得同一个行为具有不同的表现形式。

抽象类 vs 接口

抽象类接口
关键字abstractinterface
继承或实现extendsimplements
方法实现可以有不能有,JDK8后运行有default
方法访问控制符无限制默认public abstract
属性访问控制符无限制默认public abstract
静态方法可以有JDK8后可以有
静态代码块可以有不能有

内部类
四种:

  1. 静态内部类:static class StaticInnerClass{};
    好处:作用域不会扩展到包外;可以通过外部类.内部类的方法访问;内部类可以访问外部类中的所有静态属性和方法。
  2. 成员内部类:private class InstanceInnerClass{};
  3. 局部内部类:定义在方法或者表达式内部。
  4. 匿名内部类:(new Thread(){}).start()

序列化

  1. java原生序列化:Serializable: 要显示定义serialVersionUID.
  2. Hessian序列化:支持跨语言
  3. Json序列化:在序列化过程中抛弃了类型信息。

泛型

E(element) 、T(type of Object)、K(key)、V(value)
优势:在编译期对类型进行检查,使得类型安全;提升可读性、代码复用

JVM

字节码

机器码:机器码就是cpu能够直接读取并运行的代码,用二进制编码表示,也叫做机器指令码。

字节码:字节码是一种中间状态的二进制代码,是由源码编译过来的,可读性没有源码高。而且cpu也不能够直接读取字节码,在java中,字节码需要经过JVM虚拟机转译成机器码之后,cpu才能够读取并运行。

java源文件变成字节码过程:.java -> .class
在这里插入图片描述
字节码执行方式

  1. 解释执行
  2. JIT编译执行
  3. JIT编译与解释混合执行(默认模式)

类加载过程

加载:通过全限定类名获取编译后的二进制字节流,将这个二进制字节流的静态存储结构转化为运行时数据;生成java.lang.Class对象作为方法区中这个类各种数据的入口。
验证:验证Class文件中包含的信息是否符合《java虚拟机规范》,是否会对自身安全产生威胁
准备:为静态变量分配内存并设置初始值
解析:将常量池中的符号引用替换为直接引用
初始化:执行类构造器<clinit>方法

加载器:
启动类加载器:lib目录下等
扩展类加载器/平台类加载器:lib/ext目录下
应用类加载器:用户类路径上所有的类库
双亲委派机制

内存

内存布局:
—线程私有----------------------------------
本地方法栈:为Native方法服务,因为java的作用范围达不到,需要调佣本地C语言库,进入本地方法栈,调用本地方法接口——JNI
java虚拟机栈:每个方法的从开始到执行结束,就是一个入栈到出站的过程。栈包括:局部变量表、操作栈、动态链接、方法返回等。
程序计数器:用来存放执行指令的偏移量和行号指示器,线程的执行和恢复依赖于程序计数器。
—线程共享----------------------------------
方法区(元空间):用于存储被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
:堆是在java内存中占用最大的一块,用来存放java实例。同时是垃圾收集器管理的内存区域,所以又被称为“GC堆”。

垃圾回收

标记-清除:将需要回收的对象进行标记,然后统一回收。
标记-整理:标记整理的标记过程与标记清除算法一样,但在进行对象回收清理时,会让所有存活的对象统一像内存空间的异端移动,然后直接清理掉边界以外的内存。
标记-复制:将堆内存按照8:1:1的方式划分成一个Eden和两个Survivor空间,每次只使用Eden和其中一个Survivor。发生内存回收后,将存活下来的对象一次性复制到的Survivor空间,清空这两个Eden和Survivor。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值