Java编程小知识

一、操作系统

1、进程和线程

(1)进程是容器,中有线程,进程中有逻辑内存(寻址空间),文件/网络句柄

(2)线程中有栈、PC(下一条指令的地址—指向内存)、TLS(独立内存,存放变量)

(3)进程之间无法相互通信,需要端口

2、存储和寻址

(1)从快到慢:寄存器、缓存、内存、硬盘

(2)寻址空间:指针可以取到的范围,32位—4G,32位系统可以使用4G

64位操作系统—约10……19Bytes

64位JVM—可以使用更大的内存,需要重新编译

(3)指针—指向逻辑内存,进程独立232或264----对应物理内存或者虚拟内存分页到虚拟内存

物理内存再次转向寄存器

3、网络基础–七层网络

(1)节点上—数据链路层(数据包)—网络层(路由器)—传输层(TCP/IP协议)-----应用层(email协议等)

(2)历史发展上迭代进化

不可靠、不安全:丢包、重复包,出差,乱序,中间人攻击、窃取、篡改

4、滑动窗口协议

(1)TCP协议中使用,维持发送方/接收包缓冲区

(2)当无滑动窗口时:发送包发送、确认,但吞吐量低

(3)将一部分包发送,确认后发送剩余未发送,然后读取剩下的包补上窗口

(4)参与流量和阻塞控制

5、网络抓包WireShark

二、数据库与事务

1、关系型数据库

(1)基础:基于关系代数理论

(2)缺点:表结构不直观,实现复杂,速度慢

(3)优点:健壮性高,社区庞大

2、事务

(1)ACID

Atomicity\Consistency\Isolation\Durability

(2)事务的隔离级别

Read uncommitted

Read Committed

Repeatable Reads

Serializable

三、数据

1、整数

32位int的范围: -2^31---2^31-1

2、浮点数

(1)符号位|指数部分|基数部分

浮点数比较 a==b ? ---错误 Math.abs(a-b)

3、Object

引用类型,用a==b判断是否为同一个Object

用a.equals(b)或Objects.equals(a,b)判断是否相等

4、数学归纳法

(1)用于证明断言对所有自然数成立

证明对于N=1成立

证明N>1时:如果对于N-1成立,那么对于N成立

(2)递归书写方法

严格定义递归函数作用,包括参数、返回值,side-effect

先一般,后特殊

每次调用必须缩小问题规模

每次问题规模缩小程度必须为1

5、递归开销

Stack:函数调用开销、Stack Overflow

循环控制:

(1)定义循环不变式,并在循环体每次结束后保持循环不变式

(2)先一般,后特殊

(3)每次必须向前推进循环不变式中涉及的变量值

(4)每次推进的规模必须为1

6、不可变性

(1)不可变对象Immutable Objects

可以引用传递,可以缓存

(2)线程安全

(3)final 关键字

类申明 ----类不可以被继承

函数申明----函数不可以在派生类中重写

变量申明----变量不可以指向其他对象

(4)static final变量----定义常量,名称一般大写

实现不可变性

Final关键字无法保证不可变性

从接口定义,类的实现上保证不可变性