摘要:
在 spring boot 中,很吸引人的一个特性是可以直接把应用打包称为一个 jar/war,这个 jar/war 是可以直接启动的,不需要额外配置 web server。 疑问 Spring boot 如何启动? Spring boot 内置的 embed tomcat 是如何工作的?静态文件, 阅读全文
摘要:
回顾 上一章我们介绍了操作系统层面的 IO 模型。 阻塞 IO 模型。 非阻塞 IO 模型。 IO 复用模型。 信号驱动 IO 模型(用的不多,知道个概念就行)。 异步 IO 模型。 并且介绍了 IO 多路复用的底层实现中,select,poll 和 epoll 的区别。 几个概念 我们在这里在强调 阅读全文
摘要:
背景 MySql 的大多数事务型存储引擎实现的其实都不是简单的行级锁。 基于提升并发性能的考虑, 它们一般都实现了多版本并发控制(MVCC)。 可以认为 MVCC 是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只是锁定必 阅读全文
摘要:
了解事务隔离级别之前先要了解数据库在高并发环境下会遇到的几个问题: 1. 脏读: 事务 A 读取了事务 B 更新的数据,然后 B 执行回滚操作,那么 A 读到的就是脏数据。 2. 不可重复读: 事务 A 多次读取同一个数据,事务 B 在事务 A 多次读取的过程中,对数据做了更新并提交,导致事务 A 阅读全文
摘要:
上一篇文章我们已经介绍过了集中常用的 IO 模型了。IO 多路复用模型是我们用的最多的一种 IO 模型。select,poll,epoll 都是 IO 多路复用的机制。I/O 多路复用就是通过一种机制,一个进程可以监视多个描述符。一旦某个描述符就绪(读或者写就绪),就通知程序进行相应的读写操作。 s 阅读全文
摘要:
什么是 IO 我们知道在 Unix 系统里面,一切都是文件。文件也就是一串二进制流而已。不管是 Socket,管道,终端,对我们来说,都是文件,都是流。 在信息交换的过程中,我们对这些流进行数据的收发操作,简称 I/O 操作(input 和 output) 。 计算器里面有这么多的流,我们怎么知道要 阅读全文
摘要:
HashSet 与 LinkedHashSet HashSet 和 LinkedHashSet 是对 HashMap 和 LinkedHashMap 的简单包装,对 HashSet 的函数调用都会转换成合适的 HashMap 方法。LinkedHashSet 的函数会转换成合适的 LinkedHas 阅读全文
摘要:
LinkedHashMap LinkedHashMap 是一个链表,哈希表,线程不安全的,允许 key 和 value 为 null。 它继承自 HashMap ,实现了 Map 接口,内部维护了一个双向链表。每次插入数据或者访问,修改数据时,会增加节点或者调整链表的节点顺序,以决定迭代输出的顺序。 阅读全文
摘要:
TreeMap 1. TreeMap 实现了 NavigableMap 接口,而 NavigableMap 接口继承自 SortedMap 接口,所以 TreeMap 是有序的。 2. TreeMap 底层是红黑树,所以时间复杂度为 log(n)。 3. TreeMap 并不是线程安全的。 4. T 阅读全文
摘要:
ConcurrentHashMap ConcurrentHashMap 是一个能够保证线程安全的 。 为什么使用concurrentHashMap HashTable 是一个典型的 。虽然 HashTable 的所有方法都用 synchronzied 修饰,但是如果我们编程时将 get 和 put 阅读全文