自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 docker详解

默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。# Docker开机自启 systemctl enable docker # Docker容器开机自启 docker update -- restart=always [ 容器名 / 容器id ]数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。html:放置一些静态资源conf:放置配置文件如果我们要让Nginx代理我们的静态资源,最好是放到html目录;

2024-08-12 10:48:11 678

原创 AliOss对象云存储

【代码】AliOss对象云存储。

2024-08-05 15:37:03 309

原创 公共字段自动填充

AOP:Aspect Oriented Programming (面向切面编程、面向方法编程)

2024-08-05 14:09:00 426

原创 下一个更大元素(单调栈解)

具体地,每次我们移动到数组中一个新的位置 i,就将当前单调栈中所有小于 nums2[i] 的元素弹出单调栈,当前位置右边的第一个更大的元素即为栈顶元素,如果栈为空则说明当前位置右边没有更大的元素。因为题目规定了 nums2是没有重复元素的,所以我们可以使用哈希表来解决第 2 个子问题,将元素值与其右边第一个更大的元素值的对应关系存入哈希表。倒序遍历 nums2,并用单调栈中维护当前位置右边的更大的元素列表,从栈底到栈顶的元素是单调递减的。第 2 个子问题:如何存储第 1 个子问题的结果。

2024-08-05 13:52:46 588

原创 java类型转换

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2024-08-01 13:03:21 271

原创 二分查找概述

通过对经典二分查找的修改,达到日常查找的各种需求,如1、查找某个值 target,2、查找第一个大于 target 的值,3、查找第一个小于 target 的值,4、查找第一个大于等于 target的值,5、查找第一个 小于等于 target 的值。对于经典的算法,只要进行简单的修改,即可满足多种情况。条件:left <= right结束时:left 指向第一个不满足 if 条件中的值,如。

2024-08-01 11:39:26 388

原创 分布式事务

TCC模式的每个阶段是做什么的?Try:资源检查和预留Confirm:业务执行和提交Cancel:预留资源的释放TCC的优点是什么?一阶段完成直接提交事务,释放数据库资源,性能好相比AT模型,无需生成快照,无需使用全局锁,性能最强不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库TCC的缺点是什么?有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦软状态,事务是最终一致。

2024-07-31 16:44:13 1020

原创 Seata

解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在2019年开源的Seata了。

2024-07-31 15:48:52 1059

原创 xxl-job详解

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

2024-07-29 17:13:10 2496

原创 微信小程序登录流程

【代码】微信小程序登录流程。

2024-07-26 11:00:35 436

原创 Spring Task详解

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑

2024-07-24 11:00:44 930

原创 MybatisPlus详解

MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2024-07-23 16:23:36 3381

原创 HashMap与ConcurrentHashMap

