一、java
1.JVM的GC机制:
(1)哪些内存需要回收?
堆和方法区,程序计数器、虚拟机栈、本地方法栈3个区域是随线程而生,随线程而灭的
(2)什么时候回收?
判断对象是否可以回收,有两种比较经典的判断策略。
- 引用计数算法,count+1-1,=0时失效
- 可达性分析算法,为起点开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots 没有任何引用链相连时。
(3)如何回收?
- 标记-清除(Mark-Sweep)算法,大量不连续的内存碎片
- 复制(Copying)算法,(新生代)当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。
- 标记-整理(Mark-Compact)算法,(老生代)让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
二、操作系统
1.死锁
(1)四个必要条件
互斥条件:资源是独占的且排他使用
不可剥夺条件:不被其他进程强行剥夺
请求和保持条件:在申请新的资源的同时,继续占用已分配到的资源
循环等待条件:进程等待队列形成一个进程等待环路
死锁预防:
(不可剥夺条件)不能获得所需要的全部资源时便处于等待状态,等待期间可以被剥夺
(请求与保持条件)每个进程在开始执行时就申请他所需要的全部资源
(循环等待)将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行
死锁避免:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。
2.进程间通信
(1)管道pipe:管道是一种半双工的通信方式
(2)消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。
(3)共享内存:映射一段能被其他进程所访问的内存
(4)套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
三、计网
1.输入网址到显示
1、输入网址
2、DNS解析获取域名对应的IP地址
3、建立TCP连接
4、web浏览器向web服务器发送HTTP请求
5、服务器的永久重定向响应
6、浏览器跟踪重定向地址
7、web服务器做出应答
8、浏览器显示 HTML
9、浏览器发送请求获取其他嵌入在 HTML 中的资源
10、web服务器关闭TCP连接
2.三次握手、四次挥手
(1)握手
A:在吗?上号吗? B:在的,上号 A:上号
如果是两次:
A:在吗?上号吗?
B:在的,上号
此时A把B鸽了,B白白等了半天
(2)挥手
Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。
多了一次:当Server端收到FIN报文并返回ACK报文段,表示它已经知道Client端没有数据发送了,但是Server端还是可以发送数据到Client端的,所以Server很可能并不会立即关闭SOCKET,直到Server端把数据也发送完毕。
(3)为什么要等待2MSL?
第一点:保证TCP协议的全双工连接能够可靠关闭:
第二点:保证这次连接的重复数据段从网络中消失
四、数据库
1.事务隔离级别
脏读:指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚
不可重复读(Update):指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的
幻读(Insert):假设事务A对某些行的内容作了更改,但是还未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,会发现好像刚刚的更改对于某些数据未起作用。