- 博客(114)
- 收藏
- 关注
原创 Echarts入门(SpringBoot + Vue)
ECharts是一个使用 JavaScript 实现的"数据可视化"库, 它可以流畅的运行在 PC 和移动设备上
2023-07-01 16:43:34
972
原创 对rabbitmq进行压测
已经写入了96万数据,写入速度约每秒1.5万条,后面启动消费者进行消费即可。使用for循环创建20个线程,每个线程向队列中插入一百万条数据。启动项目进行压测(记得把消费者关掉,或者消费者另启一个项目)进入rabbitmq管理页面查看。
2023-06-29 17:44:32
1206
原创 注解防止重复提交(拦截器)
上次使用了Spring Aop + 自定义注解实现了Redis防止重复提交的操作,这次换一种方式,防止重复提交的逻辑是相同的,还是采用 用户token + 接口url 进行唯一表示。
2023-06-29 10:44:46
308
原创 注解实现防止重复提交(Aop)
书接上回,上次实现了springboot整合redis,在使用过程中就避免不了重复提交的场景。为了防止以上情况的出现需要自定义一个注解来完成防止重复提交操作。
2023-06-28 17:27:07
551
原创 springboot整合redis
简单来说,不过与传统数据库不同的是,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,(在互联网API接口中,由于网络超时、手动刷新等经常导致客户端重复提交数据到服务端)比如说添加一次和添加多次结果是一样的,只会执行一次如何防止重复提交:用注解 + AOP。通过在自定义注解里定义一些相关的字段,比如过期时间即该时间内同一用户不能重复提交请求。然后把注解按需加在接口上,最后在拦截器里判断接口上是否有该接口,如果存在则拦截。
2023-06-28 16:13:17
10360
4
原创 栈的简介与实现(Java)
只允许在有序的线性数据集合的一端(称为栈顶 top)进行加入数据(push)和移除数据(pop)。因而按照一般作用于深度搜索假设堆栈中有n个元素。访问:O(n)//最坏情况插入删除:O(1)//顶端插入和删除元素利用栈的数据结构可以实现浏览器前进和后退我们只需要使用两个栈(Stack1 和 Stack2)和就能实现这个功能。比如你按顺序查看了 1,2,3,4 这四个页面,我们依次把 1,2,3,4 这四个页面压入 Stack1 中。
2023-06-28 11:15:49
197
原创 centos防火墙(firewalld)端口管理相关命令
防火墙是Linux系统的 主要的安全工具,可以提供基本的安全防护,在Linux历史上已经使用过的防火墙工具包括:ipfwadm、ipchains、iptables (即Centos6就是使用的iptables),而在firewalld中新引入了 区域(Zone)这个概念。
2023-06-28 10:35:26
2055
原创 Springboot整合Liquibase初始化数据库
liquibase是一个数据库变更的版本控制工具。项目中通过liquibase解析用户编写的liquibase的配置文件,生成sql语句,并执行和记录。执行是根据记录确定sql语句是否曾经执行过,和配置文件里的预判断语句确定sql是否执行。本篇文章给大家介绍springboot通过整合liquibase执行sql脚本的操作目标数据库以这篇文章中的test_db为例。
2022-12-26 16:54:42
1955
原创 docker-compose安装部署
docker compose 给容器做单机编排的。Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。docker compose是docker的独立产品,因此安装docker compose之前需要安装docker,
2022-12-19 18:30:30
1023
原创 docker部署mysql初始化数据库
在使用docker部署mysql服务时,往往需要在创建容器时新建database,在需要在创建实例的过程中希望初始化sql脚本。mysql官方镜像支持在容器初次启动时自动执行指定的sql脚本或shell脚本(注意:只有初次启动时才能自动执行在容器创建时会调用docker-entrypoint.sh这个脚本,这个脚本会遍历docker-entrypoint-initdb.d目录下所有的.sh和.sql后缀的所有脚本并执行,执行顺序为脚本文件名称排序。
2022-12-15 17:52:20
4672
原创 sql union()函数
union 取的并集中,sql查询返回的结果,必须拥有相同的列,列的类型也必须相同。union 函数用于对两个或者多个sql查询结果进行取并集操作。对两个或者多个 sql查询结果取并集操作,并会过滤掉重复数据。对两个或者多个 sql查询结果取并集操作,不会过滤掉重复数据。有两张班级表class1和class2,查询两个班级中的得分,取并集。
2022-09-29 16:28:12
2520
原创 相似度为K的字符串.力扣854
因为每次交换走完一跳路线之后都会进行回溯,所以有n中情况,但是没必要把所有的情况都执行一遍,在遍历时,如果当前交换次数已经大于最小交换次数,直接退出当前遍历。使用回溯法,每次对字符串进行字符交换时都会开辟一条新路线,当交换字符走完一跳路线后,需要进行回溯来走其他路线,求出交换次数,返回最小交换次数。”为例,展示其中一种交换路线。思路参考【瓜哇缪斯】
2022-09-21 18:14:03
163
原创 Centos部署Docker
Docker是一个开源的应用容器引擎诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名Docker Inc)Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上容器是完全使用沙箱机制,相互隔离容器性能开销极低Docker可以运行在在MAC、Windows、CentOS、UBUNTU等操作系统上。...
2022-08-31 11:00:40
1306
原创 JMeter下载安装
1.Jmeter是纯Java开发的,能够运行Java程序的系统一般都可以运行Jmeter,如Windows、Linux、mac等。由于是由Java开发,所以自然需要jdk环境。
2022-07-20 11:40:50
2213
原创 Redis五种基本数据结构
String类型,也就是字符串类型,是Redis中最简单的存储类型。普通字符串整数类型,可以做自增、自减操作浮点类型,可以做自增、自减操作不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.......
2022-07-18 15:04:35
1554
原创 Redis安装及运行(linux)
1.准备一台云服务器或虚拟机2.在自定义目录下创建存放redis的文件夹3.在redis中通过或者在官网下载压缩包后手动上传。
2022-07-17 15:57:38
1001
原创 dubbo详解
分布式或者说 SOA 分布式重要的就是面向服务,说简单的分布式就是我们把整个系统拆分成不同的服务然后将这些服务放在不同的服务器上减轻单体服务的压力提高并发量和性能。比如电商系统可以简单地拆分成订单系统、商品系统、登录系统等等。我们可以使用 Dubbo作为分布式系统的桥梁,那么什么是 Dubbo 呢?Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。.
2022-06-21 09:05:38
219
原创 对象的创建过程
我们常常用new方式去创建一个对象,下面从JVM的角度来看看创建(new)一个对象的过程Student student = new Student();1.类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程2.分配内存分配内存图解见:HotSpot虚拟机中的对象_crazyK.的博客-优快云博客在类加载检查通过...
2022-05-07 09:54:04
412
原创 Object类中常用方法
方法 描述 toString() 返回该对象的字符串表示 hashcode() native方法,用于返回对象的哈希吗,主要使用在哈希表中,比如jdk中的 HashMap equals() 判断这两个对象是否是相同的 getClass() 返回此 Object 的运行时类 finalize() 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 notify() 唤醒正在等待对象监视器的单个线程。 notifyAll()
2022-05-01 15:45:50
517
原创 破环单例模式及解决方案
一、如何破环单例模式破环单例模式很简单,使单例类创建多个对象即可,枚举方式除外二、破坏单例模式的方式常见的破环单例模式的方式就是序列化反序列化和反射示例在:单例模式详解_crazyK.的博客-优快云博客1.序列化反序列化以静态内部类创建单例模式为例public class DestroySingleton { public static void main(String[] args) throws IOException, ClassNotFoundExceptio
2022-04-29 14:44:46
630
1
原创 单例模式详解
一、什么是单例模式单例模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建者模式,它提供了一种访问对象的最佳方式。这种设计模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。二、单例模式的结构单例类:只能创建一个实例的类访问类:使用单例类的类三、单例模式分类饿汉式:类加载就会导致该单实例对象被创建懒汉式:类加载不会导致该单实例对象被创...
2022-04-29 14:25:33
22540
13
原创 HashMap仿写
该map中只实现了简单的put()、get()、resize()方法代码已经上传至gitee:HashMap: HashMap仿写部分代码展示:对节点的处理public class Node<K,V> { K key;//key V value;//value int hash;//哈希值 Node<K,V> next;//防止哈希冲突的next节点 public Node(K key, V value, int hash,
2022-04-28 15:59:13
760
原创 HashMap中红黑树扩容split()
HashMap中红黑树的扩容和链表的扩容相似,都是拉高低链表,拆分链表扩容的源码解读见:HashMap扩容操作resize(链表扩容)上源码final void split(HashMap<K,V> map, Node<K,V>[] tab, int index, int bit) { TreeNode<K,V> b = this; // Relink into lo and hi lists, preserv
2022-04-26 16:51:31
1073
原创 HashMap扩容操作resize
什么情况下会进行resize()操作1.HashMap初始化之后第一次put元素2.HashMap中元素数量达到阈值注意:在对链表进行拆分的时候,会分为两个链表,因为数组扩容后长度是原来的二倍,元素在数组中下标的计算方式为:元素的hash值对数组的长度-1做与操作,数组长度发生变化,元素在数组中下标位置也可能发生变化上源码 final Node<K,V>[] resize() { Node<K,V>[] oldTab = table;
2022-04-26 15:19:29
1468
原创 HashMap中put方法(jdk8)
一、put方法流程首先看一下网上一个不错的流程图1.先判断数组是否为空,如果为空则对数组进行resize()扩容2.然后把插入元素的哈希值和数组长度进行与操作,如果table[i] == null,则直接将元素插入到数组对应位置中,否则进行33.判断当前元素的key在数组中是否存在(通过hash并equals方法判断),然后判断节点类型,如果是红黑树,则走4;如果是链表,则走54.如果节点类型为红黑树,则执行红黑树插入操...
2022-04-26 10:01:46
3351
原创 sql CASE WEN 函数
一、含义case when 相当于 java 语言中的 if {} esle {} 判断、switch case 语句。该语句执行时,先对条件进行判断,然后根据判断结果进行响应的操作。 Case 有两种格式:简单Case函数 和 Case搜索函数简单Case 函数:CASE numWHEN '1' THEN '小学生'WHEN '2' THEN '中学生'WHEN '3' THEN '高中生'WHEN '4' THEN '大学生'ELSE ...
2022-04-24 17:12:15
1849
原创 线程池(通俗易懂)
目录一、什么是线程池二、创建线程池的方式三、线程池的七大参数四、四种拒绝策略1.AbortPolicy()2.CallerRunsPolicy()3.DiscardPolicy()4.DiscardOldestPolicy()五、自定义一个线程池1.场景描述2.代码实现一、什么是线程池线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务...
2022-04-22 16:20:49
12810
1
原创 阻塞队列BlockingQueue
一、什么是阻塞队列从名字可以看出阻塞队列是队列的一种,是一种FIFO(先进先出)的数据结构,与普通队列不同的是,它支持阻塞添加和阻塞删除阻塞添加:当队列已满时,往队列中添加元素会阻塞等待阻塞删除:当队列为空时,往队列中删除或获取元素将被阻塞二、阻塞队列的四组API方式 抛出异常 不会抛出异常,有返回值 阻塞等待 超时等待 添加 add() offer() put() offer(e,timeout,Tim...
2022-04-21 12:45:12
1221
原创 读写锁ReadWriteLock
在jdk帮助文档中是这么说的:A ReadWriteLock维护一对关联的locks,一个用于只读操作,一个用于写操作。read lock可以由多个阅读器同时进行,只要没有作者 write lock 是独家的意思就是读操作可以被多个线程同时读,写操作只能由一个线程去写ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁。ReentranReadWriteLock是其...
2022-04-19 13:53:01
2192
原创 并发常用辅助类
一、CountDownLatchCountDownLatch是一个减法计数器,允许一个或多个线程等直到在其他线程中执行的一组操作完成的同辅助。每次有线程调用countDown()时数量 -1 ,countDownLatch.await()就会被唤醒,继续执行常用方法:countDownLatch.countDown() // 相当于-1操作ountDownLatch.await(); //等待计数器归零,然后向下执行public class ...
2022-04-18 14:36:46
180
原创 ArrayList、HashSet线程不安全集合
一、不安全示例ArrayList是java集合框架中一个重要的类,是一个长度可变的集合。在多线程环境下的操作ArrayList是不安全的,会抛出并发修改异常ConcurrentModificationException。话不多说,上示例:在for循环中new了十个线程,每一个线程都向list中添加元素public class ListTest { public static void main(String[] args) { List<String> li
2022-04-15 16:27:18
2931
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人