程序开发 Java 中的各种类锁简单了解 提到并发编程,就不得不了解锁,因为使用锁的类型不一样,结果也就不一样。 1. 公平锁/非公平锁 公平锁:多个线程按照申请锁的顺序来获取锁。 非公平锁:不按照顺序获取锁,有可能后申请锁的线程先获取到锁。非公平锁有可能造成优先级反转或线程饥饿现象。 对于 ReentrantLock 而言,线程在放入等待队列阻塞之前会多次尝试获取锁,如下图所示: public ReentrantLock() { syn…
程序开发 Spring 注册组件的几种方式 向 Spring 容器中注册组件是最常见的操作,不过组件注册的方式有很多种,可以选择合适的方式进行注册。 1. @ComponentScan注解 这种方式会将指定包下配置了 @Component、@Controller、@Service、@Repository 的组件注册到容器中。 另外 @ComponentScan 注册组件可以指定和排除某些类或者用注解标记的某些类。 例如: // 这里的 @C…
程序开发 什么是 AbstractQueuedSynchronizer AbstractQueuedSynchronizer 今天在b站看了关于 AbstractQueuedSynchronizer 的合集,稍微了解了一下 AbstractQueuedSynchronizer 的工作原理,简单记录一下。 AbstractQueuedSynchronizer (AQS) 是 Java 中 java.util.concurrent 包的一部分,是一个基础框架类,用于实现锁…
程序开发 Java 的 volatile 关键字 volatile介绍 首先要知道的是并发编程的三个特性:可见性、有序性和原子性,其中 volatile 只能保证其中的可见性和有序性,并不能保证原子性。 可见性 可见性指一个线程对共享变量的修改能够被其他线程立即看到的特性。 多线程条件下,线程0和线程1同时读取了 flag 变量,但线程1将 flag 变量修改后,不会立即刷回主存(常说的内存),而是保存在自己的缓存中(CPU 缓存)。那么此时线程…
程序开发 Go 语言多模块工作区 在 Go 1.18 引入的多模块工作区(Workspace)功能使我们可以在一个工作区中同时使用多个模块,这对开发大型项目或需要同时处理多个模块依赖的项目非常有帮助。 下面是一个简单使用多模块工作区的案例: 创建主目录 首先创建主目录: mkdir myworkspace cd myworkspace 创建第一个模块 在 myworkspace 文件夹下运行命令: mkdir mod1 cd mo…
程序开发 Vue3 项目初始化 1. 初始化项目 vue3 推荐使用 vite 进行项目构建,vite 官方中文文档参考:cn.vitejs.dev/guide/ 另外包管理工具推荐 pnmp,其号称高性能的 npm。pnmp 由 npm/yarn 衍生而来,解决了 npm/yarn 内部潜在的 bug,极大的优化了性能,扩展了使用场景。 pnpm 安装: npm i -g pnpm 项目初始化: pnpm create vit…
程序开发 Css 中 flex 弹性布局详解 1. 概念 flex 是 CSS 的一种布局模式,它通过定义父容器 (flex container) 和子元素 (flex items) 之间的关系来创建灵活的布局。 1.1 容器-Flex Container 设置了 display: flex 或 display: inline-flex 称为容器。 它的所有直接子元素都会成为 flex items (弹性项目)。 1.2 弹性项目-Flex …
程序开发 Spring 中 @Validated 嵌套校验问题 当使用 @Validated 进行参数校验时,如果方法参数是一个包含嵌套对象的复杂对象,@Validated 只会对顶层对象进行校验,而不会递归地对嵌套对象进行校验。例如: public class Parent { @NotNull(message ="parent name 不能为空") private String name; @NotNull private Child…
程序开发 Ubuntu 升级安装 Python 版本 1. 更新软件包列表 首先更新软件包列表,确保包列表是最新的。 sudo apt update 2. 安装软件属性共用库 software-properties-common 是一个在 Ubuntu 和其他基于 Debian 的 Linux 发行版中用于管理第三方软件源(PPA,即个人软件包存档)的软件包。它提供了一些工具和库,使得用户可以更轻松地添加、删除和更新 PPA。 sudo apt in…
程序开发 Docker 搭建 RocketMQ 以及可视化面板 rocketmq 是一个开源的消息中间件,以其高性能、高可靠性、高可扩展性和良好的容错性而闻名。它支持多种消息类型,包括但不限于队列模型和发布/订阅模型,能够满足不同场景下的消息传递需求。搭建方式如下: 1. 命令行搭建 首先需要创建一个网络: docker network create rocketmq 创建 name server 日志和存储目录: mkdir -p /home/docker/…
文章转载 为什么说 Mysql 数据库单表最大两千万 想必大家也听说过数据库单表建议最大2kw条数据这个说法。如果超过了,性能就会下降得比较厉害。 巧了。 我也听说过。 但我不接受它的建议,硬是单表装了1亿条数据。 这时候,我们组里新来的实习生看到了之后,天真无邪的问我:"单表不是建议最大两千万吗?为什么这个表都放了1个亿还不分库分表"? 我能说我是因为懒吗?我当初设计时哪里想到这表竟然能涨这么快。。。 我不能。 说了等于承认自己…
程序开发 Mysql 左连接、右连接与全连接的区别 创建表并插入数据 1. 创建 employees 表 CREATE TABLE employees ( employee_id INT PRIMARY KEY, name VARCHAR(50), department_id INT ); 2. 创建 departments 表 CREATE TABLE departments ( department_id INT PRIMARY KEY, de…