hexo + butterfly 搭建记录
认识 hexo简单来说,就是一个博客框架。社区很活跃,里面有很懂框架可以直接使用和自定义。更多详情,直接查看官网: https://hexo.io/zh-cn/docs/index.html 🚀 markdown 语法可以查看 本地搭建 hexo 记录1.git 安装:略2.node.js 安装:版本 22,详情略3.启动终端安装框架:npm install -g hexo-cli4.初始化 hexo 123hexo init <folder>cd <folder>npm install 5.在 hexo 根目录终端输入: hexo server,启动程序,访问 http://localhost:4000/ 不报错即成功。 常用命令1.在终端输入 hexo new page 导航栏名字,如:hexo new page about 配置 github pages注意: 创建github 仓库的时候,必须要一个 README.md,不然会失败。 详情查看官网文档:https://hexo.io/zh-cn/docs/github-pages 进阶 Ne...
shell
Shell 环境Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh)……本文关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin...
分布式基础
什么是分布式系统?架构分:单体和分布式。集群只是一种物理形态,分布式是工作方式。 架构演进 定义 优点 缺点 单体架构 所有功能模块都在一个项目里 开发部署简单 无法应对高并发 集群架构 单体的多服务器版本 解决大并发 问题1:模块升级麻烦问题2:多语言团队交互不通 分布式架构 一个大型应用被拆分成很多小应用分布部署在各个机器 解决了单体+集群的问题 版本关系 Spring Boot 版本 Spring Cloud 版本 Spring Cloud Alibaba 版本 主要特点与说明 3.5.x 2025.0.x 2023.0.3.3 当前较新的稳定组合:需要JDK 17或更高版本,采用Jakarta EE命名空间。 3.2.x 2023.0.x 2022.0.x 需要JDK 17+,采用Jakarta EE。 2.7.x 2021.0.x 2021.0.6.2 支持JDK 8的最终LTS组合:生态成熟稳定,是企业级项目的稳妥选择。 环境搭建 使用 JDK17根目录pom文件如下 1234567891011121314151617...
ForkJoin框架
Java Fork Join 框架对于简单的并行任务,你可以通过“线程池 +Future”的方案来解决;如果任务之间有聚合关系,无论是 AND 聚合还是 OR 聚合,都可以通过 CompletableFuture 来解决;而批量的并行任务,则可以通过 CompletionService 来解决。 CompletableFuturerunAsync 和 supplyAsync 方法CompletableFuture 提供了四个静态方法来创建一个异步操作。 1234public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)public static...
Java内存模型
Java 内存模型 关键词:JMM、volatile、synchronized、final、Happens-Before、内存屏障 Java 内存模型(Java Memory Model),简称 JMM。Java 内存模型的目标是为了解决由可见性和有序性导致的并发安全问题。Java 内存模型通过 屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 物理内存模型物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参考意义。 硬件处理效率物理内存的第一个问题是:硬件处理效率。 绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少需要与内存交互,如读取运算数据、存储运算结果,这个 I/O 操作是很难消除的(无法仅靠寄存器完成所有运算任务)。 由于计算机的存储设备与处理器的运算速度有几个数量级的差距 ,这种速度上的矛盾,会降低硬件的处理效率。所以,现代计算机都不得不 加入高速缓存(Cache) 来作为内存和处理器之间的缓冲。将需要用到的数据复制到缓存中,让运算能...
Java并发工具类
Java 并发工具类 JDK 的 java.util.concurrent 包(即 J.U.C)中提供了几个非常有用的并发工具类。 CountDownLatch 字面意思为 递减计数锁。用于控制一个线程等待多个线程。 CountDownLatch 维护一个计数器 count,表示需要等待的事件数量。countDown 方法递减计数器,表示有一个事件已经发生。调用 await 方法的线程会一直阻塞直到计数器为零,或者等待中的线程中断,或者等待超时。 CountDownLatch 是基于 AQS(AbstractQueuedSynchronizer) 实现的。 CountDownLatch 唯一的构造方法: 12// 初始化计数器public CountDownLatch(int count) {}; 说明: count 为统计值。 CountDownLatch 的重要方法: 123public void await() throws InterruptedException { };public boolean await(long...
Java锁
深入理解 Java 并发锁 本文先阐述 Java 中各种锁的概念。 然后,介绍锁的核心实现 AQS。 然后,重点介绍 Lock 和 Condition 两个接口及其实现。并发编程有两个核心问题:同步和互斥。 互斥,即同一时刻只允许一个线程访问共享资源; 同步,即线程之间如何通信、协作。 这两大问题,管程(sychronized)都是能够解决的。J.U.C 包还提供了 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥问题,Condition 用于解决同步问题。 并发锁简介确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的。 可重入锁可重入锁,顾名思义,指的是线程可以重复获取同一把锁。即同一个线程在外层方法获取了锁,在进入内层方法会自动获取锁。 如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住。 可重入锁可以在一定程度上避免死锁。 ReentrantLock 、ReentrantReadWrite...
Java并发和容器
Java 并发和容器同步容器同步容器简介在 Java 中,同步容器主要包括 2 类: Vector、Stack、Hashtable Vector - Vector 实现了 List 接口。Vector 实际上就是一个数组,和 ArrayList 类似。但是 Vector 中的方法都是 synchronized 方法,即进行了同步措施。 Stack - Stack 也是一个同步容器,它的方法也用 synchronized 进行了同步,它实际上是继承于 Vector 类。 Hashtable- Hashtable 实现了 Map 接口,它和 HashMap 很相似,但是 Hashtable 进行了同步处理,而 HashMap 没有。 Collections 类中提供的静态工厂方法创建的类(由 Collections.synchronizedXXX 等方法) 同步容器的问题同步容器的同步原理就是在其 get、set、size 等主要方法上用 synchronized 修饰。 性能问题synchronized 的互斥同步会产生阻塞和唤醒线程的开销。显然,这种方式比没有使用 syn...
Java并发核心机制
Java 并发核心机制 Java 对于并发的支持主要汇聚在 java.util.concurrent,即 J.U.C。而 J.U.C 的核心是 AQS。 J.U.C 简介Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中)。从功能上,大致可以分为: 原子类 - 如:AtomicInteger、AtomicIntegerArray、AtomicReference、AtomicStampedReference 等。 锁 - 如:ReentrantLock、ReentrantReadWriteLock 等。 并发容器 - 如:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet 等。 阻塞队列 - 如:ArrayBlockingQueue、LinkedBlockingQueue 等。 非阻塞队列 - 如: ConcurrentLinkedQueue 、LinkedTransferQueue...
Mybatis原理
Mybatis 原理 Mybatis 的前身就是 iBatis ,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。本文以一个 Mybatis 完整示例为切入点,结合 Mybatis 底层源码分析,图文并茂的讲解 Mybatis 的核心工作机制。 Mybatis 生命周期 SqlSessionFactoryBuilderSqlSessionFactoryBuilder 的职责SqlSessionFactoryBuilder 负责创建 SqlSessionFactory 实例。SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。 Configuration 类包含了对一个 SqlSessionFactory 实例你可能关心的所有内容。 SqlSessionFactoryBuilder 应用了建造者设计模式,它有五个 build 方法,允许你通过不同的资源创建 SqlSessionFactory 实例。 12345SqlSessionFa...









