进程间通信方式
管道、有名管道、共享内存、消息队列、信号、信号量、套接字
JVM内存模型
私有:程序计数器、本地方法栈、虚拟机栈
公有部分:堆、方法区
equals和hashcode有什么区别和联系?
equals默认比较两个对象的引用,但是实际需要更多的是判断两个对象的值是否相等,所有我们通常要进行重写
hashcode是返回对象的哈希码值,而这个哈希码值默认是对地址的哈希,如果equals进行了重写,则hashcode必须重写
在HashMap我们先通过hashcode来找出对象在数组中的位置,再通过equals来比较是否相等,可以减少equals的调用次数
为什么栈内存的空间使用效率高于堆内存?
- 栈内存管理简单,不需要进行垃圾回收
- 栈内存操作是顺序的,分配非常快
- 不容易产生内存碎片
为什么内存访问速度高于磁盘?
- 存储介质和技术差异 两种不同的存储介质,工作原理和技术特性存在很大差异。内存通常使用半导体技术制造。而磁盘则依赖机械或基于闪存的技术来读写数据。
- 访问延迟 内存可以直接通过电子信号访问。磁盘访问涉及到寻道时间、旋转延迟以及数据传输时间。
- 数据传输速率 内存的数据传输速率通常比磁盘高得多。内存--高速总线--CPU通信,而磁盘--I/O控制器--总线或网络--CPU。
- 缓存机制 现代计算机系统使用多层次缓存来提高数据访问速度。CPU缓存是最接近处理器的高速缓存,访问速度极快。还有L2和L3缓存层,缓存层可以进一步减少从内存到CPU的数据传输时间。而磁盘数据通常需要通过内存缓冲区或其他形式的缓存来加速访问。
- 并发访问能力 内存支持并发访问,可以同时处理多个请求。而磁盘的并发访问能力相对较弱。
- 数据组织 内存中的数据组织更为紧凑,通常按照页或段的方式组织。而磁盘上的数据可能会因为碎片化而分布在不同的物理位置。
http各版本的比较
1.0和1.1
1.1支持长连接,引入更多的状态码如409、410,引入多种缓存机制,允许请求部分更节省带宽,并且Host可以设置多个域名
2.0支持多路复用,HPACK头部压缩,服务器推送和二进制帧传输
3.0引入了quik协议,连接建立只需要0次或1次握手,利用多个数据流解决了队头阻塞问题,使用HPACK算法来进行头部压缩,有更好的错误恢复和安全性
UDP如何解决丢包问题?
UDP本身是无状态的,但是可以通过再应用层引入一些机制来保证可靠性
序列号机制、ACK机制、超时重传、冗余数据、多路传输、心跳机制
UDP传输效率为什么高?
无连接,减少握手过程延迟
头部开销比TCP小
不提供确认机制,减少往返通信次数
无流量/拥塞控制,最大化利用网络带宽
较少的错误检测
数据库三大范式
- 表中的字段不能再被分割,只能是一个值
- 消除了非主属性对码的部分函数依赖
- 消除了非主属性对码的传递函数依赖