- 博客(51)
- 收藏
- 关注
原创 线程池Thread Pool
为什么使用线程池池化思想,线程池的主要目的是减少在创建和销毁线程时所花费的开销和资源,提高程序性能、提高资源利用率,同时也提供了对并发执行任务的更好管理,例如控制线程数量。优势:线程复用、资源控制、方便管理。线程池七大参数corePoolSize:核心线程数,即使线程处于空闲状态也不会被回收maximumPoolSize:最大线程数,在核心线程和队列均满且线程数量未达到最大线程数时,创建新的线程处理任务。新建的线程在空闲超过设定的时间后,会销毁线程。
2024-10-16 22:47:14 1416
原创 什么是堆内存?参数如何设置?
而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才分配。-Xmn, 等价于 -XX:NewSize,设置新生代内存,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。-XX:MaxDirectMemorySize=size,系统可以使用的最大堆外内存,这个参数跟。在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可。堆内存是指由程序代码自由分配的内存,与栈内存作区分。存不包括栈内存,也不包括堆外使用的内存。
2024-11-01 21:40:48 106
原创 G1 收集器有哪些特点?
G1 的全称是 Garbage-First,意为垃圾优先,哪一块的垃圾最多就优先清理它。程执行的 GC 动作,G1 收集器仍然可以通过并发的方式让 java 程序继续执行。G1 收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的。G1 GC 最主要的设计目标是:将 STW 停顿的时间和分布,变成可预期且可配置的。同的关注点,但 G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明。:与 CMS 的“标记-清理”算法不同,G1 从整体来看是基于“标记-整理”算。
2024-11-01 21:40:11 93
原创 常用设计模式以及代码示例
Observer模式应该可以说是应用最多、影响最广的模式之一,因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。模板方法模式定义了一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。定义一系列的算法,把它们分别封装起来,使它们可相互替换,多个类只有在算法或行为上稍有不同的场景。将调用者和实现类解耦,提高了系统的可扩展性和灵活性。
2024-10-31 15:47:23 353
原创 23种设计模式 概念
六大设计原则首先在面向对象设计中,有六大设计原则被广泛接受,它们有助于指导开发者编写更灵活、可复用、易于维护的代码。单一职责原则 (Single Responsibility Principle, SRP)一个类应该只负责一个功能领域的事项。示例:一个订单处理类只处理订单相关的事务,而不应该处理库存管理。开放封闭原则 (Open/Closed Principle, OCP)软件实体应当向扩展开放,向修改封闭。示例:通过继承和多态,可以在不修改原有代码的情况下增加新功能。
2024-10-31 15:46:26 313
原创 MAVEN配置文件(settings.xml)偏好设置 配置仓库、镜像地址
1、配置本地仓库1、配置本地仓库在文件中,setting标签下配置你的本地本地仓库2、配置阿里云镜像地址在文件中,setting标签下的mirrors标签下配置中央仓库的地址。
2024-10-26 15:54:21 696
原创 linux自定义开机自启服务的脚本路径问题/etc/systemd/system与/lib/systemd/system
这个目录通常用于放置用户或管理员自定义的服务文件。这里的文件不会被包管理器升级时覆盖,因此适合于放置那些需要长期存在的自定义配置。:这个目录通常包含的是发行版提供的默认服务文件。这些文件在系统升级或安装新的软件包时可能会被更新或替换。中的文件,这样可以避免直接修改发行版提供的文件。如果你需要修改或覆盖由发行版提供的默认服务文件,通常的做法是在。
2024-10-25 00:27:03 210
原创 Prometheus & Grafana安装及使用教程,整合监控springboot项目
Prometheus 是一个开源监控系统,Grafana 为其提供开箱即用的支持。本文将向您介绍在 Grafana 中创建一系列仪表盘的步骤,以显示 Prometheus 监控的服务器的系统指标。下载并安装 Prometheus 和 node_exporter配置 Prometheus 和 node_exporter为 Grafana 配置 Prometheus在 Grafana 中检查 Prometheus 指标开始构建仪表盘。
2024-10-25 00:24:06 1058
原创 内网穿透问题 com.alibaba.nacos.api.exception.NacosException_ Client not connected, current status_STARTING
原因,只映射了8848端口,而新版的nacos还需要映射9848和9849端口。映射完成后成功解决了。
2024-10-22 20:10:03 252
原创 免费 内网穿透 FRP 简单 多端口映射 公网
前提,需要有一台公网的机器,和自用的内网机器。作者目前的情况,花了首充在某里巴巴购了个低配置的公网服务器,学习某依微服务架构时,由于要安装启动的中间件,管理工具和微服务有点多,服务器配置跟不上,所以使用本地安装虚拟机来部署部分服务然后映射到公网上。使用来做实现内网穿透和端口映射。FRP(Fast Reverse Proxy)是一种高性能的反向代理应用,主要用于穿透内网和实现端口映射。它允许你将局域网中的服务暴露到公网,从而能够在公网中访问这些服务。
2024-10-22 20:08:49 587
原创 免费 内网穿透 花生壳 docker安装
花生壳有免费的映射可以试用,有台自用电脑就行。官方教程地址:https://service.oray.com/question/36626.html。
2024-10-22 19:58:26 263
原创 IDEA偏好设置
局部设置:File -> Settings全局设置:File -> New Projects Setup -> Settings for New Projects…project偏好设置自动提示设置设置参数方法自动提示设定字符集设置JAVA编译版本聚合工程编译时对相关依赖的工程一起编译tab栏文件多行显示file–>settings–>Editor–>General–>Editor Tabs,将show tabs in single row前面的勾去掉就可以了,这样就可以显示多行文件了。
2024-10-18 01:02:48 242
原创 IDEA常用插件
Translation(翻译插件)Translation(翻译插件)划词后右键即可翻译,支持翻译源码中的doc注释,以及鼠标悬停方法、类等弹窗信息的翻译呼出弹窗MybatisX(俗称小蓝鸟)支持在mapper接口方法和mapper.xml的sql方法之间来回跳转在Idea的数据库连接一栏可以右键表快速生成Mybatis结构的文件lombok(idea新版本自带)为lombok依赖提供注解支持.ignore提供ignore文件模板。
2024-10-18 01:00:50 312
原创 @SpringBootApplication详解(2.7.18版本)
SpringBootApplication注解简化了Spring Boot应用的配置和启动过程。当我们在一个 Spring Boot 应用的主类上使用 @SpringBootApplication 注解时,它不仅指示 Spring Boot 自动配置应用程序,而且还负责启动组件扫描以发现和管理应用程序上下文中的 Bean,从而构建起整个应用程序的运行环境。@Inherited注解是 Spring Boot 中的核心注解,用于标记一个类作为 Spring Boot 应用程序的主入口点。
2024-10-18 00:52:43 817
原创 Unsafe类
Unsafe类是Java中的一个特殊的类,它位于sun.misc包下,并不是一个公开的API,因此它的使用通常是不鼓励的,主要是因为其方法可能绕过Java的安全性和内存模型的保护,从而导致潜在的安全隐患和不可预测的行为。特点非公开API:不是一个公开的API,它主要用于内部实现目的。低级别的操作:提供了许多低级别的操作方法,可以直接访问和操作内存,执行指针运算等。内存操作:Unsafe类中有很多方法用于内存操作,如freeMemorygetByteputByte。
2024-10-18 00:45:43 181
原创 Synchronized锁升级
jdk1.8:无锁 -> 偏向锁 -> 轻量锁 -> 重量级锁jdk15:无锁 -> 偏向锁(默认不开启,耗费维护成本高) -> 轻量锁 -> 重量级锁。
2024-10-17 18:24:04 715
原创 Lock锁 Synchronized关键字 ReentrantLock
锁降级:在同一个线程里,获取写锁后可以再获取读锁,释放写锁后就持有了读锁,这种现象称为锁降级,这可以保证线程能读到最新修改的数据,其他线程读锁也能获取到这次更新,阻塞其他写操作来保证只读到当前写完的数据。Lock锁的实现ReentrantLock也是可重入锁,使用显式锁时,要注意释放锁和获取锁的次数保持一致,防止死锁。(如果频繁写入,可能出现读操作一直自旋的情况,效率降低)的情况下,可以显著提示并发性能,并且可以在乐观读途中获取到写锁,对数据进行更新,可以解决读写锁的写锁饥饿问题。
2024-10-17 17:22:47 696
原创 LockSupport与线程中断
并且unpark方法可以在park前执行,uppark相当于给当前线程提供一个许可,在稍后第一次调用park方法时不会阻塞,会消耗掉许可继续执行后续代码。LockSupport提供了线程阻塞和解除阻塞的方法,这些方法可以为创建高级别的同步结构提供支持。支持非阻塞编程风格,可以更好地控制线程的阻塞和唤醒时机,避免死锁等问题。提供的方法,线程之间可以进行简单的信号传递,从而协调彼此的工作。:使当前线程进入等待状态,直到被其他线程唤醒或被中断。方法可以使当前线程进入等待状态,直到被其他线程唤醒。
2024-10-17 17:13:38 293
原创 Java内存模型JMM volatile关键字
Java语言规范中定义的一套规则,它描述了程序中各种变量(线程共享变量)的访问方式,以及如何在并发环境中确保内存的一致性。JMM主要作用在于确保多线程程序在不同硬件平台上的正确执行,并为开发人员提供一套一致的内存访问规则。JMM的主要目的是解决由于多线程环境中的内存可见性和原子性问题,确保程序的正确执行。核心概念:主内存:所有线程共享的内存区域工作内存:每个线程私有的内存区域,存放该线程使用的变量副本。
2024-10-17 17:03:17 440
原创 CompletableFuture
在复杂的异步任务下处理起来比较力不从心,比如:在多个异步任务执行时,部分异步任务仍需要一定的顺序关系,且某些情况只要一个任务执行完就结束的情况。Future表示异步计算的结果,提供了cancel,isCancelled,isDone,get,get(long, timeunit)等方法。get()和join()均会阻塞等待任务的执行,返回执行结果,但get会抛出异常,编译期处理,join不需要抛出异常,可以后续处理异常。接口,同时提供了线程和Future接口的实现,可以提交线程执行,并阻塞等待线程结果。
2024-10-17 16:49:53 382
原创 JUC CAS Compare and Swap
CAS(Compare and Swap,比较并交换)是一种无锁算法中的原子操作,用于实现线程间的同步。在Java中,CAS操作主要通过包中的原子类(如AtomicLong等)来实现。CAS的原理CAS操作包含了三个参数:内存位置(V)、预期原值(A)和新值(B)。当内存位置的值与预期原值相匹配时,处理器会自动将该位置的值更新为新值;否则,操作失败,并返回原值。在多线程环境下,即使有多个线程尝试同时进行CAS操作,也只会有一个线程成功,其余线程会发现值已经被更改,并返回原值,保证了操作的原子性。
2024-10-17 16:48:24 329
原创 JUC Base
管程 (英语:Monitors,也称为监视器) 是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享资源。管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。与那些通过修改数据结构实现互斥访问的并发程序设计相比,管程实现很大程度上简化了程序设计。当所有用户线程都结束时,JVM会终止所有守护线程,并关闭JVM;如果还有任何一个用户线程在运行,守护线程将继续执行它们的任务。
2024-10-17 16:44:40 97
原创 JUC Atomic*类
以空间换时间,有base和cell属性,高并发情况下,cell数组会扩容,负责存储部分累加值。最终通过sum方法,将base值和cell数组里的累加值相加返回最终的数据。提升效率在于,减少了自旋次数,base值增加不成功时,不阻塞,而是转到cell数组里分段计数,通过空间来换时间,提升效率。
2024-10-17 16:44:04 194
原创 JUC AQS AbstractQueuedSynchronizer
Lock,内部聚合了抽象类Sync,抽象类Sync实现了继承了AQS,抽象类Sync的实现FairSync和NonfairSync分别实现了公平锁和非公平锁。例如在调用lock方法时,均会进入AQS的acquire方法,接着进入tryAcquire方法(钩子,父类实现直接抛出异常,子类可以不实现),区别在于公平锁在判断里多一个判断当前线程是否在头节点或者队列是否为空的条件,来实现先进先出的公平模式。AQS的release方法,unlock的时候调用。AQS的acquire方法,lock的时候调用。
2024-10-17 16:42:57 356
原创 生命周期概念
无论是软件还是线程,生命周期都描述了它们从创建到结束的过程。其中主要涉及状态的变更,过程的变化等。比如:软件的生命周期涉及需求分析、设计、编码、测试、部署、维护和退役等阶段,而线程的生命周期则包括新建、就绪、运行、阻塞、等待、时间片耗尽和死亡等状态。
2024-10-17 16:35:37 83
原创 配置中心 nacos
如果 Nacos Server 在一定时间内未收到服务的心跳,会将该服务标记为不可用,并从服务列表中移除。微服务启动后,向 Nacos Server 发送服务注册请求,提供服务的元数据(如服务名、端口等)。Nacos 和 Eureka 都是广泛使用的服务注册与发现组件,主要用于微服务架构中的服务治理。当微服务需要调用其他服务时,向 Nacos Server 发送服务发现请求。当服务出现故障时,Nacos 可以自动下线该服务,防止其他服务尝试调用。Nacos 提供了内置的健康检查机制,可以监控服务的状态。
2024-10-17 16:34:57 148
原创 负载均衡 LoadBalancer
负载均衡的工作流程客户端发起请求 -> 负载均衡组件接收请求 -> 使用负载均衡算法选择后端服务器 -> 将请求转发到后端服务器 -> 后端服务器处理请求 -> 响应请求结果到负载均衡组件 -> 响应请求结果到客户端负载均衡组件工作过程中还会检测服务器监控状况,确保有健康的服务器转发请求。
2024-10-17 16:33:29 124
原创 服务限流o.o
*令牌桶算法:**令牌桶算法通过预先产生令牌并存放在一个“桶”中,当请求到来时,需要消耗一定数量的令牌。漏桶算法的基本思想是数据包进入一个固定容量的“桶”,这个桶以恒定的速率泄漏数据包。因此,漏桶算法可以平滑输入流量,使系统的处理能力不至于被瞬时的流量峰值所淹没。tomcat一般一个连接创建一个线程,这里的最大线程数与java程序内部的线程数无关。通过限制 Tomcat 的最大线程数(最大连接数),可以实现一定程度上的限流。:创建一个具有固定容量的缓冲区(桶),并设置一个固定的泄漏速率。
2024-10-17 16:31:46 286
原创 服务降级、熔断
服务雪崩是指在分布式系统中,某个服务因为异常情况导致大量请求无法正常处理,进而影响到下游服务,最终导致整个系统出现故障的现象。熔断机制(Circuit Breaker)是指在依赖服务出现问题时,为了避免整个系统因请求失败而导致的雪崩效应,暂时停止对故障服务的请求,待故障恢复后再重新尝试请求的一种机制。服务降级是指在系统出现过载或部分服务出现问题时,主动关闭或牺牲一些非核心的功能或服务,以保证核心业务的正常运行。通过服务降级可以防止整个系统因部分问题而完全崩溃。服务雪崩的原因高并发请求。
2024-10-17 16:29:22 143
原创 事务,mysql
undo log:撤销日志,逻辑日志,保存在表空间中的特殊段中,而不是独立的log文件,支持事务回滚和MVCC的。缓存池:内存中缓存数据的buffer pool,操作数据时会将磁盘数据读取到缓存中,以数据页为单元,数据操作先更新到缓存的页中,方便读写,速度很快,在一定时间后或一定数据量时,将缓存中的数据写到磁盘。binlog 和 redo log 都记录了事务的更改信息,但 binlog 记录的是 SQL 语句级别的更改,而 redo log 记录的是物理页级别的更改。read/write。
2024-10-17 16:27:15 878
原创 SQL优化
索引是一种可以高效获取数据的数据结构,Mysql的InnoDB底层使用的B+树。优势:索引可以提升数据检索的效率,降低了数据库的IO成本、构建索引时已经排了序,降低数据排序的成本,无需消耗额外的CPU来排序。
2024-10-16 22:57:35 264
原创 javaee中常见的数据结构
这里替换长度不一定是initialCapacity+initialCapacity>>1,也有可能使用了addall,如果按这公式的扩容后长度仍不够,会将长度扩容为addall里的数据长度+当前长度,即可以容纳数据的最小长度、如果这个长度超过int类型最大值,会将数组长度设置int类型的最大值。1.8以前的链表采用头插法,多线程的情况下,并发扩容时,设置链表next指向时,可能会导致相互指向,从而出现死循环。数组是一段连续的存储空间,占用空间小,根据下标查询数据很快,插入数据快。1.8前:数组+链表。
2024-10-16 22:56:27 383
原创 Spring bean ,AOP,spring事务
AOP(Aspect Oriented Programming,面向切面编程),在传统的面向对象编程中,横切关注点通常是那些分散在整个应用程序中的功能,如日志记录、事务管理、安全检查等。Spring中的声明式事务就是通过AOP实现的,表现为在方法执行前开启事务,在方法结束后回滚或者提交事务Spring中事务失效的场景异常捕获后没抛出,导致事务失效。抛出检查异常,使用@Rollbackfor(Exception.class)注解在非public方法上同类中的事务方法调用。
2024-10-16 22:52:32 250
原创 Redis缓存,分布式锁
RDB:快照式、紧凑文件,某一时刻的数据、bgsave,fork子进程,仅fork阻塞、恢复速度快,可能丢失短时间内的数据。AOF:命令日志式、保存redis操作命令、三种fsync策略always每次数据安全但影响性能,everysec每秒记录,折中数据较安全性能较好,no操作系统决定,性能好但安全性低。持久化方案一般选择两种都用。数据淘汰策略:内存满时,8种,lru、lfu4种,随机ttl随机2种,1种最近ttl,1种不淘汰插入报错。数据过期策略:定期删除:设置删除频率hz,消耗cpu性能;
2024-10-16 22:50:02 199
原创 mybatis
默认开启,一级缓存是针对当前SqlSession的,一次查询会缓存到内存里,后续再次查询相同语句,会使用缓存里的数据,在进行了数据更新或者事务提交回滚或者SqlSession结束后,会清理缓存。默认关闭,二级缓存是SqlSessionFactory里的,对SqlSession共享,销毁时间不确定,可能会造成内存问题后,集群项目还会造成数据不一致问题。当你从数据库查询一个对象时,如果该对象有关联的对象(如一对多或多对一的关系),默认情况下这些关联对象不会立即加载,而是在真正需要访问这些关联对象时才加载。
2024-10-16 22:49:30 203
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人