摘要:
【参考文章】:面试必备之乐观锁与悲观锁 1. 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 Java中 阅读全文
摘要:
【参考文章】:TCP/IP四层模型 【参考文章】:深入理解 TCP 协议:从原理到实战 一. TCP/IP参考模型示意图 ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。 如图所示,是TCP/IP参考模型和OSI参考模型 阅读全文
摘要:
1. Bean的生命周期 1. 实例化:Spring对bean 进行实例化; 2. 填充属性:Spring将值和bean 的引用注入到 bean 对应的属性中; 3. 如果bean 实现了 BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法; 4. 如 阅读全文
摘要:
一. 连接过程示意图 二. 建立TCP连接 2.1 三次握手 2.1.1 第一次握手 建立连接。客户端发送连接请求报文段,将SYN置为1,Sequence Number为 x;然后,客户端进入SYN_SEND状态,等待服务端的确认; 2.1.2 第二次握手 服务端收到SYN报文段。服务器收到客户端的 阅读全文
摘要:
1. 结构概述 1.1 整体结构 1.2 分层描述 1.2.1 Executor(顶级接口) 定义执行任务的方法; 执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建 阅读全文
摘要:
一. IO 传统的IO是同步阻塞模式,数据的读取与写入会阻塞在一个线程内等待其完成。 主要面向字节流编程。(流是单向的) 二. NIO NIO支持同步非阻塞模式,在进行IO调用后,然后去 轮询调用结果。调用返回期间可以进行其他操作。 主要面向缓冲区编程。(管道是双向的) 一般是将多个channel( 阅读全文
摘要:
一. 概念 布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。 当布隆过滤器说某个值存在时,这个值可能不存在;当它说 阅读全文
摘要:
参考文章:缓存穿透、缓存击穿、缓存雪崩概念及解决方案 一. 缓存击穿 1. 概念 缓存击穿指的是大量的请求同时查询一个 key 时,此时这个key正好失效了,所有请求击穿到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。 2. 解决方案 直接加锁:当缓存未命中,则从数据库获取数据并 阅读全文
摘要:
1. 概述 JDK1.6版本花费了大量精力去实现各种锁优化,如适应性自旋,锁消除,锁粗化,轻量级锁,偏向锁等,这些技术都是为了在线程期间更高效的共享数据,以及解决竞争问题。 2. 自旋锁与自适应自旋 传统的互斥锁对性能最大的影响是阻塞的实现,线程的挂起和恢复需要转入内核态中完成,相当影响效率。 多线 阅读全文
摘要:
1.异常简介 Java把异常作为一种类,当做对象来处理。所有异常类的基类是Throwable类,两大子类分别是Error和Exception。 系统错误由Java虚拟机抛出,用Error类表示。Error类描述的是内部系统错误,例如Java虚拟机崩溃。这种情况仅凭程序自身是无法处理的,在程序中也不会 阅读全文