Java
文章平均质量分 78
一只快乐的蓝巴德
这个作者很懒,什么都没留下…
展开
-
执行一条 select 语句,期间发生了什么?
执行一条 SQL 查询语句,期间发生了什么?连接器:建立连接,管理连接、校验用户身份;查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;执行 SQL:执行 SQL 共有三个阶段:(1)预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。原创 2024-05-22 14:02:45 · 786 阅读 · 0 评论 -
Java并发常见面试题总结(中)
悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。像 Java 中和等独占锁就是悲观锁思想的实现。// 需要同步的操作try {// 需要同步的操作高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。原创 2024-05-09 11:52:19 · 836 阅读 · 0 评论 -
Java并发常见面试题总结(上)
何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 如下图所示,在 Windows 中通过查看任务管理器的方式,我们就可以清楚看到 Windows 当前运行的进程( 文件的运行)。 线程与进程相似,但线程是一个比进程更小原创 2024-04-30 16:32:16 · 234 阅读 · 0 评论 -
分布式和微服务
其实微服务架构本身就是一种分布式架构,它强调的是对部署在各个计算机上的应用服务的粒度。(如图)它的核心思想是,针对拆分的服务节点做更进一步的解耦。对于一些大型的互联网项目来说,微服务能够在不影响用户使用的情况下非常方便的实现产品功能的创新和上线。也就是说,针对 SOA 服务化架构下的单个业务服务,以更加细粒度的方式进一步拆分。是硬件的提升本身也是有瓶颈的,所以当企业对于计算要求越来越高的时候,集中式架构已经无。分布式系统的设计理念,其实是来自于小型机或者大型机的计算能力的瓶颈和成本的。原创 2023-10-19 11:16:14 · 1102 阅读 · 0 评论 -
Integer 使用不当导致生产的事故
某系统是做理财这块业务的,每天会收到一个基金公司的收益文件, 然后需要把这个文件解析并且保存每个用户的收益数据到数据库。在解析文件的时候,需要对数据的条数做校验,于是用到了Integer 这个对象并且使用==来判断。测试环境都没问题,但是到了生产环境上出现用户收益没有到账的问题,造成了大规模的投诉。最后定位才发现是收益文件验证失败导致没有被解析入库。所以这里就出现一个问题:“为什么两个 Integer 的对象不能用==号来判断?为什么测试环境没有把这问题测试出来”。原创 2023-10-19 11:08:50 · 330 阅读 · 0 评论 -
一致性 Hash 算法
一致性 hash,是一种比较特殊的 hash 算法,它的核心思想是解决在分布式环境下, hash 表中可能存在的动态扩容和缩容的问题。原创 2023-09-28 17:15:43 · 183 阅读 · 0 评论 -
Spring IoC 的工作流程
IOC 是什么Bean 的声明方式IOC 的工作流程IOC 是什么IOC 的全称是 Inversion Of Control, 也就是控制反转,它的核心思想是把对象的管理权限交给容器。应用程序如果需要使用到某个对象实例,直接从 IOC 容器中去获取就行,这样设计的好处是降低了程序里面对象与对象之间的耦合性。,使得程序的整个体系结构变得更加灵活。原创 2023-09-05 15:31:32 · 313 阅读 · 0 评论 -
Mybatis 里面的缓存机制
一级缓存,是 SqlSession 级别的缓存,也叫本地缓存,因为每个用户在执行查询的时 候都需要使用 SqlSession 来执行, 为了避免每次都去查数据库,Mybatis 把查询出来的数据保存到 SqlSession 的本地缓 存中,后续的 SQL 如果命中缓存,就可以直接从本地缓存读取了。(如图)二级缓存的具体实现原理是: 使用 CachingExecutor 装饰了 Executor,所以在进入一级缓存的查询流程之前,会先通过 CachingExecutor 进行二级缓存的查询。原创 2023-08-31 13:52:10 · 107 阅读 · 0 评论 -
什么是负载均衡
关于负载均衡,我会从四个方面去说1. 负载均衡产生的背景2. 负载均衡的实现技术3. 负载均衡的作用范围4. 负载均衡的常用算法。原创 2023-08-22 14:18:12 · 1272 阅读 · 0 评论 -
远程通信-RPC
有的小伙伴误以为,远程调用,是指跨域物理距离的远。实际上,远程调用是指跨进程的功能调用, 跨进程可以理解成一个计算机节点的多个进程, 或者多个计算机节点的多个进程。有的小伙伴误认为,远程就是距离远。其实,远程并不是指距离上的远程,而是指由于进程和进程之间彼跨越进程的。RPC 的概念与技术其实是比较早的,40 年前,也就是 1981 年由 Nelson 提出。1984 年,Birrell 和把它用于分布式系统间的通讯。Java 在 1.1 版本提供了 Java 版本的 RPC 框架(RMI)。原创 2023-08-10 13:47:20 · 1000 阅读 · 0 评论 -
Zookeeper与Redis 对比
使用分布式锁的目的,是为了保证同一时间只有一个 JVM 进程可以对共享资源进行操作。根据锁的用途可以细分为以下两类:1、 允许多个客户端操作共享资源,我们称为共享锁。这种锁的一般是对共享资源具有幂等性操作的场景,主要是为了避免重复操作共享 资源频繁加锁带来的性能开销。2、 只允许一个客户端操作共享资源,我们成为排他锁。原创 2023-08-10 08:27:02 · 1586 阅读 · 0 评论 -
Spring Bean 生命周期的执行流程
Spring 生命周期全过程大致分为五个阶段:1、创建前准备阶段2、创建实例阶段3、依赖注入阶段4、 容器缓存阶段5、销毁实例阶段。原创 2023-08-08 09:27:00 · 451 阅读 · 0 评论 -
死锁的发生原因和怎么避免
例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)原创 2023-08-04 16:55:48 · 80 阅读 · 0 评论 -
Spring Boot 中自动装配机制的原理
其实,自动装配的思想,在 SpringFramework3.x 版本里面的@Enable 注解,就有了 实现的雏形。@Enable 注解是模块驱动的意思,我们只需要增加某个@Enable 注解, 就自动打开某个功能,而不需要针对这个功能去做 Bean 的配置,@Enable 底层也是 帮我们去自动完成这个模块相关 Bean 的注入。在我看来,SpringBoot 是约定优于配置这一理念下的产物,所以在很多的地方,都会 看到这类的思想。接口,实现对这些配置类的动态加载。想,把这个配置类的全路径放在。原创 2023-08-04 16:14:58 · 489 阅读 · 0 评论 -
Redis 和 Mysql 如何保证数据一致性
一般情况下,Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据库 IO,还可以提升数据的 IO 性能。如下图所示,这是它的整体架构。当应用程序需要去读取某个数据的时候,首先会先尝试去 Redis 里面加载,如果命中就直接返回。如果没有命中,就从数据库查询,查询到数据后再把这个数据缓存到 Redis 里面。原创 2023-08-04 11:56:31 · 566 阅读 · 0 评论 -
什么是服务网格?
(如图)于是,在第二代微服务架构下,引入了服务注册中心来实现服务之间的寻址, 并且服务之间的容错机制、负载均衡也逐步形成了独立的服务框架,比如主流的 Spring Cloud、或者 Spring Cloud Alibaba。之所以我们称 Service Mesh 为服务网格,是因为在大规模微服务架构中,每个服务的通信都是由 SideCar 来代理的,各个服务之间的通信拓扑图,看起来就像一个网格形状 (如图)。实际上,“微服务中所有的这些服务注册、容错、重试、安全等工作,都是为了保证服务之间通信的可靠性”。原创 2023-08-02 09:14:09 · 460 阅读 · 0 评论 -
CAS 机制
例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)原创 2023-08-01 16:38:34 · 176 阅读 · 0 评论 -
ConcurrentHashMap底层具体实现以及实现原理
从以上看到,ConcurrentHashMap 里面有很多设计思想值得学习和借鉴。比如锁粒度控制、分段锁的设计等,它们都可以应用在实际业务场景中。当有足够的积累之后,会发现从这些技术底层的设计思想中能够获得很多设计思路。原创 2023-08-01 15:30:20 · 129 阅读 · 0 评论 -
谈谈Seata
谈谈Seata原创 2023-07-19 08:36:19 · 30 阅读 · 0 评论