的高 16 位异或低 16 位实现的:``(h = k.hashCode()) ^ (h >>> 16)`,主要是从速度,功效和质量来考虑的,通过位移运算来提升Hash值的散列度,降低Hash冲突的概率从而减少系统的开销。,比如table 数组大小为 16,装载因子为 0.75 时,threshold 就是12,当 table 的实际大小超过 12 时,table就需要动态扩容;如果数据很大的情况下,扩展时将会带来性能的损失,在性能要求很高的地方,这种损失很可能很致命。JDK 1.8 中,是通过。

2024-07-22 11:07:26 1136

原创 并发编程总结

创建线程的十种方式,线程的生命周期 JMM(Java 内存模型) volatile 关键字各种锁的概念以及实现 常用并发工具类 ThreadLocal

2024-07-18 16:57:58 956

原创 线程池详解

是一种并发编程中常用的技术,用于管理和重用线程。它由线程池管理器、工作队列和线程池线程组成。线程池的基本概念是,在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给该线程执行。当任务执行完毕后,线程将返回到线程池,可以被其他任务复用。线程池的设计思想是为了避免频繁地创建和销毁线程的开销,以及控制并发执行的线程数量,从而提高系统的性能和资源利用率。

2024-07-18 16:53:28 1104

原创 并发工具类

Java 的并发工具类提供了一系列方便实用的方法,用于简化多线程编程。以下是一些常见的并发工具类:Semaphore:实现信号量,控制资源的访问。CountDownLatch:用于等待一组线程完成。CyclicBarrier:让一组线程等待彼此到达某个同步点。

2024-07-17 10:59:10 833

原创 java锁详解

java当中的锁、是在多线程环境下为保证共享资源健康、线程安全的一种手段。线程操作某个共享资源之前,先对资源加一层锁,保证操作期间没有其他线程访问资源,当操作完成后,再释放锁。

2024-07-16 17:32:14 1811

原创 AQS详解

AQS是一个用来构建锁和同步器的框架,使用**AQS**能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的`ReentrantLock`,`Semaphore`,其他的诸如`ReentrantReadWriteLock`,`SynchronousQueue`,`FutureTask`等等皆是基于**AQS**的。

2024-07-16 16:07:13 925

原创 JMM(Java 内存模型)

JMM(Java 内存模型) 主要定义了对于一个共享变量,当另一个线程对这个共享变量执行写操作后,这个线程对这个共享变量的可见性。JMM并不真实存在,它是一种规范,规定了程序中变量在内存中的访问方式。

2024-07-11 17:30:34 956

原创 CAS机制

CAS的全称是(比较与交换),CAS算法的主要作用是保证在多线程环境下对于共享变量修改的原子性,解决了多线程条件下使用锁造成性能的损耗问题。CAS的思想很简单,就是用一个预期值和要更新的变量值进行比较,两值相等才会进行更新。

2024-07-11 17:28:59 702

原创 CompletableFuture使用详解

CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。

2024-07-10 11:02:01 1214

原创 Future使用详解

/ 取消任务// 获取任务执行结果// 获取任务执行结果,带有超时时间限制// 判断任务是否已经取消// 判断任务是否已经结束。

2024-07-09 14:31:18 983 1

原创 Redis八股

我们知道,当请求查询缓存未命中时,需要查询数据库以加载缓存。但是大家思考一下这样的场景:如果我访问一个数据库中也不存在的数据。会出现什么现象?由于数据库中不存在该数据,那么缓存中肯定也不存在。因此不管请求该数据多少次,缓存永远不可能建立,请求永远会直达数据库。假如有不怀好意的人,开启很多线程频繁的访问一个数据库中也不存在的数据。由于缓存不可能生效,那么所有的请求都访问数据库,可能就会导致数据库因过高的压力而宕机。缓存空值布隆过滤器。

2024-07-08 14:45:40 1361

原创 公司代码提交流程

我们公司使用的是云效,编译工具是idea,在公司主要的分支有以下三个。公司开发人员不多共用一个分支就行。

2024-07-05 11:34:17 333 3

原创 项目中常用的Stream流转换

使用Stream流高效处理数据

2024-07-04 16:06:25 219 1

原创 使用FastJson实现Map与前端json对象的交互

【代码】使用FastJson实现Map与前端json对象的交互。

2024-07-04 16:02:24 313 1

原创 项目场景三:Redis+定时任务+SSE实现对远端设备数据的异步处理

远端设备调用此接口传入设备最新运行状态记录,接口接收到数据首先判断命令类型如果为"3"心跳链接需要单独处理数据并将结果返回给设备,其他类型走异步调用,在XzcDataService中判断命令类型并在xzcService中将数据存到Redis中,通过EquipDataTask定时任务类将Redis中的数据使用SSE通信发给前端(目前为前端轮询查看)设备访问频次高在访问接口后,后端还要读取旧数据做校验访问量很大而且数据有时效性前端也需要15s做一次轮询频繁访问,MySQL扛不住。

2024-07-03 19:33:20 935 1

原创 WebSocket基本使用

导入WebSocket的maven坐标

2024-07-02 13:47:27 321

原创 中医药技术应用信息管理系统:常用工具类

项目中涉及到部分请求,后端处理时间较长,使用常规Http请求,页面等待时间太长,对用户不友好,故考虑使用长链接进行消息推送,可选方案有WebSocket、SSE,WebSocket可实现双工通信,SSE仅支持服务端向客户端推送消息,根据实际使用场景,SSE即可满足,故选用SSE。

2024-07-02 13:24:57 133

原创 项目场景二:使用线程池+分页查询大数据并导出

如果一次数据库查询太多数据,jvm就会内存溢出,所以我使用分页每次查询2万条数据,使用for循环,再把结果合并到一起。但是这种串行方式是阻塞的,查询20w左右数据大约需要15秒,然后就通过线程池用多线程查询,用时3秒多。治疗操作记录表中治疗小项目数据是单独的一张表需要联表查询。:根据搜索条件和登录人员权限进行分页查询(:将分页查询的治疗记录列表数据进行导出。)再将查询到的数据导出。

2024-07-02 11:24:49 541 1

原创 项目场景一:基于RateLimiter的接口限流方案

RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。采用aop思想实现,对全部controller层方法进行限制。限流方式:RateLimiter + Cache(Guava),采用Cache存储某个”ip+方法“对应的RateLimiterr,并设置过期策略。@Target(ElementType.METHOD) // 作用到方法上。

2024-07-01 16:14:19 515 2

空空如也

空空如也

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

TA关注的人

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