自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 Intellij idea 快捷键

常用快捷键

2024-08-13 01:45:28 464

原创 MachineIFMode 【Machine Interface Mode】

MachineIFMode = Machine Interface Mode(设备接口模式)它决定了:设备如何接收指令、报告状态、以及由谁来控制。

2025-10-16 15:12:47 719

原创 面板厂 MES 常用词释义

好的,这是一份面板厂(液晶/OLED显示面板制造工厂)MES系统中常用术语的详细释义。MES作为制造执行的“大脑”,其术语贯穿了整个生产流程。

2025-09-29 10:50:24 624

原创 idea 设置注释代码时 双斜杆紧跟代码

idea 注释双斜杠紧跟代码

2025-09-28 17:29:23 153

原创 异步通信的核心思想

异步通信的核心思想是“呼叫不等待,通知后处理”。它通过引入中间通道,将通信的双方解耦,从而释放了等待期间被占用的资源,极大地提升了系统的响应性、吞吐量和弹性。虽然它带来了编程模型上的一些复杂性,但在构建高性能、高并发的分布式系统时,它是一种不可或缺的核心设计模式。所有GUI图形界面编程(桌面、移动App、Web前端)高并发服务器(Web服务器、API网关、微服务间通信)批处理任务和工作流(上传文件后触发处理、下单后发送邮件/短信)

2025-09-16 19:18:24 826

原创 IntelliJ IDEA 使用Git 上传项目到 Gitee

前置条件:1:本机安装 Git,并在idea中配置2:idea 已安装Gitee插件。

2025-08-29 09:04:56 308

原创 RHEL8.6 安装 openjdk-21+35_linux-x64_bin.tar.gz

环境 RHEL8.6 ,登录的root用户。(名称可能略有差异,请检查实际目录名)。

2025-07-25 10:35:36 335

原创 VMware 安装 RHEL 8.6 (保姆级教程)

VMware 安装 RHEL 8.6

2025-07-24 14:51:32 567

原创 响应式编程和阻塞式编程

