摘要: 一、跨JVM的线程安全问题 在单体的应用开发场景中,在多线程的环境下,涉及并发同步的时候,为了保证一个代码块在同一时间只能由一个线程访问,我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。 也就是说,在同一个JVM内部,大家往往采用synchron 阅读全文
posted @ 2022-04-25 15:34 夏尔_717 阅读(2289) 评论(0) 推荐(2)
摘要: 一、JVM简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java虚拟机主要由字节码指令集、寄存器、栈、垃圾回收堆和存储方法域等构成。JVM屏蔽了与具体操作系统平台相关的信息,使Java程 阅读全文
posted @ 2022-04-25 15:32 夏尔_717 阅读(2820) 评论(0) 推荐(1)
摘要: 一、简述 1.1 定义 ThreadLocal类顾名思义可以理解为线程本地变量也有叫线程本地存储。作用是提供线程内的局部变量,也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种将可变数据通过每个线程有自己的独立副本从而 阅读全文
posted @ 2022-04-25 15:32 夏尔_717 阅读(371) 评论(0) 推荐(1)
摘要: 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 阅读全文
posted @ 2022-04-25 15:22 夏尔_717 阅读(316) 评论(0) 推荐(0)
摘要: 一、概述 1.1 基本概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。 在Java中, 阅读全文
posted @ 2022-04-25 15:21 夏尔_717 阅读(1894) 评论(0) 推荐(1)
摘要: 一、简介 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处 阅读全文
posted @ 2022-04-25 15:20 夏尔_717 阅读(1280) 评论(0) 推荐(0)
摘要: 一、 K8S架构 除了核心组件,还有一些推荐的Add-ons: 组件名称 说明 kube-dns 负责为整个集群提供DNS服务 Ingress Controller 为服务提供外网入口 Heapster 提供资源监控 Dashboard 提供GUI Federation 提供跨可用区的集群 Flue 阅读全文
posted @ 2022-04-25 15:20 夏尔_717 阅读(390) 评论(0) 推荐(0)
摘要: 一、概述 MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis几乎消除了JDBC代码和参数的手动设置以及结果集的检索。MyBatis使用简单的XML或注解进行配置,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象) 阅读全文
posted @ 2022-04-25 15:19 夏尔_717 阅读(345) 评论(0) 推荐(0)
摘要: IntelliJ IDEA For Mac 快捷键 快捷键 说明 alt+f7 查找变量方法使用的地方 F3 添加书签 Ctrl + O 快捷覆写方法 Alt + F3 添加书签标识 command + F3 显示书签 command + Shift + A 查找动作 Alt + F1 快捷选择 c 阅读全文
posted @ 2022-04-25 15:18 夏尔_717 阅读(1746) 评论(0) 推荐(0)
摘要: 一、启动类入口 SpringBoot的启动很简单,通用的代码如下: @SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { SpringAppli 阅读全文
posted @ 2022-04-25 15:18 夏尔_717 阅读(766) 评论(0) 推荐(0)
摘要: 一、前言 循环依赖:就是N个类循环(嵌套)引用。通俗的讲就是多个Bean互相引用对方,最终形成闭环。 用一副经典的图示可以表示成这样(A、B、C都代表对象,虚线代表引用关系): 其实可以N=1,也就是极限情况的循环依赖:自己依赖自己 这里指的循环引用不是方法之间的循环调用,而是对象的相互依赖关系。( 阅读全文
posted @ 2022-04-25 15:17 夏尔_717 阅读(421) 评论(0) 推荐(0)
摘要: 一、事务的总体设计 由于jdbc、Hibernate 实现事务功能的方式各不相同,Spring进行了统一的抽象,形成了PlatformTransactionManager事务管理器接口,事务的提交、回滚等操作全部交给它来实现。Spring的事务体系也是在PlatformTransactionMana 阅读全文
posted @ 2022-04-25 15:16 夏尔_717 阅读(1398) 评论(0) 推荐(0)
摘要: 一、概述 一般情况下,出现慢SQL问题,往往会定位到某些具体的SQL语句上,然后通过所谓的“优化三板斧”,如下: 查询执行计划 建立合适的索引 使用合适的连接关系和过滤条件来实现SQL语句的优化 但是,如果执行计划是正确的,SQL语句的性能还是很慢,可通过MySQL中的Profiling工具进一步定 阅读全文
posted @ 2022-04-25 09:57 夏尔_717 阅读(1480) 评论(0) 推荐(0)
摘要: 一、概述 多个线程操作共享数据时,synchronized保证访问共享数据的线程安全性。synchronized是非公平锁,新来的线程有可能立即获得监视器,而在等待区中等候已久的线程可能再次等待,不过这种抢占的方式可以预防饥饿。 synchronized加锁方式的作用范围,区别实际是被加锁的对象的区 阅读全文
posted @ 2022-04-24 15:54 夏尔_717 阅读(857) 评论(0) 推荐(0)
摘要: 一、作用 通常情况下我们可以通过synchronized关键字来解决可见性、有序性及原子性问题这些问题,不过synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用synchronized来解决问题。而volatile关键字就是Java 阅读全文
posted @ 2022-04-24 15:53 夏尔_717 阅读(372) 评论(0) 推荐(0)
摘要: 概览 首先我们通过@GlobalTransactional这个注解开启一个全局事务,而GlobalTransactionScanner.wrapIfNecessary()会为所有方法上加了这个注解的bean注入一个包装了GlobalTransactionalInterceptor实例的advisor 阅读全文
posted @ 2022-04-24 11:31 夏尔_717 阅读(1389) 评论(0) 推荐(0)
摘要: 用Spring的@Transactional注解控制事务有哪些不生效的场景? 不知道小伙伴们有没有这样的经历,在自己开心的编写业务代码时候,突然某一个方法里的事务好像失效了。然后debug跟踪代码时发现,自己第一步的insert或者update的数据在语句执行完毕后,数据库中并没有立即出现更改或保存 阅读全文
posted @ 2022-04-24 11:29 夏尔_717 阅读(977) 评论(0) 推荐(0)
摘要: 一、简介 AbstractQueuedSynchronizer(简称AQS),抽象的队列式的同步器,是Java并发包实现的基类。 AQS用来构建锁和同步器的框架,使用AQS能简单且高效地构造出大量的应用广泛的同步器,如常用的ReentrantLock、Semaphore、CountDownLatch 阅读全文
posted @ 2022-04-24 11:28 夏尔_717 阅读(527) 评论(0) 推荐(0)
摘要: 一、题目 在10亿数字的文件中找到最大的前100个数字。 二、分析 针对Top K问题,常规的内存排序算法无法应对海量数据,需结合数据规模和内存限制,选择适配的算法。以下从内存友好型和海量数据适配型两个维度,分析三种核心解决方案。 2.1 排序方法 2.1.1 算法原理 快速选择(Quick Sel 阅读全文
posted @ 2022-04-24 11:28 夏尔_717 阅读(1679) 评论(0) 推荐(0)
摘要: 一、概述 在Linux系统与Java应用排查中,CPU利用率和CPU负载是最易混淆的两个指标,也是定位性能瓶颈的关键入口。本文从基础概念切入,拆解“高负载低利用率”“高利用率低负载”“CPU 100%”等典型场景的排查逻辑,并结合实战案例演示从指标异常到代码根因的定位过程。 二、利用率与负载区别 要 阅读全文
posted @ 2022-04-24 11:27 夏尔_717 阅读(4359) 评论(0) 推荐(0)