几乎所有的业务项目都会涉及数据存储,虽然当前各种 NoSQL 和文件系统大行其道,但 MySQL 等关系型数据库。 因为满足 ACID、可靠性高、对开发友好等特点,仍然最常被用于存储重要数据。在关系型数据库中,索引是优化查询性能的重要手段。
阅读全文
6_20%的业务代码的Spring声明式事务,可能都没处理正确
今天,我来和你聊聊业务代码中与数据库事务相关的坑。 Spring 针对 Java Transaction API (JTA)、JDBC、Hibernate 和 Java Persistence API (JPA) 等事务 API,实现了一致的编程模型,而
阅读全文
5_HTTP调用:你考虑到超时、重试、并发了吗?
今天,我们一起聊聊进行 HTTP 调用需要注意的超时、重试、并发等问题。 与执行本地方法不同,进行 HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。网络请求必然有超时的可能性,因此我们必须考虑到这三点:
阅读全文
连接池:别让连接池帮了倒忙
连接池:别让连接池帮了倒忙 今天,我们来聊聊使用连接池需要注意的问题。 在上一讲,我们学习了使用线程池需要注意的问题。今天,我再与你说说另一种很重要的池化技术,即连接池。
阅读全文
3_线程池:业务代码最常用也最容易犯错的组件
程序中,我们会用各种池化技术来缓存创建昂贵的对象,比如线程池、连接池、内存池。一般是预先创建一些对象放入池中,使用的时候直接取出使用,用完归还以便复用,还会通过一定的策略调整池中缓存对象的数量,实现池的动态伸缩。
阅读全文
2_代码加锁,不要让“锁”成为烦心事
今天,我们来看看解决线程安全问题的另一种重要手段—锁,在使用上比较容易犯哪些错。 我先和你分享一个有趣的案例吧。有一天,一位同学在群里说“见鬼了,疑似遇到了一个
阅读全文
1_使用了并发工具类库,线程安全就高枕无忧了吗?
在代码审核讨论的时候,我们有时会听到有关线程安全和并发工具的一些片面的观点和结论, 比如“把 HashMap 改为 ConcurrentHashMap,就可以解决并发问题了呀”“要不我们试试无锁的
阅读全文
方法区
方法区 前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理
阅读全文
堆
堆 堆的核心概念 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。
阅读全文
本地方法栈
本地方法栈 Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)
阅读全文