特性阻塞式编程响应式编程执行模型同步异步、非阻塞I/O 操作行为调用线程阻塞等待操作完成调用线程立即返回,注册回调处理结果线程使用一请求一线程 (或类似)少量线程处理大量并发资源消耗高 (线程数随并发线性增长)低 (高效复用少量线程)可伸缩性受限于线程资源高 (尤其适合I/O密集型)吞吐量相对较低高响应性可能因阻塞而降低高 (线程不阻塞)编程模型命令式、线性流程声明式、基于数据流和操作符组合错误处理通常try-catch通过操作符 (如关键机制线程池背压 (Backpressure)

2025-07-23 14:38:16 714

原创 SpringCloud——注册中心Service Registry —— [服务治理]

是微服务架构中的一个核心基础组件,它扮演着服务目录的角色。它的核心功能是实现服务发现(Service Discovery)在微服务架构中,服务数量众多,实例动态变化(扩缩容、故障、滚动更新),服务间的调用关系复杂。。没有它,微服务将难以有效运作。1.职责: 这是服务治理的核心基础设施。它充当一个动态的目录服务。接收服务提供者实例启动时发送的注册请求,记录其网络位置(IP、端口)、服务名、元数据(版本、健康状态、权重等)。接收服务提供者实例关闭或心跳超时时发送的注销请求,将其从目录中移除。

2025-07-23 13:43:53 1089

原创 网络分区(脑裂)

但是,在某些配置下,节点A可能并不知道其他节点的状态,可能会错误地认为自己是唯一的活跃节点,并开始独立处理读写请求。这种情况会导致每个分区内可能认为自己是唯一活跃的部分,并继续接受请求和处理数据,而不知道其他分区的存在或状态。:当网络恢复时,节点A可能会尝试将其在隔离期间所做的更改同步给B和C,这可能导致冲突,因为B和C在这段时间内也做了自己的更新。:在正常情况下,所有三个节点都可以相互通信,如果客户端对其中一个节点进行了写操作,该节点会与其他两个节点通信,确保数据的一致性。

2025-07-23 13:06:17 405

原创 SpringCloud——远程调用

微服务远程调用

2025-07-23 11:10:46 337

原创 SpringCloud——服务拆分

微服务拆分

2025-07-23 10:59:30 276

原创 微服务 & SpringCloud 简介

微服务是一种软件架构风格,基于 Java 技术栈构建的分布式系统架构。将单体应用拆分为多个独立服务,每个服务专注于单一业务功能,具备独立开发、部署和扩展的能力。SpringCloud基于SpringBoot实现了微服务组件的自动装配,从而提供了良好的开箱即用体验。SpringCloud是目前国内使用最广泛的微服务框架。

2025-07-23 09:29:09 148

原创 提升MySQL批处理能力

摘要:MybatisPlus批处理默认会生成多条INSERT语句逐条插入数据,影响性能。MySQL可通过配置rewriteBatchedStatements=true参数,将多条INSERT合并为单条批量执行。具体做法是在JDBC连接URL中添加该参数,如:jdbc:mysql://...&rewriteBatchedStatements=true。这能显著提升批量操作的执行效率,减少数据库交互次数

2025-06-23 17:00:59 223

原创 Oracle 账户密码过期问题解决

ORA-28001: 口令已经失效 错误解决

2025-06-03 10:20:42 659

原创 CentOS 7.9 安装 Docker 26.1

CentOS 7.9系统安装Docker 26.1

2025-05-27 14:52:05 565

原创 Docker 简介

应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

2025-03-05 10:43:55 954

原创 Oracle创建新用户

Oracle 创建新用户

2024-12-03 15:45:02 236

原创 基础面试题——乐观锁和悲观锁的区别和优缺点

悲观锁是一种认为资源会被并发修改的锁策略,每次访问资源时都会加锁,保证只有一个线程能够访问资源,其他线程必须等待锁的释放。乐观锁是一种认为资源不会被并发修改的锁策略,在每次操作时不直接加锁,而是先假设数据不会被并发修改。如果资源被修改,操作失败并重试。悲观锁适用于并发冲突较多的场景,因为在这些场景下,频繁的锁争用可以有效地防止数据不一致。乐观锁的缺点是,在高并发环境中,冲突可能频繁发生,导致大量的重试,反而可能影响系统性能。乐观锁适用于并发冲突较少的场景,因为乐观锁可以减少锁争用,提升性能。

2024-08-14 20:09:25 378

原创 基础面试题——volatile是如何保证可见性和有序性的?

对于volatile变量进行读写的时候,Java 内存模型(JMM)会向处理器发送一条lock前缀的指令,volatile 关键字会在读写操作前后插入内存屏障,限制指令重排序,从而保证了代码执行的有序性。确保对该变量的写操作直接刷回主内存,而其他处理器由于遵守了缓存一致性协议,也会把这个变量的值从主存中加载到自己的缓存中,以此保证了可见性。

2024-08-14 19:35:08 211

原创 基础面试题——volatile能保证原子性吗?为什么?

volatile 主要用于保证变量的可见性、有序性(禁止指令重排序优化)。因为它不是锁,没做任何保证原子性的处理,当然不能保证原子性了。

2024-08-14 19:21:51 478

原创 基础面试题——synchronized是如何保证原子性,可见性,有序性的?

线程在执行synchronized内的代码时,即时CPU时间片用完,也不会释放锁,后续获取到CPU时间片会继续执行。在 synchronized 块中,线程在进入时会从主内存中读取共享变量的值到线程的个主内存,所有操作都在线程工作内存中进行,不能直接读写主存,线程之间也无法访问对方的工作内存变量。JMM内存模型规定了,所有变量都存储在主内存中,线程的工作内存中保存了变量的副本拷贝,这样确保了一个线程在释放锁后,另一个线程在获取锁时,能看到最新的变量值,保证了线程间对共享变量的可见性。

2024-08-14 00:25:42 474

原创 基础面试题—— synchronized锁的是什么?

如果多个线程同时调用同一个对象的 synchronized 实例方法,其中一个线程获得锁后,其他线程必须等待锁被释放。在静态方法上使用 synchronized,表示进入该方法前,线程必须获取当前类的类对象锁(Class对象)。在实例方法上使用 synchronized,表示进入该方法前,线程必须获取当前实例对象的锁(this)。静态方法上的锁是作用于类级别的,而不是单个实例,因此即使是不同实例的线程,也会互相阻塞。synchronized(ClassName.class):锁定当前类的类对象。

2024-08-13 23:57:41 362

原创 基础面试题—— synchronized是怎么实现的?

synchronized 是 Java 中的关键字,用于实现线程间的同步。它可以用于方法或代码块上,确保同一时刻只有一个线程可以执行被 synchronized 修饰的代码块或方法,从而避免多线程环境中的并发问题。

2024-08-13 23:42:52 654

原创 基础面试题——什么是Java内存模型JMM ?

线程间的变量的传递,均需要自己的工作内存和主内存之间进行数据同步,而JMM就作用于工作内存和主内存之间的数据同步过程,它规定了如何做数据同步以及什么时候做数据同步。JMM内存模型规定所有的共享变量都存储在主内存中,每个线程都有自己的工作内存,用于存储该线程私有的变量副本。JMM描述了在多线程环境下,各个线程如何通过内存进行交互,它规定了变量在内存中的存储方式,线程对变量的所有操作(读取、赋值等)都必须在线程工作内存中进行,线程不能直接操作主内存。不同的线程之间也无法直接访问对方工作内存中的变量。

2024-08-13 21:30:38 134

原创 基础面试题——什么是死锁? 如何解决?

线程已获得的资源在没有使用完毕之前,不能强行剥夺,资源只能由资源占有者主动释放。死锁是多个线程在执行过程中,因为争夺资源而造成的一种相互等待的状态。如果没有外力干涉,它们将永远等待下去,程序无法继续执行。一个线程因请求资源而阻塞时,对已获得的资源保持不释放。线程之间形成一种头尾相接的,循环等待资源的关系。想要预防和解除死锁,需要避免死锁4个条件同时发生。一个资源每次只能被一个线程占用。

2024-08-13 20:47:19 282

原创 基础面试题——线程同步的方式有哪些?

synchronized发生异常时,会自动释放线程占用的锁,故不会发生死锁现象。且具有更灵活的锁定机制,可以中断等待锁的线程,Lock发生异常,若没有主动释放,,允许一个或多个线程等待其它线程执行完毕后在执行,可用于线程之间的协调与通信。与 synchronized类似,也可以确保同一时间只有一个线程能访问。,让一组线程在一个栅栏处等待,直到所有线程都到达某个屏障点,才会继续执行。,可以修饰代码块或者方法,确保同一时间只有一个线程能访问。,控制同时访问某个资源的线程数量,可以用于限流或实现资源池。

2024-08-13 20:28:24 265

原创 Intellij idea 配置:让插件信息以英文显示

在idea中,在上方菜单中help ——> edit custom VM options 加上。作用:让插件信息以英文显示,默认没有,需要自己手动加,加完重启。

2024-08-13 01:49:44 237

原创 基础面试题——什么是ThreadLocal ?如何实现的?

当调用 ThreadLocal.set(value) 时,ThreadLocal 实例会将值存储到当前线程的 ThreadLocalMap 中。当调用 ThreadLocal.get() 时,ThreadLocal 实例会从当前线程的 ThreadLocalMap 中检索存储的值。(需要注意内存泄漏问题,在使用完 ThreadLocal 实例后,应该调用 remove() 方法清理线程局部变量)常用于存储线程范围内的对象,比如用户会话信息等,这些对象在不同线程中是隔离的。ThreadLocal有四个方法。

2024-08-13 01:39:28 129

原创 基础面试题——多线程中run和start,wait和sleep,notify和notifyAll区别?

会唤醒所有在 wait() 状态的线程。是线程要执行的代码所在的方法,它本质上是普通方法,如果直接调用 run(),不会启动新线程,而是在当前线程中顺序执行 run() 方法中的代码。调用 wait() 时,线程会释放当前持有的锁和CPU资源,wait()方法只能在同步块或者同步方法中使用。notify()方法与notifyAll()方法,必须在同步块或同步方法中调用,并且线程必须持有对象的锁。用于启动一个新线程,调用 start() 后,run() 方法会在新的线程中执行。

2024-08-13 00:26:49 252

原创 基础面试题——什么是线程池?如何实现的?

是 Java 中用于管理和重用一组线程的机制。它通过维护一个线程的集合来执行任务,从而减少了频繁创建和销毁线程的开销,提高了应用程序的性能和响应速度Java还可以通过 Executors(执行器)工具类,可以方便地创建预定义的线程池,分别是:,超出的线程会在队列中等待。,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。

2024-08-12 19:33:55 427

原创 基础面试题——创建线程有几种方式?

在Java中,共有四种方式可以创建线程,分别是。

2024-08-11 23:32:23 148

原创 基础面试题——什么是守护线程和普通线程有什么区别

需要注意的是,必须在启动线程之前设置守护线程状态,否则会抛出 IllegalThreadStateException(非法线程状态异常)。是一种在后台运行的线程,它的生命周期依赖于前台的普通线程。当所有的普通线程都结束运行时,JVM 会自动退出,即使守护线程仍在运行中。守护线程(Daemon Thread) 和 普通线程(用户线程,User Thread) 是 Java 中的两类线程。当所有普通线程都结束时,即使守护线程仍然在运行,JVM 也会退出并终止所有守护线程。

2024-08-11 22:38:11 234

原创 基础面试题——线程有几种状态,状态之间的流转是怎样的?

常见的方法包括 Thread.sleep(long millis)、Object.wait(long timeout)、Thread.join(long millis) 等。线程处于这种状态通常是调用了 Object.wait()、Thread.join() 或 LockSupport.park() 方法。线程已经启动,正在运行或准备运行中。线程状态之间的流转是由各种同步、等待机制控制的,这些状态之间的流转反映了线程的生命周期。线程对象已经被创建,但还没有调用 start() 方法启动线程。

2024-08-11 22:24:04 269

原创 基础面试题——什么是多线程中的上下文切换

过多的线程频繁切换上下文信息会降低系统的运行效率,因此要尽可能减少上下文切换的次数,以提高系统的效率。共享CPU时间片,当一个线程的CPU时间片用完后,需要切换到另一个线程运行,此时需要保存当前。线程的状态信息,包括程序计数器,寄存器,栈指针等,以便于下一次恢复执行该线程时能够正确运行。我们的计算机是多用户多任务分时操作系统,上下文切换通常是指,在一个CPU上,由于多个线程。同时需要将获取到CPU时间片的线程状态信息恢复,以便于该线程能够正确执行。

2024-08-11 21:59:32 214

原创 基础面试题——Set是如何保证元素不重复的

元素在插入TreeSet时compareTo()方法要被调用,所以TreeSet中的元素要实现Comparable接口,是哈希表实现,HashSet中的数据是无序的,可以放入null,但只能放入一个null,底层基于HashMap。首先计算元素的HashCode值,通过HashCode值计算出元素的存储位置,如果位置为空,就添加进去;TreeSet 底层是TreeMap的keySet(),TreeMap是按照key排序的,是二叉树实现,TreeSet中的数据是自动排好序的,不允许放入null值,

2024-08-11 17:54:32 422

原创 基础面试题——ConcurrentHashMap为什么在JDK1.8中使用synchronized而不是ReentrantLock

--- 在 JDK 1.8 之前,ConcurrentHashMap 使用的是 ReentrantLock 来实现分段锁(Segment Locking),从而保证线程安全。synchronized 是JVM内置语义,JVM 的即时编译器(JIT)能在运行时做出相应的优化,可以进行锁粗化,锁消除,在无竞争的情况下自动去掉不必要的锁。synchronized 的使用让代码更加直观和易读,减少了因锁管理带来的复杂性,提高了代码的可维护性。而线程不需要被挂起时,可以减少上下文切换的开销。

2024-08-11 17:29:38 537

原创 基础面试题——什么是COW,如何保证的线程安全

COW(Copy-On-Write 写时复制) 的基本思想是在进行写操作时,不直接修改原数据,而是先复制一份副本,然后在副本上进行修改。写操作完成后,再将副本替换为原数据(这个替换操作是原子性的,以确保在任何时刻,所有读取操作都能读取到一致的数据。适合读多写少场景:在读多写少的场景下,COW 能有效减少锁的竞争,提高系统的并发性能。不适合写操作频繁的场景:频繁的写操作会导致大量的数据复制和内存占用,影响系统性能。一致性:所有读操作都能获取一致的数据视图,不会因为写操作而影响读取的结果。

2024-08-11 16:57:49 581

原创 基础面试题——ConcurrentHashMap是如何保证线程安全的

如果桶位置不为空,在链表或红黑树中更新节点时,ConcurrentHashMap 使用 synchronized 锁进行保护,以确保操作的原子性和线程安全。如果多个线程同时尝试插入,只有一个线程能够成功,其他线程会进行重试。只在必要时加锁,且锁粒度较小,仅作用于某个桶中的链表或树的头节点,而不是整个哈希表。在JDK1.8中,ConcurrentHashMap使用节点锁的思想,即采用"CAS + Synchronized"的。例如,在插入一个新的键值对时,如果目标桶的位置为空,

2024-08-11 16:39:07 397

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除