1、Java快速失败和安全失败
1、快速失败:两个线程A读一个集合内容B去更新相同集合的内容会报ConcurrentModificationException的错误。
原因是:集合框架内部针对每个元素偶个modCount如果元素值改变,modCount会改变,如使用hashNext()/next()遍历到modCount改变的元素(每次迭代会比较是否为自己心仪的modConut)就会报错。
2、安全失败:拷贝原集合然后再迭代
原因:因为迭代时候是对原集合的拷贝进行遍历因此在遍历过程中对原集合所作的修改并不能被迭代器检测到,CopyOnWriteArrayList就是此原理(JUC下面全部是安全失败)
2、SpringMVC执行过程
1、客户端将请求发送前端DispatcherServlet处理负责调用其他模块处理用户请求
2、DispatcherServlet根据请求的信息和HandlerMapping配置找到处理该请求的Handler
3、HandlerAdapter是适配器,用统一的接口对各种Handler中方法进行调用
4、完成用户请求处理后会得到一个ModelAndView(包含数据模型和相应的视图信息)对象给DispatcherServlet
5、ModelAndView是逻辑视图,DispatcherServlet借助ViewResolver完成逻辑视图到真实视图对象的解析工作
6、得到真正视图对象后DispatcherServlet利用视图对象对模型数据进行渲染
3、TCP的阻塞控制
拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:(1)慢开始、拥塞避免;(2)快重传、快恢复。
4、finalize
finalize工作流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。
5、time_wait、close_wait
TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间约4分钟。主要是防止最后一个ACK丢失。 由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接。
CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。
6、B树和B+树
- B+树的非叶子节点不记录数据本身,只记录引用的连接,并且结点中仅含有其子树中的最大(或最小)关键字。基于此特点B+树在非叶子节点的文件会非常小
- B+树的所有的叶子结点中包含了全部关键字的信息
- 3.B+树的每个叶子节点都有指向相邻的下一个兄弟叶子节点的指针且叶子结点本身依关键字的大小自小而大顺序链接。基于此特点B+树在范围查询上的效率比B树高了很多;
- 这条区别是有争议的,有人说B+树的节点中关键字和子节点个数相同,也有人说B+树和B树一样关键字比子节点少一个
3386

被折叠的 条评论
为什么被折叠?



