Java编程小知识
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)<eps
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关键字无法保证不可变性
从接口定义,类的实现上保证不可变性